1. 项目背景与核心突破
去年在金融科技领域,我们团队遇到了一个棘手的问题:传统知识库问答系统的准确率长期徘徊在70%左右。每当用户咨询理财产品条款或交易规则时,系统要么给出不完整的答案,要么干脆回复"未找到相关信息"。这种情况在双十一大促期间尤为严重,客服工单量激增了300%。
经过三个月的技术攻坚,我们最终将问答准确率提升到了95.3%的行业新高度。这个突破性进展的关键在于创新性地融合了知识图谱与智能体(Agent)技术,对传统检索增强生成(RAG)架构进行了全面升级。现在系统不仅能准确理解"黄金ETF的交易手续费是多少"这类明确问题,还能处理"我想找个比余额宝收益高但风险差不多的产品"这样的模糊需求。
2. 技术架构演进之路
2.1 传统RAG的局限性
最初我们采用典型的RAG架构:用户问题→向量检索→LLM生成答案。这套方案暴露了三个致命缺陷:
- 语义鸿沟问题:当用户问"基金认购和申购的区别"时,系统可能返回开户流程文档,因为向量空间中的距离相近
- 多跳推理缺失:对于"去年收益率前三的基金现在还能买吗"这类需要串联多个知识点的查询束手无策
- 动态决策困难:无法根据用户画像(如风险偏好)个性化调整答案
测试数据显示,单纯优化嵌入模型或增加检索量,准确率天花板始终在78%左右。
2.2 知识图谱的引入
我们在原有系统上叠加了金融知识图谱层,包含:
- 实体节点:基金产品、交易规则、风险等级等12000+个
- 关系边:"包含"、"替代品"、"风险高于"等30余类
- 动态属性:实时收益率、申购状态等
关键技术突破在于构建了双路检索机制:
def hybrid_retrieval(question): # 并行执行向量检索和图谱查询 vector_results = vector_search(question) graph_results = graph_traversal(question) # 融合策略 if detect_need_multi_hop(question): return prioritize_graph_results(graph_results) else: return rerank_with_graph(vector_results, graph_results)这种混合检索使复杂问题的准确率提升了41%,特别是对于需要横向对比(如"比较A基金和B基金的费用结构")的场景效果显著。
2.3 Agent的协同增强
知识图谱解决了"知道什么"的问题,而智能体系统则负责"如何用"。我们设计了三级Agent架构:
- 路由Agent:分析问题类型,决定调用检索、计算或推荐模块
- 验证Agent:检查答案与知识图谱的逻辑一致性
- 个性化Agent:根据用户历史行为调整回答详略程度
例如处理"推荐保守型理财产品"时:
- 路由Agent识别需要推荐+解释
- 检索Agent找出符合R1风险等级的产品
- 验证Agent确保推荐产品未下架
- 个性化Agent决定是否附加收益率走势图
3. 核心实现细节
3.1 知识图谱构建流水线
金融领域的知识图谱构建面临数据分散、格式不统一的挑战。我们的解决方案是:
多源数据采集:
- 结构化数据:MySQL产品库→Neo4j转换器
- 非结构化数据:PDF说明书→OCR+信息抽取模型
- 半结构化数据:HTML常见问题→自定义爬虫
实体对齐算法: 采用改进的SimRank算法解决"货币基金"vs"现金管理工具"等别名问题:
sim(a,b) = 0.5*(∑sim(N(a),N(b))/|N(a)||N(b)|) + 0.3*cosine_embedding(a,b) + 0.2*jaccard(text(a),text(b))- 动态更新机制:
- 每日凌晨增量更新基础数据
- 实时监听关键指标变更(如基金暂停申购)
3.2 混合检索系统优化
为提高检索效率,我们设计了分层索引结构:
| 索引类型 | 数据范围 | 更新频率 | 适用场景 |
|---|---|---|---|
| 内存索引 | 热点知识 | 实时 | 高频简单查询 |
| 图索引 | 实体关系 | 每日 | 多跳推理 |
| 向量索引 | 长文本 | 每小时 | 语义匹配 |
检索过程加入三种增强策略:
- 查询扩展:将"黄金ETF"自动扩展为"黄金交易型开放式证券投资基金"
- 时间感知:对含"最新"的问题优先返回最近更新文档
- 失效过滤:自动过滤已废止的业务规则
3.3 Agent决策流程设计
智能体系统的核心是决策树的动态生成。以理财产品推荐为例:
- 接收原始问题:"想找个比余额宝收益高的"
- 生成决策树:
IF 风险偏好未指定 THEN 默认=平衡型 IF 比较基准=余额宝 THEN 收益率阈值=2.3% FILTER 产品状态=可申购 SORT BY 近一月年化收益 DESC LIMIT 3 - 执行决策路径,生成带解释的推荐: "根据您的需求,推荐以下产品:
- XX现金宝(近七日年化2.8%)
- YY天天盈(近一月年化2.65%)..."
4. 实战效果与调优经验
4.1 性能指标对比
上线三个月后的关键数据:
| 指标 | 传统RAG | 新系统 | 提升幅度 |
|---|---|---|---|
| 简单问题准确率 | 82% | 97% | +15% |
| 复杂问题准确率 | 53% | 89% | +36% |
| 平均响应时间 | 1.2s | 1.8s | +0.6s |
| 转人工率 | 25% | 6% | -19% |
虽然响应时间略有增加,但通过以下优化控制在可接受范围:
- 图查询预加载1度邻居节点
- 向量检索采用HNSW索引
- Agent决策树缓存
4.2 踩坑实录
问题1:知识图谱更新导致答案不一致
- 现象:某基金已更名但系统仍返回旧称
- 解决方案:建立变更传播机制,强制关联答案刷新
问题2:Agent决策死循环
- 案例:路由Agent与验证Agent互相要求对方先执行
- 修复:设置最大递归深度+超时熔断
问题3:金融术语二义性
- 实例:"申购费"在不同产品中指代前端或后端收费
- 改进:在知识图谱中添加收费类型属性
5. 关键成功要素
这个项目给我最深的体会是:金融领域的知识系统建设必须坚持三个原则:
- 可解释性优先:每个答案都能追溯到知识图谱中的具体节点,这对合规审查至关重要
- 动态适应性:金融市场规则变化快,系统必须支持低成本的Schema扩展
- 人机协同:保留人工干预接口,对敏感问题(如投资建议)强制加入人工审核环节
我们正在将这套架构扩展到保险、信贷等业务场景。一个有趣的发现是:当知识图谱覆盖率达到90%以上时,继续增加数据对效果提升的边际效益会急剧下降,此时优化Agent的决策逻辑反而能带来更大收益。