Agent(智能体)应用 的入门学习路径

Agent(智能体)应用 的入门学习路径

作为一名在AI应用开发领域深耕多年的从业者,梳理 Agent(智能体)应用 的入门学习路径。Agent 是当前大模型应用中最具想象力的方向之一------它让 LLM 不再只是一个"聊天引擎",而成为一个能 感知环境、制定计划、调用工具、执行动作并自我反思 的自主实体。

下面将按照"概念→核心能力→主流框架→动手实践→学习建议"的顺序,为你搭建一个清晰、可落地的入门框架。


一、什么是 Agent?------从"大脑"到"行动派"

传统的大模型(如直接调用 ChatGPT)是被动的:你问一句,它答一句。而 Agent 则拥有:

  • 规划能力:将复杂任务拆解成子步骤(例如"预订机票"需要先查询航班、比较价格、填写信息、支付)。
  • 记忆能力:短期记忆(对话上下文)和长期记忆(向量数据库存储历史经验)。
  • 工具使用:调用外部 API、数据库、代码解释器、搜索引擎等。
  • 行动与反馈:执行具体操作,并根据结果调整下一步计划。

一个经典的比喻:LLM 是 Agent 的"大脑",而工具、API 是它的"手和脚"。


二、Agent 的核心组件(你需要掌握哪些技术?)

无论使用何种框架,一个完整的 Agent 系统通常包含以下模块:

组件 作用 入门技术点
大语言模型(LLM) 理解意图、生成计划和推理 OpenAI API / 国产模型(通义千问、智谱)、本地模型(Ollama + Llama3)
提示词工程(Prompt) 告诉 Agent 如何思考、用什么格式输出 ReAct 模式(Reason+Act)、CoT(思维链)、结构化输出(JSON)
工具(Tools) 让 Agent 获取实时信息或执行动作 搜索 API、计算器、文件读写、数据库查询、代码执行器
记忆(Memory) 维护对话历史或长期知识 对话缓冲区、向量数据库(Chroma, FAISS)
解析与执行 解析 LLM 输出的工具调用指令,并安全运行 JSON 解析、函数调用(Function Calling)、子进程隔离

三、主流 Agent 开发框架(2025年推荐)

对于初学者,我建议从 最接近原生 LLM API 的框架开始,避免过早陷入复杂抽象。

1. LangChain(最流行,生态最全)

  • 优点:文档丰富,组件化设计(LCEL),支持大量内置工具和记忆方案。
  • 缺点:抽象较多,学习曲线稍陡。
  • 学习重点:create_react_agentTool 装饰器、AgentExecutor

2. LlamaIndex(擅长 RAG + Agent)

  • 如果你需要 Agent 查询私有文档/数据库,LlamaIndex 的 FunctionCallingAgent 非常直观。
  • 学习重点:QueryEngineToolAgentRunner

3. AutoGen(微软出品,适合多 Agent 协作)

  • 支持多个 Agent 对话协作,适合复杂任务分解。
  • 学习重点:AssistantAgentUserProxyAgentGroupChat

4. MiniAgent(自建)------最推荐入门

用 100 行代码自己实现一个 ReAct Agent,彻底理解原理。下面我会给出示例。


四、从零手写一个极简 Agent(ReAct 模式)

这是我自己在教学中反复使用的例子,它不使用任何框架,只依赖 OpenAI API(或任何兼容接口),帮助你真正理解 Agent 的核心循环。

场景:一个能进行"数学计算 + 查询当前时间"的 Agent

python 复制代码
import json
import re
from datetime import datetime
from openai import OpenAI

client = OpenAI()  # 需要设置 OPENAI_API_KEY 环境变量

# 定义可用工具(模拟)
def calculate(expression: str) -> str:
    """计算数学表达式,例如 '2 + 3 * 4'"""
    try:
        result = eval(expression)
        return str(result)
    except Exception as e:
        return f"计算错误: {e}"

def get_current_time() -> str:
    """返回当前日期和时间"""
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

tools = {
    "calculate": calculate,
    "get_current_time": get_current_time,
}

# ReAct 提示词模板(告诉 LLM 如何思考、调用工具)
react_prompt = """
你是一个能够使用工具的智能助手。你可以通过以下格式进行推理和行动:

问题:用户输入的问题
思考:你需要思考下一步应该做什么
行动:你要调用的工具名称以及参数,格式为:{{"action": "工具名", "action_input": "输入参数"}}
观察:工具返回的结果
(重复思考/行动/观察,直到得到最终答案)
最终答案:对用户问题的完整回答

可用的工具有:
- calculate: 计算数学表达式,输入参数为表达式字符串,例如 "3 * 5 + 2"
- get_current_time: 获取当前时间,不需要输入参数

现在开始。
用户问题:{question}
"""

def run_agent(question, max_steps=5):
    print(f"用户:{question}")
    steps = []
    current_prompt = react_prompt.format(question=question)
    
    for i in range(max_steps):
        # 调用 LLM
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[{"role": "user", "content": current_prompt}],
            temperature=0,
        )
        output = response.choices[0].message.content
        print(f"\n--- Step {i+1} LLM 输出 ---\n{output}")
        
        # 解析行动(简化版:寻找 {"action": ...} 格式)
        action_match = re.search(r'\{[^{}]*"action"[^{}]*\}', output)
        if action_match:
            try:
                action_json = json.loads(action_match.group())
                action_name = action_json["action"]
                action_input = action_json.get("action_input", "")
                if action_name in tools:
                    observation = tools[action_name](action_input)
                else:
                    observation = f"错误:未知工具 '{action_name}'"
            except Exception as e:
                observation = f"解析失败: {e}"
        else:
            # 没有找到行动,检查是否已有最终答案
            if "最终答案:" in output:
                final = output.split("最终答案:")[-1].strip()
                print(f"\n最终答案:{final}")
                return final
            else:
                observation = "未提供有效行动,请继续推理并给出最终答案。"
        
        # 将观察结果追加到对话历史
        current_prompt += f"\n观察:{observation}\n"
    
    print("达到最大步数,未得到最终答案。")
    return None

