← 返回主报告 · PIKE-RAG 项目分析
APPENDIX ONE · TEAM & FEATURE MAP

团队与功能地图419 commits 讲的故事 · 25 个功能页的全景

这是一份二合一附录。前半部分基于 git log 全量分析 419 个 commit,复原从 3-19 首个 commit 到 6-24 交付的完整时间线、5 个真实开发者画像、以及 .NET 中途上场的技术判断——回答"这个项目怎么来的"后半部分基于 web/src/routes.tsx(180 行单一权威源)+ 实际点开每个菜单获取的 UI 结构,画出 4 大板块 · 25 个功能页 · 8 个任务流程 · 13 个 Agent 的完整地图——回答"这个系统有些什么"

📋 本页目录
Part I · 团队与时间线 — 5 幕故事 · 10 次艰难时刻 · 5 人手艺画像 · .NET 选型分析
Part II · 功能地图 — 4 大板块 · 25 功能页 · 8 任务流程 · 13 Agent 全清单
PART I · TEAM

419 commits 讲的故事

项目是怎么来的——时间线 · 五幕故事 · 十次艰难时刻 · 五个开发者手艺画像 · 一次关键技术选型。

01 — TOP LINE

三个月的账

419 commits · 5 人参与 · 4 个月挂在日历上。fix 和 feat 比几乎 1:1——bug 密度高、迭代快,是"边打边跑"的项目节奏,不是"设计好了慢慢做"。

419
commits · 2026-03-19 → 06-24
14
从零到 GKB Go Live
55.5K
C# + Python + TypeScript · 916 文件
92%
来自 两人(Yong Ma + ShuaiHua Du)
02 — TEMPO

不是匀速跑,是三波过山车

按周统计 commit 数——项目节奏呈现 W16 / W17 / W19 三个爆发峰,中间有短暂的降速期,最后 W26 只有 3 个 commit 且全是"上传交付材料",标志开发实质结束。

14 周 commit 分布 · 每周总量
深色柱 = 三个爆发峰(W16 架构日 · W17 双栈成型 · W19 生产化)· 浅色 = 起步与收尾
2
W12
6
W13
17
W14
13
W15
58
W16
54
W17
27
W18
57
W19
45
W20
32
W21
29
W22
39
W23
16
W24
21
W25
3
W26
W16 · 4/13
架构基础日:SQLite → PG · 拆 shared 层
W17 · 4/20
.NET 入场 · V3 全量迁移 · Milvus 上线
W19 · 5/4
生产化:GPU 修复 · Elsa 换 workflow · Nomad 部署
W23 · 6/1
收尾冲刺:Nomad 切换 · Secret 大扫除
W26 · 6/22
Upload project documents · 开发实质结束
03 — FIVE ACTS

五幕故事 · 从 initial commit 到 Go Live

下面每一幕都是从 git log --author + --pretty=format --oneline 挖出的真实 commit 序列,不是叙事包装。每个引号里的都是原文 commit message。

Act 1
起步:从技术分析文档开始
2026-03-19 → 04-12 · W12-W15
45commits
"先写文档再写代码"

3/19 首个 commit 直接是 initial commit,但第二个 commit 就是 新增技术分析文档,概述项目定位、核心功能、实现原理及技术难点——项目从一开始就有先思考再动手的习惯。

3/26 一周内跑出 feat: Docker化部署 + Azure OpenAI Embedding 支持——基础环境速度极快。4/3 已经开始 refactor(api): complete I2 port-adapter convergence,说明从脚本原型切到Hexagonal 架构只用了两周。

4/6 有一次老练操作:在 feat: migrate document jobs to redis worker service 之前,先打了个 baseline before redis job service migration 作为回滚锚点——改大件前留备份是本项目全程的习惯。

03-19dd79b42initial commit · 项目开工
03-1930812d6新增技术分析文档,概述项目定位、核心功能、实现原理及技术难点
03-2648d3aacfeat: Docker化部署 + Azure OpenAI Embedding 支持
04-0384756c0refactor(api): complete I2 port-adapter convergence · 走向 Hexagonal
04-064b3b9adfeat: baseline before redis job service migration · 备份点
04-070e9af0cfeat: add v2 chat workflow path and web v1/v2 switches
Act 2
架构基础日:从原型到工程
2026-04-13 → 04-19 · W16 · 第一次爆发(58 commits)
58commits
"一天 5 个 refactor · 一周把 DB 换掉"

W16 是整个项目最忙的一周——58 个 commit。核心是把"能跑的原型"变成"能上生产的工程"。

4/14 架构日——一天完成 5 件大事:SQLite → PostgreSQL、db 目录改名 db_migration、拆 shared 层(把 db/storage/llm/queue/cache/retrieval 从 api 里挖出来)、简化 API 架构、以及一个关键 refactor consolidate ports, usecases, middleware; remove dead code & stale docs不惜工本清理死代码是本项目的技术文化。

4/15 出现整个项目最重要的产品原则 commitfeat: 优化回答的正文中的角标处理逻辑 如果用户的提问,在已有知识来源中未找到,应拒绝回答,而不应让大模型自我发挥——忠实性从这里开始被硬化到代码里,一直贯穿到最终的 skill prompt。

4/16 第一次事故revert dockerfiles before cython so build——Cython 编译搞崩了,回滚。这是项目全期仅 3 次 revert 中的第一次。

04-13e021fb7feat: BM25 S3 storage + process-level caching
04-146e40bc1feat: migrate database from SQLite to PostgreSQL · 走向生产
04-1420b5b42refactor: extract shared modules (db, storage, llm, queue, cache, retrieval)
04-14dd3e568refactor: simplify api architecture · remove dead code & stale docs
04-15d4b1c88核心产品原则:如已有知识来源中未找到,应拒绝回答,不应让大模型自我发挥
04-16d56510cREVERT: revert dockerfiles before cython so build · 第一次事故
Act 3
双栈成型:.NET 入场,Chroma 退场
2026-04-20 → 05-10 · W17-W19 · 双爆发(~130 commits)
~130commits
"从 Python 单栈到 Python + .NET 双栈 · 检索从 Chroma 跳到 Milvus"

4/20 转折日:一天两件大事——feat: docker-compose 集成 .NET 后端 + 前端全量迁移至 V3 APIfeat(pikerag-net): V3 全量迁移 — Phase 2-F + 前端 V3 适配 + Python 路由清理.NET 进入战局,V3 开始接管全局

