AI Agent 的工程化实践全景图:从 prompt 工程到系统架构的完整知识体系
AI Agent 的工程化实践全景图从 prompt 工程到系统架构的完整知识体系一、从调 API到造 Agent的认知跃迁今年 4 月我以为我已经懂了 AI Agent。毕竟我能用 langchain 搭一个简单的聊天机器人能调用工具能维护对话历史——这不就是 Agent 吗5 月份我把这个Agent集成到 dayuan 里作为智能文件搜索功能。用户说帮我找到最近一周修改过的、和数据库连接相关的配置文件。我的 Agent 的思考过程是理解用户意图 ✅决定调用find工具 ✅参数填错了--name写成了--pattern❌工具调用失败后不知道重试 ❌返回给用户一句没有找到相关文件 ❌那天晚上我读了一篇论文——Stanford 的《Generative Agents》里面有一句话点醒了我Agent 与简单 LLM 调用的核心区别在于Agent 有内部状态和自主决策能力**。**我的理解一直停留在把 LLM 的输出当命令来执行的层面而真正的 Agent 需要的是记忆、规划、反思、纠错——这些不只是代码逻辑更是系统架构。这篇文章是我从 4 月到 7 月从调 API 到设计和实现 dayuan Agent 系统的完整知识地图。二、AI Agent 的五层架构三、逐层拆解dayuan 的 Agent 实现第 1 层Prompt 工程 —— 不是写一段话是设计行为规范很多人理解的 prompt 工程是调几个形容词让 AI 回答得更好。但 Agent 的 System Prompt 是它的宪法——定义了 Agent 是谁、能做什么、不能做什么、决策框架是怎样的。/// dayuan 的 Agent System Prompt 结构 pub struct AgentPrompt { /// 角色定义Agent 的身份和职责边界 role: String, /// 能力边界Agent 能做什么更重要的是——不能做什么 capabilities: VecCapability, /// 工具使用协议如何使用工具、如何解释工具输出 tool_use_protocol: String, /// 输出格式要求期望 Agent 以什么格式输出 output_format: OutputFormat, /// 行为约束安全规则和伦理限制 constraints: VecConstraint, } impl AgentPrompt { /// 生成最终的 System Prompt /// 关键设计原则 /// ① 角色定义在前建立稳定的行为基线 /// ② 工具描述用 JSON Schema让 LLM 精确理解参数 /// ③ 行为约束用 MUST / MUST NOT不模糊 pub fn build_system_prompt(self) - String { format!( 你是一个 {role}。\n\ \n\ 你的职责\n\ {capabilities}\n\ \n\ 工具使用规则\n\ {tool_protocol}\n\ \n\ 行为约束违反将导致输出被拒绝\n\ {constraints}\n\ \n\ 输出格式{output_format}, role self.role, capabilities self.format_capabilities(), tool_protocol self.tool_use_protocol, constraints self.format_constraints(), output_format self.output_format.to_instruction(), ) } }第 2 层工具集成 —— MCP 协议的统一接口工具的定义不能只是一段自然语言描述。LLM 需要精确知道工具名、参数类型、参数约束。我选择了 MCPModel Context Protocol作为 dayuan 的工具集成标准。/// MCP 工具定义用 JSON Schema 精确描述工具 #[derive(Debug, Serialize, Deserialize)] pub struct ToolDefinition { /// 工具唯一标识名 pub name: String, /// 人类可读的描述 pub description: String, /// 参数 JSON Schema pub input_schema: serde_json::Value, } /// 文件搜索工具的 MCP 定义 pub fn file_search_tool() - ToolDefinition { ToolDefinition { name: search_files.to_string(), description: 在项目目录中搜索匹配模式的文件返回文件路径列表.to_string(), input_schema: serde_json::json!({ type: object, properties: { pattern: { type: string, description: glob 搜索模式如 **/*.rs 或 src/**/*.toml }, content_regex: { type: string, description: 可选的文件内容正则匹配如 database.*connect }, max_results: { type: integer, default: 20, description: 返回的最大文件数 } }, required: [pattern] // pattern 是必填参数 }), } } /// 工具调用执行器解析 LLM 的工具调用请求 → 执行 → 返回结果 pub async fn execute_tool_call( tool_name: str, arguments: serde_json::Value, project_root: Path, ) - ResultToolResult, ToolError { match tool_name { search_files { // ① 解析参数 let pattern arguments[pattern] .as_str() .ok_or(ToolError::MissingArg(pattern))?; // ② 执行搜索 let files glob_search(project_root, pattern)?; // ③ 可选内容过滤 let files if let Some(regex) arguments.get(content_regex) { filter_by_content(files, regex.as_str().unwrap())? } else { files }; // ④ 限制结果数量避免上下文过载 let max arguments[max_results].as_u64().unwrap_or(20) as usize; let files: Vec_ files.into_iter().take(max).collect(); Ok(ToolResult { success: true, data: serde_json::to_value(files)?, summary: format!(找到 {} 个匹配文件, files.len()), }) } _ Err(ToolError::UnknownTool(tool_name.to_string())), } }第 3 层记忆系统 —— ReAct 循环中的状态管理Agent 不是无状态的函数调用。它需要记住我刚才问了什么、刚才那步操作的结果是什么、用户的历史偏好是什么。/// Agent 的工作记忆ReAct 循环中的状态 pub struct AgentMemory { /// 对话历史支持滑动窗口避免 token 超限 messages: VecDequeChatMessage, /// 当前任务上下文本次任务的关键信息 task_context: TaskContext, /// 工具调用历史上次调了什么、什么结果 tool_call_history: VecToolCallRecord, /// 最大对话轮数防止无限循环 max_turns: usize, } impl AgentMemory { /// 添加一轮对话超出上限自动裁剪最早的 pub fn push_message(mut self, msg: ChatMessage) { self.messages.push_back(msg); // 滑动窗口超出上限时从最早的消息开始裁剪 // 但保留 System Prompt第一条消息 while self.messages.len() self.max_turns { if self.messages.len() 1 { self.messages.remove(1); // 跳过 index 0 的 System Prompt } } } /// 构建发给 LLM 的消息历史 pub fn build_context(self, current_task: str) - VecChatMessage { let mut context: VecChatMessage self.messages.iter().cloned().collect(); // 注入当前任务的额外上下文 context.push(ChatMessage::system(format!( 当前任务上下文项目 {project}分支 {branch}, project self.task_context.project_name, branch self.task_context.current_branch, ))); context } } /// 工具调用记录供 Agent 反思和纠错 #[derive(Debug, Clone)] pub struct ToolCallRecord { pub tool_name: String, pub arguments: serde_json::Value, pub result: ToolResult, pub timestamp: chrono::DateTimechrono::Utc, pub retry_count: u32, }第 4 层推理与规划 —— 让 Agent 先想再做这是 Agent 和简单 LLM 调用最大的分水岭。传统的用户问 → LLM 答是单步推理而 Agent 需要分析意图用户到底想要什么分解任务这个问题需要分几步选择工具每步需要用什么工具执行并观察工具返回了什么反思并调整结果对吗需要重试吗汇总输出把中间步骤的结果整合成用户的答案这个过程就是ReAct (Reasoning Acting)循环。/// ReAct 循环Agent 的核心决策逻辑 pub async fn react_loop( agent: mut Agent, user_input: str, memory: mut AgentMemory, ) - ResultString, AgentError { // 添加用户消息到记忆 memory.push_message(ChatMessage::user(user_input)); for turn in 0..memory.max_turns { // ① 构建上下文包括历史、任务信息、可用工具列表 let context memory.build_context(user_input); let tools agent.get_available_tools(); // ② 调用 LLM 获取下一个动作 let response agent.llm.chat_with_tools(context, tools).await?; match response.action { // ③ 如果 LLM 认为任务已完返回最终答案 AgentAction::FinalAnswer(answer) { memory.push_message(ChatMessage::assistant(answer)); return Ok(answer); } // ④ 如果 LLM 需要调用工具执行工具并记录结果 AgentAction::ToolCall { name, arguments } { let result execute_tool_call(name, arguments, agent.project_root).await; // 记录工具调用 memory.tool_call_history.push(ToolCallRecord { tool_name: name.clone(), arguments: arguments.clone(), result: result.clone(), timestamp: chrono::Utc::now(), retry_count: 0, }); // 将工具执行结果作为新的消息注入记忆 memory.push_message(ChatMessage::tool_result(name, result)); } } } Err(AgentError::MaxTurnsExceeded(memory.max_turns)) }第 5 层多 Agent 协作 —— dayuan 的三角色模式dayuan 的设计中有三个专业化 Agent四、我在 Agent 工程化中踩过的最大的三个坑坑一工具描述写得太模糊。LLM 需要精确的 JSON Schema而不是用 find 命令搜索文件。模糊描述会导致 LLM 编造参数、遗漏必填项。坑二没有设置最大步数。一次用户说帮我重构整个项目Agent 跑了一个小时还没停产生了 200 次工具调用。现在 dayuan 默认最大 15 步超出就问用户要继续吗坑三工具输出太大。搜索工具返回了 500 个文件路径把上下文窗口直接撑爆。现在每个工具返回都带truncated标志和结果数量限制。五、总结从调 API 到造 Agent核心的认知跃迁是Agent 不是更聪明的 LLM而是被 LLM 驱动的软件系统。这意味着你需要考虑的不仅是 prompt 怎么写还有状态管理、错误恢复、资源限制、安全边界——这些是系统架构的问题不是 NLP 的问题。对于同学我的建议是不要一上来就做多 Agent 系统。从 ReAct 循环开始——一个 LLM 两个工具 对话记忆——把这个最简系统调稳了再往上叠复杂度。所有伟大的框架LangChain、AutoGPT、CrewAI底层都是同样的核心循环。理解这个循环你就理解了 Agent 的本质。资料说明本文中的协议、版本、性能、成本和行业趋势应以可核验的一手资料为准。未标注统计口径的比例、时间表和预测仅作工程讨论不应视为行业事实。可参考 0731 资料来源索引并在发布前将具体来源贴到对应断言之后。

