AI Agent 入门:从概念解析到代码实战,构建你的第一个智能助手

2026/05/13 AI 共 4122 字,约 12 分钟

AI Agent 入门:从概念解析到代码实战,构建你的第一个智能助手

引言:从“被动问答”到“主动执行”

当我们与 ChatGPT 等大语言模型(LLM)对话时,它像一个知识渊博的学者,能够回答问题、撰写文章、翻译文本。然而,它的能力边界通常止于“对话”本身。它无法帮你预订机票,无法自动查询数据库,也无法在收到指令后自主规划并执行一个复杂的多步骤任务。

这正是 AI Agent 所要解决的问题。如果说传统 LLM 是“思考者”,那么 AI Agent 就是“行动者”。它不仅能“想”,还能“做”——通过感知环境、制定计划、调用工具,最终自主完成目标。

本文将带你从零理解 AI Agent 的核心原理,并通过一个具体的 Python 代码示例,展示如何构建一个能联网搜索并执行计算的简单智能体。

一、什么是 AI Agent?

AI Agent,即人工智能体,是一种能够自主感知环境、做出决策并采取行动以实现特定目标的软件程序。

与传统软件或单纯的 LLM 不同,AI Agent 具有以下三个关键特征:

  1. 自主性(Autonomy):无需人类持续干预,能独立运作。
  2. 目标驱动(Goal-Oriented):所有行为都围绕一个明确的目标展开。
  3. 工具使用(Tool Use):能够调用外部工具(如搜索引擎、计算器、API、数据库)来扩展自身能力。

1.1 Agent 的核心架构

一个典型的 AI Agent 通常包含以下组件:

  • 大脑(Brain):通常是一个强大的 LLM(如 GPT-4、Claude 3),负责推理、规划、理解用户意图。
  • 感知(Perception):接收来自外部的信息,如用户输入、环境状态、工具返回的结果。
  • 行动(Action):执行具体的操作,可以是生成文本,也可以是调用一个函数。
  • 记忆(Memory):短期记忆(上下文窗口)和长期记忆(外部存储),用于记录历史交互和经验。
  • 工具集(Toolset):一组可供 Agent 调用的外部函数或 API。

1.2 工作流程:观察-思考-行动(ReAct 模式)

大多数现代 AI Agent 遵循 ReAct(Reasoning + Acting) 模式。其循环过程如下:

  1. 观察(Observation):接收用户的问题或环境反馈。
  2. 思考(Thought):LLM 分析当前状态,决定下一步该做什么,可能需要调用哪个工具。
  3. 行动(Action):执行一个具体的动作,例如调用一个搜索函数。
  4. 观察(Observation):获取工具返回的结果。
  5. 循环:重复思考-行动-观察,直到获得最终答案或任务完成。

二、AI Agent 的实际应用场景

AI Agent 的能力远不止于聊天。以下是几个典型应用:

  • 自动化研发助手:根据需求自动搜索技术文档、编写代码、运行测试、甚至提交 PR。
  • 智能客服:不仅能回答问题,还能查询订单、发起退款、安排物流。
  • 数据分析师:连接数据库,用自然语言提问,Agent 自动编写 SQL 查询、生成图表。
  • 个人日程管家:理解模糊指令(如“帮我安排下周与张三的会议”),自动查询日历、发送邮件、确认时间。

三、代码实战:构建一个“搜索+计算”的 AI Agent

理论讲完,我们动手实践。我们将使用 LangChain 框架和 OpenAI 的 API,构建一个能够自主决定是“搜索网络”还是“执行数学计算”的智能体。

3.1 环境准备

首先,安装必要的库:

pip install langchain langchain-openai langchain-community python-dotenv

创建一个 .env 文件并填入你的 OpenAI API Key:

OPENAI_API_KEY=sk-your-api-key-here

3.2 定义工具

Agent 需要工具。我们定义两个工具:一个用于联网搜索(使用 DuckDuckGo),一个用于数学计算。

import os
from dotenv import load_dotenv
from langchain.agents import Tool
from langchain.tools import DuckDuckGoSearchRun
from langchain.agents.tools import tool

# 加载环境变量
load_dotenv()

# 工具1:联网搜索
search = DuckDuckGoSearchRun()

# 工具2:数学计算器
@tool
def calculator(expression: str) -> str:
    """用于执行数学计算。输入应为合法的数学表达式,例如 '2 + 3 * 4' 或 'sqrt(16)'。"""
    try:
        # 注意:这里使用 eval 仅用于演示,生产环境请使用更安全的方法
        result = eval(expression, {"__builtins__": {}}, {})
        return f"计算结果: {result}"
    except Exception as e:
        return f"计算错误: {e}"

