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:27 阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

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

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

2026/7/22 0:01:27 阅读更多 →
Rust 在 Kubernetes Operator 开发中的实践:使用 kube-rs 构建自定义资源控制器

Rust 在 Kubernetes Operator 开发中的实践:使用 kube-rs 构建自定义资源控制器

Rust 在 Kubernetes Operator 开发中的实践:使用 kube-rs 构建自定义资源控制器 一、为何舍弃 Go 的 Operator SDK 转向 Rust Kubernetes Operator 的主流实现语言是 Go。controller-runtime 和 kubebuilder 框架已经非常成熟。但在处理高吞吐量的自定义资源&#x…

2026/7/22 0:00:26 阅读更多 →

最新新闻

CentOS 7安装Node.js 18+的GLIBC兼容问题解决方案

CentOS 7安装Node.js 18+的GLIBC兼容问题解决方案

1. CentOS下安装Node.js 18版本的挑战与解决方案 在CentOS 7环境下安装Node.js 18版本确实会遇到不少坑,特别是GLIBC版本不兼容的问题。我最近在部署一个基于GitBook的文档系统时就遇到了这个难题,经过多次尝试和排查,终于找到了可靠的解决方…

2026/7/22 1:47:31 阅读更多 →
能续写歌词的AI作词工具与歌词创作助手实用分享

能续写歌词的AI作词工具与歌词创作助手实用分享

我身边大半写歌的朋友,都有过写词卡到一半的崩溃时刻。上个月我帮一个做校园乐队的小兄弟改歌,他主歌写了三句,讲毕业前最后一次在操场喝冰啤酒的场景,接下来半个月都没续上后面的内容,要么写出来的句子太像网络文案&a…

2026/7/22 1:47:31 阅读更多 →
论文AI率高投不出去期刊?降到要求以内顺利见刊

论文AI率高投不出去期刊?降到要求以内顺利见刊

论文AI率高投不出去期刊?降到要求以内顺利见刊 你是不是稿子改了好几遍,投出去却总在初审那关卡住,编辑回一句"AI生成疑似度偏高,请降低后再投"?明明有些段落是你自己一个字一个字敲的,检测系统…

2026/7/22 1:47:31 阅读更多 →
多用描述式评价代替笼统夸奖,让孩子清楚自身闪光点

多用描述式评价代替笼统夸奖,让孩子清楚自身闪光点

在日常生活中,我们常常习惯用“真聪明”“太棒了”这样的词语来夸奖孩子。这些话语虽然充满善意,但对孩子来说,可能并不知道自己究竟做对了什么。描述式评价则像一面更清晰的镜子,它不直接评判结果,而是把孩子具体的行…

2026/7/22 1:47:31 阅读更多 →
允许孩子尝试后失败,多次试错才能积累解决问题经验

允许孩子尝试后失败,多次试错才能积累解决问题经验

允许孩子尝试,允许他们失败,或许是父母能给予的最珍贵的成长礼物。当我们看到孩子笨拙地系鞋带、反复拼不好一块拼图时,忍住不伸手帮忙,是一种需要练习的克制。那些在大人眼中微不足道的小事,对孩子来说却是全新的挑战…

2026/7/22 1:47:31 阅读更多 →
神经网络:通用函数逼近器

神经网络:通用函数逼近器

在《[[AI 研究方法的演变]]》那篇笔记中,我们沿着研究方法的演变脉络,理解了 AI 当前主流的研究为什么会走向深度神经网络。具体来说就是:在逻辑符号无法对所有规则进行编码,而概率方法又卡在了特征工程的情况下。深度神经网络提供…

2026/7/22 1:46:31 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

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

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

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

2026/7/21 8:48:31 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

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

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

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

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

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

2026/7/21 8:25:39 阅读更多 →

月新闻