引言
在人工智能的世界中,构建具有行动能力的智能体(Agent)是一个热门话题。虽然语言模型(LLM)可以生成文本,但它们本身无法执行动作。LangChain平台提供了一种创建Agent的方法,这些Agent可以通过工具与外界互动,获取信息并提高响应能力。在这篇文章中,我们将探讨如何构建一个可以与搜索引擎交互的智能Agent,你将能够看到它如何调用搜索工具并与其对话。
主要内容
Agent的核心概念
Agent在LangChain中是使用LLM作为推理引擎来决定采用哪些操作并传递给这些操作输入的数据。Agent通过执行动作将结果反馈给LLM,以决定是否需要进一步的行动。
利用Jupyter Notebook进行开发
由于开发过程中可能遇到不可预见的问题(如异常输出或API停机),Jupyter Notebook是学习如何使用LLM系统的理想交互环境。本文的代码示例推荐在Jupyter Notebook中运行。
环境搭建
首先,确保安装LangChain及其相关依赖:
%pip install -U langchain-community langgraph langchain-anthropic tavily-python
创建工具
我们使用Tavily作为搜索引擎工具。需要获取并设置API密钥:
import getpass
import os
os.environ["TAVILY_API_KEY"] = getpass.getpass()
创建搜索工具:
from langchain_community.tools.tavily_search import TavilySearchResults
search = TavilySearchResults(max_results=2)
tools = [search]
使用语言模型
选择一种语言模型,例如Anthropic,并绑定到工具:
from langchain_anthropic import ChatAnthropic
model = ChatAnthropic(model_name="claude-3-sonnet-20240229")
model_with_tools = model.bind_tools(tools)
构建Agent
借助LangGraph,我们可以初始化Agent:
from langgraph.prebuilt import create_react_agent
agent_executor = create_react_agent(model, tools)
代码示例
以下是一个完整的代码示例,展示如何创建并使用Agent来获取天气信息:
from langgraph.checkpoint.sqlite import SqliteSaver
from langchain_core.messages import HumanMessage
# 使用内存保存会话状态
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访问受限:在某些地区,访问API可能会遇到网络限制问题,可以考虑使用API代理服务来提高访问稳定性。
- 调试信息不足:使用LangSmith来记录Agent内部的调用过程,可以有效排查复杂应用中的问题。
总结和进一步学习资源
通过本文,我们学习了如何使用LangChain为Agent增加工具调用功能,以及如何通过记忆机制实现多轮对话。要深入了解Agent的创建和管理,建议查看LangGraph的文档。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---