基于大模型的「情感陪伴 NPC + 智能客服」一体化对话系统,为 App 数百万用户提供拟人化情感陪伴与各类 APP 使用问题或业务问题的自动化客服服务。
一、项目概述
1. 项目背景
该 APP 是一款中老年用户为主体的 视频/相册/社区/交友 类 App。本项目为 App 内嵌的 AI 对话服务,承担两类角色:
- 情感陪伴 NPC:虚拟角色「xxx」以真实朋友的身份与用户长期对话,具备记忆、亲密度成长、日程生活感、情绪感知等能力;
- 智能客服:自动回答 产品使用/问题反馈/会员、订单、支付等内容查询 问题,必要时自动创建工单并转接人工客服。
2. 核心能力
| 能力 | 说明 |
|---|---|
| 四层记忆体系 | 短期向量记忆 → 中期摘要 → 长期事实图谱 → 用户画像,实现”越聊越懂你” |
| 亲密度成长系统 | 归一化 0~1 的亲密度模型,含行为加权、非线性衰减、防刷上限、等级硬门槛 |
| 情绪/意图引擎 | LLM 驱动的 16 种情绪 × 17 种意图结构化分析,支撑路由与策略决策 |
| 边界防护 | 6 类越界意图识别 + 分层 Prompt + 多层安全后校验,兼顾体验与安全 |
| RAG 知识客服 | 混合检索 + 重排 + LLM 置信度评估 + 分级回复,低置信度自动转人工 |
| ReAct 工具调用 | 订单/VIP 查询工具化,白名单参数注入防幻觉,RAG+Agent 结果 LLM 融合 |
| 工单闭环 | 自动建单/复用、状态双向同步、转人工后 9 种跟进策略持续应答 |
| 高可用 | 模型多级降级探针恢复、分布式消息消费、双阶段健康检查、Sentry 全链路追踪 |
3. 我的角色
负责以下设计与实现
- 整个对话主链路各环节细节实现(含APP交互)
- RAG 检索链路
- 知识库补充增强(含知识实时入库内部审核系统的前端与后端)
- 内容数据查询 ReAct Agent 完整实现
- 模型可观测性与资源统计
- 用户长期事实图谱
- 情绪与意图识别细节调优
- 安全防护检测
- 数据:数据探查与数据分析,如 IM 分析、工单转人工率、资源消耗统计等
二、技术栈
1. 语言与框架
| 类别 | 选型 |
|---|---|
| 语言 | Python 3.11 |
| Web | Flask 3.x + Flask-SocketIO(gevent 协程架构,入口 monkey.patch_all() 全量补丁) |
| 实时通信 | WebSocket(user_message 事件)+ HTTP 双通道 |
| 配置中心 | Apollo(自研客户端,多级缓存 + Long Polling 热更新 + HMAC 签名) |
| 可观测 | Sentry(7 种集成插件)、上下文感知日志、LLM Token 用量/费用记账 |
2. 模型服务(阿里云 DashScope,OpenAI 兼容协议)
| 模型 | 用途 |
|---|---|
| qwen3-max / qwen3-next-80b-a3b-instruct / qwen-max | 对话生成主力,双模型互备 |
| qwen3-omni-flash | 语音多模态输入分析 |
| text-embedding-v4(1024 维) | 向量化 |
| gte-rerank-v2 | 检索精排 |
3. 存储选型(按数据形态分层)
| 存储 | 承载数据 |
|---|---|
| Weaviate 向量库 | 短期记忆(Umem)、中期摘要、NPC 陪伴记忆/L2 人设知识/日程、客服 QA 知识库 |
| Neo4j 图数据库 | 用户长期事实图谱(User–Fact–Topic) |
| MongoDB | 聊天历史、用户画像、亲密度流水、关系快照、情绪状态、Token 费用 |
| MySQL | LLM 调用日志、客服会话状态、工单上下文 |
| PostgreSQL + pgvector | 知识库文档(向量列 + tsvector 全文) |
| Redis | 模型降级状态、分布式锁、消息队列、活跃/灰度状态、各类缓存 |
三、总体架构

1. 请求处理主链路

2. 关键工程设计
① greenlet 上下文传递(全协程架构的地基)
gevent 环境下没有 thread-local 可用的请求上下文。项目实现了以 greenlet identity 为 key 的协程本地存储(tool/context.py),user_id/npc_id/message_id 三元组在三个入口(HTTP before_request、SocketIO 装饰器、IM 消费者协程)统一注入;safe_spawn 启动异步协程时自动拷贝完整上下文,使日志、Sentry、异步记忆写入天然携带用户维度,且 finally 统一清理防泄漏。
② 可插拔规则引擎(责任链模式)InputRule/OutputRule 基类 + 优先级注册排序。输入规则可设置 skip_llm 短路整个 LLM 调用(快捷回复、防注入拦截、阿里云内容安全),输出规则做后处理(Markdown 剥离、AI 身份守护、实时信息幻觉防护、emoji 频控、标点归一化)。单规则异常隔离不影响主流程。
③ 异步后置任务
记忆写入、事实抽取、画像更新、亲密度更新、埋点等全部通过 safe_spawn 异步执行,不阻塞回复 RT。
四、NPC 情感陪伴体系
1. 四层记忆架构

