
1. 从一份日报标题说起Agent 与 LLM 的工程化落地全景看到“Agent / LLM 技术精选日报”这个标题很多人第一反应是“又一个资讯聚合”。但如果你真正在一线做过 Agent 项目就会明白这类日报背后其实藏着一个非常现实的问题这个领域的信息密度太高、迭代太快快到什么程度快到上周还能跑通的工具调用链路这周因为某个模型接口的 schema 校验变严就直接报错快到昨天刚学会的编排范式今天社区里已经有人在讨论它的替代方案。所以一份日报的价值不在于“汇总”而在于帮从业者做减法——把噪音过滤掉留下真正能落到工程里的东西。我自己从 2023 年开始陆续接触 LLM 应用开发从最早的纯 prompt 拼接到后来的 RAG 检索增强再到现在的多 Agent 编排踩过的坑基本能写一本小册子。这篇内容我想借这个日报标题把 Agent 和 LLM 这两个方向当前最值得关注的技术点、工程实践和避坑经验系统性地梳理一遍。不管你是刚入门想知道 Agent 开发学习路线的新人还是已经在做 Agent 平台、LLM 网关、记忆系统这类基础设施的老手都能从里面找到对自己有用的部分。需要先说明的是Agent 和 LLM 虽然经常被放在一起说但它们其实是两个层次的东西。LLM 是能力底座是那个“会思考和生成”的大脑Agent 是在这个大脑之上加上了规划、工具调用、记忆、执行循环的一套系统。理解这个分层是后面所有讨论的前提。很多人一开始就把两者混为一谈结果在设计架构时把模型能力和系统能力搅在一起后期维护起来非常痛苦。2. Agent 与 LLM 的分层认知先搞清楚你在造什么2.1 LLM 到底是什么以及它不是什么LLM 大语言模型本质上是一个基于海量文本训练出来的概率模型它的核心能力是“给定上下文预测下一个 token”。这个定义听起来简单但它决定了很多工程上的边界。比如它本身没有持久记忆每次对话都是无状态的它没有真正的“事实核查”能力生成的内容可能是幻觉它不能主动执行任何操作只能输出文本。我见过不少团队在项目初期对 LLM 抱有不切实际的期待觉得“模型这么强应该什么都能干”。结果一到具体场景就发现模型在需要精确计算、需要访问实时数据、需要执行多步操作的任务上表现很不稳定。这不是模型不行而是你把不该它干的活派给它了。LLM 擅长的是理解意图、生成内容、做模糊推理不擅长的是精确计算、状态管理、确定性执行。搞清楚这条分界线后面的架构设计就顺了。关于“LLM 是否属于深度学习”这个问题其实是个概念层级问题。深度学习是一个大的技术范畴LLM 是基于 Transformer 架构、用深度学习的方法训练出来的具体产物。所以 LLM 属于深度学习的一个应用方向但深度学习不等于 LLM。这个区分在面试或者写技术文档时经常被问到值得留意。2.2 Agent 的本质给 LLM 装上手脚和记忆Agent 智能体的核心思路是把 LLM 当作一个推理引擎然后在它周围搭建一套完整的执行系统。这套系统通常包含几个关键模块规划模块负责把复杂任务拆解成子任务工具调用模块负责让模型能操作外部世界记忆模块负责保存和检索历史信息执行循环负责驱动整个流程往前走。用生活化的类比来说LLM 像是一个知识渊博但只能坐在房间里说话的顾问而 Agent 是给这个顾问配了电话、电脑、笔记本和一双腿让他能真正去办事。顾问本身的水平决定了上限但配套系统决定了这些能力能不能被真正用出来。这里有个很容易被忽略的点Agent 的“智能”不完全来自模型。一个设计良好的 Agent 系统即使底层模型不是最强的也能通过合理的任务拆解、工具设计和错误恢复机制完成相当复杂的任务。反过来一个设计糟糕的 Agent哪怕用最好的模型也会因为工具描述不清、上下文管理混乱而频繁失败。这就是为什么 Agent 框架与编排这个方向值得单独研究。2.3 为什么现在这个时间点特别关键当前 Agent 领域正处在一个从“demo 能跑”到“生产可用”的过渡期。早期大家做 Agent 更多是玩票性质展示一下“模型能自己调用工具”就很惊艳了。但现在越来越多的团队在问怎么让 Agent 稳定运行几千次不出错怎么控制 token 成本怎么在 Agent 执行出错时优雅恢复这些问题才是真正决定项目能不能上线的关键。从热词里能看到一些很有意思的信号比如“agent execution terminated due to error”这种报错信息被频繁搜索说明大量开发者正在真实地踩这个坑。还有“llm request failed: provider rejected the request schema or tool payload”这类问题反映的是工具调用协议在实际对接中的兼容性挑战。这些都不是理论问题而是每天都会遇到的工程现实。3. Agent 架构设计的核心决策点3.1 单 Agent 还是多 Agent别为了架构而架构这是每个 Agent 项目都会面临的第一个架构决策。单 Agent 方案简单直接一个模型加上一组工具通过 prompt 控制行为。多 Agent 方案则是把任务拆给多个专职 Agent每个 Agent 有自己的角色、工具和上下文。我的经验是除非任务确实需要不同角色之间的协作和对抗否则优先选单 Agent。多 Agent 带来的复杂度是成倍增长的——Agent 之间的通信协议、上下文传递、冲突解决、状态同步每一项都是坑。很多团队一开始就上多 Agent结果发现调试成本高得离谱最后又退回单 Agent。那什么时候真的需要多 Agent典型场景包括需要不同专业视角互相审查的任务比如代码生成加代码审查、需要并行处理独立子任务的场景、以及需要模拟多方对话的场景。判断标准很简单如果把这些角色合并成一个 Agent 用不同 prompt 切换也能做那就别拆。3.2 工具设计Agent 能力的天花板工具是 Agent 和外部世界交互的接口工具设计的质量直接决定了 Agent 能干什么、干得好不好。我见过太多项目在工具设计上偷懒结果模型频繁调用错误或者传错参数。好的工具设计有几个原则。第一工具描述要精确且包含使用场景不能只写“查询数据库”而要写清楚“根据用户 ID 查询订单信息适用于用户询问订单状态、物流进度等场景”。第二参数设计要扁平化避免深层嵌套的复杂结构因为模型对复杂 schema 的处理能力有限。第三工具数量要克制一次给模型暴露的工具最好控制在 10 到 20 个以内太多会导致选择困难。提示工具描述里的每一个字都会占用 token而且会进入每次调用的上下文。所以描述要精确但不能啰嗦这个平衡需要反复调试。3.3 记忆系统Agent 的长期竞争力Agent 记忆是当前最活跃的研究方向之一。短期记忆好解决就是对话历史塞进上下文就行。难的是长期记忆——怎么让 Agent 记住几周前用户说过的话怎么在需要的时候精准检索出相关记忆怎么处理记忆的更新和遗忘。目前主流的做法是把记忆分成几类事实性记忆用户的基本信息、偏好、情景记忆过去发生的事件、语义记忆领域知识。存储上用向量数据库做语义检索用结构化存储做精确查询两者结合。检索时先用向量召回一批候选再用重排序模型精排最后把最相关的几条注入上下文。热词里提到的“a-memguard: a proactive defense framework for llm-based agent memory”这个方向值得关注它讨论的是 Agent 记忆的安全问题。记忆系统如果被污染Agent 的行为可能被恶意引导这在生产环境里是个真实风险。比如攻击者在对话中植入一条虚假记忆后续 Agent 就可能基于这条假记忆做出错误决策。3.4 执行循环与错误恢复Agent 的执行循环通常是这样接收输入模型推理决定下一步动作执行动作把结果反馈给模型继续推理直到任务完成或达到终止条件。这个循环看起来简单但错误处理是真正的难点。常见的错误类型包括工具调用参数错误、工具执行超时、模型输出格式不符合预期、上下文超长、外部服务不可用。每种错误都需要不同的恢复策略。参数错误可以让模型重试并给出更明确的提示超时需要设置合理的超时和降级方案格式错误需要在 prompt 里强化格式约束必要时加输出解析的容错逻辑。我自己的做法是在执行循环里加一个“反思”步骤每次工具调用失败后让模型先分析失败原因再决定下一步而不是盲目重试。这个改动让 Agent 的成功率提升了不少代价是多消耗一些 token。4. LLM 工程化的关键环节4.1 模型选型没有最好只有最合适选模型这件事很多人一上来就看各种公开榜单比如 open llm leaderboard 之类的排名。榜单有参考价值但不能直接决定选型。因为榜单测的是通用能力而你的场景可能对某些特定能力有强需求。选型时我会从几个维度评估任务匹配度模型在你场景的实测表现、成本每百万 token 的价格、延迟首 token 时间和生成速度、上下文长度能不能放下你的长文档、部署方式API 调用还是本地部署、以及稳定性服务可用性和限流策略。对于需要本地部署的场景ONNX 部署 LLM 模型是个常见选择它能跨平台运行推理性能也不错。但要注意模型转换过程中的算子兼容性问题有些自定义算子可能在转换时丢失导致精度下降。转换后一定要做充分的对比测试。4.2 LLM 网关统一入口的价值当项目里用到多个模型时LLM 网关就成了必需品。它的核心作用是统一不同模型的接口差异让上层应用不用关心底层用的是哪家模型。网关通常还承担负载均衡、限流、缓存、日志、成本统计等职责。自己搭网关还是用现成的如果团队规模不大、需求简单用现成的开源方案能省很多事。但如果对成本控制、审计日志、私有化部署有强需求自建网关更可控。自建时要注意几个点接口设计要兼容主流模型的调用格式方便切换要支持流式输出这是用户体验的关键要做好错误码的统一映射不然上层处理起来会很乱。4.3 RAG 与 LLM Wiki知识注入的两条路RAG 检索增强生成是给 LLM 注入外部知识的经典方案。它的流程是把文档切块、向量化、存入向量库查询时检索相关块拼进 prompt 让模型基于这些内容回答。RAG 的优点是知识更新方便不用重新训练模型缺点是检索质量直接影响回答质量检索不到就答不好。LLM Wiki 这个方向最近讨论很多Karpathy 也提过类似的想法。它的思路和传统 RAG 有些不同更强调结构化的知识组织和本体ontology的构建。传统 RAG 是把文档切碎做向量检索而 LLM Wiki 更倾向于维护一个结构化的知识库让模型能理解知识之间的关系。GraphRAG 就是往这个方向走的一种实践它用图结构组织知识检索时能沿着关系链找到更相关的信息。热词里“rag graphrag llm wiki 本体rag”这几个词放在一起其实反映的就是这个趋势从扁平的向量检索走向结构化的知识图谱检索。两种方案各有适用场景简单问答用传统 RAG 就够了需要多跳推理的复杂问题才值得上 GraphRAG。4.4 Token 的三个关键问题热词里有个很有意思的表述“llm的token三个点key我是谁、query我在找什么、value我能提供什么”。这其实是在用 key-query-value 的框架理解 token 在注意力机制里的角色。简单说每个 token 在注意力计算中会生成三个向量query 表示“我在找什么信息”key 表示“我是什么信息”value 表示“我能提供什么信息”。注意力权重就是 query 和 key 的匹配程度输出是 value 的加权和。理解这个机制对工程实践有实际帮助。比如为什么长上下文里中间部分的信息容易被忽略因为注意力分布的问题。为什么 prompt 里重要的指令要放在开头或结尾也是因为注意力权重的位置偏好。这些不是玄学而是有机制层面的解释。5. 实操从零搭一个可用的 Agent 项目5.1 环境准备与依赖选择假设我们要搭一个能查资料、能做简单计算的 Agent。技术栈上Python 是主流选择框架可以用 LangChain、LlamaIndex 或者自己写。我的建议是第一个项目不要用重框架自己用原生 API 写一遍把执行循环、工具调用、上下文管理这些核心逻辑亲手实现一遍理解会深很多。依赖方面需要模型 API 的 SDK、一个向量库如果用 RAG、以及一些工具库。环境隔离用 venv 或 conda 都行关键是版本要锁死LLM 生态的库更新太快不锁版本很容易出现“昨天还能跑今天就不行”的情况。python -m venv agent-env source agent-env/bin/activate pip install openai numpy requests5.2 核心执行循环的实现执行循环是整个 Agent 的心脏。核心逻辑是把用户输入和工具描述一起发给模型模型返回要么是最终答案要么是一个工具调用请求如果是工具调用执行工具把结果追加到对话历史再次调用模型循环直到模型返回最终答案或达到最大轮数。def run_agent(user_input, tools, max_turns10): messages [{role: system, content: SYSTEM_PROMPT}, {role: user, content: user_input}] for turn in range(max_turns): response call_llm(messages, toolstools) if response.has_tool_call: result execute_tool(response.tool_call) messages.append(response.message) messages.append({role: tool, content: result}) else: return response.content return 达到最大轮数限制这段代码看起来简单但每一行背后都有决策。比如 max_turns 设多少设太小复杂任务做不完设太大可能陷入死循环还烧 token。我的经验是 8 到 12 轮比较合适同时要加一个总 token 预算的限制双保险。5.3 工具调用的参数校验模型生成的工具调用参数经常有问题比如类型不对、必填项缺失、值超出范围。直接把这些参数传给工具函数轻则报错重则产生副作用。所以参数校验这一层不能省。我的做法是用 Pydantic 定义每个工具的参数 schema模型返回后先过一遍校验不通过就把错误信息返回给模型让它修正。这个“校验-反馈-修正”的循环能显著提升工具调用的成功率。from pydantic import BaseModel, Field class SearchParams(BaseModel): query: str Field(..., description搜索关键词) top_k: int Field(5, ge1, le20, description返回结果数量) def search(params: dict): validated SearchParams(**params) return do_search(validated.query, validated.top_k)5.4 上下文管理与成本控制Agent 跑多轮之后上下文会越来越长token 成本直线上升而且超长上下文还会影响模型表现。所以上下文管理是必须做的。策略上可以保留系统提示和最近几轮对话中间的历史做摘要压缩。摘要用便宜的小模型来做把多轮对话压缩成一段简短描述。工具返回的结果如果很长也要截断或摘要只保留关键信息。这些处理看起来琐碎但对控制成本至关重要。我做过对比加了上下文压缩之后同样的任务 token 消耗能降 40% 以上。6. 常见问题与排查实录6.1 工具调用相关的典型故障“llm request failed: provider rejected the request schema or tool payload”这个报错非常常见原因通常是工具 schema 不符合模型服务商的规范。比如某些服务商不支持嵌套的 object 类型参数或者对 enum 的写法有特定要求。排查方法是先看服务商的文档确认 schema 支持的范围然后简化工具定义。另一个高频问题是模型不调用工具直接编造答案。这通常是因为工具描述不够清晰或者系统提示里没有强调“必须使用工具获取信息”。解决办法是在系统提示里明确要求并在工具描述里写清楚适用场景。6.2 Agent 执行中断的排查思路“agent execution terminated due to error”这类问题排查起来要有条理。我的排查顺序是先看错误发生在哪一步模型调用、工具执行、还是结果解析再看具体错误信息然后复现最小案例。常见原因包括模型返回的 JSON 格式不合法导致解析失败、工具执行抛异常没有捕获、上下文超长被截断、以及网络超时。每一种都有对应的处理方式。JSON 解析失败要加容错解析工具异常要加 try-catch 并返回友好错误上下文超长要做压缩网络超时要加重试和降级。6.3 问题速查表问题现象可能原因排查方向解决思路模型不调用工具工具描述不清、系统提示缺失检查工具描述和系统提示强化描述明确要求使用工具工具参数错误schema 定义不严、模型理解偏差查看模型返回的原始参数加参数校验和反馈修正循环执行中断异常未捕获、超时、格式错误定位中断发生的步骤加异常处理、超时重试、容错解析上下文超长历史累积、工具返回过长统计每轮 token 数摘要压缩、结果截断回答质量下降检索不准、上下文污染检查检索结果相关性优化检索、清理无关上下文6.4 几个踩过的坑第一个坑是过度依赖模型的“自觉性”。早期我总觉得把要求写进 prompt 模型就会遵守后来发现模型对指令的遵守是有概率的关键约束必须用代码层面强制不能只靠 prompt。第二个坑是忽略工具执行的幂等性。Agent 在重试时可能重复调用同一个工具如果工具不是幂等的比如下单、发消息就会产生重复副作用。所以工具设计时要考虑幂等或者加去重逻辑。第三个坑是日志不完整。Agent 出问题时如果没有完整的调用链日志排查起来就是盲人摸象。建议从第一天就把每轮的输入、输出、工具调用、耗时都记下来后期排查会省很多时间。7. 学习路线与进阶方向7.1 新手入门路径如果是刚接触 Agent 开发我建议的顺序是先理解 LLM 的基本调用方式学会写 prompt 和调 API然后实现一个最简单的工具调用 demo理解 function calling 的机制接着自己手写一个执行循环不依赖框架最后再去看主流框架的源码理解它们怎么解决工程问题。吴恩达的 Agent 教程是个不错的起点它把核心概念讲得很清楚。但光看教程不够一定要动手写。Agent 开发里很多问题只有自己踩过才有体感比如上下文管理、错误恢复这些看别人写觉得简单自己做才知道细节有多磨人。7.2 进阶方向选择有一定基础之后可以往几个方向深入。一个是 Agent 安全包括 prompt 注入防御、记忆污染检测、工具调用权限控制这个方向随着 Agent 上生产会越来越重要。另一个是 Agent 记忆系统怎么设计高效的长期记忆怎么做记忆的检索和更新这是提升 Agent 能力的关键。还有 Agent 编排多 Agent 协作的协议和框架设计适合做平台方向的同学。7.3 值得持续关注的方向从当前的技术趋势看几个方向值得持续投入。结构化知识注入LLM Wiki、GraphRAG、本体 RAG会逐渐替代简单的向量 RAG因为复杂场景需要更精准的知识检索。Agent 的可观测性和评测体系也会越来越重要没有评测就没法迭代。还有垂直领域的 Agent 落地比如医疗、法律、金融这些知识密集行业Agent 能发挥的价值很大但对准确性和安全性的要求也更高。热词里提到的“llm驱动的公立医院债务风险智能预警与化解策略研究”和“中药处方审核 llm”就是典型的垂直落地案例。这类项目的难点不在模型本身而在领域知识的准确注入和业务逻辑的严谨对接。做这类项目领域专家的参与比模型调优更重要。8. 一些个人体会做 Agent 和 LLM 相关项目这两年最大的感受是这个领域没有银弹。每个方案都有它的适用边界每个工具都有它的坑。网上那些“三行代码实现 Agent”的教程展示的是理想情况真实项目里的复杂度要高一个数量级。另一个体会是工程能力比模型能力更决定项目成败。同样的模型有人做出来能用有人做出来天天报错差别就在工程细节上——错误处理、上下文管理、参数校验、日志监控这些不性感但极其重要。最后分享一个小技巧做 Agent 项目时先别急着接真实工具用 mock 工具把整个流程跑通确认执行循环、错误处理、上下文管理都没问题再逐个替换成真实工具。这样能把系统问题和工具问题分开排查效率高很多。我早期就是急着接真实 API结果一出问题就分不清是循环逻辑错了还是 API 调用错了浪费了不少时间。