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

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

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

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 阅读更多 →

最新新闻

AMC3336-Q1隔离式ADC设计指南:集成DC/DC转换器在高压采样中的应用

AMC3336-Q1隔离式ADC设计指南:集成DC/DC转换器在高压采样中的应用

1. 项目概述:为什么我们需要一颗自带“能量站”的隔离式ADC?在高压、强干扰的工业与汽车电子世界里,测量一个信号,远不止是“读个电压”那么简单。想象一下,你要在电动汽车的车载充电器内部,精确测量高达数…

2026/7/24 10:20:26 阅读更多 →
RAG技术解析:大模型知识增强与检索生成实践

RAG技术解析:大模型知识增强与检索生成实践

1. RAG技术概述:大模型缺陷的破局之道 大语言模型(LLM)在自然语言处理领域展现出惊人能力的同时,也暴露出三个致命缺陷:知识局限性、幻觉问题和数据安全隐患。这些缺陷直接制约了大模型在真实业务场景中的落地应用。检…

2026/7/24 10:20:26 阅读更多 →
YOLO与DeepSeek融合的智能安全检测系统实践

YOLO与DeepSeek融合的智能安全检测系统实践

## 1. 项目概述:多技术栈融合的智能安全检测方案这个项目本质上是一个融合了前沿AI检测技术与全栈开发的安全管理系统。我在工业安防领域做过多个类似项目,最深的体会是:单纯算法精度高没用,必须把AI能力工程化落地到实际业务流程…

2026/7/24 10:20:26 阅读更多 →
基于Faster R-CNN的3D打印件自动化质检系统实践

基于Faster R-CNN的3D打印件自动化质检系统实践

1. 项目背景与核心价值 在3D打印生产线上,人工质检一直是制约效率提升的瓶颈环节。传统检测方式依赖操作员肉眼观察,不仅效率低下(平均每个工件需要2-3分钟检测时间),而且受主观因素影响大,缺陷漏检率普遍在…

2026/7/24 10:20:26 阅读更多 →
2026年度10款降AI率网站红黑榜!优缺点全曝光,达标率直接对标行业天花板

2026年度10款降AI率网站红黑榜!优缺点全曝光,达标率直接对标行业天花板

2026 年,AI 写稿、AI 生成内容已经成了学生党、打工人和内容创作者的日常,但随之而来的「AI 率过高」问题也成了新的麻烦:论文查重 AI 率超标、职场报告被判定 AI 生成、自媒体内容过不了平台原创审核… 为了帮大家解决这个痛点,我…

2026/7/24 10:20:25 阅读更多 →
AI辅助教材写作:低查重率与高质量内容创作方法

AI辅助教材写作:低查重率与高质量内容创作方法

1. AI教材写作的现状与挑战最近两年,教育出版行业正在经历一场静悄悄的革命。作为从业十年的教材编辑,我亲眼见证了AI工具如何从简单的语法检查助手,进化成为能够独立撰写章节内容的创作伙伴。但随之而来的问题是:当所有人都开始使…

2026/7/24 10:19:25 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/7/23 17:49:47 阅读更多 →

月新闻