流转机制:
- 每轮:输入经情绪分析后写入短期记忆(相似度 0.9 去重),异步触发中期摘要与画像增量更新;
- 每 5 轮(Redis 计数器):触发深度更新——批量事实抽取入 Neo4j、LLM 全量重绘画像、重建亲密度/意图快照、更新情绪状态;
- 检索时按「主题命中」动态决定加载哪层记忆注入 Prompt,控制 token 成本。
2. 情绪/意图引擎(EmotionEngine)
- 纯 LLM 语义理解驱动,无硬编码关键词分类(关键词仅做危机监控告警);
- 双模型重试(主模型失败降级备用模型)+ JSON Schema 严格校验;
- 单次分析输出 8 大模块:意图(17 类)、情绪(16 种主情绪 + 强度 + 原因 + NPC 感受)、亲密度变化方向、主题、记忆分类、事实查询标记等,一次调用服务全下游;
- 支持语音多模态输入(omni 模型直接分析音频)。
3. 亲密度成长系统
两套协同的亲密度计算体系,对外统一由 RelationshipSnapshotPipeline 提供接口:
| 体系 | 职责 |
|---|---|
| RelationshipSnapshotPipeline | 时间加权累计分(7 天线性衰减)、7 级关系等级(疏远→羁绊)、意图趋势预警(推进过快/回避倾向)、等级跃迁里程碑事件 |
| IntimacyManager | 归一化 0~1 精细模型:正/负行为差异化权重(深度分享 0.18 vs 寒暄 0.003;人身攻击 -0.20)、非线性衰减(越接近 1 越难提升)、每日上限防刷、等级硬门槛(天数+互动次数)、负向行为累计升级、冻结机制、全程流水账审计 |
亲密度反向驱动全局体验:NPC 人设披露层级(L2 知识按 intimacy_min 过滤)、语气分级、边界容忍度、emoji 使用、日程共同活动(≥0.6 解锁夫妻共同做饭)、主动消息策略等。
4. NPC 拟人化设计
- 三层人设:L1 核心人格(MongoDB,按亲密度四层深度累加合并)→ L2 情境知识(Weaviate,17 个生活模块,亲密度后置过滤 + 「事实隐瞒模块」自然隐瞒而非硬拒绝)→ 动态日程(天气/节气/节日/库存/昨日睡眠共同影响的一整天时间线,30+ 事件类型);
- 心理带宽模型:综合随机波动 + 亲密度 + 对话疲劳 + 上轮质量计算「心理带宽」,低于阈值进入 REST 模式(允许说半句话、允许不解决任何问题),避免 NPC 永远精力充沛的机器感;
- 主动消息:四级弹药(引导提问 > LLM 个性化 > 静态池 > 兜底短语)+ 递延推送(2/10/30/120 分钟)+ 活跃时段 + 冷却控制;
- 防重复表达:近 8 轮短句黑名单注入 Prompt、NPC 已问问题记忆(分永久/每日,按亲密度限制提问权限)。
5. 边界防护(安全 + 体验的平衡)

设计原则:不道歉、不否定用户情感、坚定设界、保护自尊;越亲密语气越柔软,但底线不变。
五、智能客服体系
1. 会话路由决策树(ConversationRouter)

多轮上下文四层管理:会话状态(MySQL,dirty-snapshot 只写变更 + 历史快照审计表)、问题摘要(每轮 LLM 重生成,含话题切换检测)、已确认事实(MongoDB,从 RAG 回复中提取可复用事实)、对话主线(一句话核心陈述,持续回应用户追问质疑)。
2. RAG 检索链路(核心原理)

