Agent与LLM日报实践:框架选型、记忆机制与本地部署的工程化思考
1. 从一份日报的选题逻辑说起:为什么Agent与LLM值得每天盯
做技术内容的人都有一个共同的困扰:信息太多,但真正值得花时间的东西太少。尤其是Agent和LLM这两个方向,几乎每天都有新项目冒出来,今天是某个开源框架发了新版本,明天是某篇论文提出了新的记忆机制,后天又冒出一个号称能解决幻觉问题的工具链。如果每一篇都追,时间根本不够用;如果完全不追,又怕错过真正重要的转折点。
我做Agent和LLM方向的跟踪已经有一段时间了,最开始也是眉毛胡子一把抓,RSS订阅了几十个源,每天刷到凌晨。后来发现效率极低,因为大量内容是同质化的——同一个技术点被不同的人反复讲,真正有新意的可能一周也就那么两三篇。于是我开始用日报的形式做筛选和沉淀,把每天看到的东西快速过一遍,只留下那些有实际参考价值的,再附上自己的判断和备注。这份2026-09-23的日报,就是这种工作方式的产物。
这份日报的核心价值不在于“汇总”,而在于“筛选”和“判断”。它面向的是正在做Agent开发、LLM应用落地、或者正在选型技术栈的从业者。你可能正在纠结用哪个框架、记忆模块怎么设计、RAG和Wiki知识库怎么选、本地部署用什么方案,这些问题在日报里都会涉及。我不会只告诉你“今天有什么新东西”,而是会告诉你“这个东西解决了什么问题、适合什么场景、有什么坑”。
下面我按几个核心主题来展开,每个主题都是我在实际跟踪和实操中积累的判断,不是简单的新闻搬运。
2. Agent框架的选型困局:从“能跑”到“能维护”之间隔着什么
2.1 框架泛滥背后的真实问题
Agent框架的数量在过去一年里翻了不止一倍。你随便搜一下就能看到十几个名字,每个都号称自己是最优解。但实际用下来会发现,大部分框架的差异并没有宣传的那么大。真正拉开差距的,是工程化程度和可维护性。
我自己的判断标准很简单:一个Agent框架能不能在两周内从Demo跑到生产环境。很多框架在Demo阶段表现很好,一旦要接入真实业务、处理异常情况、做日志追踪,就开始暴露问题。比如工具调用的错误处理、多轮对话的状态管理、并发请求下的资源竞争,这些在Demo里根本不会遇到,但在生产环境里是每天都要面对的。
选框架的时候,我建议先问自己三个问题:第一,我的Agent需要调用多少外部工具?如果超过五个,框架的工具编排能力就非常关键。第二,我的对话轮次有多长?如果超过二十轮,记忆管理和上下文压缩就是核心。第三,我需不需要做可观测性?如果要上生产,日志、追踪、回放这些能力必须原生支持,而不是自己硬写。
2.2 编排层与执行层的分离趋势
最近看到一个比较明显的趋势是,Agent框架开始把编排层和执行层拆开。编排层负责决策——下一步该做什么、调用哪个工具、怎么组合;执行层负责干活——实际调用API、处理返回结果、做格式转换。这种分离的好处是,编排逻辑可以独立测试和迭代,执行层可以按需替换。
举个例子,你用一个框架做编排,但执行层可以换成另一个更轻量的运行时。这样当你的业务从原型阶段进入规模化阶段时,不需要把整个框架换掉,只需要替换执行层。这种设计思路在最近几个新出的框架里都能看到影子,我觉得这是Agent框架走向成熟的一个标志。
实际选型的时候,你可以重点看框架有没有提供清晰的编排接口和执行接口。如果所有逻辑都揉在一起,后期维护会很痛苦。我踩过这个坑:早期用一个框架做客服Agent,所有工具调用逻辑都写在主流程里,后来要加一个工具,改了十几处代码,还引入了两个bug。后来换成编排和执行分离的架构,加工具只需要注册一个新的执行器,编排层几乎不用动。
2.3 从“Agent for Beginner”到“Agent开发学习路线”的路径设计
很多刚接触Agent开发的人会问:我该从哪里开始?我的建议是,不要一上来就啃框架源码,也不要直接看最复杂的多Agent协作案例。正确的路径是:先用一个最简单的框架跑通一个单Agent加两三个工具的场景,理解Agent的基本循环——感知、决策、执行、反馈。然后逐步增加复杂度:加记忆、加多轮对话、加错误处理、加并发。
具体来说,第一阶段用两三天时间,找一个文档最全的框架,跑通一个天气查询或者待办事项管理的Agent。第二阶段用一周时间,给这个Agent加上对话历史管理和简单的工具错误重试。第三阶段再花一周,尝试接入一个真实的API,处理认证、限流、超时这些实际问题。走完这三步,你对Agent开发的理解会比看十篇教程都扎实。
日报里提到的“Agent开发学习路线”和“Agent for Beginner”这类内容,价值就在于帮你省去筛选路径的时间。但路线是别人的,节奏得自己把握。我见过有人三天换一个框架,最后哪个都没跑通;也见过有人用一个框架死磕到底,反而积累了大量实战经验。我的建议是,选定一个框架至少用一个月,把它的文档、示例、issue都翻一遍,再考虑换。
3. LLM Wiki知识库与RAG的边界:什么时候该用哪个
3.1 Wiki知识库解决的是“结构化沉淀”问题
LLM Wiki这个概念最近被讨论得很多,但很多人没搞清楚它和RAG的区别。简单说,RAG解决的是“从大量非结构化文本里检索相关信息”的问题,而Wiki知识库解决的是“把知识结构化地组织起来,让LLM能更高效地理解和引用”的问题。
举个例子,假设你有一个产品文档库,里面有几百篇文档。用RAG的话,用户问一个问题,系统会去检索最相关的几段文本,拼到Prompt里让LLM回答。这种方式的问题是,检索到的片段可能是零散的,缺乏上下文,LLM容易断章取义。而Wiki知识库的做法是,先把这些文档整理成结构化的条目,每个条目有明确的标题、摘要、关联链接,LLM在回答时可以沿着链接跳转,获取更完整的上下文。
我实际测试下来,对于知识密度高、关联性强的场景,Wiki知识库的效果明显好于纯RAG。比如技术文档、产品手册、内部流程规范这类内容,用Wiki的方式组织,LLM的回答准确率能提升不少。但对于开放域问答或者大量非结构化文本的场景,RAG仍然是更合适的选择,因为Wiki的整理成本太高了。
3.2 GraphRAG与本体RAG的适用场景
日报里提到了“RAG GraphRAG LLM Wiki 本体RAG”这几个关键词,这其实是三个不同层次的东西。RAG是基础检索增强,GraphRAG是在检索时引入图结构,本体RAG则是在图结构上再加一层语义本体。
GraphRAG的核心思路是,把文档之间的引用关系、实体关系用图的方式建模,检索时不仅看文本相似度,还看图上的连通性。这对于多跳推理类的问答特别有用。比如问“A产品的某个功能依赖哪个底层服务”,纯RAG可能检索不到,因为答案分散在多篇文档里,但GraphRAG可以沿着实体关系链找到。
本体RAG则更进一步,它要求你先定义一个领域本体——也就是这个领域里有哪些实体类型、哪些关系类型、有哪些约束。然后文档在入库时会被映射到这个本体上。这样做的好处是检索精度极高,因为本体提供了强约束;坏处是构建成本很高,需要领域专家参与。
我的建议是,如果你的知识库规模在几百篇文档以内,且关系比较复杂,可以试试GraphRAG。如果规模上千篇,且领域边界清晰,再考虑本体RAG。如果只是简单的问答,纯RAG加好的分块策略就够了,没必要上太复杂的方案。
3.3 知识库更新的工程化问题
不管是RAG还是Wiki,知识库的更新都是一个容易被忽视但非常关键的问题。我见过很多项目,初期效果很好,运行三个月后回答质量明显下降,原因就是知识库没有及时更新。
工程上,知识库更新要考虑几个点:第一,增量更新还是全量重建?增量更新成本低,但容易产生碎片;全量重建成本高,但一致性更好。我的做法是,日常用增量更新,每周做一次全量校验。第二,更新时怎么保证不中断服务?可以用双缓冲的方式,新版本构建好之后再切换。第三,怎么检测知识过期?可以给每个条目加时间戳和置信度,检索时对过期内容降权。
这些细节在Demo阶段根本不会遇到,但一旦上线,就是每天都要面对的问题。日报里提到的“LLM Wiki项目”和“Karpathy LLM Wiki”这类内容,价值在于提供了参考实现,但具体到你的业务,更新策略还得自己设计。
4. Agent记忆机制的设计:从“记住”到“该记住什么”
4.1 记忆不是越多越好
Agent记忆是一个被过度简化的话题。很多教程一上来就讲“给Agent加一个向量数据库做长期记忆”,但实际用下来会发现,记忆越多,Agent的表现反而越差。原因很简单:上下文窗口是有限的,无关记忆会挤占有效信息的空间,导致Agent在关键决策上反而变糊涂。
我的经验是,Agent记忆要分层设计。第一层是工作记忆,也就是当前对话的上下文,这部分必须保留,但要有长度限制。第二层是情景记忆,记录过去发生过的关键事件,比如用户之前提过的偏好、之前解决过的问题。第三层是语义记忆,也就是从大量交互中提炼出来的通用知识。
分层之后,每一层的更新策略和检索策略都不一样。工作记忆用滑动窗口,情景记忆用时间衰减加重要性评分,语义记忆用定期归纳。这样设计下来,Agent既能记住该记的,又不会被无关信息淹没。
4.2 A-MemGuard这类主动防御框架的启发
日报里提到了“A-MemGuard: A Proactive Defense Framework for LLM-based Agent Memory”,这个方向很有意思。它的核心思路是,在记忆写入之前先做一轮安全检查和价值评估,防止恶意或低质量信息污染记忆库。
这个思路在实际业务里非常有用。比如你的Agent面向外部用户,用户可能会故意输入误导性信息,如果这些信息被写入长期记忆,后续所有对话都会受影响。主动防御的做法是,在写入前判断这条信息是否可信、是否与已有知识冲突、是否来自可靠来源。如果不可信,就不写入或者标记为低置信度。
我自己的做法是加一个简单的规则引擎:对于来自外部用户的信息,先做关键词过滤和来源评分,只有评分超过阈值的才写入长期记忆。这个规则不复杂,但能挡掉大部分噪音。
4.3 记忆检索的时机与方式
记忆检索的时机也很关键。有些框架是每轮对话都去检索记忆,这样虽然不会漏,但会增加延迟和成本。更好的做法是按需检索:先判断当前问题是否需要历史信息,如果需要再去检索。
判断的方式可以用一个轻量级的分类器,或者直接用LLM做一次快速判断。比如用户问“今天天气怎么样”,这明显不需要历史记忆;用户问“上次我们讨论的那个方案进展如何”,这就需要检索情景记忆。
检索方式上,我建议用混合检索:向量相似度加关键词匹配加时间衰减。纯向量检索容易漏掉关键词精确匹配的情况,纯关键词又缺乏语义泛化能力。混合之后,召回率和准确率都能兼顾。
5. 本地部署与网关:LLM落地的最后一公里
5.1 ONNX部署LLM模型的现实考量
日报里提到了“ONNX部署LLM模型”,这是一个很实际的需求。很多场景下,你不能把数据发到外部API,必须本地部署。ONNX的好处是跨平台、推理优化好,但实际用下来有几个坑要注意。
第一,模型转换。不是所有LLM都能顺利转成ONNX格式,特别是那些用了自定义算子的模型。转换前要先确认算子支持情况。第二,量化。ONNX支持多种量化方式,但量化会损失精度,需要根据业务场景做权衡。第三,硬件适配。ONNX Runtime在不同硬件上的表现差异很大,CPU、GPU、NPU的优化程度不一样,选型时要先做基准测试。
我的建议是,如果本地部署的模型规模在7B以下,ONNX是一个不错的选择;如果超过13B,可能要优先考虑其他推理引擎,因为ONNX在大模型上的推理效率不一定最优。
5.2 LLM网关的角色与选型
LLM网关是最近半年越来越热的一个方向。它的核心作用是统一管理多个LLM提供商的接口,做路由、限流、缓存、日志、计费。对于同时用多个模型的企业来说,网关几乎是必备的。
选网关的时候,重点看几个能力:第一,路由策略是否灵活?能不能根据请求内容、成本、延迟做动态路由。第二,缓存机制是否完善?相同请求能不能命中缓存,节省成本。第三,可观测性是否到位?每个请求的耗时、token消耗、错误率能不能实时看到。
我实际用下来,网关最大的价值不是技术上的,而是管理上的。它把模型调用从“每个团队自己管”变成“统一管理”,成本和安全都更可控。
5.3 Docker容器里的Agent部署实践
日报里提到了“Docker容器里的ROS2 Humble, Micro-ROS Agent”,这其实是一个很典型的边缘Agent部署场景。在容器里跑Agent,有几个实际问题要解决。
第一,网络。Agent需要调用外部工具和模型,容器的网络配置要确保能访问这些服务。第二,资源限制。Agent可能突然需要大量内存或CPU,容器要设置合理的资源上限,防止影响宿主机。第三,状态持久化。Agent的记忆和日志需要持久化,容器重启后不能丢。
我的做法是,把Agent的核心逻辑和状态存储分开。核心逻辑放在容器里,状态存储用外部数据库或对象存储。这样容器可以随时重启或迁移,状态不会丢。
6. 安全与异常处理:那些日报里不会细说但必须知道的事
6.1 Agent执行错误的常见模式
“Agent execution terminated due to error”这个报错,做过Agent开发的人应该都不陌生。它可能由很多原因引起:工具调用超时、返回格式不符合预期、上下文超长、模型输出被截断等等。
排查这类问题,我的经验是先从日志入手。好的Agent框架会记录每一步的输入输出,你可以沿着执行链往回找,看是哪一步出了问题。如果没有详细日志,那就只能靠加打印来定位,效率很低。所以选框架的时候,可观测性一定要作为硬指标。
常见的错误模式我总结了几种:第一种是工具返回格式不对,Agent解析失败;第二种是模型输出包含了不该有的内容,比如多余的标记;第三种是上下文超长导致模型截断输出;第四种是并发调用时资源竞争。每种模式的处理方式不一样,但核心思路都是加校验和兜底。
6.2 工具调用的Schema校验
“LLM request failed: provider rejected the request schema or tool payload”这个报错,通常是因为工具定义的Schema和实际调用不匹配。比如你定义了一个参数是字符串类型,但模型输出了一个数字;或者你定义了一个必填参数,但模型没给。
解决方式是在工具调用前加一层校验。可以用JSON Schema做严格校验,不通过就返回错误让模型重试。重试的时候,把校验错误信息也传给模型,让它知道哪里错了。这样多试几次,大部分格式问题都能解决。
另外,工具定义本身也要尽量简单明确。参数名要语义清晰,描述要具体,枚举值要列全。模型对工具定义的理解程度,直接决定了调用的准确率。
6.3 Agent安全的多层防护
Agent安全是一个容易被忽视但越来越重要的话题。Agent能调用工具、能访问数据、能执行操作,一旦被恶意利用,后果比单纯的文本生成严重得多。
我的做法是加三层防护:第一层是输入过滤,对用户输入做敏感词和注入检测;第二层是工具权限控制,每个工具定义明确的权限范围,Agent只能调用被授权的工具;第三层是输出审核,Agent的输出在返回给用户之前做一轮安全检查。
这三层防护会增加一些延迟,但对于面向外部用户的Agent来说,是必要的成本。内部使用的Agent可以适当放宽,但基本的权限控制还是要有的。
7. 从日报到实践:怎么把信息变成自己的能力
跟踪日报最大的价值,不是知道了今天发生了什么,而是通过持续跟踪,慢慢建立起自己对一个领域的判断力。我刚开始做日报的时候,只是简单记录,后来发现记录本身没有意义,重要的是记录之后的思考和验证。
我的做法是,每天从日报里挑一个最感兴趣的点,花半小时做一个小实验。比如今天看到一个新的记忆机制,就写个简单的Demo验证一下;明天看到一个部署方案,就在本地跑一遍。这样日积月累,你对各种方案的实际效果就有了直观感受,而不是停留在“听说不错”的层面。
另外,日报里的内容不要孤立地看。今天看到的某个框架更新,可能和上周看到的某篇论文有关联;今天看到的某个部署问题,可能和上个月踩过的坑是同一类。把这些点连起来,才能形成自己的知识网络。
最后说一个我自己的习惯:我会定期回顾过去一个月的日报,把当时觉得重要但现在看来一般的内容删掉,把当时没注意但现在觉得有价值的内容重新翻出来。这个过程本身就是对判断力的一种训练。信息永远在变,但判断信息的能力是可以积累的。