# 测试
if __name__ == "__main__":
    run_agent("现在几点了?")
    run_agent("计算 (10 + 2) * 3 的结果")
    run_agent("先查一下时间,然后计算 10 分钟后的时间点(以小时和分钟表示)")

运行结果示例(第二个问题):

复制代码
用户:计算 (10 + 2) * 3 的结果

--- Step 1 LLM 输出 ---
思考:用户需要计算数学表达式,我应该使用 calculate 工具。
行动:{"action": "calculate", "action_input": "(10 + 2) * 3"}

观察:36

--- Step 2 LLM 输出 ---
最终答案:(10 + 2) * 3 的结果是 36。

这个例子教会你

  • Agent 的"思考-行动-观察"循环是如何工作的。
  • 如何用提示词约束 LLM 输出格式。
  • 如何解析工具调用并执行真实代码。

五、学习路线图(从入门到实战)

第一阶段:基础(1~2周)

  • 掌握 Python,熟悉 requests、JSON、正则表达式。
  • 会调用任意 LLM API(OpenAI / 国内模型)。
  • 理解 ReAct 论文的核心思想(可读 LangChain 的 ReAct 文档)。

第二阶段:使用框架(2~3周)

  • LangChain 快速入门 :实现一个能搜索维基百科的 Agent。

    python 复制代码
    from langchain.agents import load_tools, initialize_agent, AgentType
    from langchain_openai import ChatOpenAI
    
    llm = ChatOpenAI(model="gpt-3.5-turbo")
    tools = load_tools(["wikipedia"], llm=llm)
    agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
    agent.run("谁是图灵?")
  • 学习 Function Calling :使用 OpenAI 的 tools 参数,让模型直接返回结构化的工具调用。

第三阶段:增强能力(3~4周)

  • 记忆 :添加对话历史(使用 ConversationBufferMemory)或长期记忆(向量检索)。
  • 多 Agent 协作 :尝试 AutoGen 的 GroupChat,模拟两个 Agent 讨论问题。
  • 代码执行器:让 Agent 能够写 Python 代码并运行(注意安全沙箱)。

第四阶段:生产化考虑(1~2周)

  • 错误处理与重试:工具调用失败后的恢复机制。
  • 流式输出:边思考边返回中间结果。
  • 评估 :如何衡量 Agent 的任务成功率(例如用 LangSmith 追踪)。

六、避坑指南(来自十年经验)

  1. 不要过度依赖全自动 Agent :现实场景中,完全自主的 Agent 容易陷入死循环或产生高额 API 费用。加入人工确认机制(比如执行敏感操作前询问用户)。
  2. 提示词设计至关重要 :你给 LLM 的格式约束越明确(如 JSON Schema),解析越稳定。推荐使用 Pydantic 定义工具输入输出。
  3. 警惕工具安全:如果 Agent 可以执行任意代码或删除文件,务必使用 Docker 或受限环境。
  4. 成本控制:每次 ReAct 循环都要多次调用 LLM。可以先用小模型(如 GPT-3.5-turbo)做路由,复杂任务再切换到大模型。
  5. 调试技巧:打印出每一步的 LLM 输出和观察结果,这是定位问题最有效的方法。

七、推荐资源

  • 书籍:《LangChain 实战》(2024 年出版)
  • 论文:ReAct (Yao et al., 2022)、Toolformer (Meta, 2023)
  • 开源项目
  • 视频课程DeepLearning.AI 上的《LangChain for LLM Application Development》(免费)

结语

Agent 应用开发是当前 AI 领域最具活力的方向之一。入门的关键不是贪多求全,而是 先用手写一个最简单的 ReAct 循环,理解本质,再逐步引入框架。当你看到自己的 Agent 成功调用计算器、搜索网络、写出一段代码并运行时,那种成就感会驱动你走得更远。

如果你在实践过程中遇到具体问题(例如解析失败、工具调用循环),随时可以再来问我。祝你在 Agent 开发的旅程中收获满满!

相关推荐
2301_809051141 小时前
Linux 网络编程 学习笔记
linux·网络·学习
eggcode2 小时前
【Qt学习】Linux(ARM架构)在线安装Qt6.x
linux·qt·学习·arm
_李小白3 小时前
【android opencv学习笔记】Day 26: 滤波算法之低通滤波与图像缩放插值
android·opencv·学习
盖小雅3 小时前
自动化排班如何破解劳动法合规难题:从规则冲突到可追溯的排班表
大数据·运维·机器学习·自动化
Bechamz4 小时前
大数据开发学习Day43
大数据·学习
踏歌~5 小时前
YA期货准备:0 了解期货
机器学习
数据科学小丫6 小时前
特征工程处理
人工智能·算法·机器学习
happymaker06266 小时前
SpringBoot学习日记——DAY06(整合MyBatisPlus的其他功能)
java·spring boot·学习