尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AI Agent开发核心概念与工程落地:从ReAct循环到Function Calling

AI Agent开发核心概念与工程落地:从ReAct循环到Function Calling 最近在 B 站刷到的 AI Agent 教程标题一个比一个猛“全748集”“一个小时快速入门”“学完即可就业”。收藏量动辄几十万但真正能坚持看完并且最后能独立做出一个 Agent 的人比例并不高。问题不在学习态度而在信息结构。如果只看标题很容易把 Agent 开发理解成“再学一套框架就会了”。但真正接触之后你会发现Agent 开发不是一个单一技能而是“大模型 API 工具调用 记忆管理 工程化落地”的组合能力。它的入门门槛确实比传统后端开发低但要做到稳定、可控、可上线难度并不比写一个中台服务小。这篇文章不打算再给你列一份吃灰目录而是把 Agent 开发这件事重新拆一遍先讲清楚底层的几个核心概念再给出一条可以直接照着练的最小路径然后把常见坑和工程化建议一次性讲明白。读完你会知道Agent 开发到底学什么、用什么技术栈、怎么写第一个 Agent、以及真正落到项目和就业里还差哪几步。先给一个明确判断Agent 开发值得学但值得学的理由不是“学完即可就业”而是它是大模型落地到具体业务里最现实的技术形态。这个区别决定了你后面所有的学习方式。1. 为什么 Agent 开发值得学这波机会到底在哪到了 2025 年大模型的能力边界已经不是“会不会写代码”而是“能不能被可靠地编排进业务流程”。所谓 Agent简单理解就是一个能自己决定“下一步调用什么工具、怎样完成任务”的 AI 程序。它和传统程序的差别很关键传统程序是开发者把所有分支都写死用户走哪条路径完全由代码决定Agent 则是由模型根据当前上下文动态决策。开发者的工作重心从“实现逻辑”变成了“定义目标、边界和工具”。这个变化对普通开发者意味着什么以前要让 AI 落地需要机器学习背景需要自己训练模型。现在模型能力由专门的团队提供普通开发者只需要掌握调用方式、工具接入、流程编排就能做出 AI 产品。这中间的“最后一公里”恰恰就是 Agent 开发要做的事。后端开发可以做工具层前端开发可以做交互层算法工程师可以做模型调优层每个人都有自己的切入点。从岗位方向看目前和 Agent 相关的岗位大致分三类AI 应用开发工程师、Agent 平台开发工程师、RAG 与模型编排工程师。它们的共同特点是不要求你从零训练模型但要求你能把模型可靠地接进业务系统。但也要清醒一点Agent 开发的门槛不在语法而在工程。它涉及上下文管理、工具协议、错误恢复、成本控制、安全性。这也是为什么很多人“看视频全会一做项目就废”——因为大部分教程只讲怎么调模型不讲怎么做系统设计。2. AI Agent 的核心概念先把最底层的几件事搞清楚2.1 什么是 Agent从一个需求场景说起假设现在要做一个企业内部 HR 助理员工来问“我这个月还剩几天年假”。传统后端的做法是设计数据库表写查询接口再做前端页面用户通过表单提交后端返回结果。Agent 的方式完全不同。模型读懂用户问题后决定调用一个“查询年假”的工具拿到数据后再组织成自然语言回复给员工。整个过程看起来像是一个智能助手在替你做事。从技术角度这个“感知—决策—行动—观察”的循环就是 Agent 的本质感知模型接收用户请求。决策模型决定调用哪个工具、传什么参数。行动执行工具拿到数据。观察模型根据工具返回结果生成下一步动作或最终回复。这个循环在学术和工程里有一个常见名字叫 ReAct是 Reasoning Acting 的组合。理解 ReAct 循环是入门 Agent 开发最重要的一步比背 API 重要得多。2.2 四个核心组件模型、工具、记忆、规划一个完整的 Agent 系统无论用哪个框架底层都是这四样东西模型负责理解语言和做决策是整个 Agent 的大脑。你可以把模型看作一个“很聪明但没有任何行动能力”的人它只能输出文字和结构化数据不能直接操作外部世界。工具Agent 能力的延伸。搜索、数据库查询、代码执行、HTTP 请求甚至调用另一个 Agent都算工具。工具定义了 Agent 能做哪些事也决定了它能在多大程度上完成真实任务。记忆分为短期记忆和长期记忆。短期记忆就是当前对话的上下文长期记忆是持久化信息比如向量数据库里的知识、用户历史、业务数据解决的是“Agent 离开本次对话之后还能记住什么”的问题。规划模型根据目标拆解执行步骤。常见的方式有 ReAct、Plan-and-Execute、任务分解、多 Agent 协作等。用一个表格来对比传统程序和 AI Agent可以解释很多困惑维度传统程序AI Agent控制流开发者全部写死模型动态决策输入方式结构化接口自然语言错误处理异常捕获模型自我修正升级方式改代码发版换模型、改 Prompt、加工具主要风险逻辑漏洞幻觉、越权、不可控这个对比解释了为什么 Agent 输出有随机性为什么需要人工确认机制为什么不能把一个普通业务接口直接开放给 Agent 随便调。2.3 Skill、Function Calling 与 Workflow几个容易混淆的术语Function Calling也叫 Tool Calling让模型把自然语言意图映射成结构化函数调用的协议。这是 Agent 调用工具的最底层机制。Skill可以理解为“可复用的子能力模块”。比如“联网搜索技能”“代码执行技能”“数据分析技能”。不同平台叫法不同有的叫插件有的叫工具集本质上是把一堆工具和提示词打包成可复用单元。Workflow把固定流程固化下来的一种编排方式。比如审批链路、订单处理链路每一步做什么都是确定的。Agent 和 Workflow 的区别是Workflow 是确定性的每一步都写死Agent 是动态决策的由模型决定走哪条路径。实际项目里稳定业务用 Workflow复杂开放场景用 Agent两者常常配合使用。3. Agent 开发的技术栈全景很多初学者在“学哪个框架”上消耗了大量精力。其实框架只是工具更重要的是先建立一张技术地图。一个完整的 Agent 项目通常涉及下面几个层级层级主要内容代表方向模型层大模型 API、开源模型部署、模型微调OpenAI 系列、通义千问、DeepSeek、Qwen 等开发框架层Agent 编排、工具调用协议、记忆管理LangChain、LlamaIndex、AutoGen、Dify 等数据与记忆层向量数据库、文档存储、关系数据库Milvus、Chroma、PostgreSQL 等应用编排层工作流、Agent 平台、人机协同自研系统、开源平台工程层可观测性、评估、安全、CI/CD日志追踪、评测集、权限控制模型层是 Agent 的“大脑”。实际选择时要综合考虑效果、成本、延迟、数据合规。很多企业会通过 API 网关统一接入多家模型再根据任务难度做路由而不是只依赖某一家。开发框架层解决的是“别把每个 Agent 都从零写一遍”的问题。LangChain 是使用广泛的生态适合熟悉编程的开发者Dify 这类平台适合快速搭应用AutoGen 侧重多 Agent 协作。我的建议是入门时先选一个主流框架跑通同时至少手写一次 ReAct 循环理解底层原理否则框架一升级你就不会排查问题了。数据与记忆层解决的是“模型不知道你的业务数据”的问题。RAG检索增强生成是目前最实用的方式把知识库切片、向量化、存入向量数据库用户提问时先检索相关内容再让模型基于检索结果回答。工程层是很多人忽略的部分。真实项目里Agent 输出不稳定是常态所以必须有日志追踪、效果评估、权限控制、人工审批机制否则很难上线。4. 环境准备与前置条件4.1 基础环境搭建Agent 开发主要用 Python版本建议 3.10 及以上。操作系统不限Windows、macOS、Linux 都可以关键是要建一个干净的虚拟环境。# 创建虚拟环境 python3 -m venv agent-venv # 激活虚拟环境 # macOS / Linux source agent-venv/bin/activate # Windows # agent-venv\Scripts\activate # 升级 pip pip install --upgrade pip然后在项目目录里建一个 requirements.txt按需安装依赖openai1.0.0 python-dotenv requests安装依赖pip install -r requirements.txt版本号不用刻意追求最新以官方文档实际支持的版本为准。这里不锁定具体版本是因为框架迭代很快你只需要知道 openai SDK 从 1.x 开始是新的客户端风格旧版的 0.x 代码不能直接套用。4.2 密钥与配置管理调用模型 API 需要密钥但密钥绝不能硬编码在代码里更不能提交到 Git 仓库。本地开发用 .env 文件管理生产环境用专门的密钥管理服务。先在项目根目录创建 .env 文件OPENAI_API_KEYsk-xxxxxxxxxxxxxxxxx OPENAI_MODELgpt-4o-mini然后在代码里用 python-dotenv 加载from dotenv import load_dotenv import os load_dotenv() api_key os.getenv(OPENAI_API_KEY) model os.getenv(OPENAI_MODEL, gpt-4o-mini)同时在项目里最好写上 .gitignore把 .env 文件忽略掉.env *.pyc __pycache__/ venv/这里要特别提醒如果你用的是第三方 API 服务先确认对方的使用协议和合规要求再开始写代码。密钥泄露是一个真实的安全风险。5. 从零构建一个最小 Agent代码讲解第 5 章是整篇文章最核心的部分。我会从两个层次来演示先写一个不依赖任何外部 API 的 Agent 骨架让你没有任何密钥也能跑起来理解循环再用 Function Calling 接入真实模型展示生产环境中的调用方式。5.1 不依赖 API Key 的最小可运行版本先看一个最简版本。这里用一个 MockLLM 类来模拟模型的决策能力Agent 类负责把决策分发到具体工具。你不需要任何 API Key 就能运行。# 文件路径minimal_agent.py import json class MockLLM: 模拟大模型的决策能力。 真实项目中这里会替换为对 GPT、Qwen、DeepSeek 等模型的 API 调用。 def decide(self, question: str) - dict: if 天气 in question: return {action: get_weather, args: {city: 北京}} return {action: reply, args: {answer: 这个问题我暂时无法处理}} class Agent: def __init__(self): self.llm MockLLM() self.tools { get_weather: self.get_weather, reply: self.reply, } def get_weather(self, city: str) - str: # 真实项目中这里替换为天气 API 调用 return f{city} 今天晴转多云气温 20~28℃ def reply(self, answer: str) - str: return answer def run(self, question: str) - str: # 第 1 步模型做出决策 decision self.llm.decide(question) # 第 2 步根据决策找到对应工具 tool self.tools.get(decision[action]) if not tool: return 没有找到可用的工具 # 第 3 步执行工具 args decision.get(args, {}) result tool(**args) # 第 4 步返回结果 return result if __name__ __main__: agent Agent() print(agent.run(北京明天天气怎么样))运行方式python minimal_agent.py预期输出北京 今天晴转多云气温 20~28℃这段代码虽然简单但它展示了 Agent 的完整骨架模型决策、动作映射、工具执行、结果返回。真实项目的 Agent 只是在“决策”这一步换成了大模型调用并且工具数量更多、逻辑更复杂整体结构是一样的。如果你把这段代码里的 MockLLM 换成真实模型 API再加上工具参数自动解析、多轮执行、记忆管理就是一个可以工作的简单 Agent 了。5.2 接入真实模型Function Calling 完整示例下面是用 OpenAI 兼容接口调用模型的 Function Calling 示例。这里的核心是你定义好工具清单模型根据用户问题自动决定是否调用工具以及调用时传什么参数。# 文件路径chat_with_tools.py import json from openai import OpenAI # 从环境变量读取 API Key如果你用的是其他 OpenAI 兼容接口 # 可以在这里传入 base_url 和 api_key client OpenAI() # 定义工具清单 tools [ { type: function, function: { name: get_weather, description: 查询指定城市的天气用户提到天气问题时必须使用这个工具, parameters: { type: object, properties: { city: { type: string, description: 城市名例如北京、上海 } }, required: [city] } } } ] def run(question: str): messages [ {role: user, content: question} ] resp client.chat.completions.create( modelgpt-4o-mini, # 以你实际可用的模型为准 messagesmessages, toolstools, tool_choiceauto, ) msg resp.choices[0].message if msg.tool_calls: # 模型决定调用工具 tool_call msg.tool_calls[0] function_name tool_call.function.name function_args json.loads(tool_call.function.arguments) print(模型决定调用工具:, function_name) print(工具参数:, function_args) # 真实项目中在这里执行你的业务函数 weather_result f{function_args.get(city)} 今天晴气温 22~26℃ # 把工具结果返回给模型让模型生成最终回复 messages.append(msg) messages.append({ role: tool, content: weather_result, tool_call_id: tool_call.id, }) second_resp client.chat.completions.create( modelgpt-4o-mini, messagesmessages, toolstools, tool_choiceauto, ) print(最终回复:, second_resp.choices[0].message.content) else: print(模型直接回答:, msg.content) if __name__ __main__: run(北京今天天气怎么样)这段代码值得仔细解释一是工具定义部分。每个工具都要写清楚 name、description 和 parameters。description 尤其重要模型不知道你的工具内部逻辑它只靠这段描述来决定要不要调用这个工具。描述写得模糊模型就会犹豫或乱用。二是 tool_choiceauto。这表示让模型自己决定是否调用工具。如果你确定这个场景必须调用某个工具可以指定具体函数名强制模型调用。三是工具结果的回传。模型第一次返回 tool_calls 只是“决定调用工具”并没有真正执行工具。你要在自己的代码里执行真实函数然后把结果以 roletool 的消息追加回对话再调用一次模型接口让模型基于工具结果生成最终回复。这个“两次调用”的过程是初学者最容易漏掉的。6. 运行结果与效果验证先跑第 5 章的最小版本python minimal_agent.py如果一切正常你会看到类似输出北京 今天晴转多云气温 20~28℃这个输出本身很简单但你要验证的不是结果对不对而是执行链路是否完整。一个 Agent 是否跑通建议按下面清单逐项判断决策是否被触发模型是否识别出用户问题需要调用工具。动作是否正确是否调用了预期工具而不是别的工具。参数是否合法如 JSON 参数能否正确解析城市名是否被正确抽取。工具返回值是否正确。最终回复是否基于工具结果生成而不是模型凭空编造。接入真实 API 后建议在代码里增加中间过程打印print(模型输出 tool_calls:, msg.tool_calls) print(工具执行结果:, weather_result) print(最终模型回复:, second_resp.choices[0].message.content)这样你就能清楚看到每一步发生了什么。运行失败时第一步永远先看中间打印而不是直接怀疑模型能力。另外建议记录一次请求的 token 使用量。通过 resp.usage 你可以看到 prompt_tokens 和 completion_tokens这能帮你判断问题是不是出在上下文过长或者输出过长。7. 常见问题与排查思路Agent 开发最消耗时间的不是写代码而是排错。下面这些问题是初学者几乎都会遇到的直接对照排查问题现象可能原因排查方式解决方案模型完全不调用工具工具描述不清晰或模型无法理解用户意图打印中间 Prompt 和 tool_calls看模型是否感知到工具优化工具 name 和 description必要时强制 tool_choice工具参数解析失败模型返回的 arguments 不是合法 JSON打印原始 arguments 字符串并 try/except 包裹在工具定义里写更严格的 properties必要时增加 JSON Schema 校验Token 超限或请求失败对话消息累积过多或单次输出过长查看 usage 中的 token 统计加滑动窗口、历史摘要、限制 max_tokensAgent 陷入死循环工具返回内容被模型反复当作新任务处理打印完整执行链统计循环次数设置最大轮数如 5 轮达到后强制结束或交给人工回答内容与工具结果无关工具结果没有正确回传或者被模型忽略检查是否追加了 roletool 消息按 5.2 节的流程把工具结果回传给模型请求频繁超时或限流并发过高或单次请求过重查看错误码和响应时间增加重试机制、限流、缓存模型调用做线程池控制工具执行了危险操作没有做权限控制模型误触发了危险函数检查工具执行日志使用白名单机制敏感工具必须人工确认后才执行这里想特别强调最后一行。如果你给 Agent 接了一个“执行 SQL”工具而 Agent 根据用户的一句话就可以直接删表这是极其危险的设计。Agent 只是一个会决策的程序它不理解业务风险。风险控制一定在系统层。8. Agent 工程化落地最佳实践与避坑建议能跑通 Demo 只是第一步真实项目里 Agent 要稳定运行还必须考虑下面几件事。第一结构化输出优先。不要让模型返回一段自由文本让你去解析而是定义好 JSON Schema让模型按结构输出。from pydantic import BaseModel class AgentDecision(BaseModel): action: str args: dict reasoning: str这样模型输出可以校验、可以落库也能方便地接进后续流程。第二工具权限最小化。给模型暴露工具时遵循“够用即可”的原则。只给当前任务需要的工具而且优先提供只读工具。需要写操作、删除操作的接口必须加人工确认步骤。第三上下文管理要提前设计。很多 Agent 到后期效果变差是因为对话历史无限累积模型被无关信息干扰还浪费 token。常见的做法有三种滑动窗口只保留最近若干轮对历史做摘要并压缩把不相关的历史交给子 Agent 处理。第四成本控制要分层。不是所有问题都需要最贵的模型。简单分类问题用轻量模型复杂推理和工具调用用强模型再配合缓存成本能下降很多。第五可观测性必须内置。Agent 的链路比普通接口长得多排查一个问题可能需要同时看模型输入、工具输出、执行顺序。建议把一次请求的完整决策链保存在日志或追踪系统里。{ trace_id: abc123, question: 北京今天天气怎么样, steps: [ {step: 1, type: llm, action: get_weather, args: {city: 北京}, tokens: 120}, {step: 2, type: tool, result: 晴22~26℃, cost_ms: 80} ], total_tokens: 350, total_cost: 0.002 }第六建立评测集。Agent 效果好不好不能靠“感觉还行”要把典型问题收集成评测集每次改 Prompt、换模型、加工具后跑一遍回归看通过率。第七Prompt 和工具定义也要做版本管理。很多团队只给代码上 Git但 Prompt 随便在平台上改改完出了问题不知道回滚到哪一版。正确的做法是把 Prompt、工具描述、模型配置全部纳入版本管理和代码一起发布。9. 学习路线与就业建议别只收藏视频真正跑一遍回到文章开头那个问题。面对“全748集”这类教程正确策略不是否定它而是不把它当成学习路径。你可以把它当作一个按需查阅的参考索引但在系统学习时你应该走一条更高效的路线。建议的学习节奏大致如下阶段学习内容时间参考输出成果阶段一Python 基础 虚拟环境 API 调用1 周能调用模型 API 并返回结果阶段二Prompt 工程 结构化输出1 周能稳定让模型输出符合要求的 JSON阶段三工具调用 ReAct 循环1 到 2 周完成第 5.2 节的 Function Calling 示例阶段四记忆管理 RAG2 周做一个能回答问题且能引用来源的问答 Agent阶段五选择一个框架深入1 到 2 周用框架重构上面的 Demo阶段六项目实战 评测持续完成一个真实场景 Agent并建立评测集这条路线最大的特点是每一步都有可运行的产出可以快速建立信心也能避免一直停留在看视频状态。关于就业我把话说得直接一些单纯看过教程、跑过 Demo距离就业还有距离。真实招聘要求的是你能在特定业务场景里把 Agent 做得稳定、安全、可维护。这意味着你最好至少有一个完整的开源项目或实际项目经历并且在项目里展示过你对工具调用、上下文管理、安全和评测的思考。如果你现在只有一小时我的建议不是去看播放列表而是先把 5.1 节那段最小 Agent 代码跑起来再把 5.2 节的 Function Calling 改成你自己的场景。跑通这两个示例之后你已经具备了 Agent 最核心的思维模型。这个底子比收藏 748 集视频要实在得多。
返回列表