



2026年5月22日,Agno 发布了 v2.6.9。 这一次更新虽然版本号不大,但内容非常扎实,属于典型的“看起来是小版本,实际上修了不少关键问题”的升级。 从 审批流后 Hooks 的可观测性增强,到 PgVector 前缀匹配真正可用,再到 Claude 系列模型 temperature/top_p/top_k=0 终于不再被静默丢弃,以及 GeminiInteractions 在 agent 路径上的工具调用修复,都直接影响到开发者在真实项目中的稳定性和可控性。
如果你正在使用 Agno 构建 Agent、Workflow、知识库检索、审批流、或者接入 Claude / Gemini / PgVector,那么这次版本更新值得认真看完。 下面我会按照 新特性、优化、Bug 修复、变更清单 的顺序,结合本次官方发布内容,做一篇适合 CSDN 发布的技术文章整理,帮助你快速理解 v2.6.9 到底升级了什么、修了什么、为什么重要。
本次版本发布的核心关键词可以概括为:
这些内容并不是简单的“功能堆砌”,而是围绕几个实际开发痛点进行修正:
本次最值得关注的新特性之一,是 审批记录在 post-hooks 和 observability integrations 中可完整读取。
在之前的版本里,运行结果中的审批信息暴露得比较有限。 开发者在后置 hook、观测集成中,通常只能看到:
这意味着很多关键审批上下文并没有直接暴露出来,例如:
对于需要做审计、记录审批链路、或者在 observability 系统中还原完整审批状态的场景来说,这显然不够。
现在,完整的 resolved approval record 可以通过:
run_response.metadata["approval"]来读取。
这条信息的意义非常大,因为它被放在 metadata 中,所以具备统一性:
也就是说,Agno 不再把审批信息限制在某个特定输出对象的某个局部字段,而是统一放进 metadata 里,方便不同运行类型以一致方式读取。
这项改进主要带来三类收益:
如果你在做审批流、风控流程、运维审批、AI 辅助决策记录,那么这次更新之后,你可以更自然地在 post-hook 中拿到完整审批结果,减少二次拼装和字段缺失带来的问题。
这是本次更新中非常关键的一项改进,尤其适合做知识库、FAQ 检索、站内搜索、类型联想等场景。
在旧版本里,PgVector(prefix_match=True) 表面上看支持前缀匹配,但实际上这是一个静默无效的参数。
原因在于:
*websearch_to_tsquerywebsearch_to_tsquery 会忽略通配符所以最终结果就是:你以为开了 prefix_match,实际上并没有真正做前缀搜索。
现在它会正确地路由到:
to_tsquery('tok:*')并且做了正确的 tokenization。
这意味着像下面这样的部分查询:
ani现在能够在 FTS 中匹配到:
animal这和文档中的预期表现一致了。
这项修复非常适合以下应用:
官方还配套提供了新的 cookbook 示例,演示帮助中心 typeahead 的使用方式。对于依赖 PgVector 做检索增强的项目来说,这个修复非常实用。
除了 prefix_match,这次还修了另一个和 PgVector 相关的边界问题。
原来在 hybrid_search 的 fallback 逻辑里,会使用:
to_tsquery(language, '')作为空查询兜底。
这个写法的问题在于,它依赖解析器对空输入的容忍程度。 换句话说,不同环境下可能会表现不一致,稳定性不够理想。
现在改成了:
''::tsquery这种方式更明确,也更稳健,不再依赖解析器如何处理空字符串。
对于检索系统来说,空查询兜底是非常常见的边界条件。 这项修复提升的是:
虽然这类修复不如新特性那么“显眼”,但在生产环境里往往更重要。
这是本次更新中对模型调用影响很大的修复之一,涉及:
之前这些 Claude 变体会因为使用了“裸 truthiness 检查”,导致当参数值为 0.0 时被误判为 False,于是直接被丢弃。
这就带来一个非常严重的问题:
temperature=01.0也就是说,原本想要确定性输出,最后却变成了随机性输出。
现在代码统一改成了:
is not None这样一来,只要你显式传了 0,它就会被正确保留并传递。
对于大模型应用来说,temperature=0 常用于:
如果这个参数被静默吞掉,实际影响会非常大。 因此,这次修复可以说是修正了一个非常隐蔽但非常关键的问题。
同样地,top_p=0、top_k=0 也会按照预期生效,不再被误判为“没传值”。
本次更新还对 Calendar 和 Gmail context providers 的默认指令进行了整理。
原先的默认读写指令非常长:
长度达到 157 行。
但其中有不少内容,其实已经由 toolkit 侧的指令提供了。 这就导致:
现在这些默认指令被大幅压缩到了 27 行。
整理后的原则是:
也就是说,职责划分更加清晰了。
这种调整看起来偏“内部治理”,但实际上很重要。 因为大模型应用里,提示词层的混乱往往会导致:
这次清理后,Calendar 和 Gmail 的 context provider 在结构上会更加简洁,也更容易维护。
Python 3.12 对 datetime.utcnow() 相关用法提出了弃用提示。
本次更新中,decision_log 模块已经改成:
datetime.now(timezone.utc)因为 datetime.utcnow() 已经不再是推荐写法。
继续使用的话,在 Python 3.12 环境下会出现弃用警告。
虽然这不是功能性大改,但它能帮助项目:
这是一次典型的“清理技术债”式修复。
本次版本将 Chonkie 升级到了 >=1.6.7。
这是为了获取上游的 语言自动检测修复。
对于文本处理、分块、语言识别相关流程来说,语言自动检测的准确性非常关键。 升级后,Agno 可以直接享受到上游修复带来的收益,并且移除了之前为相关测试准备的临时 workaround。
这是一次比较标准但必要的依赖升级,目标是:
这是本次另一个非常关键的修复点,涉及 GeminiInteractions 在 agent 模式下的行为。
在 agent 路径下,比如:
FunctionCallSteps 描述的是工具在 server-managed sandbox 中运行,而不是本地 agent 自己发起的 tool call。
但此前系统会把这些内容错误地暴露为本地的 tool_calls,于是会导致:
Function <name> not found400 invalid_request 错误也就是说,系统把服务端执行的工具调用,误当成了客户端本地工具调用。
现在已经对这个分支进行了门控:
self.agent is None 时才会处理 FunctionCallStep 分支并且 streaming 和 non-streaming 两种模式都做了同样的修复。
这会避免:
对于使用 GeminiInteractions 的 agent 场景来说,这是一次非常重要的稳定性修复。 模型路径上、且带有用户声明工具的情况则保持不变。
下面把官方变更内容按照更易读的方式梳理一遍,方便你快速过目。
prefix_match=True 终于真正执行前缀匹配temperature/top_p/top_k=0 现在会正确生效decision_log 从 datetime.utcnow() 改为 datetime.now(timezone.utc)>=1.6.7temperature=0 之前被静默丢弃的问题已修复如果你问这次 v2.6.9 哪些地方最值得立刻关注,我会优先看下面这几个:
你会很需要 run_response.metadata["approval"],因为它让后 hooks、审计、观测系统能拿到完整审批记录。
PgVector 的 prefix_match=True 修复非常重要。
以前“看起来支持,实际上没生效”的问题,现在终于解决了。
务必注意 temperature=0、top_p=0、top_k=0 这类参数现在才真正可控。
这对输出稳定性影响极大。
一定要检查你是否处于 agent 路径。 这次修复会直接影响工具调用是否被错误暴露。
decision_log 的弃用问题已经被处理,可以减少警告。
代码地址:github.com/agno-agi/agno
Agno v2.6.9 表面上是一个常规小版本,实际上修复和优化的内容都非常贴近真实使用场景。
这次更新的关键词可以概括为: