[让你的AI更聪明:从MultiPromptChain迁移到LangGraph完整指南]

91 阅读3分钟
# 让你的AI更聪明:从MultiPromptChain迁移到LangGraph完整指南

## 引言

在人工智能的开发中,选择合适的工具链对于实现高效和准确的模型至关重要。`MultiPromptChain`曾是一种常用的技术,它通过从多个LLMChains中选择合适的提示来生成响应。然而,它存在一些局限性,例如不支持消息角色和工具调用。本文将介绍如何利用`LangGraph`替代`MultiPromptChain`,提升你的AI模型的功能,并实现更复杂的交互。

## 主要内容

### MultiPromptChain的局限性

`MultiPromptChain`的主要功能是将输入查询路由到不同的提示。然而,它不支持一些常见的聊天模型特性,如消息角色和工具调用。因此,对于需要复杂对话上下文和动态工具集成的场景,`MultiPromptChain`并不是最佳选择。

### LangGraph的优势

通过采用`LangGraph`,我们可以定义更加复杂的逻辑,包括:

- 支持聊天提示模板,允许使用系统角色和其他角色消息。
- 支持使用工具调用来完成查询路由。
- 支持逐步和输出标记的流处理。

### 从MultiPromptChain迁移到LangGraph

为了完成这一迁移,我们需要安装并配置所需的Python包:

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

接下来,我们将使用LangGraph实现与MultiPromptChain类似的功能。

代码示例

下面是一个完整的代码示例,演示如何使用LangGraph来路由和处理输入查询:

import os
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, START, END

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

# 定义提示模板
prompt_1 = ChatPromptTemplate.from_messages([
    ("system", "You are an expert on animals."),
    ("human", "{input}"),
])

prompt_2 = ChatPromptTemplate.from_messages([
    ("system", "You are an expert on vegetables."),
    ("human", "{input}"),
])

# 构建路由链
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 State(TypedDict):
    query: str
    destination: str
    answer: str

# 定义节点函数
async def route_query(state: State, config: RunnableConfig):
    destination = await route_chain.ainvoke(state["query"], config)
    return {"destination": destination}

async def prompt_1(state: State, config: RunnableConfig):
    return {"answer": await chain_1.ainvoke(state["query"], config)}

async def prompt_2(state: State, config: RunnableConfig):
    return {"answer": await chain_2.ainvoke(state["query"], config)}

# 构建LangGraph流程
graph = StateGraph(State)
graph.add_node("route_query", route_query)
graph.add_node("prompt_1", prompt_1)
graph.add_node("prompt_2", prompt_2)

graph.add_edge(START, "route_query")
graph.add_conditional_edges("route_query", select_node)
graph.add_edge("prompt_1", END)
graph.add_edge("prompt_2", END)

app = graph.compile()

# 使用API代理服务提高访问稳定性
state = await app.ainvoke({"query": "What color are carrots?"})
print(state["destination"])
print(state["answer"])

常见问题和解决方案

  1. 无法访问API:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。
  2. 环境配置问题:确保所有库和工具都已正确安装,并且Python环境配置正确。

总结和进一步学习资源

LangGraph通过支持更复杂的操作,使AI模型更具灵活性和功能性。通过以上示例,我们看到如何构建一个多步骤的提示路由流程。进一步学习可以参考以下资源:

参考资料

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

---END---