使用检索器逻辑路由缩减检索范围

  1. 大模型的函数回调与规范化输出
    LLM 执行 函数回调 听起来是一个很高级的技术,但是理解起来其实很简单,简单来说,就是传递给 LLM 一大堆工具/函数(传递函数名字、参数描述、函数作用等),让 LLM 自行识别,在当前用户的提问下,识别出最适合调用的函数(选择一个、多个、或者不调用、亦或者强制调用其中某个),然后把要调用的函数的参数作为 LLM 的输出内容。

执行完上面这一步,虽然说是 LLM 函数回调,但是 LLM 并不会真正调用本地的函数,本地的函数仍然是需要本地的程序根据 LLM 的输出内容来调用,拥有 function call 就意味着 LLM 可以智能选择不同的工具,并且规范化输出。
资料推荐

所以对于一个完整的 函数回调 运行过程来说,除了要有 LLM 的参与,还要有本地程序的参与,完整运行流程如下:
在这里插入图片描述
既然 LLM 可以强制调用某个函数,并且函数某个函数的参数输出对应的数据,所以其实可以考虑利用 函数回调 这个功能来执行相应的规范化输出,我们构建一个假函数,并告知 LLM 强制调用这个函数,让 LLM 返回其函数的参数信息,只需要将需要规范化的数据写成函数参数,并配上对应的解释,其实就可以实现规范化输出。

通过这种方式约束大语言模型生成的内容,比 Prompt 可靠性更高,而且性能更佳。

OpenAI 大语言模型函数回调文档:https://platform.openai.com/docs/api-reference/chat/create

LangChain 中使用 OpenAI 的 函数回调 来执行规范化输出,其实非常简单,调用大语言模型的 .with_structured_output() 方法并传递一个 BaseModel 的子类即可,在底层,这个函数会自动将对应的 BaseModel 转换成函数回调,并强制让 LLM 调用。

from langchain_core.pydantic_v1 import BaseModel, Field

class RouteQuery(BaseModel):
    """将用户查询映射到最相关的数据源"""
    datasource: Literal["python_docs", "js_docs", "golang_docs"] = Field(
        description="根据给定用户问题,选择哪个数据源最相关以回答他们的问题"
    )

llm = ChatOpenAI(model="gpt-3.5-turbo-16k", temperature=0)
structured_llm = llm.with_structured_output(RouteQuery)

使用起来传递对应的 prompt 给大语言模型,大语言模型会自动按照传递的模型规范,生成对应的类实例,从而实现规范输出。

如果单纯靠 prompt 来约束大语言模型的输出,例如有这么一段 prompt

根据给定用户问题,选择哪个数据源最相关以回答他们的问题。

目前有3个数据源:python_docs、js_docs、golang_docs。

用户的问题是:

---
为什么下面的代码不工作了,请帮我检查下:

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(["human", "speak in {language}"])
prompt.invoke("中文")
---

大语言模型会非常热情地帮助我们解答问题,得到的回复是:

根据用户的问题,涉及到 `langchain_core` 中的 `ChatPromptTemplate` 类的使用问题。这个类可能与语言处理或者自然语言生成有关。考虑到问题中的代码以及 `"中文"` 这一指示,最相关的数据源应该是 `python_docs`,因为这里涉及到 Python 代码的调用和可能的语法或库的使用问题。

因此,建议查看 `python_docs` 数据源以获取与 `ChatPromptTemplate` 类和相关 Python 代码的信息,以便更好地帮助用户解决问题。

虽然我们人类可以从这么一大长串内容中看出,是需要寻找 python_docs 的数据源,但是对于程序来说,要的其实只是 python_docs 这个字符串,并不是要这么一大长串带有语义场景的文本,大语言模型越热情,返回的数据越难处理。

所以 函数回调 在进行规范化输出时,作用特别大!而且不仅仅是规范化输出,函数回调的作用还远远不仅如此,在以后得文章中,我们会来重点学习函数回调/Agent/LangGraph,去构建更加智能的应用!
资料推荐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值