AI Agent 是什么?从概念到第一个智能体

引言:AI 行业的范式转变

🚀 AI 正在从「回答问题」走向「解决问题」

过去的几年里,我们见证了 大语言模型(LLM) 的崛起。从 GPT-3 到 GPT-4,从 Claude 到 Gemini,这些模型展现出了惊人的语言理解和生成能力。它们能够写代码、创作文章、翻译语言,甚至能够通过各种考试。

然而,有一个根本性的限制:传统 LLM 只能被动地响应输入,你问一句,它答一句。它们不具备主动规划、执行多步骤任务的能力,也无法真正「行动」于现实世界。

为什么 Agent 是下一个热点?

Agent(智能体) 正是为了解决这些问题而诞生的概念。与传统 LLM 不同,Agent 能够:

  • 🔄 自主规划 - 将复杂任务分解为步骤
  • 🛠️ 使用工具 - 调用搜索引擎、代码解释器、API 等
  • 📝 记忆上下文 - 记住之前的交互和结果
  • 🔁 迭代执行 - 根据反馈调整行动,直到完成任务

这就是 AI 行业正在发生的范式转变:从**「你说我答」** 的被动模式 ,走向**「你说我做」** 的主动模式

📖 写在前面 :本文将带你从概念到实战,全面理解 Agent 的核心原理。我们会深入探讨 ReAct 框架Tool Use(工具使用) 这两大关键技术,最后你会看到一个完整的 Agent 示例,学会如何构建自己的第一个智能体。

准备好了吗?让我们开始吧!🚀


第一部分:Agent 是什么?

🤖 Agent 是能够自主决策并执行行动的 AI 系统,它超越了传统 LLM 的「被动回答」模式。

传统 AI vs Agent:核心区别

在深入 Agent 之前,我们需要先理解传统 LLMAgent 之间的本质差异。

特性 传统 LLM Agent
交互模式 被动响应,一次性回答 主动规划,持续交互
执行能力 仅生成文本 可执行代码、调用工具
状态管理 无状态(每轮独立) 有记忆,可记住上下文
任务处理 单轮问答 多步骤任务分解与执行
反馈利用 不利用输出反馈 基于观察结果迭代优化
传统 LLM 的局限性

想象一下这个场景:你对 ChatGPT 说「帮我订一张下周去上海的机票」。

传统 LLM 的回答可能是:

「好的,我可以帮你订机票。你需要提供以下信息:出发城市、出发日期、预算、航空公司偏好...」

它只能生成建议 ,无法真正帮你完成订票这个行动

Agent 的处理方式

同样的任务,Agent 会这样做:

  1. 🧠 理解任务 - 解析你的意图:订机票
  2. 📋 规划步骤 - 分解为:查航班 → 比价 → 选择 → 下单
  3. 🔍 执行行动 - 调用航司 API 或搜索工具查询航班
  4. 📝 记忆结果 - 保存查询结果以便后续比较
  5. 🔄 迭代执行 - 根据你的反馈调整选择,直到完成订单

这就是 Agent 的魅力:它不仅能回答问题,还能解决问题。


Agent 的核心特征:感知 → 推理 → 行动 → 记忆

根据 AI 领域的共识,一个完整的 Agent 系统包含四个核心能力。正如经典教材《Artificial Intelligence: A Modern Approach》(Stuart Russell & Peter Norvig)所定义:

"An agent is anything that can be viewed as perceiving its environment through sensors and acting upon that environment through actuators."

复制代码
┌─────────────────────────────────────────────────────────────┐
│                      🤖 Agent 架构                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐ │
│   │  感知   │ -> │  推理   │ -> │  行动   │ -> │  记忆   │ │
│   │(Perceive)│    │(Reason) │    │(Act)    │    │(Memory) │ │
│   └────┬────┘    └────┬────┘    └────┬────┘    └────┬────┘ │
│        │              │              │              │       │
│        v              v              v              v       │
│   • 读取输入   • 理解意图    • 调用工具    • 存储上下文  │
│   • 环境信息   • 规划步骤    • 执行操作    • 检索历史    │
│   • 工具返回   • 逻辑推理    • 生成响应    • 持续学习    │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1. 感知(Perception)

