回首页

保险销售 AI 陪练平台

  • Go
  • huma
  • pgx
  • PostgreSQL
  • React 19
  • TanStack Query
  • Ant Design
  • OpenAPI

众安信科内部产品

众安信科规划的保险销售对练与考核平台。LLM 扮演客户,学员来卖,AI 给这段对话评分,讲师复核分数。方案调研、产品与技术方案、后端、管理端和学员端都由我一人完成,大量代码交给 AI 编码 Agent 写。目前是内部原型,正在重构。

要解决的问题

学员练完以后,讲师只能口头点评,没有记录,不同讲师的标准也不一样。

保险还有自己的规矩:

  • 夸大收益、虚假承诺、误导客户,一律算否决项,其他方面做得再好也不通过。
  • 条款和监管定义必须能追到原文,不能由模型自己发布。
  • 模拟客户要有底牌,而且不能靠在提示词里叫模型保密来保护。

使用者有三类:学员、讲师、管理员。服务端的权限校验才是真正的边界,前端只是把不相关的入口藏起来。

对练

底牌不进提示词

所有卡片(人设底牌、异议、购买信号、合规要点)共用一套触发结构:关键词的任一、全部、排除,正则,最少轮次,概率,一次性还是常驻,优先级。每一轮结束后,引擎检查对话、掷概率,写一条只追加的释放事件。只有已释放的卡片会进入客户下一轮的上下文,其余的根本不发给模型。

分层的上下文

最前面是指令、公开人设、场景、条款和任务目标,然后是摘要层,最后是对话。三到五行的人设提醒每一轮挂在最后一条用户消息上。满 20 轮时把较早的轮次压成摘要、保留最近 8 轮;硬上限 24000 字符,超了也至少保留 4 轮。

断线也不丢的流式对话

SSE 事件分 start、delta、end、error 四种,每 15 秒一次心跳。同一次作答同一时间只生成一条回复,靠数据库里的在途标记和所有者围栏保证。每条消息带幂等键,重发只会返回「重复」,不会再生成一条。关掉页面不会取消生成,重新打开会接上正在生成的那一条。

模拟客户、评分、总结、素材助手是四个独立的 AI 角色,各自配模型,通过 OpenAI 兼容接口接入。

素材与条款发布版本任务下发冻结快照学员对练模拟客户AI 评分人工复核 素材与条款 发布版本任务下发 冻结快照学员对练 模拟客户AI 评分 人工复核

评分与复核

评分

Worker 用数据库租约领取评分任务,每过超时时间的三分之一续一次租,最多重试 5 次。每段对话并发评 3 次:有效样本至少过半,每个维度取档位中位数,同时记下分歧度。

证据必须逐字引用原文。校验器把空白归一后到对话里逐条找引文,找不到的直接丢掉。报告再挑出扣分最多的两三个回合改写:原话、问题、更好的说法。

复核

人工复核从不修改成绩,而是追加一条标为人工的新成绩,写明维度、新档位和理由;服务端按冻结的评分标准把档位换算成分,重算加权总分、否决线和是否通过。人工结论以新记录追加,AI 不能修改已有成绩。只有管理员能覆盖否决,每次作答最多一次,必须写理由。

专家校准按批次盲评:专家看不到模型的分,也看不到彼此的分,分歧交给登记的仲裁人。

真走一遍才发现的错

评分标准里的权重和否决线一直存在,却从来没生效过。快照里存这份标准用的是一个字段名,服务端读的是另一个,读到空值,就退回了算术平均。讲师按标准复核,机器却在求平均。9 月 21 日修好。

另一个意外是上游限流:有一次统计,评分成功 9 次、失败 29 次。现在评分失败会自动重试,仍然失败就由讲师直接打分,报告里会写明分数来自讲师。

内容与考试

  • 九类素材(人设、条款、异议、信号、合规、评分标准、案例、试卷、场景)共用一个素材壳和一张版本表:草稿、已发布、已归档。同一素材只有一个草稿,发布后只读,被任务引用的草稿不能删。这套生命周期同时由数据库触发器和 Go 状态机保证,有一个测试专门检查两边一致。
  • 条款导入:素材助手只能通过固定的工具往草稿的固定槽位里填。人逐槽确认之后才能进入审核和发布。来源文件重新解析也不会改动已发布的条款。
  • 任务在下发时冻结快照,之后再改,不影响已经做过的作答。
  • 考试支持五种题型,按蓝图和随机种子确定性组卷。题不够时列出缺口,必须显式接受才能继续,试卷不会悄悄少题。

工程

  • 契约:Go 类型经 huma 生成 OpenAPI,再生成 TypeScript 类型,共 115 个路径、143 个操作。检查时重新生成,有任何差异就失败;不允许手写前端类型。
  • 分层由 lint 强制:cmd、app、biz、domain,业务代码不碰数据库驱动。前端单文件不超过 400 行,管理端、学员端和共享包之间不能反向引用。
  • make check 统一门禁:契约检查、lint、迁移检查、类型检查和测试。竞态测试和数据库集成测试在发布前另跑。没配测试库时测试直接失败而不是跳过,注释里写的是:跳过了主链路的绿灯,比红灯更糟。
  • 9 月 2 日到 4 日做过一次真正的重构:42 个迁移压成一个基线,sqlc 换成原生 pgx,每个领域按层重建。一个提交删了 25355 行。
  • 51 个 Go 测试文件,333 项数据库测试零跳过,11 组 Playwright 端到端测试覆盖桌面和手机,9 月 9 日 24 组全部通过。

现在的位置

9 月 20 日我停下来,把它当产品而不是代码重新看了一遍。到那天为止,还没有开发之外的人打开过它;库里的账号和作答全是测试数据。功能一直在长,却没有一条路被从头走到尾。

于是我收窄了范围:讲师是主要使用者,第一件事是让一次对练拿到一份有人负责的分。这一版关掉了 11 个入口,考试也在其中。

明明效率提高了,功能落地也快了,但就是交不出来。

门禁能保证代码不变坏,却说不出产品能不能用。字段存在却从不生效这种问题,只有把真实流程走一遍才会暴露。

时间线

  1. 08.14调研,写整体方案
  2. 08.18技术方案;建仓库,三端首轮实现
  3. 08.21接入真实模型的流式对练;卡片与触发
  4. 09.01领域 Schema;条款库与标准库
  5. 09.04整体重构:迁移基线、分层领域、契约管线
  6. 09.10验收走查:记 180 条问题,分批修阻塞项
  7. 09.22聚焦讲师评分;修好权重和否决线;人工打分兜底