4/25 打 checkpointcheckpoint: before V3 agent optimization (prompt compact + multi-turn fix)——大改前先存档,前面必有 close call。

4/28 里程碑日——三件事:ChromaDB → Milvus 迁移完成 · 知识湖仓 Lakehouse 架构设计 · Curation Pipeline 上线(一个 commit 800+ 行 changelog,PDF/Word/Excel/PPT/Markdown 全支持 + 4 个 NuGet 安全漏洞、路径遍历、竞态条件同时修复)。这一个 commit 抵得上别人一周的工作量

5/5 事故日——DB migration v0025 缺列,同一坑连踩两次到 v0026;v0037/v0038 迁移编号撞车;PG DateTime 时区兼容性。这天有 6 个 fix commit——把 .NET 的 EF migration 也全部搬到 Python Alembic 里,统一迁移工具链

5/7 前端崩fix: PublishedAgentPage infinite update loop——修完还有 bug,同一天二次修复。

5/8 换工作流引擎feat: Elsa workflow engine migration——之前用的不合适,换掉。

04-201716f72feat: docker-compose 集成 .NET 后端 + 前端全量迁移至 V3 API
04-21cb43cb6feat(pikerag-net): V3 全量迁移 — Phase 2-F + Python 路由清理
04-23632c6f6REVERT: restore local document-intelligence · DI 迁云端未成
04-2514a69cbcheckpoint: before V3 agent optimization · 大改前留备份
04-287be67bffeat: migrate from ChromaDB to Milvus for vector + BM25 search
04-2839743e9feat: Curation Pipeline — Lakehouse 湖仓策展管线 · 单个 commit 抵一周
05-0542a959cfix: v0026 migration also needs vectorized_at guard (duplicate of v0025) · 同坑连踩
05-07a650dedfix: PublishedAgentPage infinite loop and Playground undefined agent · 二次修复
05-08814af48feat: Elsa workflow engine migration · 换工作流引擎
Act 4
性能危机 · Agent 治理 · GraphRAG 大整改
2026-05-11 → 05-31 · W20-W22 · ~140 commits
~140commits
"78 chunks 从 242s 干到 <2s · 但 A100 也 OOM"

5/13-14 向量化性能大修fix: vectorization performance remediation (GPU + batch embedding + dispatch idempotency)——GPU 利用率从 0% 提到 100%,78 chunks 从 242 秒 缩到 <2 秒(周报也印证了)。同一天还有 perf: refactor Elsa Activities to eliminate TOAST bloat (S3-as-IPC)——workflow state 撑爆 PG 的 TOAST,被迫把中间态改成 S3 存。

5/14 A100 也 OOMfix: robust adaptive split for embedding OOM (catch generic 500, pre-check tokens before sending)——单批过大炸了 GPU,做了自适应切分兜底。

5/22 qa-harness 落地feat(agentic): qa-harness agent, context tools, skill DB-first loading——从 workflow 模式切到 Harness 模式(LLM 动态决策)的转折点。

5/25 GraphRAG 大整改:修 Cache Key 加 KB ID(跨 KB 缓存污染)· O(n²) 改 O(1) · 孤儿关系日志 · maxTokens 8192 · JSON ResponseFormat 全链路——一次 commit 修 5 个不同层次的问题。同一 commit message 出现了两次,说明 push 出问题重发。

5/27 密钥危机feat(db-migration): add llm_backend protocol column migration——生产用的 service account key 3 个月过期,被迫申请两个 key 做轮换切换协议列(周报 R6 也记录了)。

05-1376d2e2dfix: vectorization performance remediation · GPU 0%→100%, 242s → <2s
05-14c35aa30perf: eliminate TOAST bloat (S3-as-IPC) · workflow state 撑爆 PG
05-14a8648f2fix: robust adaptive split for embedding OOM · A100 也炸
05-156d4617echore: remove legacy pike-agent (replaced by Pike Worker .NET)
05-22a82d479chore: qa-cache 设计 + atomic decompose poc · Agentic 化关键节点
05-25662b0cefeat(graphrag): P0/P1 remediation + GPU inference infra · 一次修 5 类问题
05-27a6c39dffeat(db-migration): add llm_backend protocol column · service key 过期危机
Act 5
收尾冲刺 · Hot-fix · Secret 大扫除 · 上线
2026-06-01 → 06-24 · W23-W26 · ~110 commits
~110commits
"上线前的最后一件事,是把假密钥都清成占位符"

6/1 一天 3 次反复feat(agentic): emit structured summary as dedicated SSE event (ISSUE-003)feat(agentic): add summary option to agent post-processor select (ISSUE-003)revert(agentic): 回退结构化摘要方案,改用 Markdown 标题渲染 (ISSUE-003)——设计反复到最终回退简单方案。项目全期最后一次 revert

6/3-4 Nomad 切换fix(gateway): route /api/v1/ to .NET adapter——旧 docker-compose 应用彻底下线,Nomad 独占标准端口。周报里 06-03 记录的"旧应用下线 · pikerag-embedding.service 已 disable"就是这个 commit。

6/9 ISSUE-012 闭环docs(issues): ISSUE-012 转 closed,回归验证通过修复闭环——项目有正式的 issue 追踪流程(docs/issues 目录)。

6/11-13 Secret 大扫除——连续 8 个 commit 全在做同一件事:remove postgres password literals · remove hardcoded dev credentials · shorten dummy apiKey below secret-scanner threshold · replace remaining truncated example JWTs with placeholders上线合规扫描前的清剿——gitleaks 扫过。

6/19 GKB Go Live 前的最后精调——一天 3 个 skill 提示词修复:fix(skill): 优化答案忠实性与缺失处理 · fix(skill): 优化术语规范 · fix(skill): 优化答案编写技能的提示词项目最后的技术活是提示词精调,不是代码

6/24 三个 commit 都是上传交付文档upload project documents · Added file · Added Project Delivery Doc——开发实质结束,进入交付验收

06-0187e6551REVERT: 回退结构化摘要方案 (ISSUE-003) · 全期最后一次 revert
06-0481003c8fix(gateway): route /api/v1/ to .NET adapter · 旧 docker-compose 下线
06-09aebe866docs(issues): ISSUE-012 转 closed,回归验证通过修复闭环
06-1134a18f1chore: remove postgres password literals · Secret 大扫除第一枪
06-13645162adocs: replace bootstrap api-key with placeholder in examples
06-19eceb86efix(skill): 优化答案忠实性与缺失处理 · 上线前的提示词精调
06-24326c0caupload project documents · 交付实质结束
04 — HARD MOMENTS