Agent 通过感知模块获取信息和环境状态,包括:

  • 用户输入(自然语言指令)
  • 工具返回的结果(搜索结果、API 响应等)
  • 外部环境数据(时间、位置、系统状态等)
2. 推理(Reasoning)

Agent 的大脑负责理解和决策:

  • 意图理解 - 理解用户真正想要什么
  • 任务分解 - 将复杂任务拆解为可执行的子任务
  • 逻辑推理 - 基于已知信息推导出下一步行动
  • 策略选择 - 决定使用哪个工具、哪种方法

💡 提示 :在 LangChain 中,这部分通常由 LLM 本身完成,通过**提示词(Prompt)**来指导模型进行推理。

3. 行动(Action)

Agent 通过行动模块与外部世界交互:

  • 调用搜索引擎获取信息
  • 执行 Python 代码进行计算
  • 调用外部 API 完成实际操作
  • 生成自然语言响应给用户
4. 记忆(Memory)

Agent 的记忆系统使其能够:

  • 短期记忆 - 记住当前对话的上下文
  • 长期记忆 - 存储历史经验供后续参考
  • 上下文管理 - 在多轮交互中保持连贯性

Agent 的能力边界

理解 Agent 的能力边界很重要:

✅ Agent 擅长
  • 📝 文本处理 - 理解、生成、翻译、摘要
  • 🔍 信息检索 - 搜索、过滤、整合信息
  • 💻 代码执行 - 编写、运行、分析代码
  • 🔄 任务自动化 - 流程编排、多步骤执行
  • 📊 数据分析 - 处理结构化/非结构化数据
⚠️ Agent 的局限
  • 🚫 无法真正「理解」物理世界 - 它通过文字和数据理解世界
  • 🚫 依赖工具质量 - 工具的准确性决定了 Agent 的输出质量
  • 🚫 可能产生幻觉 - 在推理过程中可能得出错误结论
  • 🚫 安全风险 - 错误使用可能导致数据泄露或恶意操作

小结

Agent 是 AI 从「回答」走向「行动」 的关键一步。它通过感知、推理、行动、记忆四个核心能力,实现了从被动响应到主动执行的转变。

📌 重点回顾 : - Agent ≠ LLM,Agent 是建立在 LLM 之上的系统 - 四大核心能力:感知 → 推理 → 行动 → 记忆 - Agent 的价值在于解决问题,而不仅仅是回答问题


第二部分:ReAct 框架

🧠 ReAct 让 AI 学会「边想边做」,通过推理指导行动,通过行动验证推理,形成闭环。

什么是 ReAct?

ReAct(Reasoning + Acting) 是由 Google Research 在 2022 年提出的框架(论文:Synergizing Reasoning and Acting in Language Models,Yao et al.),旨在解决 LLM 在复杂任务中推理链断裂的问题。

核心思想很简单:

在执行行动之前进行推理,用推理指导行动,用行动结果验证推理。

这模仿了人类解决问题的过程:遇到问题时,我们会先思考(Reasoning),然后尝试(Acting),根据结果调整思考,再继续尝试,直到问题解决。

ReAct vs 传统方法
方法 特点 适用场景
Chain-of-Thought (CoT) 只推理,不行动 数学推理、逻辑分析
Action-only 只行动,不推理 简单指令执行
ReAct 推理 + 行动 + 观察 复杂多步骤任务

Thought → Action → Observation 循环

ReAct 的核心是Thought-Action-Observation(T-A-O)循环:

