探索LangChain中的智能Agent构建:打造会话记忆与工具调用的AI助手

209 阅读2分钟

引言

在人工智能的世界中,构建具有行动能力的智能体(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---