mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-03-20 06:11:27 -07:00
2.0 KiB
2.0 KiB
AI Search Patterns
search() vs aiSearch()
| Use | Method | Returns |
|---|---|---|
| Custom UI, analytics | search() |
Raw chunks only (~100-300ms) |
| Chatbots, Q&A | aiSearch() |
AI response + chunks (~500-2000ms) |
rewrite_query
| Setting | Use When |
|---|---|
true |
User input (typos, vague queries) |
false |
LLM-generated queries (already optimized) |
Multitenancy (Folder-Based)
const answer = await env.AI.autorag("saas-docs").aiSearch({
query: "refund policy",
model: "@cf/meta/llama-3.3-70b-instruct-fp8-fast",
filters: {
column: "folder",
operator: "gte", // "starts with" pattern
value: `tenants/${tenantId}/`
}
});
Streaming
const stream = await env.AI.autorag("docs").aiSearch({
query, model: "@cf/meta/llama-3.3-70b-instruct-fp8-fast", stream: true
});
return new Response(stream, { headers: { "Content-Type": "text/event-stream" } });
Score Threshold
| Threshold | Use |
|---|---|
| 0.3 (default) | Broad recall, exploratory |
| 0.5 | Balanced, production default |
| 0.7 | High precision, critical accuracy |
System Prompt Template
const systemPrompt = `You are a documentation assistant.
- Answer ONLY based on provided context
- If context doesn't contain answer, say "I don't have information"
- Include code examples from context`;
Compound Filters
// OR: Multiple folders
filters: {
operator: "or",
filters: [
{ column: "folder", operator: "gte", value: "docs/api/" },
{ column: "folder", operator: "gte", value: "docs/auth/" }
]
}
// AND: Folder + date
filters: {
operator: "and",
filters: [
{ column: "folder", operator: "gte", value: "docs/" },
{ column: "timestamp", operator: "gte", value: oneWeekAgoSeconds }
]
}
Reranking
Enable for high-stakes use cases (adds ~300ms latency):
reranking: { enabled: true, model: "@cf/baai/bge-reranker-base" }