复制代码
┌─────────────────────────────────────────────────────────────┐
│                  🔄 ReAct 循环流程                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│    ┌─────────┐                                             │
│    │  用户   │                                             │
│    │  输入   │                                             │
│    └────┬────┘                                             │
│         │                                                  │
│         v                                                  │
│    ┌─────────┐                                             │
│    │ Thought │  🤔 思考:分析任务,决定下一步行动           │
│    └────┬────┘                                             │
│         │                                                  │
│         v                                                  │
│    ┌─────────┐                                             │
│    │ Action  │  🔧 行动:执行工具调用                       │
│    └────┬────┘                                             │
│         │                                                  │
│         v                                                  │
│    ┌─────────┐                                             │
│    │   Obs   │  👁️ 观察:获取行动结果,用于下一步推理       │
│    └────┬────┘                                             │
│         │                                                  │
│         └─────返回「Thought」继续循环,直到任务完成─────>   │
│                                                             │
└─────────────────────────────────────────────────────────────┘
各阶段详解

1. Thought(思考)

Agent 分析当前状态,考虑: - 用户想要什么? - 我现在知道什么? - 下一步应该做什么? - 使用哪个工具?

2. Action(行动)

Agent 执行具体的操作: - 调用搜索引擎 - 执行代码 - 调用 API - 或者直接生成回答

3. Observation(观察)

Agent 获取行动的结果,并将其作为下一轮推理的输入: - 搜索返回的结果 - 代码执行的输出 - API 响应的数据


经典案例分析

让我们通过一个具体例子来理解 ReAct:

任务:「查一下 Python 3.12 的新特性,然后总结成 3 点」

第一次循环

Thought:用户想要了解 Python 3.12 的新特性,我需要先搜索相关信息。

Action :search[Python 3.12 new features]

Observation:搜索返回了 Python 3.12 的官方发布说明和新特性列表...

第二次循环

Thought:我已经获取了 Python 3.12 的新特性信息,现在需要阅读详细内容并提取关键点。

Action :visit[Python 3.12 release notes]

Observation:获取到以下关键特性: 1. 错误消息改进 2. PEP 695 类型参数语法 3. F-string 增强 ...

第三次循环

Thought:我已经收集到足够的信息,现在可以总结成 3 点并回复用户。

Action :finish[总结 Python 3.12 的 3 个新特性...]


ReAct 在 LangChain 中的实现

LangChain 提供了对 ReAct 框架的原生支持。以下是基于最新版 LangChain(使用 LangGraph 构建)的 ReAct Agent 示例:

版本说明 :以下代码基于 LangChain 最新版(2026)。LangChain 的 Agent 系统现已基于 LangGraph 构建,使用 create_agent 作为主要 API。

复制代码
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
from langchain.tools import tool

# 1. 定义工具(使用 @tool 装饰器)
@tool
def search(query: str) -> str:
    """搜索互联网获取实时信息。

    Args:
        query: 搜索关键词
    Returns:
        搜索结果摘要
    """
    return f"搜索结果:{query}的相关信息..."

@tool
def visit_page(url: str) -> str:
    """访问指定 URL 获取页面内容。

    Args:
        url: 要访问的网页地址
    Returns:
        页面内容摘要
    """
    return "页面内容..."

tools = [search, visit_page]

# 2. 创建 Agent
# 注意:模型名称需根据实际可用的 OpenAI 模型调整
# 可选:gpt-4o-mini, gpt-4o, gpt-3.5-turbo 等
# 请确保你的 OpenAI API Key 有权限访问所选模型
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
agent = create_agent(
    model=llm,
    tools=tools,
    system_prompt="你是一个助手,可以使用搜索和访问网页的工具获取信息。请根据用户需求选择合适的工具。"
)

# 3. 执行 Agent
result = agent.invoke({
    "messages": [{"role": "user", "content": "查一下 Python 3.12 的新特性,然后总结成 3 点"}]
})

print(result["messages"][-1].content)
关键点解析
  1. 工具定义 :使用 @tool 装饰器定义工具,函数的 docstring 会自动成为工具描述
  2. Agent 创建 :create_agent 是新版主要 API,基于 LangGraph 构建,内置 ReAct 循环逻辑
  3. 消息格式 :新版 Agent 使用 messages 格式输入和输出
  4. 模型选择:示例中的模型名称需根据实际可用模型调整

