技术路线外部调研与方案修正¶
为什么做这轮调研¶
前一轮实验已经验证了入库阶段不能过早摘要化。但这些实验仍然默认了既有技术路线:ES / embedding / MCP / Zenoh / 企微入口。
为了避免在既定路线里自证,本轮并行调研了企业 RAG、开源知识库、检索引擎、GraphRAG、MCP 工具层和总线/编排方案。结论是:当前主线不用推倒,但需要做关键修正。
总结论¶
OrgReOrg / Harness 的核心不应被 Dify、RAGFlow、Open WebUI 或 AnythingLLM 整体替代。它们更适合被拆成可借鉴模块:
- Dify:Knowledge Pipeline、External Knowledge API、retrieval testing。
- RAGFlow:复杂文档解析、可视化 chunk、引用溯源。
- Open WebUI:语义查询、精确 grep、按行读取组合成 agentic knowledge tools。
- AnythingLLM:attached document 与 RAG 的产品边界。
- LlamaIndex / Haystack:ingestion、pipeline、eval 和 workflow 组件。
- LangGraph / Temporal:checkpoint、human-in-the-loop、durable execution。
需要立刻修正的地方:
- 检索底座不能只验证 ES / OpenSearch,也要纳入 Postgres + pgvector / FTS。
- MCP 不作为安全边界,必须经过 Tool Gateway。
- Zenoh 暂时不进入核心 Demo 主线,先用 registry + HTTP/gRPC,必要时再评估 NATS、Kafka / Redpanda 或 Zenoh。
检索底座对比¶
| 路线 | 适合什么 | 当前判断 |
|---|---|---|
| OpenSearch / Elasticsearch | BM25、hybrid、RRF、rerank、explain、索引生命周期、权限过滤 | 第一候选,但要验证运维复杂度和许可边界 |
| Postgres + pgvector / FTS | 小中规模、强一致、低运维、RLS、业务数据同库 | 必须进入第一批 benchmark |
| Qdrant / Weaviate | 快速向量和混合检索原型 | 可作为第二批对照 |
| Vespa | 大规模、复杂排序、在线特征、强 ranking expression | 当前过重,除非排序逻辑明显复杂 |
| GraphRAG / LightRAG | 多跳、全局总结、跨文档关系 | 只作为增强层,不替代基础检索 |
下一轮实验从 retrieval_failure_benchmark 升级为:
text
retrieval_platform_benchmark
同一批文档、同一批查询、同一批权限和 stale data 反例,同时跑:
BM25 onlyvector onlyBM25 + vector + RRFweighted fusionrerank top50 / top100
指标包括 Recall@20 / 50、nDCG@10、MRR、P50 / P95 / P99、update/delete 可见延迟、权限泄漏数和资源成本。
必须验证的坑¶
- 只做 vector search 会漏掉合同号、错误码、SKU、政策条款。
- BM25 分数和 cosine 分数直接相加会因为尺度不同而失真。
- ANN topK 后过滤权限会导致召回断崖,甚至泄露候选存在性。
- reranker topK 太小无法救回第一阶段没召回的结果;太大则增加延迟和成本。
- 只 upsert 不 delete 会留下旧 chunk、旧 embedding 和旧 ACL。
- 中文、英文、编号、缩写和专有名词 analyzer 配置会明显影响 BM25。
- GraphRAG 社区摘要如果跨权限域,会把受限材料混入摘要,后续很难安全裁剪。
工具层修正¶
MCP 只解决工具接入协议,不解决安全。第一阶段应新增 Tool Gateway:
text
Agent Orchestrator
-> Tool Gateway
-> Tool Registry
-> MCP / HTTP / internal function tools
-> Audit Log
Tool Gateway 至少负责:
- 身份、租户、scope 校验。
- 工具 allowlist 和 schema hash 固定。
- 高风险写操作人工确认。
- 输入摘要、输出 hash、trace id、耗时和错误审计。
- 工具输出进入模型前的 schema 校验和敏感字段过滤。
- 阻断 token passthrough、SSRF、越权 scope 和工具描述注入。
总线路线修正¶
原先把 Zenoh 放在 capability registry / queryable 的较前位置。现在修正为:
| 阶段 | 选择 | 原因 |
|---|---|---|
| Demo | JSON / Postgres registry + HTTP/gRPC | 低复杂度、易调试、权限可落表 |
| 内部服务发现 | NATS | 更贴近服务发现、request/reply 和 subject 权限 |
| 审计事件流 | Kafka / Redpanda | 适合不可变事件、长期留痕和回放 |
| 长流程恢复 | Temporal / LangGraph | 适合人审、长任务、失败恢复和 checkpoint |
| 弱网络 / 边缘 / 多机房 | Zenoh spike | 出现真实需求后再接入 |
Zenoh 的 pub/sub/query/location transparency 思想仍然有价值,但当前 Demo 最大风险在检索质量、权限过滤、工具治理和长流程恢复。过早引入 Zenoh 会增加调试和运维复杂度。
更新后的实验优先级¶
retrieval_platform_benchmark:OpenSearch/ES vs Postgres+pgvector/FTS,带权限、删除、旧新冲突和中文分词反例。tool_gateway_safety_harness:MCP 工具描述注入、输出注入、SSRF、越权 scope 和写操作审批。document_parser_spike:RAGFlow / Docling / MinerU 处理 PDF、表格、扫描件,验证复杂文档入库质量。external_knowledge_api_adapter:设计兼容 Dify External Knowledge API 的/retrieval接口。graph_rag_spike:只在多跳、全局总结和跨文档关系问题上测试 GraphRAG / LightRAG。
关键来源¶
- Dify Knowledge:https://docs.dify.ai/en/use-dify/knowledge/readme
- Dify External Knowledge API:https://docs.dify.ai/en/use-dify/knowledge/external-knowledge-api
- RAGFlow Quickstart:https://ragflow.io/docs/
- Open WebUI Knowledge:https://docs.openwebui.com/features/workspace/knowledge/
- AnythingLLM Documents:https://docs.anythingllm.com/chatting-with-documents/introduction
- LlamaIndex Framework:https://developers.llamaindex.ai/python/framework/
- Haystack:https://github.com/deepset-ai/haystack
- OpenSearch Hybrid Search:https://docs.opensearch.org/latest/vector-search/ai-search/hybrid-search/index/
- Vespa Hybrid Search:https://docs.vespa.ai/en/learn/tutorials/hybrid-search.html
- Weaviate Hybrid Search:https://docs.weaviate.io/weaviate/search/hybrid
- Microsoft GraphRAG:https://microsoft.github.io/graphrag/
- LightRAG:https://github.com/hkuds/lightrag
- MCP Authorization:https://modelcontextprotocol.io/docs/tutorials/security/authorization
- OpenAI Agents SDK:https://openai.github.io/openai-agents-python/agents/
- OpenAI Agents Tracing:https://openai.github.io/openai-agents-python/tracing/
- Temporal Agent Durability:https://temporal.io/blog/of-course-you-can-build-dynamic-ai-agents-with-temporal
- LangGraph Overview:https://docs.langchain.com/oss/python/langgraph/overview
- NATS Docs:https://docs.nats.io/
- Zenoh Access Control:https://zenoh.io/docs/manual/access-control/