Agent 终态判定:何时该停止思考、给出最终回复
Agent 终态判定何时该停止思考、给出最终回复一、你的 Agent 在再想想的循环里绕了 12 轮用户已经关窗口了Agent 与人最大的区别是人知道什么时候该停下来给答案Agent 会一直想下去。你给 Agent 接了搜索引擎 API它第一轮搜了一下觉得信息不够全第二轮换了关键词再搜第三轮觉得 还有 3 篇相关文章没读第四轮读了之后发现这篇文章引用了另一篇——我再搜一下……十二轮后用户早就不在了。Agent 的终止判定是一个比想象中更复杂的问题。不是因为怎么停止很难而是什么情况下应该停止需要几个维度的判断信息完备度够不够、用户是否有明确的时间预期、本轮回答的质量是否已经够好。当前大多数 Agent 框架的终止逻辑极其简单。要么是固定步数限制最多调用 5 步就停要么是 LLM 自己说了算它觉得该停了就停了。固定步数太硬——复杂任务 5 步不够简单任务 1 步就够了。LLM 自己判断太软——它可能永远不觉得信息够了。二、底层机制与原理剖析Agent 终态判定的多维度决策模型四个判定维度信息增益Information Gain每一步工具调用都会带回新的信息。衡量这一步带来的信息增量——如果新信息与已收集信息的语义重复度超过 95%说明再搜下去也不会获得新信息了边际收益递减。计算方法新信息的嵌入向量 vs 已收集信息的嵌入向量之间的余弦相似度。步数预算不是固定上限如 5 步而是动态预算。简单问题如今天天气怎么样1-2 步足够复杂问题如分析 A 公司财报并做竞品对比给 8-10 步。LLM 在初始阶段评估任务复杂度生成预算值。置信度阈值每一步后让 LLM 自评当前答案的置信度0-100%。超过阈值如 85%就输出答案未超过就继续。这比固定步数更弹性——有时 1 步就能高置信度回答有时 8 步才能。用户显式信号最高优先级的停止信号。用户的任何结束意图的表达可以了够了先这样吧明白了都应该立即停止推理并输出最终回答。三、生产级代码实现 Agent 终态判定器 四个维度信息增益、步数预算、置信度阈值、用户显式信号 from dataclasses import dataclass, field from typing import List, Dict, Optional, Tuple import numpy as np from enum import Enum class StopReason(Enum): INFORMATION_SATURATED info_saturated # 信息饱和 BUDGET_EXCEEDED budget_exceeded # 步数预算耗尽 CONFIDENCE_REACHED confidence_reached # 置信度达标 USER_SIGNAL user_signal # 用户显式终止 MAX_STEPS_FORCED max_steps_forced # 硬上限强制终止 dataclass class StopDecision: 终态判定结果 should_stop: bool reason: StopReason confidence: float # 当前置信度 information_gain: float # 最后一步的信息增益 steps_used: int # 已用步数 steps_budget: int # 总步数预算 detail: str # 人类可读的决策说明 dataclass class AgentContext: Agent 当前步骤的上下文 steps_taken: int steps_budget: int collected_info: List[str] # 已收集的信息片段 last_action_result: str # 最后一步动作的结果 current_confidence: float # 当前置信度 (0-100) user_last_message: str # 用户最后一条消息 class TerminationJudge: Agent 终态判定器 def __init__( self, embed_fn, confidence_threshold: float 85.0, information_gain_threshold: float 0.05, max_steps_fallback: int 15, # 绝对硬上限 ): self.embed_fn embed_fn self.confidence_threshold confidence_threshold self.information_gain_threshold information_gain_threshold self.max_steps_fallback max_steps_fallback # 用户终止信号词 self.stop_signals [ 可以了, 够了, 先这样, 明白了, 清楚了, 不用了, 够了谢谢, 就这样吧, 好的谢谢, ok, got it, thats enough, stop, ] def judge(self, context: AgentContext) - StopDecision: 判定是否应该停止 判定优先级用户信号 信息饱和 置信度达标 步数预算 硬上限 # 优先级 1: 用户显式信号 for signal in self.stop_signals: if signal in context.user_last_message.lower(): return StopDecision( should_stopTrue, reasonStopReason.USER_SIGNAL, confidencecontext.current_confidence, information_gain0, steps_usedcontext.steps_taken, steps_budgetcontext.steps_budget, detailf用户发出了终止信号: {signal}, ) # 优先级 2: 信息饱和最后一步的信息增益太低 info_gain self._calculate_information_gain( context.last_action_result, context.collected_info, ) if context.steps_taken 2 and info_gain self.information_gain_threshold: return StopDecision( should_stopTrue, reasonStopReason.INFORMATION_SATURATED, confidencecontext.current_confidence, information_gaininfo_gain, steps_usedcontext.steps_taken, steps_budgetcontext.steps_budget, detailf信息增益 {info_gain:.3f} 低于阈值 {self.information_gain_threshold}继续搜索收益递减, ) # 优先级 3: 置信度达标 if context.current_confidence self.confidence_threshold: return StopDecision( should_stopTrue, reasonStopReason.CONFIDENCE_REACHED, confidencecontext.current_confidence, information_gaininfo_gain, steps_usedcontext.steps_taken, steps_budgetcontext.steps_budget, detailf置信度 {context.current_confidence}% 阈值 {self.confidence_threshold}%, ) # 优先级 4: 步数预算耗尽 if context.steps_taken context.steps_budget: return StopDecision( should_stopTrue, reasonStopReason.BUDGET_EXCEEDED, confidencecontext.current_confidence, information_gaininfo_gain, steps_usedcontext.steps_taken, steps_budgetcontext.steps_budget, detailf已用 {context.steps_taken}/{context.steps_budget} 步预算耗尽, ) # 优先级 5: 绝对硬上限 if context.steps_taken self.max_steps_fallback: return StopDecision( should_stopTrue, reasonStopReason.MAX_STEPS_FORCED, confidencecontext.current_confidence, information_gaininfo_gain, steps_usedcontext.steps_taken, steps_budgetself.max_steps_fallback, detailf达到绝对上限 {self.max_steps_fallback} 步强制终止, ) # 继续 return StopDecision( should_stopFalse, reasonStopReason.INFORMATION_SATURATED, # 实际未触发 confidencecontext.current_confidence, information_gaininfo_gain, steps_usedcontext.steps_taken, steps_budgetcontext.steps_budget, detail继续下一步推理, ) def _calculate_information_gain( self, new_info: str, existing_info: List[str] ) - float: 计算新信息相对于已有信息的信息增益 方法计算新信息向量与已有信息向量的最大余弦相似度。 1 - 最大相似度 信息增益。 新信息与已有信息越相似增益越低。 if not existing_info or not new_info: return 1.0 # 没有旧信息新信息的增益是 100% try: new_embed self.embed_fn(new_info) # 计算与每条已有信息的相似度取最大值 max_similarity 0.0 for info in existing_info[-5:]: # 只比较最近 5 条降低计算量 try: info_embed self.embed_fn(info) sim self._cosine_sim(new_embed, info_embed) max_similarity max(max_similarity, sim) except Exception: continue # 增益 1 - 最大相似度 gain 1.0 - max_similarity return max(0.0, gain) except Exception: return 0.5 # 计算失败时返回中性值 staticmethod def _cosine_sim(a, b): return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b) 1e-8) def estimate_budget(self, user_query: str) - int: 根据用户问题复杂度估算步数预算 简单启发式生产环境应用 LLM 估计复杂度 - 短问题 20 字2-3 步 - 中等问题20-50 字4-6 步 - 长问题 50 字7-10 步 length len(user_query) if length 20: return 3 elif length 50: return 6 elif length 100: return 8 else: return 10 def build_stop_message(self, decision: StopDecision) - str: 根据终止原因构建给用户的说明 if decision.reason StopReason.BUDGET_EXCEEDED: return ( f已进行 {decision.steps_used} 步分析 f当前置信度{decision.confidence:.0f}%。 f如需更深入的分析可以提出更具体的问题。 ) elif decision.reason StopReason.CONFIDENCE_REACHED: return elif decision.reason StopReason.INFORMATION_SATURATED: return ( f搜索到的信息开始重复 f当前置信度{decision.confidence:.0f}%。 f如需更多信息源可以指定方向。 ) else: return 四、边界分析与架构权衡信息增益的准确性用 embedding 向量计算语义相似度作为信息增益的代理变量会产生误判。两段文字在语义上相似但包含了关键的差异信息如两个不同城市的人口数据——结构相同但数据不同——语义相似度高但信息增益应该高。这是当前方法的盲区。置信度评分的可靠性让 LLM 自己评估自己的置信度存在过度自信或不自信的偏差。模型的置信度评估本身就是不可靠的——它可能对错误答案给出 90% 的置信度。可以用 Self-Consistency 方法让模型多次回答同一问题统计答案的一致程度来增加置信度评分的可信度。适用边界最适合多步推理的 Agent如研究助手、数据分析 Agent、代码调试 Agent。任务步数在 3-15 步之间、需要多轮信息检索或分析的场景。禁用场景不适合单轮问答的 Agent——不需要多步推理的场景不存在终止判定的问题。也不适合实时对话——用户应该在任意时刻都能打断 Agent。五、总结Agent 终态判定不是简单的最大步数限制。四个维度的综合决策——用户显式信号优先级最高、信息增益边际收益判断、置信度阈值答案质量判断、步数预算资源边界。当任一维度触发时Agent 应在回答中附上置信度和停止理由让用户知道这个回答是经过几轮推理得出的可信度如何。关键是让 Agent 能在过度推理和草率给出答案之间找到平衡。

