欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 检索器的逻辑路由实现

检索器的逻辑路由实现

2025/9/19 19:45:16 来源:https://blog.csdn.net/yibuapi_com/article/details/148528959  浏览:    关键词:检索器的逻辑路由实现

RAG 应用开发中,想根据不同的问题检索不同的 检索器/向量数据库,其实只需要设定要对应的 Prompt,然后让 LLM 根据传递的问题返回需要选择的 检索器/向量数据库 的名称,然后根据得到的名称选择不同的 检索器 即可。

但是对于 LLM 来说,如果使用普通的 prompt 来约束输出内容的格式与规范,因为 LLM 的特性,很难保证输出格式符合特定的需求,所以可以考虑使用 函数回调 来实现,即设定一个 虚假的函数,告诉 LLM,这个函数有对应的参数,让 LLM 强制调用这个函数,这个时候 LLM 就会输出函数的调用参数,从而保证输出的统一性。
资料推荐

  • 💡大模型中转API推荐
  • ✨中转使用教程
  • ✨模型优惠查询

使用 函数回调 实现的检索器逻辑路由运行流程图如下:在这里插入图片描述假设目前有 3 个向量数据库/集合,分别代表 python_docsjs_docsgolang_docs,需要根据用户传递的问题判断与哪个向量数据库最接近,使用最接近的向量数据库进行检索,代码示例:

from typing import Literalimport dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAIdotenv.load_dotenv()class RouteQuery(BaseModel):"""将用户查询映射到最相关的数据源"""datasource: Literal["python_docs", "js_docs", "golang_docs"] = Field(description="根据给定用户问题,选择哪个数据源最相关以回答他们的问题")def choose_route(result: RouteQuery):if "python_docs" in result.datasource.lower():return "chain for python_docs"elif "js_docs" in result.datasource.lower():return "chain for js_docs"else:return "golang_docs"# 1.构建大语言模型并进行结构化输出
llm = ChatOpenAI(model="gpt-3.5-turbo-16k", temperature=0)
structured_llm = llm.with_structured_output(RouteQuery)# 2.创建路由逻辑链
prompt = ChatPromptTemplate.from_messages([("system", "你是一个擅长将用户问题路由到适当的数据源的专家。\n请根据问题涉及的编程语言,将其路由到相关数据源"),("human", "{question}")
])
router = {"question": RunnablePassthrough()} | prompt | structured_llm | choose_route# 3.执行相应的提问,检查映射的路由
question = """为什么下面的代码不工作了,请帮我检查下:from langchain_core.prompts import ChatPromptTemplateprompt = ChatPromptTemplate.from_messages(["human", "speak in {language}"])
prompt.invoke("中文")"""# 4.选择不同的数据库
print(router.invoke(question))

输出内容:

datasource='python_docs'
chain for python_docs

资料推荐

  • 💡大模型中转API推荐
  • ✨中转使用教程
  • ✨模型优惠查询

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词