用langchain搭建简单agent
在开始用 langchain 搭建简单 agent 之前,首先配置好相关环境。请打开命令行终端,执行以下 pip 命令安装所需依赖包,确保后续代码能够顺利运行:
pip install langchain langchain-openai langchain-experimental pandas安装完成后,我们就可以正式开启 langchain 简单 agent 的搭建。
一、初始化 ChatOpenAI 模型
要搭建 agent,首先需要一个大语言模型作为核心驱动。这里我们使用 ChatOpenAI 模型,并指定调用 “qwen-plus” 模型,同时配置好对应的 API 密钥和 API 基础地址,具体代码如下:
from langchain_openai import ChatOpenAImodel = ChatOpenAI(model="qwen-plus",openai_api_key='',key的值需要你去阿里官网申请对应模型的apikeyopenai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",temperature=0)其中,temperature参数设置为 0,意味着模型输出会更加确定、稳定,减少随机性,适合在需要精准结果的场景下使用。
二、自定义工具与集成现有工具
agent 的核心能力之一在于使用各种工具来完成任务,我们既可以自定义工具,也可以集成 langchain 提供的现有工具。
1. 自定义文本字数计算工具
通过继承BaseTool类,我们可以自定义一个用于计算文本字数的工具。需要指定工具的name(工具名称)和description(工具描述,用于让 agent 判断何时使用该工具),并实现_run方法定义工具的核心功能,代码如下:
from langchain.tools import BaseToolclass TextLengthTool(BaseTool):name = "文本字数计算工具"description = "当你需要计算文本包含的字数时,使用此工具"def _run(self, text):return len(text)2. 集成 Python 代码工具
借助langchain_experimental中的create_python_agent方法,我们可以集成 Python 解释器工具,让 agent 能够执行 Python 代码来完成复杂计算任务。配置时同样需要指定模型信息,并且设置verbose=True以便查看工具运行过程中的详细日志推理过程,handle_parsing_errors=True来处理可能出现的解析错误,代码如下:
from langchain_experimental.agents.agent_toolkits import create_python_agentfrom langchain_experimental.tools import PythonREPLToolpython_agent_executor = create_python_agent(llm=ChatOpenAI(model="qwen-plus",openai_api_key="",openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1"),temperature=0,tool=PythonREPLTool(),verbose=True,agent_executor_kwargs={"handle_parsing_errors": True})3. 集成 CSV 分析工具
对于 CSV 文件数据的分析需求,我们可以使用create_csv_agent方法集成 CSV 分析工具,指定 CSV 文件路径(这里为 “house_price1.csv”),让 agent 能够利用 Pandas 库对 CSV 数据进行查询和计算,代码如下:
from langchain_experimental.agents.agent_toolkits import create_csv_agentcsv_agent_executor = create_csv_agent(llm=ChatOpenAI(model="qwen-plus",openai_api_key="",openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1", temperature=0,),path="house_price1.csv",verbose=True,agent_executor_kwargs={"handle_parsing_errors": True})4. 整合所有工具
将自定义的TextLengthTool和集成好的Python代码工具、CSV分析工具整合到一个工具列表中,方便后续 agent 调用,代码如下:
from langchain.tools import Tooltools=[Tool(name="Python代码工具",description="""当你需要借助Python解释器时,使用这个工具。用自然语言把要求给这个工具,它会生成Python代码并返回代码执行的结果。""",func=python_agent_executor.invoke),Tool(name="CSV分析工具",description="""当你需要回答有关house_price.csv文件的问题时,使用这个工具。它接受完整的问题作为输入,在使用Pandas库计算后,返回答案。""",func=csv_agent_executor.invoke),TextLengthTool()]三、配置对话记忆
为了让 agent 能够记住之前的对话内容,实现上下文连贯的交互,我们使用ConversationBufferMemory配置对话记忆。设置memory_key为 “chat_history”,用于在提示词中引用记忆内容,return_messages=True表示返回的记忆内容是消息对象形式,代码如下:
from langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory(memory_key='chat_history',return_messages=True)四、获取结构化聊天提示词
从 langchain 的 hub 中拉取 “hwchase17/structured-chat-agent” 提示词模板,该模板专为结构化聊天 agent 设计,能够引导 agent 合理选择工具、处理对话逻辑,代码如下:
from langchain import hubprompt = hub.pull("hwchase17/structured-chat-agent")五、创建结构化聊天 agent
结合前面准备好的模型、工具和提示词,使用create_structured_chat_agent(主要用于构建能够遵循特定格式输出(如 JSON)的智能代理)方法创建结构化聊天 agent,代码如下:
from langchain.agents import create_structured_chat_agentagent = create_structured_chat_agent(llm=model,tools=tools,prompt=prompt)六、创建 agent 执行器并调用
最后,通过AgentExecutor.from_agent_and_tools方法创建 agent 执行器,将 agent、工具和记忆整合起来,同时配置verbose=True查看执行过程日志,handle_parsing_errors=True处理解析错误。创建完成后,就可以调用执行器来处理具体问题了。
1. 计算第 8 个斐波那契数列的数字
调用 agent 执行器,输入问题 “第 8 个斐波那契数列的数字是多少?”,agent 会自动选择 Python 代码工具,生成对应的 Python 代码并执行,得到结果,代码如下:
from langchain.agents import AgentExecutoragent_executor = AgentExecutor.from_agent_and_tools(agent=agent,tools=tools,memory=memory,verbose=True,handle_parsing_errors=True)agent_executor.invoke({"input": "第8个斐波那契数列的数字是多少?"})2. 计算 house_price1 数据集房子价格平均值
输入问题 “house_price1 数据集里,所有房子的价格平均值是多少?用中文回答”,agent 会选择 CSV 分析工具,利用 Pandas 库对 “house_price1.csv” 数据进行计算,返回中文的平均值结果,代码如下:
agent_executor.invoke({"input": "house_price1数据集里,所有房子的价格平均值是多少?用中文回答"})
通过以上步骤,我们成功搭建了一个具备多种工具使用能力、支持对话记忆的简单 langchain agent,能够处理斐波那契数列计算、CSV 数据统计等不同类型的任务。