相关新闻

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
AI编程工具横评2026:11款主流产品同台对比,国内外选择策略全解析

AI编程工具横评2026:11款主流产品同台对比,国内外选择策略全解析

2026年的AI编程工具市场,已经和一年前完全不同了。一年前,AI编程工具还主要是代码补全器——你写前半行,它补后半行。但今天,主流工具已经进化为能够独立扛活的编程Agent——你描述需求,它自己规划步骤、编写代码、运行…

2026/7/21 23:59:16阅读更多 →
Zen Browser完整配置指南:5分钟打造高效隐私浏览器

Zen Browser完整配置指南:5分钟打造高效隐私浏览器

Zen Browser完整配置指南:5分钟打造高效隐私浏览器 【免费下载链接】desktop Welcome to a calmer internet 项目地址: https://gitcode.com/GitHub_Trending/desktop70/desktop 想要体验一款既注重隐私保护又能显著提升工作效率的浏览器吗?Zen B…

2026/7/22 2:08:08阅读更多 →
Zoox驶入火灾现场召回,特斯拉Robotaxi清洁机器人,享道上汽定制车明年发布 | Robotaxi周报

Zoox驶入火灾现场召回,特斯拉Robotaxi清洁机器人,享道上汽定制车明年发布 | Robotaxi周报