# 将工具包装成 Agent 可识别的格式
tools = [
    Tool(
        name="Search",
        func=search.run,
        description="当你需要查找最新信息时使用此工具。输入为搜索关键词。"
    ),
    Tool(
        name="Calculator",
        func=calculator,
        description="当你需要进行数学运算时使用此工具。输入为数学表达式。"
    )
]

3.3 创建 Agent

接下来,我们使用 LangChain 的 create_react_agent 函数来构建一个 ReAct 模式的 Agent。我们需要一个 LLM 和一个提示模板。

from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain.prompts import PromptTemplate

# 初始化 LLM
llm = ChatOpenAI(model="gpt-4o", temperature=0)

# 定义 ReAct 提示模板
# 这个模板告诉 Agent 如何思考、行动和观察
react_template = """尽可能帮助用户回答问题。你可以使用以下工具:

{tools}

使用以下格式:

问题:你需要回答的输入问题
思考:你应该做什么
行动:你要使用的工具名称,必须是 [{tool_names}] 中的一个
行动输入:工具的输入
观察:工具返回的结果
...(这个 思考/行动/行动输入/观察 可以重复 N 次)
思考:我现在有了最终答案
最终答案:对原始问题的最终回答

开始!

问题:{input}
思考:{agent_scratchpad}"""

# 创建提示
prompt = PromptTemplate.from_template(react_template)

# 创建 Agent
agent = create_react_agent(llm, tools, prompt)

# 创建 Agent 执行器
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True,  # 打印思考过程
    handle_parsing_errors=True
)

3.4 运行 Agent

现在,让我们测试两个问题,看看 Agent 如何自主选择工具。

测试1:需要搜索的问题

response = agent_executor.invoke({"input": "2024年巴黎奥运会的吉祥物是什么?"})
print("\n最终答案:", response["output"])

运行后,你会在控制台看到类似如下的日志(verbose=True 的效果):

> 进入新的 AgentExecutor 链...
思考:用户想知道2024年巴黎奥运会的吉祥物。我需要搜索一下。
行动:Search
行动输入:2024年巴黎奥运会 吉祥物
观察:2024年巴黎奥运会的吉祥物是“弗里吉”(Phryge),是一种红色的弗里吉亚帽...
思考:我找到了答案。
最终答案:2024年巴黎奥运会的吉祥物是“弗里吉”(Phryge)...

测试2:需要计算的问题

response = agent_executor.invoke({"input": "计算 12345 乘以 6789 等于多少?"})
print("\n最终答案:", response["output"])

日志输出:

> 进入新的 AgentExecutor 链...
思考:这是一个数学计算问题,我需要使用计算器工具。
行动:Calculator
行动输入:12345 * 6789
观察:计算结果: 83810205
思考:我得到了计算结果。
最终答案:12345 乘以 6789 等于 83,810,205。

测试3:需要多步推理的问题

response = agent_executor.invoke({"input": "特斯拉最新季度的营收是多少?然后帮我计算这个数字除以1000的结果。"})
print("\n最终答案:", response["output"])

Agent 会先调用 Search 搜索特斯拉最新财报中的营收数据,然后调用 Calculator 进行除法运算,完美展示了多工具协作的自主性。

四、AI Agent 的挑战与未来

尽管 AI Agent 潜力巨大,但目前仍面临一些挑战:

  • 幻觉与错误累积:Agent 在多次调用工具和推理过程中,可能累积错误,导致最终结果偏离事实。
  • 安全性:需要严格控制 Agent 可以调用的工具和权限,防止恶意操作。
  • 成本与延迟:多次调用 LLM 和外部工具会带来较高的 API 成本和响应延迟。

未来的 Agent 将朝着多模态感知(理解图像、音频)、长期记忆(跨会话学习)、以及多 Agent 协作(多个 Agent 分工完成复杂任务)的方向发展。

结语

AI Agent 代表了 AI 从“对话工具”向“数字员工”的重要跃迁。它让大模型不再只是“纸上谈兵”,而是真正拥有了“动手能力”。通过本文的介绍和代码示例,相信你已经对 AI Agent 的核心概念和实现方式有了清晰的理解。

下一步,你可以尝试为 Agent 添加更多自定义工具(如读取本地文件、调用公司内部 API),或使用更高级的框架(如 AutoGPT、CrewAI)来构建更复杂的自主系统。AI 的未来,属于那些能够自主行动的智能体。

文档信息

Search

    Table of Contents