今天聊点实在的。
2026年9月28日这期“Agent / LLM技术日报”,我没有按新闻源逐条搬运,而是把今天被反复讨论的三十几个热搜词重新攒了一遍,按照“从概念到落地、从开发到安全、从模型到评测”这条线串起来。你会发现里面既有“agent是什么”这类入门问题,也有“AI Agent怎么扛并发”这种逼到生产环境的硬仗,还有“AgentPoison”这种偏红队视角的攻防研究。无论你是刚打算入坑Agent开发的新手,还是已经在做Agent服务化改造的工程师,这份日报都能给你一点能直接用的东西。
适合谁读呢?一类是正在做Agent应用落地的人,框架选型、并发处理、记忆与技能编排、安全防护这些话题基本都能对上;另一类是准备系统学习LLM和Agent原理的同学,热词里反复出现的Token三要素、Harness与Agent的区别、LLM as Judge等,正好帮你把散落的知识点拼成一张完整的图。
1. Agent是什么:先分清概念,再谈学习路线
1.1 智能体、框架、架构,三个词各指什么
今天的讨论热度里,“agent是什么”“agent架构”“agent框架”几乎是同时出现的,说明不少人其实还在概念层打转。我自己的定义很简单:Agent是一个能够自主感知环境、做出决策并执行行动的闭环系统。LLM在这个闭环里扮演的是“大脑”角色,负责把目标拆解成步骤;真正让Agent“动起来”的是外围那圈东西——工具调用、记忆读写、任务循环、异常恢复。
而“Agent框架”就不是一个Agent了,它是给你搭好的一套骨架。你只需要把模型、工具、记忆模块填进去,就能跑出一个可复用的Agent。很多人把框架和Agent混为一谈,这是今天最需要纠正的一个误区:框架是脚手架,Agent是脚手架搭出来的房子。
1.2 Harness与Agent的区别:控制循环才是核心
今天有条热词是“harness和agent区别”,我最近也被问了几次。业内对Harness没有完全统一的定义,但我更愿意把它理解为Agent运行时的“控制容器”:它负责管理多轮循环、工具调用的上下文粘合、中断恢复,以及安全策略的注入。Agent是你交给用户的产品逻辑,Harness是让Agent真正“能循环起来”的发动机。
做个小对比就清楚了:
| 对比维度 | Agent | Harness |
|---|---|---|
| 定位 | 面向任务的行为体 | 承载行为的运行时环境 |
| 核心职责 | 推理、规划、执行动作 | 控制循环、状态管理、工具调度 |
| 与LLM关系 | 直接调用LLM做决策 | 决定何时调用LLM、如何注入提示词 |
| 典型例子 | 一个能订机票的AI助手 | ReAct循环、Claude的Agent Skills运行时 |
理解这一步很关键。只要你做多轮工具调用的Agent,就绕不开Harness这一层。很多人问“框架到底解决了什么”,本质上就是替你把这些循环逻辑封装好了,你不用自己手动维护“什么时候该问模型下一步”的状态机。
1.3 Agent开发学习路线:别急着上框架
结合“agent开发学习路线”和“agent学习路线”这两条热搜,我给一条自己走过的比较顺的路线:
- 先把LLM API用熟:学会写结构化提示词、理解 function calling,这是地基。
- 手写一个最简单的ReAct循环:不调用任何框架,自己用 if-else 实现“思考-行动-观察”。
- 上框架:此时再看LangChain、Spring AI等,你会瞬间明白设计意图,而不是被魔法般的抽象唬住。
- 做工程化改造:并发、日志、安全、可观测性,这些才是投入生产后真正头疼的部分。
第2步会被90%的人跳掉,但恰恰是它决定了你对Agent原理的理解深度。框架抽象了太多细节,遇到线上问题你会无从下手,这就是很多人说“Agent项目跑起来容易、调起来难”的根因。
2. Agent开发实操:框架选型、并发改造与最小骨架
2.1 2026年怎么选Agent框架:按语言栈来
今天热词里出现了“spring ai agent”“adk.dev 的 kotlin 快速上手在 jvm 上跑通一个 agent”“基于rust语言ai agent”三个方向,很有代表性,说明Agent开发已经从Python一枝独秀走向多语言生态。
| 框架/方案 | 语言生态 | 我眼中的优势 | 适合场景 |
|---|---|---|---|
| Python系(LangChain/LlamaIndex) | Python | 生态最全、社区资料最多 | 原型验证、研究型项目 |
| Spring AI | Java/Spring | 能复用现有企业级基建,和业务系统无缝集成 | 传统Java服务改造、金融/企业级应用 |
| ADK(Kotlin/Java) | JVM | 类型安全、协程友好,JVM上跑通Agent很顺滑 | Android/Kotlin团队、服务端JVM |
| Rust(rig等) | Rust | 性能好、内存安全、部署产物单二进制 | 边缘计算、高并发网关场景 |
我的选型原则很简单:别追新,看团队技术栈。如果你团队全是Java后端,硬上Python框架还得多养一套运维体系,得不偿失;反过来,一个十来人的创业团队要快速试错,Python依然是最省力的。
2.2 “AI Agent怎么扛并发”:从单次调用到服务化
这是今天含金量最高的一条热搜。很多人刚写完一个能跑通的Agent,就以为大功告成,结果一压测就崩。我先说结论:Agent扛并发,核心不是“提高单次推理性能”,而是把Agent从“一个有状态的进程”改造成“无状态的编排服务 + 有状态的任务队列”。
为什么?因为LLM的推理无法在你自己机器上无限并行,尤其是走第三方模型API时,QPS和Token速率就卡在那里。而且Agent的上下文会不停膨胀,一个长任务的上下文可能要几十万Token,完全塞在内存里等于自杀。
我实践下来比较稳的一套做法简化如下:
# 伪代码示意:FastAPI + Redis队列的Agent服务化骨架 from fastapi import FastAPI, BackgroundTasks import redis app = FastAPI() r = redis.Redis(host="localhost", port=6379) @app.post("/agent/run") async def run_agent(request: dict): task_id = uuid4().hex # 先把任务丢进队列,HTTP层立刻返回,避免长连接占用 r.lpush("agent_tasks", json.dumps({"task_id": task_id, "payload": request})) return {"task_id": task_id} @app.get("/agent/result/{task_id}") async def get_result(task_id: str): # 单独的Worker进程不断消费队列,执行Agent主循环 result = r.get(f"result:{task_id}") return {"status": "done" if result else "pending", "result": result}关键点有三个:一是把耗时的Agent执行逻辑放到后台Worker,用任务队列解耦;二是上下文状态放到外部存储(Redis或对象存储),保证Worker重启不丢任务;三是对模型API做好限流和重试,因为生产环境最常见的故障就是“供应商限流导致任务失败”。
2.3 一个最小可运行的Agent骨架
用ADK在JVM上跑通一个Agent并不复杂,核心是定义好“工具函数”和“模型配置”。我写过一个极简版本,思路是:
// ADK Kotlin 概念示意:核心就是"模型 + 工具 + 循环" val agent = Agent.builder() .model("gpt-4o") .tools(listOf(SearchTool(), CalculatorTool())) // 工具决定Agent能做什么 .prompt("你是一名代码助手,请根据用户需求调用工具解决问题。") .build() fun main() { val response = agent.run("帮我搜索今天的Agent相关新闻并总结") println(response.text) }跑通之后,我建议你立刻做两件事:第一,把每次工具调用的输入输出都打印出来,观察模型是不是“真的在用工具”;第二,设一个最大循环次数,防止Agent陷入无限调用。很多新手的第一个Agent项目“卡死”,就是没设循环上限,模型在工具调用里绕不出来。
3. Agent的记忆与技能:让Agent“越用越懂你”
3.1 Agent记忆的三种形态与Token预算管理
“agent记忆”是今天另一条高频热词。记忆不是简单塞一段历史记录那么简单,我习惯把它拆成三层:短期记忆是当前会话上下文,工作记忆是任务执行过程中的临时状态,长期记忆则是跨会话保留的向量数据库或知识库摘录。
这里有一个容易被忽略的认知:记忆设计的本质是Token预算管理。长期记忆不可能全量塞进上下文,否则再大的窗口也会爆。所以你要做的不是“存储更多”,而是“检索更准”。每次该把哪些记忆片段注入回上下文、注入多少,这本身就是一道质量工程题。
3.2 Agent Skill:把技能做成可复用模块
“agent skill教程”和“claude agent skills: a first principles deep dive”这两条热搜指向同一个话题。Skill与普通工具调用的区别在于:Skill不是一个单一函数,而是一个完整的“指令 + 工具定义 + 触发条件”打包体。比如“画图”技能,可能既包含文生图API定义,又包含如何把草稿指令转成专业提示词的模板。
实操时我的体会是,技能要小而专,不要试图做一个“万能技能”。一个技能负责一个明确边界的能力,组合起来才能灵活复用。你可以在一个Agent上挂五个小技能,但不要挂一个五百行提示词的“超级技能”,后者会让模型决策变得混乱。
3.3 用Hermes Agent搭一个Obsidian工作台
今天关于Hermes Agent的讨论相当热闹,出现了“hermes agent obsidian”“hermes agent 第三方工作台”“hermes agent安装”好几条。我试过把它接到Obsidian上,体验更像是一个能读懂你笔记库的驻场助手:你说“帮我整理今天的文献笔记”,它会先用语义检索遍历你的库,再调用格式化工具整理成目标结构。
安装思路大致是:先装好Hermes Agent运行时,然后配置Obsidian插件作为第三方工作台,再给它挂上本地向量索引。这类配好之后,产物就是“Agent anywhere”的雏形——Agent不是停留在聊天页面里,而是嵌入到你日常工作的每一个界面里。我自己最大的感受是:记忆也好、技能也好,最终都该为“在正确的位置把能力交付出去”服务。
4. Agent安全:从提示注入到记忆投毒
4.1 AgentPoison攻击:为什么记忆库会成为靶子
今天出现的“agent安全”和“agentpoison: red-teaming llm agents via poisoning memory or knowledge ba”这两条热搜必须放在一起看。AgentPoison讲的是一种针对Agent记忆库/知识库的投毒攻击:攻击者往向量数据库里检索可见的文档中植入恶意样本,当Agent在处理正常任务时命中了这些被污染的内容,就会被误导执行攻击者意图。
普通聊天LLM的恶意内容顶多影响一次回答,但Agent因为多了检索和工具调用环节,一旦记忆被污染,攻击就可能引发真实世界的副作用——比如操纵财务Agent误转账、引导代码Agent注入漏洞。攻击面比单纯对话大得多。这提醒所有做Agent的人:安全红线不是安全团队单独的事,而是从你第一次设计记忆检索时就该考虑的事。
4.2 防御套路:降权、清洗与最小授权
针对这类攻击,我的防御清单基本是固定的:
- 记忆库内容做来源分级,外部抓取来的内容默认低信任,低信任内容在注入时加重提示“仅供参考,不可直接执行”。
- 工具输出也要降权处理:不要模型拿到工具返回就无条件相信,尤其是涉及“执行动作”的工具,加一道二次确认。
- 定期清洗向量库:用规则或另一个模型扫描可疑样本,把明显诱导性的内容下架。
- 最小工具权限:Agent不需要一个“执行任意SQL”的工具,给它只读接口就够了,权限越小,被投毒时的杀伤力越小。
安全投入在前期看起来“不产生收益”,但等线上真的被攻击了一次,你就知道这套兜底值多少钱。
5. LLM基础:Token三要素与空间智能
5.1 “Key、Query、Value”三个点:一次讲透
热词里有一条非常精髓的“llm的token三个点:key我是谁、query我在找什么、value我能提供什么”。这个解读很妙,它恰好对应了Transformer注意力机制中最重要的三个角色。你可以把Token理解成一个求职者:Key是名字和简历,Query是它对当前问题的匹配诉求,Value是它真正能贡献的内容信息。模型在预测下一个Token时,就是在所有候选里通过Query和Key的相关性打分,再按权重提取Value。
这个认知对写提示词有直接指导意义:你输入给模型的每条指令,本质上是在帮下一个Token确定“查询意图”。提示词里啰嗦冗余的部分越多,模型就越难从Key的海洋里定位到该取哪块Value。我写提示词有一个习惯:把背景信息写清楚,把任务目标写明确,把约束条件写成不能再短的列表,其余全删。
5.2 Spatial LLM:空间智能为什么在2026年升温
今天“spatial llm”的热度并不意外。Spatial LLM是模型对空间关系理解和推理的能力——它不仅能理解文字描述,还能在三维空间中推理“桌子左边的东西是什么”“这个房间的出口在哪”。落地场景包括室内导航、机器人操作、3D场景编辑。我的判断是,这类模型短期内的价值在于给具身智能提供一个相对靠谱的“空间常识底座”,真正的杀手级应用还得等硬件成本降下来。
6. 评测与质量:榜单之外,还有Judge和单测
6.1 公开榜单的本质与局限
“open llm leaderboard 等公开榜单”今天被讨论得很多。榜单的价值是给了一个相对统一的参考坐标系,让你能快速初筛模型;但它的局限也很明显——榜单题集是静态公开的,模型方完全可能针对性优化。用户实际场景往往是私有的、特定格式的、带工具调用的,榜单分数和真实体感经常对不上。
所以我不把榜单当唯一参考,而是当“海选工具”。进入实际项目后,我会再花半天时间用自己的业务样例跑一遍离线评测,用真实场景做二次筛选。
6.2 LLM as Judge:让模型给模型打分
“llm as judge”已经是Agent和LLM质量评估的主流做法。做法很简单:把答案、评分标准一起交给一个“裁判模型”,让它给出分数或偏好排序。我用得最多的是“两两对比”模式,比直接打分更稳定。一个可用的Judge提示词模板长这样:
你是一名严谨的评测员。以下有两个回答,请根据"准确性、完整性、可执行性"三个维度, 判断哪个更好,输出"A"或"B"。如果两者质量接近,输出"持平"。 标准:准确性优先于完整性,完整性优先于可执行性。 回答A:... 回答B:...Judge也不是万能的,最常见的两个坑是位置偏差(A和B换顺序结果就变)和冗长偏差(越长的答案越容易被判好)。缓解手段很简单:多次互换位置取多数票,并在提示词里明确“长度不作为评分项”。
6.3 基于LLM的单元测试:把模型当测试生成器
今天“基于llm的单元测试”也上热榜了。实操里,我倾向于让LLM生成“测试建议”而不是直接生成全部测试代码。比如给模型看一个函数的签名和实现,让它输出边界条件清单、可能的异常分支,再由人工确认后落成测试用例。这样既借到了模型的视野,又保住了人类对关键路径的把控力。直接让模型全自动生成低价值的断言不难,但高质量的单测还是需要人来拿主意。
7. 本地部署与移动端:把LLM握在自己手里
7.1 GGUF格式与安卓本地运行
“安卓本地运行gguf格式llm软件”这条热搜背后,其实是越来越多人在做隐私敏感的本地推理。GGUF是一个量化模型容器格式,设计目标就是让大模型能在消费级CPU/GPU上跑起来。手机端跑GGUF,关键看内存和算力:7B模型用q4量化后大概在4-5GB,旗舰机能跑但速度和温度要接受取舍;而“支持安卓8”这个条件有点苛刻,老设备不仅CPU慢,系统对神经网络API(如NNAPI)的支持也很弱,更建议走纯CPU模式并选1.5B-3B的小模型。
我自己的经验是:手机本地推理别贪大,3B以下模型才能保证日用流畅。想要遇到问题时能自己排查,可以学习一下llama.cpp系列项目的社区方案,很多开源小工具都是基于同一套底层做的。量化等级上,q4_K_M在质量和体积之间最均衡,q8虽然质量更好但在手机上卡顿感很明显。
7.2 LLM Studio与LLM Wiki:知识管理的新形态
“llm studio”“llm wiki”这两个词的热度也很能说明趋势:LLM不再只是API,而是正在变成个人知识系统的一部分。用本地推理工具跑一个随时能用的模型,再配合个人知识库做检索增强,效果远比纯粹依赖云端接口更可控。我现在的个人工作流是:文档进Wiki库做向量化,遇到问题先在本地模型上过一遍思路,需要强模型能力时再走云端专业API。这套组合既省钱又保护隐私。
8. 生产环境常见的几个报错与排查实录
今天热搜里还有几条非常“现场”的报错,我把它们整理成一个速查表,都是实际生产里容易踩的坑。
| 报错信息 | 出现场景 | 排查思路 |
|---|---|---|
| llm request failed: provider rejected the request schema or tool payload | 调用模型API时工具参数格式不合法 | 重点检查工具参数JSON Schema是否与模型要求一致;很多框架升级后要求收敛Function Call参数类型,字段类型不匹配就会报这个错 |
| codex无法发送消息,显示更新agent沙盒 | Codex类的Agent运行环境过期 | 说明沙箱镜像或工作区状态过期,需要重建Agent运行环境再继续对话 |
| agent execution terminated due to error | Agent主循环执行中途被终结 | 先查任务队列日志和工具调用堆栈;可能是某个子工具抛了未捕获异常,也可能是超时保护或安全策略主动终止 |
我的处理原则是:看到“provider rejected”这类错误,第一反应永远是检查Schema而不是检查网络;看到“terminated”先区分是主动终止还是异常退出,主动终止查策略配置,异常退出查工具代码。Error信息往往只告诉你“哪里断了”,不告诉你“为什么断”,把工具调用链路的输入输出完整打印出来才是最快定位手段。
最后再分享一个我踩过很多次坑后的习惯:给Agent项目加一个“决策追踪日志”,每次LLM决定调用哪个工具、返回什么,都结构化记录下来。它对你做评测、排查故障、分析Token消耗都有奇效。今天日报里所有这些热门问题的本质,其实都指向同一件事——Agent和LLM已经从“能不能跑通”进入到了“能不能稳定地跑好”的阶段。