
routing
Routes queries to appropriate data sources (vectordb, web_search, direct_llm) and selects collection
作者 edangx100|オープンソース
Query Routing
Instructions
Route queries using route_query() in components/router.py. Returns routing decision with data source and collections to search.
Call once at pipeline start with the original query. Do NOT re-route during retries.
Default usage:
routing_decision = route_query(user_query)
route = routing_decision['route'] # "vectordb" | "web_search" | "direct_llm"
Route handling:
if route == 'vectordb':
collections = routing_decision.get('collections', [])
docs = query_specific_collections(query, collections)
elif route == 'web_search':
docs = search_web(query, num_results=5)
elif route == 'direct_llm':
docs = [] # Skip retrieval
Available collections (vectordb only):
catalog: Products, specs, pricingfaq: Policies, shipping, returnstroubleshooting: TechMart product support
Strategies (vectordb only):
single_collection: One clear matchmulti_collection: 2-3 collectionscomprehensive: All collections (vague queries)
Implementation: components/router.py, uses structured outputs to enforce valid routes.
Examples
Example 1: Product query → vectordb, catalog
# Input
result = route_query("What gaming laptops do you have?")
# Output
{
"route": "vectordb",
"strategy": "single_collection",
"collections": ["catalog"],
"reasoning": "Product inquiry about gaming laptops"
}
Example 2: Web search query
# Input
result = route_query("Windows 11 blue screen error 0x0000007E")
# Output
{
"route": "web_search",
"reasoning": "Current OS error requiring up-to-date information"
}
Example 3: Multi-collection query
# Input
result = route_query("Laptop not working, can I return it?")
# Output
{
"route": "vectordb",
"strategy": "multi_collection",
"collections": ["troubleshooting", "faq"],
"reasoning": "Combines technical issue with return policy question"
}
Example 4: Direct LLM (no retrieval)
# Input
result = route_query("Hello, thank you!")
# Output
{
"route": "direct_llm",
"reasoning": "Simple greeting, no retrieval needed"
}