上周(2026年7月13日至7月19日)全球Robotaxi领域值得关注的行业信息如下: 萝卜快跑 萝卜快跑香港道路测试累计超过24万公里,运输署暂未给出商业化时间表 萝卜快跑与哈萨克斯坦TPH签署协议,探索在中亚引入无人车出行服…

2026/7/22 2:08:08阅读更多 →
国有资产管理数字化实践:三个阶段的技术架构与数据治理

国有资产管理数字化实践:三个阶段的技术架构与数据治理

核心摘要国资委穿透式监管要求下,国有资产管理正从静态台账向动态运营加速转型。本文基于多个城投国企的资产管理实践,明源云梳理出资产管理的三个核心阶段——盘清(资产家底盘清)、盘活(资产精细运营)、风…

2026/7/22 2:08:08阅读更多 →
清理AI污染:如何用超大黑名单净化搜索引擎结果

清理AI污染:如何用超大黑名单净化搜索引擎结果

清理AI污染:如何用超大黑名单净化搜索引擎结果 【免费下载链接】uBlockOrigin-HUGE-AI-Blocklist A huge blocklist of manually curated sites that contain AI generated imagery for uBlock Origin & uBlacklist. 项目地址: https://gitcode.com/GitHub_Tr…

2026/7/22 2:08:08阅读更多 →
【数据结构】哈夫曼编码如何节省内存

【数据结构】哈夫曼编码如何节省内存

哈夫曼编码通过为高频字符分配短码、低频字符分配长码的变长编码策略,并确保编码为前缀码以避免歧义,从而显著减少表示相同信息所需的总比特数,达到节省内存的目的。 以下通过一个具体例子对比常规的等长编码与哈夫曼编码,清晰展…

2026/7/22 2:08:08阅读更多 →
开源vs闭源AI语音引擎对比报告(Whisper/VoiceCraft/Paraformer/SenseVoice全解析)

开源vs闭源AI语音引擎对比报告(Whisper/VoiceCraft/Paraformer/SenseVoice全解析)

更多请点击: https://kaifayun.com 第一章:开源vs闭源AI语音引擎对比报告(Whisper/VoiceCraft/Paraformer/SenseVoice全解析) 近年来,语音识别与合成技术加速演进,开源引擎凭借透明性、可定制性与社区活力…

2026/7/22 2:06:08阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

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

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

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

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

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

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

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

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

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

2026/7/21 18:53:30阅读更多 →