ReAct 的优势与局限

✅ 优势
  • 可解释性强 - 每一步都清晰可见,方便调试
  • 可靠性高 - 通过 Observation 验证推理结果
  • 灵活性好 - 可接入任意工具,适应多种场景
  • 错误恢复 - 可以在循环中修正错误
⚠️ 局限
  • 循环开销 - 多次 LLM 调用增加延迟和成本
  • 推理长度限制 - 复杂任务可能超出模型上下文窗口
  • 工具依赖 - 效果很大程度上取决于工具的质量

小结

ReAct 框架通过 Thought → Action → Observation 的循环,让 Agent 能够在推理中行动,在行动中推理。

📌 重点回顾 : - Thought :分析现状,决定下一步 - Action :执行工具调用 - Observation:获取结果,用于下一轮推理 - 循环直到任务完成


第三部分:Tool Use(工具使用)

🔧 工具是 Agent 的「手」和「脚」,让它能够真正行动于现实世界,完成从「思考」到「执行」的跨越。

为什么 Agent 需要工具?

LLM 虽然强大,但它有两个根本性局限:

  1. 知识截止 - 训练数据有时间限制,无法获取最新信息
  2. 无法行动 - 只能生成文本,无法真正操作外部系统

工具(Tools) 正是为了解决这些问题:

复制代码
┌─────────────────────────────────────────────────────────────┐
│              🛠️ 工具如何扩展 Agent 能力                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────────┐              ┌─────────────┐             │
│   │   LLM 本身   │     +        │    工具     │             │
│   │             │              │             │             │
│   │ • 推理      │              │ • 搜索     │             │
│   │ • 规划      │              │ • 计算     │             │
│   │ • 生成文本  │              │ • 调用API  │             │
│   │             │              │ • 执行代码 │             │
│   └─────────────┘              └─────────────┘             │
│          │                            │                     │
│          └──────────┬─────────────────┘                     │
│                     ▼                                       │
│            ┌─────────────────┐                              │
│            │    🤖 Agent     │                              │
│            │  能够感知、推理  │                              │
│            │  行动、记忆    │                              │
│            └─────────────────┘                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘
工具的核心作用
能力 无工具时 有工具后
获取实时信息 ❌ 受限于训练数据 ✅ 搜索、API 调用
执行计算 ❌ 只能估算 ✅ 代码执行
操作外部系统 ❌ 无法实际执行 ✅ API 调用
访问私有数据 ❌ 无法访问 ✅ 数据库查询

工具描述与注册

要让 Agent 正确使用工具,我们需要提供清晰的工具描述 。这是因为 Agent 是通过理解工具描述来决定调用哪个工具的。

工具描述的关键要素

每个工具都应该包含:

  1. 工具名称(name) - 简洁、描述性
  2. 功能描述(description) - 工具作用的详细说明
  3. 参数模式(parameters) - 输入参数的 schema
LangChain 工具定义示例
复制代码
from langchain.tools import tool
from pydantic import BaseModel, Field

# 方式 1:使用 @tool 装饰器(简化方式)
@tool
def search_news(query: str) -> str:
    """搜索最新的新闻资讯。

    Args:
        query: 搜索关键词,如"AI"、"科技"等

    Returns:
        搜索结果列表,包含标题、来源、摘要
    """
    return f"关于 {query} 的最新新闻..."

# 方式 2:使用 Pydantic 模型(推荐方式)
class SearchInput(BaseModel):
    query: str = Field(description="搜索关键词")
    limit: int = Field(default=10, description="返回结果数量")

@tool(args_schema=SearchInput)
def search_wiki(query: str, limit: int = 10) -> str:
    """搜索维基百科条目。

    适用于查询人物、地点、历史事件等百科知识。
    """
    return f"找到 {limit} 条关于 {query} 的结果"
工具注册
复制代码
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI

tools = [search_news, search_wiki]

# 注意:模型名称需根据实际可用的 OpenAI 模型调整
# 可选:gpt-4o-mini, gpt-4o, gpt-3.5-turbo 等
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

agent = create_agent(model=llm, tools=tools, system_prompt="你是一个助手")

工具选择策略

Agent 如何决定使用哪个工具?这涉及到**工具选择(Tool Selection)**的策略。

1. 基于描述的匹配

最常见的方式是让 LLM 根据工具描述进行匹配:

复制代码
用户问题:「Python 3.12 有什么新特性?」

Agent 分析:
- 问题关于 Python 版本新特性
- 需要获取最新信息
- 搜索工具 description: "搜索最新的新闻资讯" ✓ 匹配
- 计算工具 description: "执行数学计算" ✗ 不匹配

决策:调用 search_news 工具
2. 强制工具调用

可以通过提示词强制 Agent 使用特定工具:

复制代码
prompt = """你是一个研究助手。

用户问题:{input}

你必须按照以下步骤回答:
1. 首先使用 search 工具搜索相关信息
2. 然后使用 visit 工具获取详细内容
3. 最后总结答案

禁止直接生成答案,必须先搜索!"""

常见工具类型

1. 🔍 搜索工具
复制代码
@tool
def web_search(query: str) -> str:
    """使用搜索引擎查找最新信息。"""
    pass

@tool
def wiki_search(query: str) -> str:
    """搜索维基百科获取百科知识。"""
    pass
2. 💻 代码执行工具
复制代码
@tool
def python_executor(code: str) -> str:
    """执行 Python 代码并返回结果。

    适用于:数学计算、数据分析、文本处理等。
    """
    pass
3. 🌐 API 调用工具
复制代码
@tool
def get_weather(city: str) -> str:
    """获取指定城市的实时天气信息。"""
    pass

@tool
def send_email(to: str, subject: str, body: str) -> str:
    """发送电子邮件。"""
    pass
4. 📊 数据处理工具
复制代码
@tool
def query_database(sql: str) -> str:
    """执行 SQL 查询从数据库获取数据。"""
    pass

@tool
def read_file(path: str) -> str:
    """读取指定路径的文件内容。"""
    pass
5. 🔄 自定义工具
复制代码
@tool
def order_product(product_id: str, quantity: int) -> str:
    """创建订单,购买指定商品。

    Args:
        product_id: 商品 ID
        quantity: 购买数量
    """
    pass

图解 Tool Use 架构

复制代码
┌─────────────────────────────────────────────────────────────┐
│              🔧 Tool Use 完整架构                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                     👤 用户                          │  │
│   │              「帮我查下北京天气」                     │  │
│   └─────────────────────┬───────────────────────────────┘  │
│                         │                                   │
│                         ▼                                   │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                   🧠 LLM                             │  │
│   │  ┌─────────────────────────────────────────────┐    │  │
│   │  │  理解意图:用户想查询北京天气              │    │  │
│   │  │  选择工具:get_weather                      │    │  │
│   │  └─────────────────────────────────────────────┘    │  │
│   └─────────────────────┬───────────────────────────────┘  │
│                         │                                   │
│                         ▼ Tool Call                         │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                   🔧 工具注册表                       │  │
│   │                                                      │  │
│   │   • get_weather(city: str) -> str                  │  │
│   │   • search_news(query: str) -> str                 │  │
│   │   • python_executor(code: str) -> str              │  │
│   │   • send_email(to, subject, body) -> str           │  │
│   │                                                      │  │
│   └─────────────────────┬───────────────────────────────┘  │
│                         │                                   │
│                         ▼ Execution                         │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                   🌐 外部世界                         │  │
│   │                                                      │  │
│   │   ┌──────────┐  ┌──────────┐  ┌──────────┐         │  │
│   │   │ 天气 API │  │ 搜索引擎 │  │ 代码执行 │         │  │
│   │   └──────────┘  └──────────┘  └──────────┘         │  │
│   │                                                      │  │
│   └─────────────────────┬───────────────────────────────┘  │
│                         │                                   │
│                         ▼ Result                            │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                   📝 生成回复                         │  │
│   │        「北京今天天气:晴,23°C,东南风2级」          │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