相关新闻

3个核心问题,让您的旧Mac重获新生:OpenCore Legacy Patcher终极解决方案

3个核心问题,让您的旧Mac重获新生:OpenCore Legacy Patcher终极解决方案

3个核心问题,让您的旧Mac重获新生:OpenCore Legacy Patcher终极解决方案 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为苹果官…

2026/7/31 20:14:29阅读更多 →
如何高效部署Ohook:5步实现Office订阅版完整功能激活

如何高效部署Ohook:5步实现Office订阅版完整功能激活

如何高效部署Ohook:5步实现Office订阅版完整功能激活 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.com/gh_mirrors/oh/ohook …

2026/7/31 20:14:29阅读更多 →
20260730金融科技动向:Identifi文档管理系统

20260730金融科技动向:Identifi文档管理系统

20260730金融科技动向墨鱼团,你们好呀。点赞/收藏/关注,和小浅一起来探寻比早更早的金融科技动向吧~行业动态 1、Identifi文档管理系统 行业动态 1、Identifi文档管理系统 亮点:(1)文档上传时,AI识别签名等…

2026/7/31 20:14:29阅读更多 →
一个完整预测项目的落地之道:从数据到价值的实战拆解

一个完整预测项目的落地之道:从数据到价值的实战拆解

这是我们这个系列的最后一讲。前面七篇,我们从思想基石聊到具体算法,从经典统计聊到深度学习,从模型评估聊到不确定性。在收官的这一篇里,我想跳出算法细节,站在项目全景的视角,完整拆解一个预测项目从零到…

