
传统机器学习与智能体推理结合实战:从模型预测到多步工作流
传统机器学习与智能体推理结合实战:从模型预测到多步工作流
传统机器学习模型擅长把输入映射成输出,却无法规划步骤、调用工具、适应变化或执行动作。本文说明两者的能力边界,给出智能体编排加模型预测的混合架构设计方法,并以保险理赔场景为例,完整演示从特征准备、模型打分到阈值路由与推理留痕的落地流程。
训练好的分类器收到一张医学影像,返回一个概率;回归模型收到一组特征,返回一个数值。模型严格按训练时学到的方式工作,不多做一步。这种可靠性同时也是它的边界:现实中的问题很少以干净的「输入—输出」对的形式出现,它们需要先收集信息、判断下一步做什么、处理意外情况,并在多步操作之后才可能得出最终答案。传统机器学习本身没有机制去完成这些事,而智能体推理正好补上这一段。本文讲清传统机器学习的能力边界、智能体推理补上的四类能力,以及两者如何组合成比任何单一方案都更强的系统,并给出一个可以照着搭的最小实现。
准备工作
在动手之前,先把概念和依赖理清楚。混合系统不是把大模型套在模型外面那么简单,它需要几个明确的组成部分各自到位。
概念上的准备
需要先分清两类组件各自的职责。传统机器学习指的是有监督学习训练出来的模型:欺诈检测模型学会区分欺诈交易与正常交易,流失预测模型学会哪些客户画像与取消订阅相关,需求预测模型学会历史模式与未来销量之间的关系。这类模型速度快、可解释、可直接上生产,训练完成后推理在毫秒级完成,能承受极大的请求量,输出一致且可审计。
但它们是静态的。训练好的模型反映的是训练时刻的世界状态,它无法在推理过程中更新理解,无法追问澄清性问题,无法判断自己是否需要更多信息再作答,也无法在世界上执行动作并观察结果。模型收到输入、施加学到的函数、返回输出,这就是它运作的全部范围。
智能体则是感知环境、决定做什么、采取行动、观察结果的东西。它与传统模型的关键差别在于:智能体跨越时间运作,与环境交互,而不是单纯把输入变换成输出。现代智能体系统通常围绕一个大语言模型构建,这个模型充当推理引擎,负责规划步骤序列、解释中间结果、决定使用哪些工具或资源、并根据观察到的结果调整做法。它做的不是传统意义上的统计预测,而是对「下一步该做什么」进行推理。
工程上的准备
搭建混合系统需要以下几类资源:
- 已训练好的预测模型:至少一个在特定任务上表现良好的模型,例如欺诈评分模型、风险分类模型或需求预测模型。它需要能以服务或函数的形式被调用,输入输出接口稳定。
- 推理引擎:一个具备规划与工具调用能力的大语言模型接口。它需要支持多轮决策,并能接收工具返回的结构化结果。
- 工具层:把模型、数据库、检索接口、业务系统封装成智能体可以调用的工具。每个工具要有清晰的名称、参数说明和返回格式。
- 状态存储:用于保存中间结果、已执行步骤和推理轨迹,便于审计与调试。
- 阈值与路由规则:哪些分数触发哪些后续动作,需要有明确的配置,而不是交给推理引擎即兴决定。
关于模型版本、接口配额、调用价格等易变信息,请以各服务官网当前公布的信息为准,本文不给出具体数字。
操作步骤
第一步:界定问题属于哪一类
先判断手上的任务是不是传统机器学习能独立完成的。传统机器学习的局限在三种情形下会暴露出来。
问题需要多个步骤时。预测一个贷款申请人是否会违约是单步问题:给定一组特征,返回一个概率。但决定是否批准一笔贷款涉及更多步骤:核实收入证明、检查材料是否自相矛盾、把边缘案例标记给人工复核、为决策生成书面说明。模型可以为这个过程贡献一个预测值,但它无法管理这个过程本身。
上下文在任务中途发生变化时。传统模型假设所有相关信息在推理时都已具备并编码在输入里。但很多真实任务是在推进过程中逐步发现信息的。分析人员调查一起潜在的安全事件时,事先并不知道哪些日志是相关的;客服系统也无法预判一段对话可能走向哪个方向。当相关上下文只能通过与环境的交互来确定时,一个只处理固定输入的静态模型无法适应。
需要执行动作时。预测设备故障的模型无法安排维修预约;识别出供应链中断的模型无法改道货运。传统机器学习产出的是数字、标签、概率,它不在世界上采取行动。从模型预测到现实响应之间的这段距离,必须由别的东西来弥合。
这三类情形不是边缘案例,它们恰恰描述了大多数期望 AI 产生实质影响的高价值业务问题。如果任务落在其中任何一类,就需要引入智能体推理。
第二步:明确智能体要补上的四类能力
智能体推理相对传统机器学习多出四项能力,搭建系统时要逐项确认它们是否被真正实现。
规划。智能体能把一个复杂目标拆解成步骤序列,并在多次动作之间跟踪目标进展。它不是产出单个输出,而是维护一个关于「想达成什么」和「还差什么」的表示。工程上这通常体现为一个显式的任务状态对象,包含目标、已完成步骤、待办步骤和当前判断。
工具调用。智能体能调用外部工具,包括数据库、API、搜索引擎或其他模型,并把结果纳入推理。这意味着智能体不受训练时编码进参数的知识所限,它可以按需检索当前信息、执行计算或查询专用系统。在混合系统里,最重要的工具之一就是那个训练好的预测模型。
适应。智能体能根据观察到的结果更新计划。如果某个工具返回了意料之外的结果,智能体可以修改做法;如果一次查询没有返回有用信息,它可以换一个查询。这个反馈回路在传统机器学习的推理中是不存在的。
行动。智能体能在世界上做事:发送消息、写入数据库、触发工作流、调用 API。它的输出不只是预测,而是操作。
第三步:设计分层架构
让混合系统成立的关键认识是:传统机器学习与智能体推理不是竞争关系。它们处在系统的不同层次,解决不同的问题。
传统机器学习擅长在结构化数据上做模式识别。一个在数百万笔交易上训练出来的模型,检测欺诈的准确度会高于任何从基本原理出发的推理过程;一个在数千张影像上训练出来的模型,识别肿瘤的可靠性会高于一个没有专门训练、试图靠推理得出诊断的智能体。训练好的模型在它们被设计的具体任务上,速度快、经过校准、表现一致。
智能体推理擅长编排:决定用哪些工具、按什么顺序、传什么参数,以及如何解释和组合它们的输出以服务于更大的目标。
在混合系统中,智能体管理工作流,机器学习模型做专门的预测工作。智能体决定何时调用欺诈模型,把合适的交易数据传给它,接收概率分数,并在更大任务的语境中决定如何使用这个信息。它可能依次调用多个模型、比较它们的输出、从数据库检索额外上下文,然后生成综合回复或触发下游动作。
两个组件都不做对方的工作。机器学习模型不去尝试规划,智能体不去尝试在原始特征上做细粒度模式识别。各司其职。
第四步:把模型封装成工具
模型要能被智能体调用,必须先有稳定的接口。一个典型的封装包含三部分:输入模式、输出模式、以及调用逻辑。
def score_fraud_claim(claim_amount, claimant_history_score,
provider_risk_score, claim_frequency_30d):
"""
调用已训练的欺诈评分模型。
输入:结构化特征
输出:{"fraud_probability": float, "model_version": str}
"""
features = [[claim_amount, claimant_history_score,
provider_risk_score, claim_frequency_30d]]
proba = fraud_model.predict_proba(features)[0][1]
return {
"fraud_probability": float(proba),
"model_version": fraud_model_version
}
封装时要注意几点:输入字段的名称和含义要写清楚,供推理引擎理解何时该调用;输出要包含模型版本,便于事后追溯是哪一版模型给出的分数;异常情况要有明确返回,例如模型服务不可用时返回错误标记而不是抛异常中断整个工作流。
第五步:定义编排逻辑与阈值
智能体负责编排,但阈值这类业务规则应当显式配置,而不是让推理引擎每次即兴判断。下面是一个理赔场景的编排骨架。
THRESHOLD_HIGH = 0.80
THRESHOLD_LOW = 0.30
steps = []
# 1. 检索保单持有人记录
policy = fetch_policyholder(claim.policyholder_id)
steps.append({"action": "fetch_policyholder", "result": policy.status})
# 2. 调用欺诈评分模型
score = score_fraud_claim(
claim_amount=claim.amount,
claimant_history_score=policy.history_score,
provider_risk_score=claim.provider_risk,
claim_frequency_30d=claim.frequency_30d
)
steps.append({"action": "score_fraud",
"result": score["fraud_probability"],
"model_version": score["model_version"]})
# 3. 按分数分流
if score["fraud_probability"] >= THRESHOLD_HIGH:
similar = search_similar_claims(claim)
related = search_claims_by_provider(claim.provider_id)
inconsistencies = check_documentation(claim)
steps.append({"action": "gather_evidence",
"similar_count": len(similar),
"related_count": len(related),
"inconsistencies": inconsistencies})
summary = synthesize_findings(steps)
route_to_queue(claim, queue="manual_review",
reasoning=summary, trace=steps)
elif score["fraud_probability"] <= THRESHOLD_LOW:
route_to_queue(claim, queue="auto_approve",
reasoning="low risk score", trace=steps)
else:
route_to_queue(claim, queue="standard_review",
reasoning="mid-band score", trace=steps)
这段逻辑里,欺诈检测模型做的正是它被训练来做的事,而智能体做了模型做不到的一切:收集上下文、按顺序做决策、采取行动。组合系统的输出——一笔被路由并附带推理记录的理赔——是任何一个组件单独都无法产出的。
第六步:保留推理轨迹
混合系统的一个关键产出是推理轨迹。每一步调用了什么工具、传了什么参数、返回了什么结果、据此做了什么判断,都应当被记录下来。这既是审计需要,也是调试需要:当路由结果不符合预期时,能快速定位是模型分数异常、阈值配置不当,还是证据收集环节漏掉了关键信息。
轨迹记录建议包含:时间戳、步骤序号、动作名称、输入参数摘要、输出结果摘要、以及该步骤之后的目标状态。对于涉及个人数据的字段,记录时按合规要求做脱敏处理。
一个完整示例
下面把上述步骤串成一个可以跑通的最小例子。场景是保险理赔的自动分流。
场景设定
一笔新理赔到达系统。系统需要判断它应当进入自动批准队列、标准复核队列,还是人工深度复核队列,并为每个决定留下可解释的理由。
完整流程
def handle_claim(claim):
trace = []
# 阶段一:上下文收集
policy = fetch_policyholder(claim.policyholder_id)
if policy is None:
return {"queue": "manual_review",
"reason": "policyholder_not_found",
"trace": trace}
trace.append({"step": 1, "action": "fetch_policyholder",
"status": policy.status})
# 阶段二:模型打分
score = score_fraud_claim(
claim_amount=claim.amount,
claimant_history_score=policy.history_score,
provider_risk_score=claim.provider_risk,
claim_frequency_30d=claim.frequency_30d
)
trace.append({"step": 2, "action": "score_fraud",
"probability": score["fraud_probability"],
"model_version": score["model_version"]})
# 阶段三:按分数决定后续动作
prob = score["fraud_probability"]
if prob >= THRESHOLD_HIGH:
evidence = {
"similar_claims": search_similar_claims(claim),
"provider_claims": search_claims_by_provider(claim.provider_id),
"doc_issues": check_documentation(claim)
}
trace.append({"step": 3, "action": "gather_evidence",
"similar": len(evidence["similar_claims"]),
"provider": len(evidence["provider_claims"]),
"doc_issues": evidence["doc_issues"]})
summary = synthesize_findings(claim, score, evidence)
trace.append({"step": 4, "action": "synthesize",
"summary": summary})
return {"queue": "manual_review",
"reason": summary,
"trace": trace}
if prob <= THRESHOLD_LOW:
trace.append({"step": 3, "action": "auto_route",
"band": "low"})
return {"queue": "auto_approve",
"reason": "low_risk_score",
"trace": trace}
trace.append({"step": 3, "action": "auto_route",
"band": "mid"})
return {"queue": "standard_review",
"reason": "mid_band_score",
"trace": trace}
运行结果的样子
对于一笔高风险理赔,返回结构大致如下:队列为人工复核,理由是一段综合了相似理赔数量、同一提供方历史理赔数量和文档不一致点的文字说明,轨迹里依次记录了保单检索、模型打分、证据收集和综合四个步骤,其中模型打分那一步带有模型版本号。
对于一笔低风险理赔,返回结构里只有三个步骤,队列为自动批准,理由为低风险分数。整个过程中模型只被调用一次,其余工作由编排逻辑完成。
这个例子里各组件在做什么
欺诈检测模型接收结构化特征,返回一个概率分数,它没有做任何超出训练范围的事。编排层负责决定何时调用模型、拿到分数后是否继续收集证据、收集哪些证据、以及最终把理赔路由到哪个队列。两者合起来产出的结果——一笔被正确分流且带有完整推理记录的理赔——是任何一方单独都无法完成的。
注意事项
搭建这类系统时有几个容易踩的坑,值得提前留意。
不要让推理引擎承担它不擅长的细粒度模式识别。在原始特征上做精细判别是训练模型的强项。如果让推理引擎直接根据原始字段判断欺诈概率,结果通常不如一个经过校准的模型稳定,也更难解释。
阈值要显式配置并版本化。把分流阈值写死在代码里、或交给推理引擎每次自行决定,都会让系统行为难以复现。阈值调整应当走配置变更流程,并记录变更时间与原因。
模型版本必须随分数一起记录。模型会重训、会更新。如果轨迹里只有分数没有版本,事后回溯时无法判断当时的判断依据是哪一版模型,审计和问题定位都会变得困难。
工具调用要有失败路径。数据库可能查不到记录,模型服务可能超时,检索可能返回空结果。每个工具调用都应当有明确的失败返回,并让编排逻辑决定是降级处理、转人工,还是终止流程,而不是让异常直接中断整个工作流。
推理轨迹涉及数据合规。轨迹里会包含输入参数和中间结果,其中可能有个人信息。记录前要按适用的合规要求做脱敏或最小化处理,并明确保存期限。
成本与延迟会随步骤数增长。多步编排意味着多次工具调用和多次推理,延迟和费用都会高于单次模型推理。对于延迟敏感的场景,需要评估哪些步骤可以并行、哪些判断可以前置到模型侧完成。具体的配额与计费方式请以所用服务官网当前信息为准。
混合系统不替代已有模型资产。这套架构的价值在于让已经训练好、经过校准的预测模型在更多场景中发挥作用,把它们嵌入到能够收集正确上下文、在恰当时机调用、并对输出采取连贯行动的系统里。它不是要用推理引擎替换传统机器学习。