小结

Tool Use(工具使用) 是 Agent 区别于传统 LLM 的关键能力。

📌 重点回顾 : - 工具让 Agent 能够获取实时信息执行操作 - 工具描述 是 Agent 选择工具的依据 - 常见工具类型:搜索、代码执行、API 调用、数据处理 - 工具选择策略:基于描述匹配强制调用


第四部分:LangChain Agent 实战--从零构建你的第一个智能体

在了解了 AI Agent 的核心概念后,让我们用 LangChain 框架亲手构建一个真正可运行的智能体。本节将带你完成环境搭建、依赖安装、代码编写、运行测试的全流程。

版本说明:本节代码基于 LangChain 最新版(2026)编写。LangChain 更新较快,API 可能有所变化。如遇 API 变化,请查阅官方文档:https://docs.langchain.com

环境准备

Python 版本要求

LangChain 需要 Python 3.10 或更高版本。建议使用 Python 3.11 或 3.12 以获得最佳性能和兼容性。

复制代码
# 检查 Python 版本
python --version
# 推荐输出: Python 3.11.x 或更高
创建虚拟环境
复制代码
# 创建项目目录
mkdir langchain-agent-demo
cd langchain-agent-demo

# 创建虚拟环境
python -m venv .venv

# 激活虚拟环境
source .venv/bin/activate  # Linux/macOS
# .venv\Scripts\activate   # Windows

安装依赖

LangChain 采用模块化架构,按需安装:

复制代码
# 完整安装命令
pip install langchain langchain-community langchain-openai duckduckgo-search

包说明 : - langchain:核心框架 - langchain-community:社区集成包(包含 DuckDuckGo 搜索等工具) - langchain-openai:OpenAI 模型集成 - duckduckgo-search:DuckDuckGo 搜索库

OpenAI API Key 获取
  1. 访问 OpenAI Platform

  2. 登录账号并进入 API Keys 页面

  3. 创建新的 API Key

  4. 配置环境变量:

    export OPENAI_API_KEY="your-api-key-here"

安全提示:永远不要将 API Key 硬编码在代码中或上传到公开仓库。
模型选择说明 : - 示例代码使用 gpt-4o-mini 作为默认模型,这是 OpenAI 提供的性价比优秀的模型 - 你可用的模型取决于你的 OpenAI API Key 权限和账户类型 - 常见可选模型:gpt-4o-mini(推荐,性价比高)、gpt-4o(能力强)、gpt-3.5-turbo(经济型) - 如遇模型不可用错误,请登录 OpenAI Platform 查看你的账户支持哪些模型


完整代码

将以下代码保存为 agent_demo.py:

复制代码
# -*- coding: utf-8 -*-
"""
LangChain Agent 示例:搜索增强问答智能体
使用 OpenAI GPT 模型作为 LLM 后端
使用 DuckDuckGo 搜索作为外部工具
"""

import os
from langchain.agents import create_agent
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_openai import ChatOpenAI

# ============================================
# 1. 配置 API Key
# ============================================
api_key = os.environ.get("OPENAI_API_KEY")
if not api_key:
    raise ValueError(
        "请设置 OPENAI_API_KEY 环境变量\n"
        "示例: export OPENAI_API_KEY='your-api-key'"
    )

# ============================================
# 2. 初始化 LLM
# ============================================
# 注意:模型名称需根据实际可用的 OpenAI 模型调整
# 可选:gpt-4o-mini, gpt-4o, gpt-3.5-turbo 等
# 请确保你的 OpenAI API Key 有权限访问所选模型
llm = ChatOpenAI(
    model="gpt-4o-mini",  # 或 gpt-4o、gpt-3.5-turbo 等
    temperature=0.7,
)

