Skip to content

feat: 升级 Milvus 3.0.2 并支持文本检索 - #1092

Closed
xerrors wants to merge 16 commits into
xerrors:mainfrom
Yuchuan925:feat/milvus-3-retrieval
Closed

xerrors wants to merge 16 commits into
xerrors:mainfrom
Yuchuan925:feat/milvus-3-retrieval

Conversation

@xerrors

@xerrors xerrors commented Oct 2, 2026

Copy link
Copy Markdown
Owner

变更说明

将 Yuxi 的知识库检索栈切换到 Milvus 3.0.2 全新部署,并支持向量、BM25 关键词和混合检索,增加必含词、排除词、短语过滤及安全命中高亮。覆盖 Compose/SDK/MinIO 存储适配、知识库与图向量集合、API、前端检索交互和部署文档;按需求不迁移旧数据,也不提供旧 schema 兼容。

  • 任务类型:feature
  • 目标与非目标:目标是可重置的新数据库、三种检索模式和文本筛选/高亮;非目标为旧数据原地迁移、向后兼容、真实嵌入模型的语料质量结论及本轮多模态扩展。
  • substantial / trivial 判断:substantial,变更涉及检索语义、持久化 schema、部署存储协议、API 与用户交互。

工程主张与 Owner

  • 受影响的工程主张:Milvus 3.0.2 与当前 SDK/对象存储配置可以创建并持久化索引;向量、BM25、混合检索都执行同一组文本条件;高亮不丢正文、不改变混合排序,公共 API 投影保留评分语义;重索引和删除能保持 PostgreSQL 与 Milvus 派生数据一致。
  • Owner / commit point / 观察边界:Compose、镜像和依赖锁拥有部署版本与协议;backend/yuxi/modules/knowledge/implementations/milvus.py 拥有集合 schema 和检索执行;知识库 API 与公共输出投影拥有 wire 结果;前端查询组件拥有安全展示。索引写入由 worker 执行,最终通过 PostgreSQL 与 Milvus 回读验证;查询在真实 HTTP/worker 链路观察。
  • 决策记录:Milvus 3 全新部署与文本检索。

验证情况

Milvus 3 新部署能创建、写入、读取并在重启后保留索引

  • 失败面:镜像/SDK 协议不匹配、对象存储条件写入或数据目录权限失败。
  • 语义 Owner:Compose、依赖锁、MinIO 镜像构建。
  • 直接证据 / 命令:真实 Milvus 3.0.2 worker E2E 创建与读回索引,并在服务重启后读回五个片段;生产 Compose 配置解析;相关 backend unit。
  • 负向案例:新目录权限和 MinIO 条件写入能力由启动探针覆盖;启动失败不会继续启动 Milvus。
  • 结果:Passed

向量、关键词和混合检索一致执行文本筛选

  • 失败面:检索通道漏过滤、表达式注入、短语错误匹配、图谱候选绕过文本条件。
  • 语义 Owner:Milvus 知识库 executor、知识库 API。
  • 直接证据 / 命令:docker compose exec -T -e E2E_USERNAME -e E2E_PASSWORD api uv run --no-sync --group test pytest test/e2e/test_milvus_text_retrieval_e2e.py -q --tb=short --disable-warnings(1 passed,真实 API/worker/PostgreSQL/MinIO/Milvus 3.0.2);docker compose exec -T -u 0 api uv run --group test pytest test/unit -m "not slow" -q(2445 passed、55 skipped);补跑配置测试(88 passed)。
  • 负向案例:排除词、逆序短语、中文及特殊字符、非法模式/参数;图候选过滤有 unit 覆盖。
  • 结果:Passed

高亮保留完整正文并安全显示,评分与排序语义可观察

  • 失败面:正文截断/HTML 注入、混合检索高亮补查改变排序、公共输出投影丢失评分类型。
  • 语义 Owner:Milvus executor、公共结果投影、知识库结果组件。
  • 直接证据 / 命令:真实 query-test 与 external.retrieve;pnpm run lint:check、pnpm run test:unit(406 passed)、pnpm run build;实际 Vue 组件测试 6 passed;Playwright 真实页面验证关键词/混合、来源、完整正文、空态、加载、HTTP 400、深浅色与 390px 窄屏。
  • 负向案例:HTML 文本按文字处理;零分及 BM25 大于 1 的原始分数展示;补查顺序不同仍保留融合排序和分数。
  • 结果:Passed

重索引与删除保持数据库派生状态一致

  • 失败面:重复 chunk 或删除后残留向量、实体和关系集合。
  • 语义 Owner:索引 worker、PostgreSQL repository、Milvus executor。
  • 直接证据 / 命令:同一真实 E2E 重复索引后回读 PostgreSQL/Milvus 中的五个片段,删除文件和知识库后确认记录及目标集合不存在。
  • 负向案例:重复索引、按文件删除和按知识库删除。
  • 结果:Passed

