实战|LangChain + 通义千问构建智能 Agent:从工具调用到多步推理
核心能力:封装自定义工具(文本字数计算),结合记忆模块,实现带上下文的结构化工具调用。# 1. 自定义工具name = "文本字数计算工具"description = "当需要计算文本的字数时,使用此工具"# 2. 工具列表与提示词# 3. 记忆模块(保留对话上下文)# 4. 初始化Agent并执行# 调用示例agent_executor.invoke({"input": "'我是一个非常聪明的人
目录
智能 Agent 是大模型从 “对话助手” 升级为 “任务执行者” 的核心形态,它以大语言模型为决策核心,整合工具调用、记忆管理、逻辑推理能力,能自主完成 “理解问题→选择工具→执行操作→输出结果” 的完整闭环。本文基于 LangChain 框架 + 阿里云通义千问(Qwen-Plus),由浅入深实现五类高实用价值的智能 Agent,覆盖文本计算、代码执行、数据分析、多工具融合、多步推理全场景。
一、前置准备
1.1 环境安装
# 核心依赖
pip install langchain langchainhub langchain-openai
# 扩展工具依赖
pip install langchain_experimental
1.2 模型初始化
通义千问兼容 OpenAI 接口规范,初始化代码统一如下(替换为你的 API 密钥):
from langchain_openai import ChatOpenAI
# 通义千问模型初始化
model = ChatOpenAI(
model="qwen-plus",
openai_api_key="你的api",
openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",
temperature=0
)
二、基础篇:自定义工具 + 结构化聊天 Agent
核心能力:封装自定义工具(文本字数计算),结合记忆模块,实现带上下文的结构化工具调用。
from langchain import hub
from langchain.agents import create_structured_chat_agent, AgentExecutor
from langchain.memory import ConversationBufferMemory
from langchain.tools import BaseTool
# 1. 自定义工具
class TextLengthTool(BaseTool):
name = "文本字数计算工具"
description = "当需要计算文本的字数时,使用此工具"
def _run(self, text):
return len(text)
# 2. 工具列表与提示词
tools = [TextLengthTool()]
prompt = hub.pull("hwchase17/structured-chat-agent")
# 3. 记忆模块(保留对话上下文)
memory = ConversationBufferMemory(
memory_key='chat_history',
return_messages=True
)
# 4. 初始化Agent并执行
agent = create_structured_chat_agent(llm=model, tools=tools, prompt=prompt)
agent_executor = AgentExecutor.from_agent_and_tools(
agent=agent, tools=tools, memory=memory, verbose=True, handle_parsing_errors=True
)
# 调用示例
agent_executor.invoke({"input": "'我是一个非常聪明的人工智能助手',这句话的字数是多少?"})
核心要点:自定义工具需继承BaseTool,实现_run核心方法;ConversationBufferMemory保留对话上下文,让 Agent 具备记忆能力。
三、进阶篇 1:Python 代码执行 Agent
核心能力:调用 Python 解释器,解决大模型难以精准计算的复杂数学问题(如幂运算、斐波那契数列)。
from langchain_experimental.agents.agent_toolkits import create_python_agent
from langchain_experimental.tools import PythonREPLTool
# 初始化Python代码执行Agent
agent_executor = create_python_agent(
llm=model,
tool=PythonREPLTool(),
verbose=True,
agent_executor_kwargs={"handle_parsing_errors": True}
)
# 调用示例
agent_executor.invoke({"input": "第12个斐波那契数列的数字是多少?"})
核心要点:PythonREPLTool封装 Python 解释器,Agent 可自主生成代码并执行,解决精准计算类问题。
四、进阶篇 2:CSV 数据分析 Agent
核心能力:对接 CSV 文件,通过 Pandas 自主完成数据查询、统计(如列数、均值、筛选计数)。
from langchain_experimental.agents.agent_toolkits import create_csv_agent
# 初始化CSV分析Agent
agent_executor = create_csv_agent(
llm=model,
path="house_price1.csv", # 替换为你的CSV文件路径
verbose=True,
agent_executor_kwargs={"handle_parsing_errors": True}
)
# 调用示例
agent_executor.invoke({"input": "数据集里价格高于980万的房子总共有几个?"})
核心要点:无需手动编写 Pandas 代码,Agent 可理解自然语言查询,自主生成代码分析 CSV 数据。
五、融合篇:多工具整合 Agent
核心能力:整合文本计算、Python 代码执行、CSV 分析工具,实现 “一站式” 任务处理。
from langchain.tools import Tool
# 1. 初始化子Agent
python_agent_executor = create_python_agent(llm=model, tool=PythonREPLTool(), verbose=True)
csv_agent_executor = create_csv_agent(llm=model, path="house_price1.csv", verbose=True)
# 2. 封装为统一工具
tools = [
Tool(
name="Python代码工具",
description="需要借助Python解释器计算时使用,输入自然语言问题即可",
func=python_agent_executor.invoke
),
Tool(
name="CSV分析工具",
description="回答house_price1.csv相关问题时使用,输入完整问题即可",
func=csv_agent_executor.invoke
),
TextLengthTool()
]
# 3. 初始化融合Agent
agent = create_structured_chat_agent(llm=model, tools=tools, prompt=prompt)
agent_executor = AgentExecutor.from_agent_and_tools(
agent=agent, tools=tools, memory=memory, verbose=True, handle_parsing_errors=True
)
# 调用示例(多工具联动)
agent_executor.invoke({"input": "'我是一个聪明的人工智能助手'的字数是多少?并验证该数字是否在斐波那契数列中"})
核心要点:通过Tool封装子 Agent,实现多工具统一调度,解决跨类型复合任务。
六、高阶篇:自询问推理 Agent
核心能力:多步逻辑推理,通过 “提问→获取中间答案→再提问→最终结论” 的方式解决复杂问题。
from langchain.agents import create_self_ask_with_search_agent
# 1. 自定义工具(适配自询问模板)
class TextLengthTool(BaseTool):
name = "Intermediate Answer"
description = "计算文本字数时使用此工具"
def _run(self, text):
return len(text)
# 2. 初始化自询问Agent
tools = [TextLengthTool()]
prompt = hub.pull("hwchase17/self-ask-with-search")
agent = create_self_ask_with_search_agent(llm=model, tools=tools, prompt=prompt)
agent_executor = AgentExecutor.from_agent_and_tools(
agent=agent, tools=tools, memory=memory, verbose=True, handle_parsing_errors=True
)
# 调用示例
agent_executor.invoke({"input": "林肯和罗斯福谁活得更久?"})
核心要点:基于self-ask-with-search提示词模板,Agent 具备 “拆解问题→分步验证” 的推理能力。
七、总结
基于 LangChain + 通义千问的智能 Agent 具备极强的扩展性:
- 工具化:任意功能均可封装为 Tool,让 Agent 突破大模型自身能力边界;
- 融合化:多工具 / 子 Agent 可整合,解决复合任务;
- 推理化:自询问模式让 Agent 具备多步逻辑推理能力。
从简单文本计算到复杂数据分析、逻辑推理,智能 Agent 仅需少量代码即可落地,是大模型工程化应用的核心范式。
更多推荐



所有评论(0)