# ============================================
# 3. 定义工具
# ============================================
# 使用 langchain-community 的 DuckDuckGo 搜索工具
# 需要安装:pip install langchain-community duckduckgo-search
# 注意:如果 DuckDuckGoSearchRun 导入失败,可以使用 @tool 装饰器自定义搜索工具

search_tool = DuckDuckGoSearchRun()

tools = [search_tool]

# ============================================
# 4. 创建 Agent
# ============================================
agent = create_agent(
    model=llm,
    tools=tools,
    system_prompt="""你是一个乐于助人的 AI 助手。

你可以使用搜索工具来获取最新信息。当用户的问题需要实时数据、新闻或你不确定的事实时,请使用搜索工具。

请始终保持友好和专业的态度,给出准确、有帮助的回答。""",
)

# ============================================
# 5. 运行 Agent
# ============================================
def run_agent(query: str):
    """运行 Agent 处理用户查询"""
    result = agent.invoke(
        {"messages": [{"role": "user", "content": query}]}
    )
    last_message = result["messages"][-1]
    return last_message.content

# ============================================
# 6. 测试示例
# ============================================
if __name__ == "__main__":
    print("=" * 50)
    print("LangChain Agent 搜索问答演示")
    print("=" * 50)

    question = "2024年巴黎奥运会中国队获得了多少金牌?"
    print(f"\n问题: {question}")
    print("-" * 40)

    answer = run_agent(question)
    print(f"\n回答:\n{answer}")

代码逐行解析

第 1 部分:导入模块

复制代码
import os
from langchain.agents import create_agent
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_openai import ChatOpenAI
  • os:标准库,用于读取环境变量
  • create_agent:LangChain 新式 Agent 创建函数,基于 LangGraph 构建
  • DuckDuckGoSearchRun:DuckDuckGo 搜索工具,免费无需 API Key
  • ChatOpenAI:OpenAI GPT 模型的 LangChain 集成类

第 2 部分:API Key 配置

从环境变量安全获取 API Key,避免硬编码。

第 3 部分:LLM 初始化

复制代码
llm = ChatOpenAI(
    model="gpt-4o-mini",  # 或 gpt-4o、gpt-3.5-turbo 等
    temperature=0.7,
)
  • model:gpt-4o-mini 是性能与成本的平衡选择(也可使用 gpt-4o)
  • temperature:控制输出随机性(0-1),0.7 较为平衡

第 4 部分:工具定义

使用 langchain-community 的 DuckDuckGo 搜索工具,免费无需额外 API Key。

第 5 部分:Agent 创建

create_agent 内部使用 LangGraph 构建 ReAct 循环: 1. Agent 分析用户输入 2. 决定是否使用工具 3. 调用工具获取信息 4. 根据工具返回结果生成最终回答

第 6 部分:运行 Agent

Agent 使用 messages 格式输入,返回完整的对话链。


运行测试

复制代码
export OPENAI_API_KEY="your-api-key"
python agent_demo.py
预期输出
复制代码
==================================================
LangChain Agent 搜索问答演示
==================================================

问题: 2024年巴黎奥运会中国队获得了多少金牌?
----------------------------------------

回答:
根据搜索结果,2024年巴黎奥运会上,中国代表团共获得了40枚金牌、27枚银牌和24枚铜牌,总计91枚奖牌。
常见问题排查
问题 原因 解决方法
OPENAI_API_KEY 错误 API Key 未设置 设置环境变量
模型返回空结果 API Key 无效 重新生成 Key
工具未被调用 工具未正确注册 检查工具列表
回答不准确 模型能力限制 升级到 gpt-4o

扩展思路

1. 添加更多工具
复制代码
from langchain_community.tools import DuckDuckGoSearchRun, WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper

search_tool = DuckDuckGoSearchRun()
wiki_tool = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
tools = [search_tool, wiki_tool]
2. 自定义工具
复制代码
from langchain_core.tools import tool