10 次艰难时刻 · 全部代码可验证

下面列出的是会让开发者半夜爬起来处理的时刻——性能爆表、依赖崩了、迁移事故、密钥过期。每条都有 commit SHA 或 commit 序列可查。

1
05-05
DB Migration 同一坑连踩两次:v0025 缺 vectorized_at 列没加 guard 崩了;改完打 v0026 又忘加 guard,同 bug 再爆一次。fix: v0026 migration also needs vectorized_at guard (duplicate of v0025 issue)
1654393 · 42a959c
2
05-14
A100 GPU embedding OOM:单批 embedding 撑爆 GPU 显存;先做批量降级到单条,再做 catch generic 500, pre-check tokens before sending 兜底。
6fcddac · a8648f2
3
05-14
PostgreSQL TOAST bloat:workflow state 太大存不下(PG TOAST 阈值 8KB),被迫把中间数据改成 S3 存、PG 只存路径。perf: refactor Elsa Activities to eliminate TOAST bloat (S3-as-IPC)
c35aa30
4
05-07
PublishedAgentPage 前端无限循环:修一次没修完,同一天二次 fix: PublishedAgentPage infinite update loopPublishedAgentPage infinite loop and Playground undefined agent
c6c3388 · a650ded
5
04-16
Cython 构建失败回滚:Dockerfile 里 cython so build 崩了,直接 revert。全期仅 3 次 revert 之一。revert dockerfiles before cython so build
d56510c
6
04-23
Document Intelligence 迁云端未成:想把 DI 从本地容器搬到云端 endpoint,验证不通过回滚。revert: restore local document-intelligence in root docker-compose.yml
632c6f6
7
05-08
Elsa workflow 中途换掉:前面用的 workflow 引擎不合适,切到 Elsa 2.16.1 重写。feat: Elsa workflow engine migration + kb-tasks UI improvements
814af48
8
06-01
ISSUE-003 结构化摘要三次反复:同一天 add → select → revert,最终回退为 Markdown 标题渲染。设计争议的典型例子。
754ad1e · 8c039b2 · 87e6551
9
04-07 → 06-22
PIKE-RAG 新场景不支持(周报 R5 · 持续 11 周未闭):微软框架不支持"闲聊引导 / 文档比对 / 相似识别 / 文档搜索",做了 multi-hop-retrieval skill 打补丁但根本设计未落地。
周报 04-07/06-22 风险条目
10
05-27
Service Account Key 3 月过期:生产环境的 Azure OpenAI service account key 3 个月轮转策略触发,被迫申请双 key 轮换 + add llm_backend protocol column。周报 R6 记录。
a6c39df · 周报 05-27

读法:红色 = 事故(外部因素引发,如 OOM、依赖崩、密钥过期)· 橙色 = 设计问题(架构选型偏差、需求反复)· 金色 = 战术回撤(试了不 work,回退)。10 次艰难时刻 · 3 次 revert · 1 次同坑连踩 · 1 个持续 11 周未闭风险——考虑到 3 个月 419 commit 的节奏,这个"痛感密度"处于正常压力项目区间,不算灾难。

05 — DEVELOPER PROFILE

三个人的手艺

git log --author 分组统计每人真实修改的文件路径、次数、类型,交叉验证 commit message 风格与 code 层面证据(Python 96% 有类型注释 · CQRS 分层深 · 71 个 DB 迁移 · 77 个 YAML 配置),可以给出基于事实的开发者画像——不是印象。

Yong MaTECHNICAL LEAD · 全栈架构师
235commits占 56% · Bus Factor = 1
地盘 · 真实修改行分布
src/pikerag-net
4447
src/pike-agent
1214
web/src
1178
src/api (Python)
457
api/infrastructure
221
能力矩阵 · 基于代码地盘量化
.NET / C# 后端 (核心) 系统架构 (核心) CQRS + Modular Monolith (核心) React 前端 (强) Python API (强) EF Core + PG (强) Helm + Nomad + Docker (强) Milvus / GraphRAG (中) Agentic / Skill 系统 (中) OpenTelemetry (中)
技术特征 · 从 commit message 与代码结构提取

① 架构洁癖极强——commit message 里有大量 refactor(37 个 refactor · 全项目 44% 来自他)。典型如 refactor: complete I2 port-adapter convergencerefactor: extract shared modulesrefactor: simplify api architecture · consolidate ports, usecases, middleware; remove dead code——拒绝屎山、持续清理

② 提交粒度大 · 一次 commit 覆盖多维度——典型如 feat: Curation Pipeline — Lakehouse 湖仓策展管线 (Step 1-10, 12) 一个 commit 涵盖后端 + 前端 + 迁移 + 安全修复共 800+ 行 changelog。做大事的时候能一次做完,但也让 diff 难 review。

③ 命名严谨 · 版本意识强——项目里 71 个 DB 迁移编号 v0001-v0071 全部整齐,refactor: rename pikerag-net → pike-agent, unify Pike.* namespaces 这种"改名"级重构他敢做——命名规范到愿意为了统一改名字重刷 100+ 文件

④ 灾备意识——每次大动前打 checkpoint:checkpoint: before V3 agent optimizationfeat: baseline before redis job service migration——先备份再动土

⑤ 全栈技能真实——同一周内改 4447 行 C#、1178 行 TypeScript、457 行 Python,跨 pikerag-net 后端 + web 前端 + Python api + Helm + docker-compose——不是"会用",是"活跃修改"

代表 commit
refactor(graphrag): convert internal agents to builtin, remove internal type
refactor: rename pikerag-net → pike-agent, unify Pike.* namespaces
feat(graphrag): M1 project skeleton + DB schema + DI + frontend tab
对比同类:他相当于什么水平

在成熟工程师的标尺上,Yong Ma 大致处于 Staff Engineer / Tech Lead 段位——能独立设计一个中型企业级平台(55K 行 · 18 模块 · 双栈 · 双 namespace 部署)· 有清晰的分层意识(Hexagonal / DDD / CQRS 混合)· 熟悉多语言运行时(.NET Aspire + Python FastAPI + React Vite)· 对迁移工具链、可观测性、部署编排都亲自操刀。短板:单点风险高(56% 占比意味着他休 2 周整个项目慢下来)· 大 commit 让代码 review 变难。

