Skip to content

Latest commit

 

History

History
119 lines (85 loc) · 3.8 KB

File metadata and controls

119 lines (85 loc) · 3.8 KB

ContextWeave

ContextWeave 是一个企业私有知识库和问答系统。用户上传文档,系统完成解析和索引,之后可以直接向知识库提问。

能做什么

  • 支持 PDF、Word、TXT 等常见文件。
  • 上传中断后可以继续上传,不必从头开始。
  • 同时使用关键词和向量语义检索。
  • 用 Cross-Encoder 对候选结果重新排序。
  • 命中小子块后,自动补回对应的父级上下文。
  • 聊天回答保留引用,历史记录也能查看引用。
  • 关键词和向量两条检索路径都遵守用户、组织和公开文档权限。

默认检索流程

文档 -> 子块 -> BM25 + HNSW -> RRF -> Cross-Encoder
     -> 父级上下文 -> Dynamic Top-K -> 带引用的回答

当前默认值:

  • BM25 权重:0.25
  • HNSW 权重:1.0
  • 每条分支最多召回:100
  • 送入重排的候选:20
  • 父块大小:2048 字符
  • 子块大小:512 字符,重叠 100 字符

这些值来自当前本地实验中表现最好的组合。它们仍然可以通过环境变量修改,正式上线前应在更大的真实数据集上再次验证。

本地启动

环境要求:Windows 11、WSL2、Docker、Java 17、Maven、Node.js 18.20+ 和 pnpm 8.7+。

  1. 复制 .env.example.env,填写数据库、服务和模型密钥。不要提交 .env
  2. 启动本地服务:
powershell -ExecutionPolicy Bypass -File .\scripts\start-local.ps1
  1. 打开聊天页面:http://localhost:9527/#/chat
  2. 使用完毕后停止服务:
powershell -ExecutionPolicy Bypass -File .\scripts\stop-local.ps1

修改 Java 后,可以先编译触发热加载:

mvn -q -DskipTests compile

主要服务

服务 作用
Spring Boot API、权限、检索和聊天
Vue 3 网页界面
MySQL 用户、文件和持久化聊天记录
Redis 会话、短期聊天状态和断点续传状态
Elasticsearch BM25 和 HNSW 检索
Kafka 后台文档处理
MinIO 源文件和上传分片

检索评测结果

评测使用 SciFact/NFCorpus 的 48 条固定查询。它适合比较代码改动,不是完整 BEIR 榜单,也不代表生产环境一定达到相同效果。

检索方式 Recall@5 Recall@10 MRR@10 NDCG@10
BM25 0.4910 0.5111 0.7339 0.6313
HNSW KNN 0.5326 0.5799 0.8201 0.7264
HNSW KNN + 重排 0.5368 0.5889 0.8492 0.7509
等权混合 + 重排 0.5325 0.5700 0.8408 0.7365
调过权重的混合 + 重排(0.25:1.0 0.5441 0.5965 0.8492 0.7569

等权融合时,BM25 对前 20 条重排候选的影响太大,会把一部分有价值的语义结果挤出去。把 BM25:KNN 调为 0.25:1.0 后,这个问题在当前评测集上得到改善。

父子分块实验中,父块 2048 字符是目前测试组合里比较平衡的选择:Recall@5 为 0.5641,Dynamic Top-K 平均选择 7.04 条结果。父块 4096 的测试在 embedding 请求阶段超时,因此没有计入结果。

详细的、不包含查询原文的报告见 benchmarks/retrieval/reports

配置示例

CONTEXTWEAVE_RETRIEVAL_RRF_BM25_WEIGHT=0.25
CONTEXTWEAVE_RETRIEVAL_RRF_KNN_WEIGHT=1.0
CONTEXTWEAVE_RERANK_MAX_CANDIDATES=20
CONTEXTWEAVE_RERANK_TOP_N=10
FILE_PARSING_PARENT_CHUNK_SIZE=2048

测试

mvn test
python -m unittest discover benchmarks\retrieval -p 'test_*.py'

前端类型检查:

Set-Location frontend
pnpm typecheck

更多文档

许可证

Apache License 2.0,详见 LICENSE