仓库契约与文档

  • 失败面:工程契约、决策证据或部署/API 文档失配。
  • 语义 Owner:仓库工程检查与对应文档 Owner。
  • 直接证据 / 命令:python3 scripts/verify_engineering_contracts.py、python3 -m unittest scripts.test_verify_engineering_contracts(64 passed)、cd docs && pnpm run build、git diff --check。
  • 负向案例:工程契约测试覆盖违规配置与文档/结构约束。
  • 结果:Passed

简化 / 删除验收

不涉及。

独立语义 Review

全新上下文 Reviewer 覆盖完整需求、最终 diff、数据库/检索边界和验证结果;结论无 P1/P2 问题,无未解决项。Review 不能替代上述运行证据。

未验证范围与风险

生产 Compose 运行、ARM64 实际镜像、冷 GitHub runner、真实嵌入/重排模型的语料检索质量,以及图谱融合后的真实文本筛选链路 Not run;图候选过滤由 unit 验证,图向量写入/查询/删除由真实 E2E 验证。生产 Compose 仅完成配置解析。固定向量验证协议和筛选正确性,不代表真实模型的相关性质量。Milvus 升级要求使用空的应用状态目录并重置 PostgreSQL、对象存储和索引数据;需重新初始化账号、模型和知识库。

事故反馈

不涉及:本次为主动升级与功能开发,不是达到门槛的高影响逃逸缺陷修复。

界面变更

涉及知识库检索页面;已用真实页面验证并保留本地截图证据,截图未提交仓库。

关联事项

无。

补充说明

升级目标为 Milvus 3.0.2。开启混合检索高亮时会对已召回 ID 增加一次只读查询;关闭高亮可避免该请求。检索结果、排序和阈值与旧版本可能不同,建议用目标语料验证相关性后再部署。

将 Public API 凭据和终端身份解析归入 identity,移除无消费者的身份操作日志。
让 Skill 投影路径查询无目录创建副作用,实际写入和挂载准备显式创建目录。
同步后端、前端、锁文件和 Compose 版本为 0.8.0.dev0。

验证:
- python3 scripts/verify_engineering_contracts.py:通过。
- python3 -m unittest scripts.test_verify_engineering_contracts scripts.test_bump_version:67 项通过。
- docker compose exec -T api uv run --group test pytest test/unit -m 'not slow' --tb=line -q -o cache_dir=/app/runtime/pytest-cache:依赖重建因 root 所有的 egg-info 权限失败,未进入测试。
- docker compose exec -T api uv run --no-sync --group test pytest test/unit -m 'not slow' -q -o cache_dir=/app/runtime/pytest-cache:2241 passed、55 skipped、3 failed。
  3 项失败为两个第三方 DOCX parser 和 knowledge-base skill tools 测试,HEAD 源码在同镜像中同样复现。
- 真实 HTTP/PostgreSQL 集成:预加载 shipping ORM 后执行 public_end_user、public_agents_key_boundary、public_knowledge_key_boundary、apikey_router、auth_router 和 identity_admin_service:41 passed、1 failed。
  未改动的 legacy external 路由测试期望 200,实际 404;相关身份、认证及事务测试通过。
- docker compose exec -T web:pnpm run lint:check、pnpm run test:unit、pnpm run build 通过。
- pnpm --dir docs run build:通过。
- uvx --offline ruff check / format --check:21 个变更 Python 文件通过。
- git diff --check:通过;全新独立 Reviewer 审查全部改动,无阻塞问题。
- 用户授权清空当前开发槽位后,全新初始化成功,API readiness 200、worker 健康;未运行真实模型 E2E。
解析统一生成完整本地 Markdown 目录,聊天使用相对图片引用,知识库显式发布 MinIO 资源;引擎与 options 回到所属模块,OCR 整体复制目录。知识工具执行时重新检查权限,并修复智能体匹配与菜单键盘行为。

验证:后端 2280 项单测通过、55 项跳过;39 项真实集成测试通过;前端 385 项单测、lint 和构建通过;工程契约、64 项 verifier 单测、文档构建与独立审查通过。端到端和真实浏览器验证在提交后继续执行。
将 UploadFile 消费限定在 API 层,业务服务使用字节或借用文件流;保留工作区限量、原子落盘与取消时的流生命周期,并补充上传边界回归测试和决策记录。

验证:工程契约检查与其 64 项单测通过;后端单测 2305 passed、55 skipped;相关 HTTP integration 12 passed;文档构建通过;独立 Reviewer 未发现确定性阻塞缺陷。

未通过:本轮附件生命周期 E2E 为 1 failed、1 error,Agent 清理超时且测试 Turn 仍为 running,根因未确认,已记录于决策文档。未执行全量 integration/E2E 与外部服务探针。
统一提问入口校验与前端展示映射,简化线程事件归属,补充测试及前端组件重构提案。
@xerrors

xerrors commented Oct 2, 2026

Copy link
Copy Markdown
Owner Author

更正目标分支:本变更应提交到 fork 的 develop/1.0。已关闭此误开的 main PR,并将在正确目标分支重新创建。

@xerrors xerrors closed this Oct 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant