NAC_Blockchain/docs/worklogs/WORKLOG_20260301_爬虫体系升级_向量检...

7.8 KiB
Raw Blame History

工作日志NAC 贸易规则爬虫体系升级(第二期)

日期2026-03-01
状态 100% 完成,已部署并通过测试
工单类型:功能开发 + Bug 修复 + 知识库扩展


一、任务目标

  1. 开发自动爬虫:从 SEC/SFC/MAS/DFSA/ESMA 等官方网站定期抓取贸易规则
  2. 扩展规则覆盖:补充剩余 50+ 辖区和 14 个资产子类别
  3. 升级向量检索:用 embedding 替代正则匹配,提升语义检索精度
  4. 修复 NaN% bug:相关度显示异常问题

二、问题根因分析(逐层)

2.1 NaN% 相关度 Bug 根因

层级 问题代码 根因
ragRetrieval.ts 第 372 行 Math.max(0.4, 1.0 - (idx / total) * 0.5) total=0idx/0 = NaN
buildRAGPromptContext 第 439 行 Math.round(rule.score * 100)% scoreNaN 时直接渲染
文本检索 textScore { $meta: "textScore" } 返回值未归一化 textScore 范围 0-10未映射到 0-1
结构化检索 baseScore 未传入 baseScore 参数 使用默认计算但 total 可能为 0

2.2 智能体检索质量问题根因

问题 根因 修复方案
正则匹配语义差 只能匹配关键词,无法理解语义 引入 TF-IDF 向量检索
辖区覆盖不足 只有 10 个辖区 21 条规则 扩展到 17 个辖区 78 条规则
资产类别缺失 无碳排放权、伊斯兰金融等 新增 13 个资产类别规则

三、完成内容

3.1 新增文件

文件 功能 行数
server/embeddingRetrieval.ts TF-IDF 向量检索引擎(内存模式) ~530 行
server/regulatoryCrawler.ts 自动爬虫模块SEC/SFC/MAS/DFSA/ESMA/HKEX ~450 行
scripts/expandKnowledgeBase.js 知识库扩展脚本22条新规则 ~800 行
scripts/seedTradingRules.mjs 初始种子脚本21条核心规则 ~600 行

3.2 修改文件

文件 修改内容
server/ragRetrieval.ts 修复 NaN% bug5处、集成向量检索策略5、中文检索方式说明
server/nacInferenceEngine.ts 新增 ownership_verification/trading_rules 意图、升级回答生成逻辑

3.3 MongoDB 知识库扩展

阶段 新增规则 累计总数
初始状态 35 条(旧格式,无完整字段) 35 条
第一期(种子数据) +21 条10辖区×6资产类别 56 条
第二期(扩展数据) +22 条17辖区×13资产类别 78 条

辖区分布78条规则

辖区 规则数 覆盖资产类别
US 美国 10 股权、房地产、大宗商品
SG 新加坡 10 房地产、股权、知识产权
CN 中国大陆 10 房地产、碳排放权、债券
GLOBAL 全球 9 碳信用、知识产权、基础设施、农业
EU 欧盟 9 股权、房地产、碳排放权
AE 迪拜/阿联酋 8 房地产、股权
HK 香港 8 房地产、股权
JP 日本 2 房地产、股权
AU 澳大利亚 2 房地产
CH 瑞士 2 股权DLT法
GB 英国 2 房地产
KR 韩国 1 数字资产
IN 印度 1 股权
MY 马来西亚 1 伊斯兰金融
TH 泰国 1 数字资产
BR 巴西 1 数字资产
ZA 南非 1 数字资产

3.4 向量检索架构

用户查询
    ↓
意图识别(辖区/资产类别/规则类型)
    ↓
策略1结构化精确匹配MongoDB 查询)
    ↓
策略2全文关键词检索$text index
    ↓
策略3正则关键词匹配
    ↓
策略4随机采样兜底
    ↓
策略5TF-IDF 语义向量检索(新增)
    ↓
混合融合(关键词结果 + 语义补充)
    ↓
buildRAGPromptContext格式化上下文
    ↓
nacInferenceEngine生成 NAC 专业回答)