2026/7/31 21:27:13阅读更多 →
如何让旧款Mac重获新生:OpenCore Legacy Patcher零基础安装指南

如何让旧款Mac重获新生:OpenCore Legacy Patcher零基础安装指南

如何让旧款Mac重获新生:OpenCore Legacy Patcher零基础安装指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还记得那台陪伴你多年的MacBook吗…

2026/7/31 21:27:13阅读更多 →
手把手教你运行OmniGlue demo:5分钟生成精准图像匹配结果

手把手教你运行OmniGlue demo:5分钟生成精准图像匹配结果

手把手教你运行OmniGlue demo:5分钟生成精准图像匹配结果 【免费下载链接】omniglue Code release for CVPR24 submission OmniGlue 项目地址: https://gitcode.com/gh_mirrors/om/omniglue OmniGlue是CVPR24提交的图像匹配项目,能快速实现不同场…

2026/7/31 21:27:13阅读更多 →
如何用AI解放你的视频剪辑时间:FunClip让语音识别成为你的剪辑助手

如何用AI解放你的视频剪辑时间:FunClip让语音识别成为你的剪辑助手

如何用AI解放你的视频剪辑时间:FunClip让语音识别成为你的剪辑助手 【免费下载链接】FunClip FunASR-powered video transcription, subtitle generation, and LLM-assisted clipping tool with a local Gradio UI. 项目地址: https://gitcode.com/GitHub_Trendin…

2026/7/31 21:27:13阅读更多 →
我国启动大模型IPv6能力提升专项行动,装修时家庭网络该怎样提前布线?

我国启动大模型IPv6能力提升专项行动,装修时家庭网络该怎样提前布线?

2026年7月28日,人工智能大模型IPv6能力提升专项行动在雄安新区启动。根据中国网信网发布的信息,该行动将推动IPv6从规模部署向全面赋能跨越;数字中国建设峰会网站介绍,行动为期一年,涉及大模型应用、基础设施支持和API…

2026/7/31 21:27:13阅读更多 →
7月自动化运维能力自评:脚本编排、CI/CD与GitOps的熟练度矩阵与8月提升方向

7月自动化运维能力自评:脚本编排、CI/CD与GitOps的熟练度矩阵与8月提升方向

7月自动化运维能力自评:脚本编排、CI/CD与GitOps的熟练度矩阵与8月提升方向 自动化运维能力是现代运维工程师的核心竞争力。2026年7月,笔者对自身的自动化运维能力进行了系统性自评,涵盖脚本编排、CI/CD、GitOps三大核心领域,构建…

2026/7/31 21:25:12阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/31 20:44:05阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/31 17:41:43阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/31 20:44:05阅读更多 →
物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:40阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:41阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/31 0:49:33阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/31 5:08:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/31 16:02:17阅读更多 →