金融信贷这个行业对AI智能体的态度一直很微妙——业务部门想要效率,风控部门怕出事,合规部门盯着每一句话的措辞。我最近花了两周时间在华为云AgentArts上搭了一套信贷场景的智能体,从知识库构建到工作流编排再到容错机制,踩了不少坑,也摸出了一些门道。这篇笔记不讲虚的,全是实操层面的东西:RAG知识库怎么切分信贷文档、AgentArts的工作流节点怎么串、金融场景下智能体的容错边界怎么定、以及为什么有些看起来能跑通的方案在生产环境会翻车。
如果你正在做金融方向的AI智能体,或者手头有信贷知识库想接入大模型,这篇内容应该能帮你省掉至少一周的试错时间。我会从实际搭建过程出发,把每个关键决策背后的逻辑讲清楚,包括那些文档里不会写的坑。
1. 信贷场景为什么需要智能体而不是简单的问答机器人
1.1 信贷业务的知识复杂度远超普通问答
信贷业务的知识体系有个特点:它不是一棵树,而是一张网。一个"小微企业信用贷款"产品,往上关联着监管政策、行业准入、区域差异,往下牵扯着授信额度计算、利率定价、担保方式、还款方式、逾期处理,横向还连着反欺诈规则、征信查询授权、贷后管理要求。客户问一句"我这种情况能贷多少",背后可能需要同时查产品政策、准入规则、额度模型、征信要求四五个维度的信息。
普通的问答机器人怎么做?把常见问题整理成FAQ,用户问什么就匹配最接近的答案。这在信贷场景下基本不可用,因为客户的问题千变万化,而且往往一句话里包含多个约束条件。比如"我是做餐饮的,去年营收300万,有房贷在还,想贷50万周转,能批吗"——这里面有行业属性、营收规模、负债情况、资金用途四个变量,FAQ匹配根本处理不了。
智能体的价值就在这里。它不是简单地检索答案,而是能拆解问题、调用工具、多步推理、综合判断。AgentArts提供的ReAct模式让智能体可以"思考-行动-观察"循环,先理解客户意图,再决定查哪个知识库、调哪个接口、怎么组合信息,最后给出有依据的回答。
1.2 AgentArts在金融场景的差异化定位
市面上做智能体的平台不少,AgentArts吸引我的点在于它对RAG的支持比较完整,而且工作流编排的粒度够细。金融信贷场景有个硬要求:每个回答都要有出处。你不能跟客户说"根据我们的政策",得说"根据《XX产品管理办法》第X条"。AgentArts的知识库检索可以返回原文片段和来源标注,这对合规审查来说很关键。
另一个差异点是AgentArts支持多知识库联合检索。信贷业务的知识分散在产品手册、操作流程、监管文件、内部通知好几个地方,如果只能挂一个知识库,要么把所有文档塞一起导致检索精度下降,要么频繁切换知识库导致工作流复杂。AgentArts可以配置多个知识库并设置检索优先级,这个在实际项目里省了很多事。
1.3 从"能回答"到"能办事"的跨越
信贷智能体和普通问答机器人的本质区别在于:前者要能办事,后者只要能回答。什么叫能办事?客户说"我想提前还款",智能体不能只回答"提前还款需要满足XX条件",而是要能查客户的贷款合同、计算提前还款违约金、生成还款计划、引导客户确认操作。这涉及到工具调用、状态管理、多轮对话记忆。
AgentArts的工作流编排支持条件分支和循环,可以处理这种多步骤的业务流程。我实测下来,一个完整的提前还款咨询流程大概需要6-8个节点,包括意图识别、合同查询、违约金计算、方案生成、客户确认、工单创建。如果用传统的对话机器人做,要么写死流程导致灵活性差,要么让大模型自由发挥导致不可控。AgentArts的折中方案是:用工作流定义主干流程,用大模型处理每个节点内的自然语言理解和生成,既保证了流程可控,又保留了对话的灵活性。
2. RAG知识库构建:信贷文档的切分策略与检索调优
2.1 信贷文档的特殊性决定了切分不能一刀切
做RAG的第一步永远是文档切分,而信贷文档的切分比通用文档麻烦得多。我一开始用默认的按字数切分(比如每500字一段),结果检索出来的片段经常是半句话——"借款申请人须同时满足以下条件:(1)具有完全民事行为能力;(2)"然后就断了。这种片段喂给大模型,它要么瞎编后半句,要么说"信息不完整"。
后来我改成按语义结构切分。信贷文档有个好处是结构相对规范,产品管理办法通常按"总则-准入条件-授信额度-利率定价-担保方式-贷后管理"分章,操作流程按"受理-调查-审查-审批-放款-贷后"分节。我按照这些自然边界来切分,每个片段保证是一个完整的语义单元。具体做法是先用规则提取文档的标题层级,然后以三级标题为最小切分单位,如果某个三级标题下的内容超过800字,再按段落切分。
这里有个细节:信贷文档里经常有表格,比如利率对照表、额度测算表。表格切分不能按行切,否则检索出来的就是孤立的数字。我的做法是把表格转成Markdown格式,保留表头,然后整个表格作为一个片段。如果表格特别大(超过2000字),就按业务逻辑拆成子表,比如利率表按产品类型拆,额度表按客户等级拆。
2.2 知识库分层:把"死知识"和"活知识"分开
信贷知识有个特点:政策文件相对稳定,但产品参数和利率经常调整。如果把所有知识混在一个库里,每次利率调整都要重新索引整个知识库,既慢又容易出错。我的做法是分三层:
第一层是制度层,存放管理办法、操作规程、监管文件,这些内容半年一年才更新一次,检索优先级最高,因为所有回答都要引用制度依据。
第二层是产品层,存放具体产品的准入条件、额度范围、利率区间、期限选项,这些内容可能每月甚至每周更新,检索优先级次之。
第三层是话术层,存放标准应答话术、常见问题解答、客户沟通指引,这些内容更新最频繁,检索优先级最低,主要用于生成回答时的语言组织参考。
AgentArts支持多知识库配置,我给每个知识库设置了不同的检索权重。制度层权重1.0,产品层0.8,话术层0.5。这样当客户问"小微企业贷款额度上限"时,系统会优先从制度层找依据,再从产品层找具体数字,最后从话术层找表达方式。
2.3 检索调优:为什么你的RAG总是答非所问
RAG检索不准,八成是这三个原因之一:切分粒度不对、Embedding模型不适配、检索策略太单一。
切分粒度的问题前面说了,这里重点讲Embedding模型。AgentArts默认用的是通用中文Embedding模型,在通用语料上表现不错,但信贷领域有很多专业术语和缩写,比如"LPR"、"不良率"、"拨备覆盖率"、"风险敞口",通用模型对这些词的理解不够精准。我的做法是在AgentArts里上传了一批信贷领域的问答对,对Embedding模型做了微调。微调之后,检索"LPR调整对存量房贷的影响"时,能准确召回包含"贷款市场报价利率"和"存量浮动利率贷款"的片段,而不是召回一堆讲"利率"的通用内容。
检索策略方面,单一向量检索在信贷场景下不够用。客户问"餐饮行业能贷多少",向量检索可能召回一堆讲"行业准入"的片段,但漏掉了"餐饮行业特别授信政策"这个关键文档。我的做法是混合检索:向量检索+关键词检索,然后用重排序模型合并结果。AgentArts支持配置混合检索,关键词检索我设置了"行业名称+授信+额度"这样的组合,确保特定行业的政策不会被漏掉。
还有一个容易被忽略的点是检索数量。默认返回Top 5片段,但在信贷场景下,一个问题的答案可能分散在多个文档里。比如问"提前还款违约金怎么算",可能需要同时查合同条款、利率规则、还款方式说明三个文档。我把检索数量调到Top 10,然后让重排序模型筛选出最相关的5个片段喂给大模型。实测下来,回答完整度提升了大概30%。
3. 工作流编排:从意图识别到工单生成的完整链路
3.1 意图识别节点:信贷场景的意图分类比通用场景细得多
通用对话系统的意图分类通常就是"咨询"、"投诉"、"办理"几大类,但信贷场景下,"咨询"这个意图下面至少有二十个子意图:额度咨询、利率咨询、期限咨询、准入条件咨询、材料清单咨询、提前还款咨询、逾期处理咨询、征信影响咨询等等。如果意图识别做不细,后面的知识库检索和工具调用就没法精准路由。
AgentArts的意图识别节点支持自定义意图分类,我用了两级分类。第一级用大模型做粗分类,把用户问题归到"产品咨询"、"业务办理"、"贷后服务"、"投诉建议"四个大类。第二级用Few-shot示例做细分类,每个大类下面配置10-20个示例问题。比如"产品咨询"下面配置了"小微企业贷款需要什么条件"、"抵押贷款和信用贷款有什么区别"、"最高能贷多少"等示例。
这里有个经验:Few-shot示例要覆盖同义表达。客户不会说"我想咨询小微企业贷款的准入条件",他可能说"我开小公司的能贷吗"、"个体户能不能申请"、"没有抵押物行不行"。这些变体都要作为示例配进去,否则意图识别会漏。我大概配了200多条示例,覆盖了常见问法的80%以上。
3.2 知识检索与工具调用的路由逻辑
意图识别完之后,下一步是决定"查知识库"还是"调工具"。这个判断逻辑我放在了一个条件分支节点里。规则是这样的:
如果意图是"产品咨询"类,走知识库检索路径,从制度层和产品层召回信息,生成回答。
如果意图是"业务办理"类,先走知识库检索确认办理条件,再调用业务接口查询客户状态,最后生成办理指引。
如果意图是"贷后服务"类,直接调用业务接口查询合同信息,再结合知识库里的贷后政策生成回答。
这个路由逻辑看起来简单,但实际配置时有个坑:工具调用的前置条件校验。比如客户说"我要提前还款",智能体不能直接调提前还款接口,得先确认客户有没有未结清的贷款、贷款是否在可提前还款状态、有没有逾期。这些校验如果放在大模型里做,它可能会漏掉某些条件。我的做法是在工作流里加了一个"前置校验"节点,用规则引擎硬编码校验逻辑,只有全部通过才进入下一步。
3.3 多轮对话的状态管理
信贷业务办理通常需要多轮对话。客户说"我想申请贷款",智能体问"您是什么行业",客户回答"餐饮",智能体再问"营收大概多少",客户回答"300万",智能体再问"有没有抵押物",客户回答"有房产"。这个过程中,智能体需要记住前面几轮的信息,最后综合判断。
AgentArts提供了会话变量功能,可以在工作流节点之间传递数据。我定义了这么几个变量:industry(行业)、revenue(营收)、collateral(抵押物)、loan_amount(申请金额)、loan_purpose(资金用途)。每个变量在对应的对话轮次中赋值,最后在"方案生成"节点里统一使用。
这里有个细节:变量赋值时的容错处理。客户可能说"大概三百万吧"而不是"300万",可能说"做餐饮的"而不是"餐饮行业"。我在变量赋值节点里加了一个归一化处理,用大模型把自然语言转成标准格式。比如"三百万"转成"3000000","做餐饮的"转成"餐饮"。这个处理看起来不起眼,但能大幅降低后续逻辑判断的出错了率。
3.4 工单生成与人工兜底
智能体不是万能的,有些场景必须转人工。我的做法是在工作流末尾加了一个"置信度判断"节点。如果智能体对回答的置信度低于阈值(我设的是0.75),或者用户明确说"转人工",就触发工单生成流程。
工单生成节点会做三件事:第一,把对话历史、用户信息、已收集的变量打包成工单内容;第二,根据意图类型路由到对应的业务队列(比如"产品咨询"转售前,"贷后服务"转贷后);第三,给用户返回一个工单号和预计响应时间。
这里有个经验:工单内容要结构化。不要直接把对话记录扔给人工坐席,而是提取关键信息填到工单模板里。比如"客户咨询小微企业贷款,行业餐饮,营收300万,有房产抵押,申请金额50万,智能体已告知准入条件和所需材料,客户表示需要时间准备材料,要求人工跟进"。这样人工坐席一眼就能看懂上下文,不用翻聊天记录。
4. 金融场景下的容错机制:智能体出错怎么办
4.1 信贷智能体的错误类型与风险等级
智能体出错不可怕,可怕的是不知道它会出什么错。我把信贷智能体的错误分了三类:
第一类是事实性错误,比如把利率说错了、把额度上限说低了、把材料清单漏了一项。这类错误风险最高,因为客户可能基于错误信息做决策。防范手段是强制引用来源,每个回答必须附带知识库片段的原文和出处,如果检索不到依据,智能体必须说"我需要核实后回复您",而不是编一个答案。
第二类是流程性错误,比如该校验的条件没校验、该调用的接口没调用、该转人工的没转。这类错误风险中等,通常不会直接导致客户损失,但会影响体验。防范手段是工作流硬编码关键校验节点,不让大模型自由发挥。
第三类是表达性错误,比如语气不当、用词不专业、回答太啰嗦。这类错误风险最低,但影响品牌形象。防范手段是配置话术模板和风格指引,让大模型在生成回答时参考。
4.2 知识库检索的兜底策略
RAG最怕的是检索不到相关内容。客户问了一个知识库里没有的问题,大模型要么瞎编,要么说"我不知道"。前者风险极高,后者体验很差。
我的兜底策略是三层:
第一层,检索置信度过滤。AgentArts的检索结果会返回相似度分数,我设了一个阈值0.6,低于这个分数的片段不采用。如果所有片段都低于阈值,进入第二层。
第二层,同义改写重试。用大模型把用户问题改写成更规范的表达,再检索一次。比如客户问"没钱还了怎么办",改写成"贷款逾期处理方式",再检索。这个改写重试能解决大概40%的检索失败问题。
第三层,兜底话术。如果重试后仍然检索不到,智能体返回标准兜底话术:"您的问题我需要进一步核实,已为您创建咨询工单,工作人员会在1个工作日内回复。"同时触发工单生成流程。
4.3 大模型幻觉的抑制手段
大模型幻觉在信贷场景下是致命的。客户问"提前还款违约金多少",大模型可能根据"一般银行收1%-3%"这样的通用知识编一个答案,但实际上不同产品、不同还款期限的违约金规则完全不同。
我用了三个手段来抑制幻觉:
第一个手段是Prompt约束。在系统提示词里明确写:"你只能基于提供的知识库片段回答问题。如果片段中没有相关信息,必须回答'根据现有资料无法确认,建议咨询人工客服'。禁止使用你的通用知识进行推断。"
第二个手段是引用强制。要求大模型在回答中标注每个信息的来源,格式是"[来源:文档名称,章节]"。如果大模型编了一个没有来源的信息,后处理节点会检测到并拦截。
第三个手段是关键数字二次校验。对于利率、额度、期限、违约金比例这类关键数字,我在工作流里加了一个校验节点,用正则表达式从大模型回答中提取数字,然后和知识库片段中的数字比对。如果不一致,触发人工审核。
4.4 人工兜底的触发条件与响应机制
人工兜底不是简单的"转人工",而是要设计好触发条件和响应机制。
触发条件我设了这么几个:置信度低于0.75、用户明确要求转人工、涉及投诉或敏感话题、关键数字校验不通过、连续两轮对话未能解决用户问题。
响应机制方面,工单生成后会自动路由到对应的业务队列,同时给用户返回一个预计响应时间。如果队列繁忙,系统会自动升级优先级。我实测下来,智能体的自助解决率大概在65%左右,剩下35%转人工,其中大部分是复杂业务办理和投诉建议。
5. 实测数据与优化方向
5.1 关键指标实测
我在测试环境跑了一周,大概处理了2000多条模拟对话。几个关键指标:
| 指标 | 数值 | 说明 |
|---|---|---|
| 意图识别准确率 | 91.3% | 200条测试样本,18条误分类 |
| 知识库检索召回率 | 87.6% | 检索到相关片段的比率 |
| 回答完整度 | 82.4% | 人工评估,回答覆盖问题要点的比例 |
| 自助解决率 | 65.2% | 无需转人工的比率 |
| 平均响应时间 | 2.3秒 | 从用户发送到智能体回复 |
| 幻觉率 | 3.1% | 人工抽检发现的事实性错误比例 |
意图识别准确率91.3%这个数字看起来不错,但实际使用中,那8.7%的误分类主要集中在边界模糊的场景。比如"我想了解提前还款"和"我要办理提前还款",前者是咨询,后者是办理,但表达上很接近。我的优化方向是增加更多边界样本,同时引入上下文信息辅助判断。
幻觉率3.1%虽然不高,但在信贷场景下还是偏高。我分析了一下,主要发生在知识库覆盖不全的领域,比如一些新产品的政策还没入库,大模型就用通用知识补全了。优化方向是加快知识库更新频率,同时加强关键数字的校验。
5.2 性能瓶颈与优化
AgentArts的工作流执行有延迟,我实测下来,一个完整的6节点工作流平均耗时2.3秒,其中知识库检索占1.1秒,大模型生成占0.9秒,其他节点占0.3秒。
知识库检索是最大的瓶颈。优化手段包括:减少检索片段数量(从Top 10降到Top 5,但召回率会下降)、使用更快的Embedding模型(精度会下降)、缓存高频问题的检索结果。我目前用的是缓存方案,对Top 100高频问题做了结果缓存,命中率大概35%,平均响应时间降到了1.8秒。
大模型生成方面,AgentArts支持流式输出,用户可以看到逐字生成的效果,感知延迟会低很多。但流式输出有个问题:如果生成到一半发现幻觉,没法撤回。我的做法是在流式输出前加一个快速校验节点,对关键数字做预校验,通过后再流式输出。
5.3 后续迭代方向
接下来我打算从三个方向继续优化:
第一,知识库自动化更新。目前知识库更新还是手动上传文档,我打算对接内部的文档管理系统,实现政策文件更新后自动同步到知识库。
第二,多模态知识库。信贷业务有很多图表,比如利率走势图、额度测算表。目前这些图表还是以文本形式存储,检索效果不好。我打算试试AgentArts的多模态检索能力,把图表转成结构化数据再入库。
第三,智能体自我评估。让智能体在回答后自己评估置信度,如果置信度低就主动转人工,而不是等用户不满意再转。这个需要设计一套评估Prompt,目前还在试验阶段。
6. 踩过的坑与实操心得
6.1 知识库切分的坑:别信默认参数
AgentArts的默认切分参数是每500字一段,重叠50字。这个参数在通用文档上还行,在信贷文档上就是灾难。我一开始没改,结果检索出来的片段经常是半句话,大模型要么瞎编后半句,要么说"信息不完整"。
后来我改成按语义结构切分,最小单位是三级标题,最大不超过800字。如果三级标题下的内容超过800字,再按段落切分。表格单独处理,整个表格作为一个片段,如果表格太大就按业务逻辑拆。
这里有个细节:重叠字数要设小一点。默认50字的重叠在信贷文档里会导致检索结果重复,因为信贷文档的段落之间逻辑独立性比较强,不像小说那样需要上下文衔接。我把重叠设成了20字,只保留必要的上下文。
6.2 意图识别的坑:同义表达覆盖不全
我一开始配意图示例的时候,按照标准话术配的,比如"我想咨询小微企业贷款的准入条件"。结果测试的时候,客户说"我开小公司的能贷吗",意图识别直接归到了"其他"。后来我补了200多条同义表达,覆盖了常见问法的80%以上。
这里有个经验:意图示例要来自真实对话。我后来从客服系统里导出了1000条真实对话记录,从中提取了各种问法,效果比我自己编的好得多。真实用户的表达往往不完整、有错别字、有口语化表达,这些都要覆盖到。
6.3 工作流的坑:别让大模型做关键判断
我一开始把"是否满足贷款条件"的判断放在了大模型节点里,让大模型根据知识库片段和用户信息综合判断。结果发现大模型有时候会漏掉某些条件,比如客户说有房贷在还,大模型可能忘了算负债率。
后来我把关键判断都改成了规则引擎,用硬编码的逻辑做校验。大模型只负责理解用户输入和生成回答,不做关键决策。这个改动之后,流程性错误率从12%降到了2%以下。
6.4 容错的坑:兜底话术不能太生硬
我一开始的兜底话术是"抱歉,我无法回答您的问题,请转人工"。测试的时候用户反馈说感觉像被抛弃了。后来改成"您的问题我需要进一步核实,已为您创建咨询工单,工作人员会在1个工作日内回复。您也可以直接拨打客服热线XXX。"这样用户感觉有人管,体验好很多。
还有一个细节:兜底话术要分场景。产品咨询的兜底话术和贷后服务的兜底话术应该不一样。产品咨询可以说"我帮您转接专业的贷款顾问",贷后服务可以说"我帮您查询一下合同信息,请稍等"。场景化的兜底话术能让用户感觉智能体是真的在帮忙,而不是在推卸责任。
6.5 实测中的意外发现
有个意外发现:用户对智能体的容忍度比想象中高。我原本以为用户会介意"我是AI"这件事,但实测下来,只要智能体能解决问题,用户并不在意对面是人还是AI。反而有些用户觉得跟AI说话更自在,因为不用担心被推销。
另一个发现是:多轮对话中,用户会主动补充信息。比如智能体问"您是什么行业",用户可能回答"餐饮,去年营收300万,有房产"。这时候智能体要能识别出用户一次性提供了多个信息,分别赋值给对应的变量,而不是傻傻地继续问"营收多少"。
这个功能我是在变量赋值节点里加了一个"多信息提取"逻辑,用大模型从用户回答中提取所有可识别的变量。实测下来,多轮对话的轮次从平均5.2轮降到了3.8轮,体验提升明显。
6.6 关于AgentArts的使用建议
最后说几个AgentArts的使用建议:
工作流节点不要太多。我一开始设计了一个12节点的流程,结果调试起来非常痛苦,一个节点出错整个流程跑不通。后来精简到了6个核心节点,把一些辅助逻辑合并到相邻节点里,调试效率高了很多。
善用变量和上下文。AgentArts的会话变量功能很强大,可以在节点之间传递复杂数据结构。我定义了一个context变量,把所有用户信息和对话状态都放在里面,每个节点从context里读数据、写数据,避免了变量满天飞的问题。
测试要覆盖边界场景。我一开始只测了正常流程,上线后发现各种边界场景都会出问题。后来补了50多个边界测试用例,包括空输入、超长输入、特殊字符、多意图混合、中途切换话题等,覆盖率上去了,线上问题就少了。
日志要打全。AgentArts的日志功能可以记录每个节点的输入输出,调试的时候非常有用。我建议在每个关键节点都打日志,包括检索到的片段、大模型的原始输出、变量赋值结果等。出问题的时候,看日志比猜快得多。