ShuaiHua DuSKILL PROMPT ENGINEER + DEVOPS
151commits占 36%
地盘 · 真实修改行分布
src/pike-agent
182
deploy/docker-compose
129
src/pikerag-net
55
web/src
52
deploy/nomad
41
docs/issues
30
技术特征

① Skill 提示词专职——修改最多的文件是 mvr-grounded-answer/v1.skill.yaml(9 次修)。commit message 明显偏"提示词工程"味道:fix(skill): 优化答案忠实性与缺失处理fix(skill): mvr-grounded-answer 摘要改为无条件第一块,去掉漏摘要逃逸口refactor(skill): 反揣测规则瘦身 + few-shot 全抽象化——他懂 LLM 会怎么钻空子并把空子闭上

② 部署运维——deploy/docker-compose/vm/customer/*.yml(客户环境部署模板)· 02-install-embedding.sh(部署脚本)· deploy/nomad/Makefile——生产部署他管一半

③ Message 风格中文倾向——commit 里大量中文正文:fix(knowledge/v1): 文档写操作错误码细分 409→409/410/411/412/413refactor(knowledge-v1): retry 删除判定简化为单道 IsDeleted guard——细节控 · 关注 API 契约的错误码语义

④ Issue tracking 参与——docs/issues 30 行修改都是他的,ISSUE-003 反复、ISSUE-012 闭环都有他签名——做 QA / bug 闭环

代表 commit
fix(skill): mvr-grounded-answer 摘要改为无条件第一块,去掉漏摘要逃逸口
fix(knowledge/v1): 文档写操作错误码细分 409→409/410/411/412/413
feat(agentic): 双语 narration + SSE progress/status 双通道
水平判断

Senior Engineer 段位——不是全栈架构师,是垂直深耕型:LLM prompt 工程、backend 细节(错误码/幂等/重试语义)、DevOps 部署脚本三条腿。在这个项目里他和 Yong Ma 的分工是他做"活的东西"(业务规则、提示词、部署)——Yong Ma 做"骨架"(架构、迁移、双栈)。

chewa-gitINFRA / CI-CD 专职
28commits占 7%
地盘 · 真实修改行分布
deploy/nomad
35
src/vllm
28
deploy/cicd
21
src/pike-agent
13
技术特征

① Nomad + Terraform + vLLM 主专家——deploy/nomad · src/vllm · deploy/cicd 三个目录几乎全是他改的。他是把生产 GPU VM 从 Azure ACR 到 vLLM 到 Nomad 全套跑起来的人

② Secret 大扫除专职——12 个 commit 里 8 个是 replace remaining truncated example JWTs with placeholders · chore: remove postgres password literals · test: shorten dummy apiKey below secret-scanner threshold——gitleaks 合规扫描的清剿全在他手上

③ CI/CD 制品管道——feat(cicd): add staging/TST image build configs for ECRdocs(cicd): add staging image pull/use guide——做企业级 CI 的老手

代表 commit
chore: remove postgres password literals from compose connection strings
feat(cicd): add staging/TST image build configs for ECR
docs(cicd): add staging image pull/use guide with third-party image manifest
水平判断

Infra Specialist / SRE 段位——commit 量不多但每个都精准聚焦 CI/CD/合规。典型的"隐形保底"角色——项目做产品的顺,是因为有他把部署链路和合规扫描做稳了。

Kelvin KuangMS PIKE-RAG 顾问
3commits

微软官方 PIKE-RAG 框架方顾问。3 个 commit——说明微软官方对项目的 hands-on 支持极浅,PIKE-RAG 底层 bug 更多是团队自己在处理。

Yanzhi LiDocs
1commit

单个文档 commit——路人。

Chen邮箱与 chewa-git 重合
1commit

与 chewa-git 共用邮箱 lulali@outlook.com——同一个人的另一个 git 身份。

06 — TECH DECISION

.NET 为什么中途入场?这是最好的选择吗?

2026-04-20 · Yong Ma 一天之内做了这个项目最大的技术选型决定——把 Python 主导的架构切成 Python + .NET 双栈。这个决定合理吗?是"个人偏好"还是"技术判断"?Python 一路到底是不是更好? 用代码里的证据来回答。

🔑 KEY DECISION COMMIT · 全项目最重要的一次技术选型
Yong Ma · 2026-04-20 · fd114b7
commit: feat: add pikerag-net Clean Architecture project (.NET 10)
- Based on jasontaylordev/CleanArchitecture v10.8.0 template
- PostgreSQL via Npgsql + EF Core, API-only (no frontend)
- OpenTelemetry: ASP.NET Core, HTTP, Runtime, EF Core, Npgsql tracing
- OTLP exporter via OTEL_EXPORTER_OTLP_ENDPOINT env var
- Scalar API docs at /scalar
- Dockerfile for containerized deployment
- C# rewrite analysis document (docs/csharp_rewrite_analysis.md)838 行!
- Updated .gitignore with .NET patterns

这不是"心血来潮"——Yong Ma 一天推了 838 行 C# 重写分析文档 + 完整 Clean Architecture 骨架 + `.editorconfig` 382 行 + `Directory.Packages.props` 52 行。深思熟虑后的决定——且他有一天推出全栈模板的能力。同一天下午 docker-compose 集成 .NET 后端 + 前端全量迁移至 V3 API,次日 V3 全量迁移 — Phase 2-F + Python 路由清理一周之内完成主战场切换

1

客户绑定微软全家桶 · .NET 是"母语"

项目从 initial commit 起就绑死 Azure 全家桶——OPENAI_API_TYPE="azure" · AZURE_OPENAI_ENDPOINT · AZURE_DI_API_KEY(Azure Document Intelligence)。交付方是 Microsoft Industry Solutions(每份周报封面),客户是 AZ China R&D,底层框架是 Microsoft/PIKE-RAG(所有 src/pikerag/*.py 头部 Copyright (c) Microsoft Corporation)。

ASP.NET Core / EF Core / Aspire / OpenTelemetry 都是微软最新一代技术栈。用 .NET 交付给 AZ = 微软内部的政治正确 + 客户 IT 团队的运维习惯

证据: README.md 首屏 Azure 环境变量 · MVR Doc 交付材料署名 "Microsoft Industry Solutions"
2

微软官方 Agent 框架 · .NET 是一等公民

Directory.Packages.props:

<PackageVersion Include="Microsoft.Agents.AI" Version="1.4.0" />
<PackageVersion Include="Microsoft.Agents.AI.OpenAI" Version="1.4.0" />
<PackageVersion Include="Microsoft.Agents.AI.Workflows" Version="1.4.0" />
<PackageVersion Include="Microsoft.Extensions.AI" Version="..." />

Microsoft.Agents.AI 是微软 2025 主推的官方 Agent 框架——对标 LangChain,但 .NET 是一等公民,Python 版功能滞后。项目要做 Agentic Harness(13 Agent × 6 Skill),而且要跟客户微软战略保持一致——用 LangChain 客户不认(不是微软 stack),用 Python 版功能落后半年到一年。

证据: Directory.Packages.props 引入 Microsoft.Agents.AI 1.4.0 全家桶 · 项目 13 个 Agent 定义都跑在 .NET 上
3

Python 原型确实撞墙了

Yong Ma 前 30 天都在 Python 上写 (3/19 → 4/19):Hexagonal 架构 ✓ · BM25+Chroma+多轮 Planner ✓ · SQLite→PG 迁移 ✓ · Redis job 队列 ✓——都做出来了

但 4 月中撞了硬墙:

CQRS 分层复杂度上来后,Python 类型系统撑不住(即使 96% 类型注释,也没有编译期保证)
Curation Pipeline 要处理 PDF/Word/Excel/PPT 五种格式——.NET 的 OpenXml SDK 官方支持一步到位;Python 的 python-docx/python-pptx/openpyxl 分散、老、坑多
企业级 Modular Monolith + CQRS + DDD 是 .NET 圈的老家饭——MediatR / FluentValidation / EF Core / Ardalis.GuardClauses 开箱即用,Python 没有对等物

证据: 4/28 一个 commit(39743e9)完成 Curation Pipeline 全栈——PDF/Word/Excel/PPT/Markdown 5 种解析器,.NET 生态一步到位
4

客户 IT 长期运维交接

制药大厂的技术栈标配是 .NET / Java——AZ 内部 IT 团队接手运维时,交给 .NET 后端他们熟悉;交给 Python 后端会哭。

看部署材料清单:Azure Container Registry + Aurora PostgreSQL + EF Core + Nomad + Terraform + OpenTelemetry → Grafana LGTM——这套栈客户 IT 用起来毫无学习成本。

结论:.NET 交付 = 客户长期能自己接手;Python 交付 = 长期依赖交付方——对 POC 转产品阶段是致命考量。

证据: deploy/nomad/README.md · ACR + Aurora + EF Core 组合 · 全部是 AZ 熟悉的 stack
5

Yong Ma 个人能力托底 · 但不是"个人偏好"

Yong Ma 明显更懂 .NET:4447 行 pikerag-net(C#) vs 457 行 src/api(Python) —— 差 10 倍。引入的模板是 jasontaylordev/CleanArchitecture —— 这是 .NET 社区最有名的 Clean Architecture 参考,不是随手找的。CQRS 分层做到每个 Command/Query 独立文件夹——.NET DDD 圈的标准做法,Python 圈几乎没人这么做。

但要区分:他不是"因为个人偏好选了 .NET"——项目起手用的是 Python,他先在 Python 里跑了 30 天。他是"识别到微软官方路线图 + 客户交付要求 + Python 撑不住企业级复杂度"后主动改选 .NET。他确实精通 .NET 才敢做这个决定——不熟悉的人不会一天推 838 行分析 + 全套 Clean Architecture 模板。

结论: 是"技术判断力驱动 + 个人能力托底",不是"个人偏好抢跑"

Python 全栈 vs .NET 全栈 vs 双栈现状

按 9 个维度对比——绿=胜出,红=不足,橙=折衷。判断"这个项目"里哪种更好。

维度
Python 全栈
.NET 全栈
双栈现状
微软官方 Agent 框架对齐
落后一步
一等公民
Agentic 在 .NET
客户 IT 长期运维
不熟
熟悉
主战场在 .NET
企业级 CQRS/DDD 生态
手撮
MediatR / EF / FluentValidation
PDF/Office 文档解析
分散老库
OpenXml 官方
全在 .NET
PIKE-RAG 底层框架
只有 Python 版
保留 Python
BM25 中文分词
jieba
JiebaNet.Segmenter
两边都行
向量数据库客户端
pymilvus
Milvus.Client
两边都行
快速 prototype
FastAPI 一把梭
启动成本高
早期在 Python
Prompt 工程实验
skill YAML 语言无关

✅ 站在"这个项目" · .NET 是对的

双栈是最优解,不是败笔。当前分工:

Python 侧保留:

  • PIKE-RAG 底层框架(微软官方是 Python 的,不能重写)
  • 多轮 QA workflow(2 千行,重写代价 3 个月)
  • V2 chat completions 端点(客户在用)

.NET 侧接管:

  • V3 全量 API(主力全端点)
  • Agentic Harness(13 Agent × 6 Skill)
  • Knowledge/Identity/Platform 模块化
  • Elsa Workflow · GraphRAG 全部实现

⚠️ 站在"别的项目" · 不一定

对于其他场景,答案可能反过来:

  • 纯研究项目 / 快速原型 / 学术论文——Python 明显更好
  • LLM 全新框架跟随社区(LangChain / LlamaIndex / DSPy)——Python 生态远远领先
  • 数据科学 / RAG 实验室——Python 无敌
  • 云原生 SaaS 后端 / 企业级 Agentic 平台——.NET 更成熟(不是"能用 Python 顶替")

"本可以更好"的替代方案其实是:从第一天起就用 .NET,不要绕道 Python——省掉 3 个月的遗留清理。但这条路的问题是:PIKE-RAG 底层框架就是 Python,必须先用 Python 验证概念,才能有底气外层用 .NET 重构。

🎯 一句话判断

.NET 上场既不是随意也不是偏好——是识别到3 个硬约束后的判断:①微软 Agent AI 框架在 .NET 上先落地 · ②客户 IT 团队要能接手长期运维 · ③企业级 CQRS/DDD 复杂度 Python 撑不住。

Yong Ma 的价值不在于"他喜欢 .NET",而在于他先用 Python 跑了 30 天,发现撑不住,然后有能力一天推 838 行分析 + 全栈 Clean Architecture 模板迁到 .NET——这是成熟技术领导者的判断力,不是开发者的兴趣偏好。路径依赖决定了现在这个双栈状态是"必要的成本",不是"设计失误"。

07 — VERDICT

综合评估 · 一个真正干活的三人小团队

TEAM这个团队本质上是三个人的小团(Yong Ma 全栈 · ShuaiHua Du 提示词/DevOps · chewa-git CI/CD/合规)——加上一个几乎没露面的微软顾问。没有 QA、没有专职前端、没有独立产品经理——需求直接对客户,实施靠三条腿。

SKILL技术水平 整体在企业级中上——不是花架子团队。证据:Python 96% 类型注释、71 个 DB 迁移编号整齐、CQRS 分层深到每个 Command/Query 独立文件夹、有正式 issue 追踪流程(docs/issues)、上线前做 secret 大扫除、Elsa/Nomad/vLLM/Milvus 生产级选型全在跑。这不是"能跑就行"的原型级手艺

RISK最大结构风险是 Bus Factor = 1——Yong Ma 独扛 56%,横跨 .NET 后端 4447 行 + 前端 1178 行 + Python 457 行。他一个人的技术判断决定了:3 代 Retriever 演进、V2/V3 双栈、Elsa 换 workflow、Milvus 从 Chroma 换掉。他休一个长假,整个项目节奏会明显慢下来

STYLE代码风格特征鲜明:Yong Ma 大 commit 猛推架构变革,ShuaiHua Du 小 commit 精修业务规则。commit message 一半中文一半英文——中文用在业务和 skill 修复上,英文用在架构和技术层重构上。这不是随机——"和 LLM 交流的语言 vs 和其他工程师交流的语言"分开,是一种主动的沟通习惯。

CULTURE项目文化偏向 "过度工程 + 快速试错"混合体——一方面能一次 commit 修 5 类问题、上线前做 Secret 扫描清剿、正式 issue 闭环追踪(这是过度工程一面);另一方面又能同一天 3 次 revert、v0025 v0026 同坑连踩、Elsa 中途换掉(这是快速试错一面)。他们不追求完美,追求"能推动前进"

FINAL如果要接手:优先跟 Yong Ma 做知识转移,把他脑子里没写在文档里的隐性判断(为什么选 Milvus / 为什么保留 V2 Python / Chroma 会不会真的下线)掏出来。ShuaiHua Du 的 skill 提示词是业务价值的核心资产——他做的忠实性硬约束、反揣测规则、few-shot 抽象化,直接决定了产品的临床合规可信度,是无法快速被替代的部分。chewa-git 的 Nomad + vLLM + CI/CD 是"隐形保底"——不出事你看不到他的存在,一出事只有他能修。

PART II · FEATURE MAP

PIKE-RAG 管理台 · 功能地图

这个系统有些什么——4 大主菜单 · 25 个功能页 · 8 个内置任务流程 · 13 个 Agent 全清单 · 页面间依赖关系。

01 — TOP LINE

先看规模

4
顶级菜单
知识 · 智能体 · 系统 · 开发
25
业务页面
不含子详情页/编辑器/回退别名
13
预置 Agent
2 主力 + 8 GraphRAG + 3 文档处理
8
内置任务流程
知识入库/画像/评估/GraphRAG
180
路由行数
routes.tsx · 含 40+ 别名跳转
02 — 4 SECTIONS

四大板块 · 各管一片

整个后台围绕四条主线组织:知识管理(数据入口 · KB / 文档 / 术语)· 智能体(业务逻辑 · Agent / Skill / Chat)· 系统(基础能力 · Gateway / 身份 / 模型仓)· 开发工具(基础设施调试 · 流程编辑器 / DB / 存储)。上层依赖下层,越靠上业务价值越高。

03 — DEEP DIVE

每个页面到底管什么

下面按四大板块逐一列出每个页面的:做什么(用户视角)· 与谁关联(上下游依赖)。这样能看清"哪个页面动了会影响谁"、"完成一件事需要走哪些页面"。

📚 A
知识管理
数据入口 · 让 AI 有"读物"
1
知识库/knowledge/knowledge-base
创建/查看知识库(KB),每个 KB 独立配置 Embedding 模型和检索模式(dense/sparse/hybrid)。KB 是最顶层容器——一个 KB 装一批相关文档。列表显示每个 KB 的湖/仓/向量三阶段处理进度。
→ 关联到文档上传 → 处理任务 → 召回验证 · Agent 调用时选 KB
2
术语表/knowledge/glossary
配置领域术语 + 别名映射——例如"阿卡替尼 = ACALA = Acalabrutinib"。检索时会自动扩展 query 覆盖别名,避免因术语写法不同漏检。
→ 关联到KB(每个 KB 可绑一份术语表)· 检索链路(自动 query 扩展)
3
处理任务/knowledge/kb-tasks
查文档入库后台任务状态——每份 PDF 上传后会异步走 4 步(上传→DI 解析→LLM 增强→向量化),这里实时看每份文档卡在哪步、是否成功。
→ 关联到知识库(展开每个 KB)· Hangfire 任务监控(底层实现)· 任务流程(定义)
4
召回验证/knowledge/retrieval-validation
调 KB 但不生成答案——给个 query,看 Top-K 召回了哪些 chunks + score,用来调试检索质量而不消耗 LLM Token。写完 Skill 后先来这里验召回,再上 Chat 验答案
→ 关联到KB · Milvus 向量库(读)· 评测工具(重叠功能但评测更批量)
🤖 B
智能体
业务逻辑 · 让 AI 干活
1
Agent 管理/agentic/agents
创建/编辑 Agent。Agent = 业务角色(mvr-pharma / graph-entity-extractor 等),由若干 Skill(说明书)+ Tool(动作)+ KB(资料)组成。本项目预置 13 个 Agent,详见附录。
→ 关联到Skill · Tool · KB · Gateway Pool · 智能对话(调用入口)· 评测
2
AI Workflows/agentic/workflows
Agent 的第二种实现——不是靠 LLM 自主决策(Agent 模式),而是写死流程图(check KB → 文档门禁 → 检索 → 流式答案)。适合确定性场景,不消耗额外推理决策。
→ 关联到Agent 管理(Agent 类型可选"工作流")· 任务流程(dev)
3
技能管理/agentic/skills
Skill = Agent 的说明书——system prompt + 少样本 + 输出规则的封装。一个 Agent 挂多个 Skill,LLM 根据用户问题选合适的 Skill 执行。项目最核心的mvr-grounded-answerskill 就在这里维护。
→ 关联到Agent(每个 Agent 绑 N 个 Skill)· 版本化(Skill 支持发版)
4
工具管理/agentic/tools
Tool = Agent 可以调的动作(read_kb / search_docs / retrieve_context...)。系统预置若干工具,业务方可以配参数(如 top_k)。Skill 描述"何时用",Tool 执行"怎么做"
→ 关联到Agent(每个 Agent 绑 N 个 Tool)· KB(工具会调 KB)
5
智能对话/agentic/chat
用户实际用 Agent 的界面——选一个 Agent → 问问题 → 看流式答案 + 引用来源。支持切"发布版"或"开发版"Agent。带 SSE 流式渲染、引用高亮、多轮对话记忆。
→ 关联到Agent(选调用对象)· 历史会话(记录)· AI Gateway(实际 LLM 调用)
6
历史会话/agentic/sessions
看所有对话记录 + 每次对话的完整 trace——每一步 SSE 事件、召回了哪些 chunks、LLM 用了哪个 prompt、耗时多少。bug 复盘、审计合规都靠它
→ 关联到智能对话(数据源)· Token 用量(消费统计)
7
评测工具/agentic/eval-datasets · eval-runs
批量跑测试——上传评测数据集(N 个 Q&A 标准答案)→ 选 Agent → 系统跑 N 次 → 出 recall/faithfulness/相似度报告。改了 Skill 提示词后,先跑评测再上线。可对比两次 run。
→ 关联到Agent(测试对象)· KB(测试用的知识库)· 评估运行流程(dev 里的工作流)
⚙️ C
系统
基础能力 · 让 AI 能跑
1
AI Gateway/system/ai-gateway
项目里最关键的一个系统组件——LLM 后端池管理。定义 N 个 Pool(default/local-gpu...),每个 Pool 挂多个后端(Azure/vLLM)· 有路由策略(random/failover/round-robin)· 主备切换。Agent 通过 Pool 名字调用,不直接绑单个 LLM,这样切换/升级模型不用改 Agent。
→ 关联到Agent(每个 Agent 指定 Pool)· 模型仓库(后端可选模型)· Token 用量
2
Worker 管理/system/workers
后台 Worker 进程管理——Worker 拉 Hangfire 队列的任务(文档入库/GraphRAG 抽取/评估等)。看 Worker 数量/状态/slot 使用率/handled 任务数。可增删 Worker 扩容
→ 关联到任务监控(执行任务)· job-net 容器
3
模型仓库/system/models
系统认识的 LLM 模型清单——gpt-4o/qwen2-5-72b-awq/bge-m3...及其能力(context 长度/是否支持 function calling)。Gateway Pool 从这里选后端模型。
→ 关联到AI Gateway(用它的模型)
4
身份与密钥/system/identities
用户和 Service Account 管理——admin 用户在这里 · Service Principal(用来给外部程序调 API 的机器账号)在这里生成 API Key。登录用的账号在这里管
→ 关联到登录页 · 所有 API 调用鉴权
5
Token 用量/system/token-usage
用户/Agent/模型/时间段看 LLM Token 消耗统计。看谁在烧钱、哪个 Agent 效率低。成本控制面板
→ 关联到Agent(按 Agent 分组)· AI Gateway(数据源)
🛠️ D
开发工具
基础设施调试 · 让程序员/QA 能调
1
任务流程/dev/task-workflows
可视化流程编辑器 + 观测器。定义"知识库入库"、"评估运行"等 Elsa Workflow。可看拓扑图、手动触发、看运行记录。项目预置 8 个内置流程(见附录 B)。
→ 关联到AI Workflows(agentic 页的工作流)· 处理任务(数据入库触发)· Hangfire
2
数据库/dev/db/sqlite
直接看 PostgreSQL/SQLite 表(路径叫 sqlite 只是历史包袱,现在是 PG)· 可跑 SQL。bug 复盘时看原始数据用。
→ 关联到test-postgresql:15432 · 所有业务表
3
向量库/dev/db/milvus
直接看 Milvus collection——KB 里的 chunks 存成什么样、每个 chunk 的向量、metadata。调 recall 效果不行时先来这看向量库存的对不对
→ 关联到Milvus:19530 · 知识库(每个 KB 对应一个 collection)
4
对象存储/dev/s3
浏览 S3(MinIO)桶。原始 PDF/表格裁图/BM25 索引都存在这。
→ 关联到MinIO:19000 · 知识库(文档原文)
5
任务监控/dev/hangfire
跳到 Hangfire 官方 dashboard——看所有后台任务的执行历史、失败重试、正在运行的任务。最底层的任务队列可观测面板
→ 关联到Worker(执行者)· Redis(队列存储)· 处理任务(业务包装)
04 — DEPENDENCY GRAPH

25 个页面 · 谁依赖谁

这张图把上面所有页面按业务价值层次排列——顶层是用户直接用的东西(智能对话 · 评测),底层是基础设施(Milvus · PG · S3)。用一根线连起来就是:用户在智能对话发问 → 命中Agent → Agent 调 Skill / Tool / KB → KB 查 Milvus → LLM 走 AI Gateway

L4 · 用户界面 L3 · 业务编排 L2 · 基础能力 L1 · 数据 / 存储 智能对话 /agentic/chat 历史会话 /agentic/sessions 评测工具 /agentic/eval-* 召回验证 /knowledge/retrieval-validation Token 用量 /system/token-usage Agent 管理 /agentic/agents 13 个预置 Agent AI Workflows /agentic/workflows 流程式 Agent 技能管理 /agentic/skills prompt + 少样本 工具管理 /agentic/tools read_kb / search 等 评测数据集 /agentic/eval-datasets Q&A 标准答案库 AI Gateway /system/ai-gateway LLM Pool · 路由 知识库 /knowledge/knowledge-base KB 容器 术语表 /knowledge/glossary query 扩展 身份与密钥 /system/identities 用户 · API Key 模型仓库 /system/models 可选 LLM 清单 PostgreSQL /dev/db/sqlite · KB/Agent/Session 元数据 Milvus 向量库 /dev/db/milvus · chunks + embeddings MinIO / S3 /dev/s3 · 原始 PDF · 图片 · BM25 Hangfire + Redis /dev/hangfire · 后台任务队列 Worker + 任务流程 /system/workers · /dev/task-workflows → 依赖 · 硬关系 配置引用
05 — SCENARIOS

典型场景 · 完成一件事要走哪些页面

下面 3 个是最常见的操作路径。看这几张就能理解整个系统的用法闭环

🚀 场景 1 · 新知识入库
从"我有一批 PDF"到"这些 PDF 可以被 AI 查了"
1. 创建 KB知识库
2. 上传文档KB 详情页
3. 看进度处理任务
4. 加术语术语表
5. 验召回召回验证

底层触发的任务流程:知识入库主流程 → 湖→仓 → 仓→向量 → 文档画像(dev 里能看拓扑)。验召回不满意 → 加术语表或调 KB 检索配置(dense/sparse/hybrid)

🤖 场景 2 · 部署一个 Agent 上线
从"我想让 AI 帮我做医药合规问答"到"用户能问了"
1. 建 GatewayAI Gateway
2. 写 Skill技能管理
3. 配 Tool工具管理
4. 建 AgentAgent 管理
5. 测对话智能对话
6. 发布版本Agent 详情

系统层把 LLM 后端(Gateway Pool)接好 → 再业务层写 Skill(说明书)/ Tool(动作)/ Agent(组合体)→ 最后用户层去 Chat 试。Skill 是最需要打磨的一环——项目的 mvr-grounded-answer skill 反复迭代了多次(见主报告 Act 5)。

📊 场景 3 · 改完 Agent 上线前跑评测
从"改了 skill 提示词"到"确认没让效果变差再上"
1. 传数据集评测数据集
2. 建 run评测数据集
3. 触发运行评估运行工作流
4. 看指标评估运行详情
5. 对比评估对比页

评测本身也是一个内置工作流——数据集加载 → 逐条评估 → 汇总指标。关键动作是对比:新 Skill run vs 旧 Skill run,看是否退化。如果 recall 下降超过阈值 → 不上线

06 — APPENDIX A

附录 A · 13 个预置 Agent 全清单

从 UI 里扫描到的实际 Agent 清单——3 类角色:2 个业务主力(用户直接调)· 3 个文档处理(入库时自动调)· 8 个 GraphRAG 内部(图谱构建时自动调)。只有"业务主力"这一类是用户手动挑选去 Chat 的,其他都在后台自动跑。

Agent 名 / code
做什么
类型
Gateway Pool
MVR 医药智能助手mvr-pharma
面向医药行业 MVR 流程的 AI 辅助系统。从知识库检索产品资料/临床文献,生成带出处的合规回复草稿。严格基于知识库事实,禁止外部信息。
主力 · Agent
default · 4 技能 6 工具
知识库问答(流程)kb-workflow-qa
基于工作流的 KB 问答 Agent,用声明式工作流执行 KB 校验 → 文档门禁 → 检索 → 流式答案生成。不依赖 LLM 决策,确定性场景更快。
主力 · 工作流
default · 0 技能 0 工具
跨 Chunk 关系补全graph-relationship-enricher
GraphRAG 内部:在实体合并后,基于全量实体列表发现跨 chunk 的隐式关系。识别层级(版本/子类)、组织(隶属/管理)以及语义关联。
GraphRAG 内部
local-gpu
实体摘要graph-entity-summarizer
GraphRAG 内部:将同一实体的多段描述合并为简洁摘要。用户可修改 instructions 调整摘要风格。
GraphRAG 内部
local-gpu
图谱实体抽取graph-entity-extractor
GraphRAG 内部:从文本 chunk 中抽取实体和关系。
GraphRAG 内部
local-gpu
矛盾确认graph-conflict-confirmer
GraphRAG 内部:判断两条声明是否存在逻辑矛盾。
GraphRAG 内部
local-gpu
社区报告graph-community-reporter
GraphRAG 内部:为社区(实体聚类)生成结构化报告。
GraphRAG 内部
local-gpu
Claim 抽取graph-claim-extractor
GraphRAG 内部:从文本中提取事实性声明(Claims)。
GraphRAG 内部
local-gpu
另外还有 5 个 Agent
列表未完整加载 · 应包含 graph-relationship-extractor / doc-classifier / doc-summarizer / doc-attribute-extractor / doc-relation-builder 等文档处理 Agent(见 src/pike-agent/src/Modules/Pike.Agentic/Definitions/agents/)。
文档处理
-
07 — APPENDIX B

附录 B · 8 个内置任务流程

这些是 Elsa Workflow 定义的系统级流程——数据入库、评估、GraphRAG 抽取都由它们驱动。用户不用直接接触,但业务流程都靠它们跑通。

流程名
做什么
节点/边
触发方式
知识入库主流程
调用湖入仓子流程 → 调用仓入库子流程 · 父流程,串起两个子流程
2/1
上传文档时自动
知识湖→仓流程
源资产解析 → 文件下载 → 统一内容处理 → 写入知识仓 · Azure DI 解析 + LLM 增强就在这里
5/4
主流程调用
知识仓→向量流程
知识仓读取 → 文本分块 → 向量嵌入(BGE-M3)→ 向量库写入(Milvus)· 调 GPU 最多的一步
5/4
主流程调用
文档画像
逐文档:读取 + 分段 → 分类 → 主体/标签提取 → 摘要 → 关联文档提取 → 保存画像 · 入库后自动跑,给每份文档打业务标签
6/6
入库后自动
搜索令牌构建
为文件名分词 + 术语扩展,生成搜索令牌供文件查找使用。
1/0
入库时自动
评估运行
加载数据集 → 逐条评估(调用目标 + 评分)→ 汇总指标 · 评测工具页触发的就是这个
3/2
评测页手动
知识图谱抽取
检查开关 → 流式抽取 + 持久化(逐批写 DB · S3 断点续跑)→ 收尾清理 → 实体摘要 → 实体向量化 · GraphRAG 的主流水线
5/4
定时/手动
社区更新
检查开关 → 社区检测(Leiden 算法)→ 社区报告生成(LLM)→ 实体向量化 · GraphRAG 的社区维护
4/3
定时/手动
08 — INSIGHT

只要记住这 5 件事

整个后台围绕一件事:让 Agent好好回答问题。所有其他菜单都是给这件事服务的支持系统。

数据 → 能力 → 编排 → 用户 四层清晰:KB / Milvus / S3(数据)→ Gateway / 术语表(能力)→ Skill + Tool + Agent(编排)→ Chat / 评测(用户界面)。

Skill 是最需要打磨的一环。修 Skill 提示词 → 跑评测 → 对比 → 决定是否发布,这是迭代 AI 效果的主循环

13 个预置 Agent 里只有 2 个是"业务主力"(mvr-pharma / kb-workflow-qa),其他都是后台自动调的处理 Agent——用户不用手动碰它们。

开发工具那 5 个页面是"备用逃生梯"——正常运行不用点开,出 bug 时直接查 PG/Milvus/S3/Hangfire 是最快诊断路径。