目录

一、前置准备

1.1 环境安装

1.2 模型初始化

二、基础篇:自定义工具 + 结构化聊天 Agent

三、进阶篇 1:Python 代码执行 Agent

四、进阶篇 2:CSV 数据分析 Agent

五、融合篇:多工具整合 Agent

六、高阶篇:自询问推理 Agent

七、总结


智能 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 具备极强的扩展性:

  1. 工具化:任意功能均可封装为 Tool,让 Agent 突破大模型自身能力边界;
  2. 融合化:多工具 / 子 Agent 可整合,解决复合任务;
  3. 推理化:自询问模式让 Agent 具备多步逻辑推理能力。

从简单文本计算到复杂数据分析、逻辑推理,智能 Agent 仅需少量代码即可落地,是大模型工程化应用的核心范式。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