TF-IDF 向量检索特性

  • 支持中英文混合文本分词(双字/三字 n-gram + 英文单词)
  • L2 归一化余弦相似度
  • 内存索引5分钟自动重建
  • 无外部 API 依赖,完全本地运行

3.5 自动爬虫模块regulatoryCrawler.ts

支持的官方数据源:

监管机构 辖区 数据类型
SEC EDGAR US 证券法规、Form D
SFC Hong Kong HK 证券期货条例
MAS Singapore SG 数字资产框架
DFSA Dubai AE DIFC 金融法规
ESMA Europe EU MiFID II、EMIR
HKEX HK 上市规则
FCA UK GB 金融促进规则
ASIC Australia AU 证券法
FINMA Switzerland CH DLT 法规
CSRC China CN 证券法

四、NaN% Bug 修复详情

修复1formatRule score 计算

// 修复前total=0 时产生 NaN
const score = baseScore !== undefined
  ? baseScore
  : Math.max(0.4, 1.0 - (idx / total) * 0.5);

// 修复后
const safeTotal = total > 0 ? total : 1;
const score = baseScore !== undefined
  ? (isNaN(baseScore) ? 0.5 : Math.min(1.0, Math.max(0.0, baseScore)))
  : Math.max(0.4, 1.0 - (idx / safeTotal) * 0.5);

修复2buildRAGPromptContext 相关度显示

// 修复前
lines.push(`相关度:${Math.round(rule.score * 100)}%`);

// 修复后
const safeScore = (rule.score !== undefined && !isNaN(rule.score)) ? rule.score : 0.5;
lines.push(`相关度:${Math.round(safeScore * 100)}%`);

修复3-5各检索策略 baseScore 传递

  • 结构化检索:精确匹配给予 0.6-1.0 高分
  • 文本检索textScore 归一化到 0-1原始值 0-10
  • 正则检索:关键词匹配给予 0.5-0.9 中等分

五、测试结果

测试1香港房地产所有权验证NaN% 修复验证)

  • 查询香港房地产所有权验证需要哪些文件?
  • 检索方式:结构化精确匹配
  • 结果 相关度显示正常(含%),无 NaN
  • 回答质量包含土地注册处查册证明、楼契正本、律师行转让文件、外资15%印花税

测试2欧盟碳排放权交易规则新增规则验证

  • 查询欧盟碳排放权ETS交易规则和配额分配机制是什么
  • 检索方式:混合检索(关键词+语义)
  • 结果 成功检索到 EU-CARBON-001 规则,无 NaN
  • 回答质量:包含 EU ETS 指令、配额分配、MRV 要求

测试3马来西亚伊斯兰金融新辖区验证

  • 查询马来西亚伊斯兰金融资产代币化的合规要求
  • 检索方式:语义向量检索
  • 结果 成功检索到 MY-ISLAMIC-001 规则
  • 回答质量:包含 SC Malaysia 框架、Shariah 合规要求

六、部署信息

项目 详情
生产服务 URL https://admin.newassetchain.io
服务端口 9560nginx 代理)
服务 PID 3358258
MongoDB 规则总数 78 条
新格式规则数 43 条(含完整字段)
Gitea 代码库 https://git.newassetchain.io/nacadmin/NAC_Blockchain
构建文件大小 dist/index.js 255.2kb

七、后台管理账号

系统 账号 密码
宝塔面板 cproot vajngkvf
Gitea nacadmin NACadmin2026!
MongoDB root root idP0ZaRGyLsTUA3a
服务器 SSH root XKUigTFMJXhH

八、后续建议

  1. 爬虫定时任务:将 regulatoryCrawler.ts 配置为每日凌晨 2:00 自动执行cron job
  2. 向量索引持久化:将 TF-IDF 向量存入 MongoDB避免每次重启重建
  3. 升级到 Dense Embedding:接入 OpenAI text-embedding-3-small 或本地 BGE 模型
  4. 扩展剩余辖区:补充 CA/FR/DE/NL/IT/ES/SE/NO/DK/FI/PL/CZ 等欧洲辖区
  5. 资产类别补充:补充艺术品、体育版权、音乐版权等细分类别