@tool
def get_current_time(location: str) -> str:
    """获取指定位置的当前时间。"""
    from datetime import datetime
    import pytz
    timezone_map = {"北京": "Asia/Shanghai", "纽约": "America/New_York"}
    tz = pytz.timezone(timezone_map.get(location, "Asia/Shanghai"))
    return datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
3. 使用 Tavily 搜索
复制代码
pip install tavily-python

from langchain_community.tools.tavily_search import TavilySearchResults
tavily_tool = TavilySearchResults(tavily_api_key=os.environ.get("TAVILY_API_KEY"))
4. 添加记忆功能
复制代码
# 添加记忆功能需要安装 langgraph
# pip install langgraph

from langgraph.checkpoint.memory import MemorySaver

agent = create_agent(
    model=llm,
    tools=tools,
    system_prompt="...",
    checkpointer=MemorySaver(),  # 启用记忆功能
)

config = {"configurable": {"thread_id": "user-123"}}
result = agent.invoke({"messages": [{"role": "user", "content": "我叫张三"}]}, config=config)

注意 :记忆功能需要安装 langgraph 包,并确保版本兼容。MemorySaver 使用内存存储对话历史,适合开发和测试环境;生产环境建议使用持久化存储方案。

5. 流式输出
复制代码
# 流式输出可以实时查看 Agent 的思考过程和结果
# 注意:返回的 chunk 结构可能因版本而异,请根据实际输出结构调整

for chunk in agent.stream({"messages": [{"role": "user", "content": query}]}):
    if "agent" in chunk:
        print(chunk["agent"]["messages"][0].content, end="", flush=True)

提示 :流式输出的具体结构取决于 LangChain/LangGraph 的版本。如果上述代码不工作,建议打印 chunk 的内容查看实际结构,或使用非流式方式 agent.invoke()


总结

本章我们完成了:

  1. 环境搭建:Python 3.10+、虚拟环境、依赖安装
  2. API 配置:OpenAI API Key 获取与安全配置
  3. Agent 构建 :使用 create_agent 创建搜索问答智能体
  4. 代码解析:理解每个部分的作用和原理
  5. 运行测试:实际运行并观察 Agent 行为
  6. 扩展方向:多工具、自定义工具、记忆、流式输出

LangChain 的核心价值在于: - 标准化接口 :不同 LLM 和工具使用统一 API - 模块化设计 :按需组合,灵活扩展 - 生产级架构:基于 LangGraph,支持复杂编排

推荐学习路径: 1. 深入理解 LangGraph 的状态图编排 2. 学习 Agent 评测方法(LangSmith) 3. 探索多 Agent 协作架构 4. 实践 RAG(检索增强生成)与 Agent 结合


相关推荐
skilllite作者1 小时前
SkillLite Rust 沙箱与 AI Agent 自进化实战指南
开发语言·人工智能·后端·架构·rust
掘金安东尼1 小时前
ZeroClaw vs OpenClaw:把"-99% 内存"那张图拆开看
人工智能
掘金安东尼2 小时前
拆 ZeroClaw 架构:四个 Trait 撑起一个 Agent 运行时
人工智能
sunneo2 小时前
专栏B-产品心理学深度-01-认知偏差手册
人工智能·产品运营·产品经理·ai编程·ai-native
Rabbit_QL2 小时前
【ChatGPT Image2 全景图实战】从提示词到电影级长镜头画面
人工智能·chatgpt
星浩AI2 小时前
基于知识图谱的多模态 GraphRAG 项目实战,系统架构详解[附源码]
架构·langchain·agent
掘金安东尼2 小时前
ZeroClaw 是什么?一个 Rust 写的"轻量级 AI Agent 运行时"完整科普
人工智能
维元码簿2 小时前
Claude Code 深度拆解:工具系统——权限、沙盒与错误处理
ai·agent·claude code·ai coding
maxchen.cn2 小时前
实时交互数字人解决方案深度剖析:以臻灵平台为例的商业价值与竞争力评估
大数据·人工智能