用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 ChatOpenAI

model = ChatOpenAI(model="qwen-plus",

openai_api_key='',key的值需要你去阿里官网申请对应模型的apikey

openai_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 BaseTool

class 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_agent

from langchain_experimental.tools import PythonREPLTool

python_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_agent

csv_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 Tool

tools=[

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 ConversationBufferMemory

memory = ConversationBufferMemory(

memory_key='chat_history',

return_messages=True

)

四、获取结构化聊天提示词

从 langchain 的 hub 中拉取 "hwchase17/structured-chat-agent" 提示词模板,该模板专为结构化聊天 agent 设计,能够引导 agent 合理选择工具、处理对话逻辑,代码如下:

复制代码
from langchain import hub

prompt = hub.pull("hwchase17/structured-chat-agent")

五、创建结构化聊天 agent

结合前面准备好的模型、工具和提示词,使用create_structured_chat_agent(主要用于构建能够遵循特定格式输出(如 JSON)的智能代理)方法创建结构化聊天 agent,代码如下:

复制代码
from langchain.agents import create_structured_chat_agent

agent = 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 AgentExecutor

agent_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 数据统计等不同类型的任务。

相关推荐
zandy10111 天前
当BI遇见AI Agent:衡石科技如何重塑企业数据分析工作流
人工智能·科技·数据分析·ai agent·data agent
草莓熊Lotso1 天前
C++11 核心特性实战:列表初始化 + 右值引用与移动语义(附完整代码)
java·服务器·开发语言·汇编·c++·人工智能·经验分享
渡我白衣1 天前
AI应用层革命(七)——智能体的终极形态:认知循环体的诞生
人工智能·深度学习·神经网络·目标检测·microsoft·机器学习·自然语言处理
草莓熊Lotso1 天前
GCC/G++ 编译器完全指南:从编译流程到进阶用法(附实操案例)
linux·运维·服务器·网络·c++·人工智能·自动化
Wnq100721 天前
世界模型 AI:认知跃迁的可行性与本质性挑战
人工智能
穷人小水滴1 天前
科幻 「备用肉身虫」 系列设定集 (AI 摘要)
人工智能·aigc·科幻·未来·小说·设定
老赵聊算法、大模型备案1 天前
北京市生成式人工智能服务已备案信息公告(2025年12月11日)
人工智能·算法·安全·aigc
咬人喵喵1 天前
上下文窗口:AI 的“大脑容量”
人工智能
workflower1 天前
时序数据获取事件
开发语言·人工智能·python·深度学习·机器学习·结对编程
weixin_446122461 天前
一个案例验证 LLM大模型编码能力哪家强
人工智能