关键取舍:宁可转人工,不用低置信度答案硬答——置信度不足即触发工单转人工(
rag_low_confidence),保证客服场景的答案可靠性。
3. ReAct Agent(订单/VIP 工具调用)
- 经典 ReAct 循环:Thought → Action → Action Input → Observation 四元组滚动,MAX_STEPS=6 防失控;
- 工具集:VIP 状态/详情/判断 + 最近订单/最后一笔订单/最后会员购买/最后云盘购买,经内部微服务 API 查询;
- 安全设计:
- Pydantic 定义工具参数 Schema(中文描述,缺失参数用中文友好提示引导补充);
- 白名单参数强制注入——
user_id等敏感参数从系统上下文覆盖,杜绝 LLM 编造他人 ID 越权查询; - 执行时过滤 Schema 外参数防注入;JSON/字典/k=v/位置参数四种解析容错;
- 触发优化:关键词前置过滤,避免无意义的 Agent 调用开销。
4. 工单与人工转接闭环
- 触发条件(优先级):用户主动要求(关键词/感知) > 情绪升级(强度≥3 或连续上升 2 轮) > RAG 低置信度;
- 转接流程:查活跃工单复用(避免重复建单)→ 创建工单 + 富文本卡片推送 → 用户后续消息自动同步工单 → 按人工客服工作时间差异化告知;
- 转接后不停摆:
post_handoff_followup阶段 9 种跟进策略(总结/澄清/情绪承接/边界说明/重复转人工安抚/话题过渡/收尾/等待),持续以「人工客服代理」角色锚定应答; - 状态双向同步:会话创建时同步、用户维度同步、定时任务(分布式锁)批量同步,状态变更全量入历史快照表审计。
六、可靠性与工程化设计
1. 模型多级降级(ModelManager)

2. 分布式消息处理(IM 路径)
- Redis 队列 + 每用户一个消费者:分布式启动锁防多 Pod 重复消费、LRU 淘汰控制最大 200 并发消费者、心跳保活、消息 ID 幂等去重;
- 消息聚合器:末尾无标点的「未说完」消息延迟 15 秒聚合,多条短句合并处理,处理期间新消息排队防打断;
- 灰度发布:按用户 ID 尾号灰度转发 beta 环境,失败自动回退本地。
3. 其他工程化亮点
| 设计 | 说明 |
|---|---|
| 双阶段健康检查 | 前 3 次完整端到端 RAG 链路验证(模型/知识库/规则全链路),之后降级为轻量依赖 ping,控制 LLM 费用 |
| 后台批处理 | 待深度更新用户后台协程处理:分布式锁保证集群单实例、每 10 分钟一批、异常自动重启 |
| 知识自进化闭环 | 工单 → LLM 抽取 QA → 人工审核(Web 页 + Redis 异步队列)→ 扩写入库,知识库持续从真实问题中生长 |
| Weaviate 多节点故障转移 | 生产环境多节点客户端自动切换 |
| 全链路费用记账 | 每次 LLM/embedding/rerank 调用按定价记账入 Mongo,支撑成本分析 |
| 上下文感知日志 | getLogger() 自动注入调用模块 + user_id/npc_id/message_id,日志天然按用户可检索 |
七、部署架构

- Embedding Proxy 的作用:Weaviate 的
text2vec-transformers模块本应加载本地 BERT 类模型,这里用 FastAPI 代理把该协议翻译为 DashScopetext-embedding-v4调用——既保留 Weaviate 自动向量化能力(insert/near_text),又统一了全项目的向量空间(1024 维),并省去自托管 embedding 模型的 GPU 成本。 - 环境通过
ENV环境变量切换(dev/beta/prod 对应不同 Apollo 地址),服务启动强依赖 Apollo 可达。
八、项目亮点总结
- 从零设计并实现四层记忆架构(短期向量记忆 → 中期摘要 → Neo4j 长期事实图谱 → MongoDB 用户画像),配合每轮增量 + 每 5 轮深度的两级抽取节奏,让 AI 陪伴具备跨会话的”记忆成长”能力;
- 设计归一化亲密度模型:正/负行为差异化权重、非线性衰减、每日上限防刷、等级硬门槛与冻结机制,并让亲密度反向驱动人设披露、语气、边界容忍度等全链路体验;
- 构建 LLM 驱动的情绪/意图引擎:一次结构化分析输出 8 大模块服务全下游,双模型重试 + JSON Schema 强校验保证稳定性;
- 实现亲密度感知的边界防护体系:6 类边界意图 × 分层 Prompt × 多层安全后校验(禁止词 + 必要信号 + LLM 二审),在体验与安全间取得平衡;
- 搭建高质量 RAG 客服链路:问题扩写 + 混合检索 + rerank 精排 + LLM 置信度三级评估 + 分级回复,低置信度自动转人工,保证答案可靠性;
- 落地 ReAct 工具调用:订单/VIP 查询工具化,白名单参数强制注入防越权,RAG + Agent 双结果 LLM 融合;
- 全协程高并发架构:gevent + greenlet 上下文传递 + safe_spawn 异步任务,规则引擎短路与异步后置任务保障回复 RT;
- 完善的可靠性设计:模型四级降级与探针恢复、分布式消息消费与灰度发布、双阶段健康检查、Sentry + 上下文日志 + LLM 费用记账的可观测体系;
- 知识自进化闭环:工单对话 → LLM 抽取 QA → 人工审核 → 扩写入库,知识库随业务持续生长。
发表评论