KoiWeave-架构设计

KoiWeave 架构设计

KoiWeave --- 持续进化的代码研发知识中枢

本文档完整描述 KoiWeave 的目录结构、知识流动规则、多仓库协作模式以及自动化运维机制。


作者:Elcker

目录

  • [1. 核心理念](#1. 核心理念)
  • [2. 目录结构总览](#2. 目录结构总览)
  • [3. 知识流动三环](#3. 知识流动三环)
  • [4. 多仓库协作模式](#4. 多仓库协作模式)
  • [4.5 同步日志与状态追踪](#4.5 同步日志与状态追踪)
  • [4.6 知识拉取机制:从远程仓库到本地可用](#4.6 知识拉取机制:从远程仓库到本地可用)
  • [5. AGENTS.md 的职责](#5. AGENTS.md 的职责)
  • [6. OpenSpec 在架构中的位置](#6. OpenSpec 在架构中的位置)
  • [7. OpenGem (Obsidian 同步)](#7. OpenGem (Obsidian 同步))
  • [8. 关键问题与决策记录](#8. 关键问题与决策记录)

1. 核心理念

1.1 设计目标

  • 高质量:AI 在写代码前必定读取已有知识,不重复决策、不重复踩坑
  • 高效率:知识自动提取、自动维护,人不做机器能做的事
  • 持续进化:知识在三次时间尺度上自动迭代,不腐烂、不过时

1.2 设计原则

原则 含义
知识驱动开发 开发前必读知识,开发后必回流知识
代码是主要信号源 最可靠的知识来自实际代码变更,而非人工撰写
知识必须保鲜 没有定期审核的知识不如没有
AI 替代人做记录 人只做决策,提取/归类/链接/维护全部自动化
工具即管线 OpenCode + OpenSpec + OpenGem + Obsidian 不是独立工具,是一条端到端管线

2. 目录结构总览

2.1 知识中枢仓库 (koi-llm-wiki/)

复制代码
koi-llm-wiki/
│
├── AGENTS.md                        # [核心] AI 行为宪法
│                                     定义了整套知识系统的操作规则,
│                                     OpenCode 每次启动都会读取它
│
├── log.md                           # 全局操作日志(AI 自动维护)
│
├── .gitignore
│
├── signals/                         # [输入层] 所有知识的原始信号源
│   ├── inbox/                       #   临时收集箱(可手动拖入文件/链接)
│   ├── auto-ingest/                 #   自动采集的原始素材(只读,不改)
│   │   ├── service-auth/            #     来自 service-auth 的归档回流
│   │   ├── service-order/           #     来自 service-order 的归档回流
│   │   └── service-payment/         #     来自 service-payment 的归档回流
│   ├── requirements/                #   产品需求文档、会议纪要
│   └── references/                  #   外部技术文档、RFC、论文
│
├── wiki/                            # [知识层] AI 维护的结构化知识
│   ├── INDEX.md                     #   全局索引地图(AI 自动维护)
│   ├── MANIFEST.md                  #   知识保鲜清单:上次审核时间、下次审核时间
│   ├── concepts/                    #   抽象概念
│   │   ├── event-loop.md
│   │   ├── cqrs.md
│   │   └── rbac.md
│   ├── entities/                    #   业务实体
│   │   ├── User.md
│   │   ├── Order.md
│   │   └── Payment.md
│   ├── modules/                     #   功能模块设计
│   │   ├── auth-module.md
│   │   ├── order-module.md
│   │   └── payment-module.md
│   ├── architecture/
│   │   ├── decisions/               #   架构决策记录(ADR,自动生成)
│   │   │   ├── ADR-001-auth-session.md
│   │   │   └── ADR-002-order-lifecycle.md
│   │   ├── proposals/               #   跨服务设计提案(轻量,非 OpenSpec)
│   │   │   └── unified-sso.md
│   │   └── diagrams/                #   C4 架构图(Mermaid)
│   ├── summaries/                   #   对 signals/ 中长文档的 AI 摘要
│   └── glossary/                    #   术语表(跨文章一致性保证)
│
├── ops/                             # [运维层] 自动化脚本
│   ├── health-check.sh              #   知识库健康检查脚本
│   ├── sync-obsidian.sh             #   OpenGem Obsidian 同步脚本
│   └── report-weekly.sh             #   周报生成脚本
│
└── outputs/                         # [衍生层] 生成物
    ├── charts/                      #   Mermaid/PlantUML 图表
    └── reports/                     #   周报、质量报告

2.2 微服务仓库 (service-xxx/)

复制代码
service-auth/                        # 任意微服务仓库
│
├── AGENTS.md                        # [核心] 指向知识中枢的导航指令
│                                     包含了「开发前必读 wiki」的规则
│
├── .wiki-context/                   # 知识投射层(只有映射文件,无实体数据)
│   ├── MANIFEST.md                  #   本服务相关的 wiki 路径索引
│   ├── STATUS.md                    #   知识同步状态(最新/落后/冲突)
│   └── SYNC_LOG.md                  #   完整的推送/拉取操作日志
│
├── openspec/                        # 服务级别的 OpenSpec 变更
│   ├── changes/                     #   变更目录
│   │   ├── add-phone-login/
│   │   │   ├── proposal.md
│   │   │   ├── design.md
│   │   │   ├── tasks.md
│   │   │   └── specs/
│   │   └── ...
│   └── specs/                       #   本服务的规格基线
│
├── src/
├── tests/
└── ...

2.3 目录结构设计决策

决策 理由
signals/ 而非 raw/ 不只是"原始素材",而是包含自动采集通道的信号源,体现 AI 自主采集能力
取消 dev/ 开发在各自服务仓库完成,wiki 中不需要开发目录
wiki 仓库不含 openspec/ 知识中枢不产生代码,OpenSpec 生命周期在服务仓库中完成
新增 ops/ 自动化运维脚本的独立容器,让日循环/周循环可执行
新增 MANIFEST.md 知识的"保鲜期"记录,解决知识老化无人知的问题
新增 glossary/ 术语一致性:AI 写所有页面时参照同一个术语表,避免同物多名
新增 architecture/proposals/ 跨服务设计提案的存放地,作为知识而非 Change 被消费
新增 architecture/decisions/ ADR 从服务仓库归档时自动生成,非人工撰写

3. 知识流动三环

知识的持续进化通过三个时间尺度的循环实现。

3.1 第一环:微循环(每次代码变更)

复制代码
触发点:服务仓库中的 OpenSpec 归档
                                   ┌──────────────────────┐
                                   │  这个环节 100% AI 自动 │
                                   │  人不需要介入          │
                                   └──────────────────────┘
service-xxx/openspec archive
        │
        ▼
    AI 分析变更 diff
        ├── 新增了哪些实体?     → 写入 wiki/entities/
        ├── 修改了哪些模块逻辑?  → 更新 wiki/modules/
        ├── 涉及哪些概念?       → 更新/创建 wiki/concepts/
        ├── 有架构决策?         → 生成 wiki/architecture/decisions/ADR-xxx.md
        └── 涉及跨服务影响?     → 更新 wiki/architecture/proposals/ 相关提案
        │
        ▼
    回流信息写入 signals/auto-ingest/service-xxx/
        │
        ▼
    OpenGem (push) → Obsidian 知识库同步

3.2 第二环:日循环(每日健康检查)

复制代码
触发点:cron / git hook / 手动执行 ops/health-check.sh

    ops/health-check.sh
        │
        ├── 术语一致性扫描
        │    检查 glossary/ 中的术语在各 wiki 页面中使用是否一致
        │
        ├── 链接完整性检查
        │    检查 wiki/ 中的 [[链接]] 是否全部有效
        │
        ├── 时效性检查
        │    读取 MANIFEST.md,标记超过 30 天未审核的页面为 stale
        │
        ├── 矛盾检测
        │    同一实体/概念在不同页面中的描述是否冲突
        │
        └── 报告输出
             结果记录到 log.md + outputs/reports/

3.3 第三环:周循环(战略进化)

复制代码
触发点:每周自动运行 / 按需触发

    AI 分析
        ├── 代码仓库模式识别
        │    哪些模块变更最频繁?跨服务调用趋势?
        ├── 知识缺口检测
        │    wiki 中缺少哪些必要的概念/实体/决策记录?
        ├── 技术债务推断
        │    是否存在重复模式、可提取的公共抽象?
        │
        ▼
    AI 生成分析报告 → outputs/reports/weekly-review.md
        │
        ▼
    人类阅审
        ├── 批准技术债务修复 → 在服务仓库中创建 OpenSpec change
        ├── 批准知识补充 → 直接更新 wiki 或创建 proposal
        └── 忽略/推迟

3.4 三环工作原理

复制代码
    微循环                 日循环                 周循环
  (每次变更)            (每天)                (每周)
 ┌─────────────┐    ┌─────────────┐     ┌─────────────┐
 │ 代码归档触发  │    │ cron 定时触发 │     │ 自动分析     │
 │ 知识自动提取  │    │ 健康检查     │     │ 模式识别     │
 │ wiki 即时更新 │    │ 不一致修复   │     │ 缺口检测     │
 │ Obsidian 推送 │    │ 报告输出     │     │ 提案生成     │
 └─────────────┘    └─────────────┘     └─────────────┘
        │                  │                    │
        │          保证已有知识不腐烂      │
        │                                         │
        └──────────────────┬──────────────────────┘
                           │
                           ▼
                   知识库持续进化
                 不堆积、不老化、不重复

4. 多仓库协作模式

4.1 架构总览

复制代码
                    koi-llm-wiki(知识中枢)
                    ┌─────────────────────────┐
                    │  signals/               │
                    │    auto-ingest/ ◀────────────── 各服务归档回流
                    │  wiki/                  │
                    │    entities/            │
                    │    modules/             │
                    │    concepts/            │
                    │    architecture/        │
                    └──────────┬──────────────┘
                               │
                       OpenGem (push)
                               │
                               ▼
                       Obsidian Vault
                    (可读、可搜索、可链接)
                               │
                               │
  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐
  │ service-auth/    │  │ service-order/   │  │ service-payment/ │
  │                  │  │                  │  │                  │
  │ AGENTS.md        │  │ AGENTS.md        │  │ AGENTS.md        │
  │   ↓              │  │   ↓              │  │   ↓              │
  │ .wiki-context/   │  │ .wiki-context/   │  │ .wiki-context/   │
  │   MANIFEST.md    │  │   MANIFEST.md    │  │   MANIFEST.md    │
  │                  │  │                  │  │                  │
  │ openspec/        │  │ openspec/        │  │ openspec/        │
  │   changes/       │  │   changes/       │  │   changes/       │
  │   specs/         │  │   specs/         │  │   specs/         │
  └──────────────────┘  └──────────────────┘  └──────────────────┘

4.2 .wiki-context/MANIFEST.md 示例

每个微服务仓库中的 MANIFEST.md 不加锁,由 AI 自动维护。

markdown 复制代码
# .wiki-context: service-auth

## 相关模块
- `wiki/modules/auth-module/`          ← 认证模块设计
- `wiki/modules/user-service/`         ← 用户服务接口

## 相关实体
- `wiki/entities/User`
- `wiki/entities/Session`
- `wiki/entities/Token`

## 相关概念
- `wiki/concepts/jwt-authentication`
- `wiki/concepts/oauth2-flow`
- `wiki/concepts/rbac`

## 相关 ADR
- `wiki/architecture/decisions/ADR-001-auth-session`
- `wiki/architecture/decisions/ADR-007-token-refresh`

## 依赖的服务
- `service-order`    → 用户鉴权
- `service-payment`  → 用户身份校验

4.3 知识投射流程

复制代码
AI 在 service-auth 中启动 OpenCode
        │
        ▼
    AGENTS.md 被加载
        │
        ├── 读取 .wiki-context/MANIFEST.md
        │         │
        │         ▼
        ├── 按 MANIFEST 索引加载相关知识
        │    ├── wiki/modules/auth-module/   → 架构设计
        │    ├── wiki/entities/User          → 实体定义
        │    └── wiki/architecture/decisions/ → 历史决策
        │
        ├── 基于完整上下文编写代码
        │
        └── OpenSpec archive 时自动回流
                  │
                  ▼
            回流信息 → signals/auto-ingest/service-auth/

4.4 跨服务架构变更(不使用 OpenSpec 编排)

复制代码
[场景: 统一 SSO 方案]

  1. 写提案(轻量文档,不是 OpenSpec change)
     人在 wiki 仓库中创建:
       wiki/architecture/proposals/unified-sso.md
       ├── 背景与动机
       ├── 方案选型对比
       ├── 各服务改动点清单
       └── 接口契约定义

  2. 提案作为知识被消费
     service-auth 启动 OpenCode:
       AGENTS.md → `读取 wiki/architecture/proposals/`
       AI 看到 unified-sso.md
       → 在 service-auth/openspec 创建 change
       → 实现 auth 侧的 SSO 改动

     service-order 同上。

  3. 知识回流
     各服务归档 → 回流 signals/auto-ingest/
     日检发现原提案标记的改动已完成
     → 无需额外编排

4.5 同步日志与状态追踪

服务仓库持有的知识是知识中枢的本地镜像。必须追踪这个镜像的时效性,否则 AI 可能基于过时的知识做出错误决策。

4.5.1 状态文件:.wiki-context/STATUS.md

每个服务仓库维护一个精简的状态文件,AI 启动时第一眼就能知道知识是否最新。

markdown 复制代码
# Wiki Context Status --- service-auth

## 当前同步状态

| 字段 | 值 |
|---|---|
| 最后拉取 (Pull) | 2026-06-20 10:30:00 |
| 知识中枢 HEAD | `abc1234` (main) |
| 知识中枢最新 HEAD | `def5678` (main) |
| 同步状态 | 🔴 落后 3 次提交 |
| 未推送的回流 | 0 条 |
| 上次健康检查 | 2026-06-20 09:00:00 ✅ |

## 快速判断

- 🟢 **最新** --- 可以直接开始开发
- 🔴 **落后** --- AI 必须先执行 pull 更新本地镜像,再开始开发
- 🟡 **有未推送回流** --- 上次归档的回流尚未被知识中枢消费
- ⚠️ **冲突** --- push 时发现与知识中枢现有内容冲突,需人工介入

STATUS.md 由 AI 在每次 pull / push 操作后自动更新,人不手动维护

4.5.2 日志文件:.wiki-context/SYNC_LOG.md

完整的操作审计日志,记录每一次知识同步。

markdown 复制代码
# Sync Log --- service-auth

## Pull(从知识中枢拉取)

| 时间 | 操作 | 拉取版本 | 涉及内容 | 拉取方式 | 结果 |
|---|---|---|---|---|---|
| 2026-07-02 10:30 | pull | `abc1234` | entities/User, modules/auth, ADR-001 | 全文拉取 | ✅ |
| 2026-06-30 09:15 | pull | `a1b2c3d` | concepts/rbac, ADR-001, ADR-007 | 增量拉取 | ✅ |
| 2026-06-28 14:00 | pull | `f0e1d2c` | proposals/unified-sso | 按需拉取 | ✅ |

## Push(向知识中枢回流)

| 时间 | 操作 | 关联 Change | 推送内容 | 结果 |
|---|---|---|---|---|
| 2026-07-02 11:00 | push | add-phone-login | 新实体 PhoneLogin, 更新 ADR-001 | ✅ 已接收 |
| 2026-06-29 16:30 | push | fix-session-expiry | 更新 Session 实体 | ⚠️ 冲突:Session 已在中枢被修改 |
| 2026-06-25 10:00 | push | refactor-auth-middleware | ADR-008 新增 | ✅ 已接收 |
拉取方式说明
方式 适用场景 AI 操作
全文拉取 首次建立上下文,或落后超过 10 次提交 读取 MANIFEST.md 中列出的所有 wiki 文件
增量拉取 少量落后(1-5 次提交) 只读取知识中枢有变更的文件
按需拉取 特定提案/概念需要参考 只读取单个文件,不更新本地镜像状态
冲突处理

Push 时发现冲突(知识中枢已有内容的更新比本次回流更新),AI 采取以下策略:

复制代码
冲突类型:实体/模块在同一时间段被两个服务同时修改

处理步骤:
1. AI 读取知识中枢中的最新版本
2. AI 对比本地版本与中枢版本,识别差异点
3. 如果差异可合并 → AI 自动合并后重新 push
4. 如果差异不可合并 → 标记 SYNC_LOG 为冲突
   → 人介入解决
   → 解决后更新 STATUS.md 为 🟢
4.5.3 完整同步流程
复制代码
                   知识中枢 (koi-llm-wiki)
                   ┌────────────────────────┐
                   │  wiki/entities/User v3 │
                   │  wiki/modules/auth v2  │
                   └───────────┬────────────┘
                               │
          ╔════════════════════╪════════════════════╗
          ║   Pull 流程         │                    ║
          ║                    │                    ║
          ║   ┌────────────────▼────────────┐       ║
          ║   │ ① AI 启动 → 读 STATUS.md    │       ║
          ║   │    → 状态 🔴 落后           │       ║
          ║   │ ② AI 向知识中枢发起 pull    │       ║
          ║   │    → 读取 v3 的 User.md     │       ║
          ║   │    → 读取 v2 的 auth-module │       ║
          ║   │ ③ 更新 STATUS.md → 🟢       │       ║
          ║   │ ④ 追加 SYNC_LOG.md 记录     │       ║
          ║   └─────────────────────────────┘       ║
          ║                                          ║
          ║   Push 流程                               ║
          ║   ┌─────────────────────────────┐       ║
          ║   │ ① OpenSpec archive 触发     │       ║
          ║   │ ② AI 提取知识变更           │       ║
          ║   │ ③ 写入 signals/auto-ingest/ │       ║
          ║   │ ④ 追加 SYNC_LOG.md 记录     │       ║
          ║   │ ⑤ 更新 STATUS.md → 确认     │       ║
          ║   └─────────────────────────────┘       ║
          ╚══════════════╦═══════════════════════════╝
                         │
                    ┌────┴────┐
                    │ service │
                    │ -auth   │
                    │         │
                    │ STATUS  │
                    │ SYNC_LOG│
                    └─────────┘
4.5.4 AI 启动检查清单

AI 在服务仓库中启动开发会话时,必须按以下顺序执行:

复制代码
□ 1. 读取 .wiki-context/STATUS.md
     → 判断同步状态
     → 如果 🔴 落后:先执行 pull,再继续
     → 如果 ⚠️ 冲突:通知人类处理,暂停

□ 2. 读取 .wiki-context/MANIFEST.md
     → 获取本服务相关的知识路径索引

□ 3. 按索引加载知识到上下文
     → 实体定义、模块设计、ADR、概念

□ 4. 检查 SYNC_LOG.md 最近的 pull 记录
     → 确认当前上下文的时间点

□ 5. 开始开发

4.6 知识拉取机制:从远程仓库到本地可用

这是最关键的实践问题。wiki 仓库和各服务仓库是独立的 git 仓库,存储在不同服务器上(或同一台服务器的不同目录)。AI 在服务仓库中启动时,如何拿到 wiki 中的知识?

4.6.1 路径解析优先级链

AGENTS.md 中关于知识源的声明,采用三级路径解析:

复制代码
服务仓库中 AGENTS.md 声明:
  "本服务的架构知识存储在项目级知识中枢"

AI 解析路径时依次尝试:
优先级 方式 说明
P0 环境变量 KOI_WIKI_PATH 最灵活,CI/CD 和本地开发通用
P1 服务仓库中的 git submodule 自包含,适合团队标准化
P2 相对路径 ../koi-llm-wiki/ 本地开发约定,零配置
P3 自动 clone 到 ~/.koi-wiki/ 兜底,首次使用自动下载
4.6.2 三种拉取方式详解
方式 A:环境变量(推荐)
复制代码
开发者机器 / CI 服务器上设置:
  KOI_WIKI_PATH=/data/repos/koi-llm-wiki

AI 的工作流程:
  1. 读取环境变量 $KOI_WIKI_PATH
  2. 检查路径是否存在
  3. 如果不存在 → git clone git@github.com:org/koi-llm-wiki.git $KOI_WIKI_PATH
  4. 如果存在 → git -C $KOI_WIKI_PATH pull --ff-only
  5. 读取 $KOI_WIKI_PATH/wiki/ 下的知识
  6. 更新 STATUS.md (PULL_TIME, WIKI_HEAD)
  7. 追加 SYNC_LOG.md

优点

  • 环境变量一次设置,所有服务共享同一个 wiki clone
  • 避免每个服务都 clone 一份 wiki,节约磁盘
  • CI/CD 中只需在 pipeline 层面设置一个变量

缺点

  • 需要初始化步骤(设置环境变量 / 首次 clone)
方式 B:Git Submodule(开箱即用)
复制代码
每个服务仓库将 wiki 仓库添加为 submodule:
  cd service-auth
  git submodule add git@github.com:org/koi-llm-wiki.git .wiki-context/koi-llm-wiki
  git submodule init
  git submodule update

目录结构变为:
  service-auth/
    ├── .wiki-context/
    │   ├── MANIFEST.md
    │   ├── STATUS.md
    │   ├── SYNC_LOG.md
    │   └── koi-llm-wiki/         ← git submodule,指向知识中枢
    │       ├── wiki/
    │       └── signals/
    └── openspec/

AI 的工作流程

复制代码
  Service Repo                     Wiki Submodule
  ┌──────────────┐               ┌──────────────┐
  │              │               │              │
  │  git status  │────同步──────▶│  检查 submod │
  │              │               │  是否最新    │
  └──────────────┘               └──────┬───────┘
                                       │
                          ┌────────────┴────────────┐
                          │                         │
                    落后 / 未初始化             已是最新
                          │                         │
                          ▼                         ▼
              git submodule update --remote    直接读取
              --merge .wiki-context/koi-llm-wiki
                          │
                          ▼
                    更新 STATUS.md
                    追加 SYNC_LOG.md

优点 :git 原生支持,git clone --recurse-submodules 一键拉取所有内容

缺点:每个仓库持有一份 wiki 副本,多人开发时 submodule commit 容易漂移

方式 C:自动 Clone(零配置兜底)
复制代码
AI 在服务仓库中启动,发现没有任何路径指向 wiki:

  1. AI 检查 KOI_WIKI_PATH → 未设置
  2. AI 检查 ../koi-llm-wiki/ → 不存在
  3. AI 检查 .wiki-context/koi-llm-wiki/ → 不存在
  4. AI 读取 AGENTS.md 中的 wiki 仓库地址:
     "知识中枢仓库: git@github.com:org/koi-llm-wiki.git"
  5. AI clone 到 ~/.koi-wiki/koi-llm-wiki/
  6. 更新 STATUS.md
  7. 追加 SYNC_LOG.md: "首次自动 clone"
4.6.3 推荐方案组合
场景 推荐方式 理由
个人本地开发 方式 A(环境变量) 一次 clone,所有服务共享,AI 自动维护
团队标准化 方式 A + B 混合 环境变量为主,submodule 作为 fallback
CI/CD 流水线 方式 A(环境变量) pipeline yaml 中设置变量,runner 上 clone
新手开箱 方式 C(自动 clone) 零配置,第一次启动自动完成

最佳实践(推荐给团队)

复制代码
1. 团队约定统一的wiki仓库路径:
   /opt/koi-wiki/koi-llm-wiki/   (服务器)
   ~/koi-wiki/koi-llm-wiki/      (本地开发机)

2. 写入团队的开发环境初始化脚本:
   # setup-wiki.sh
   if [ ! -d "$KOI_WIKI_PATH" ]; then
     git clone git@github.com:org/koi-llm-wiki.git $KOI_WIKI_PATH
   fi
   echo "KOI_WIKI_PATH=$KOI_WIKI_PATH" >> ~/.bashrc

3. 各服务仓库的 AGENTS.md 中声明:
   "知识中枢路径参考环境变量 KOI_WIKI_PATH,默认 ../koi-llm-wiki/"
4.6.4 在服务仓库中启动 AI 的完整流程

整合同步检查(4.5)和拉取机制(4.6),AI 在服务仓库中的完整启动流程:

复制代码
┌─────────────────────────────────────────────────────────────┐
│            服务仓库中 AI 启动完整流程                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Step 0: 路径解析                                           │
│    │                                                        │
│    ├── 检查 $KOI_WIKI_PATH                                  │
│    │   ├── 存在 → 验证路径是否有效                          │
│    │   └── 不存在 → 尝试方式 B / C                          │
│    │                                                        │
│    ▼                                                        │
│  Step 1: 同步状态检查                                       │
│    │                                                        │
│    ├── 读取 .wiki-context/STATUS.md                         │
│    ├── 获取本地记录的 WIKI_HEAD                             │
│    ├── git fetch 知识中枢 → 获取远程最新 HEAD               │
│    ├── 比较 WIKI_HEAD vs 远程 HEAD                          │
│    │   ├── 一致 → 🟢 无需操作                              │
│    │   └── 不一致 → 🔴 执行 pull                            │
│    │                                                        │
│    ▼                                                        │
│  Step 2: 执行 Pull                                          │
│    │                                                        │
│    ├── git pull 或 git submodule update                     │
│    ├── 更新 STATUS.md (PULL_TIME, WIKI_HEAD)                │
│    ├── 追加 SYNC_LOG.md                                     │
│    │                                                        │
│    ▼                                                        │
│  Step 3: 加载知识上下文                                     │
│    │                                                        │
│    ├── 读取 .wiki-context/MANIFEST.md                       │
│    ├── 按索引读取 wiki 文件                                 │
│    │   ├── 实体 → concepts → 模块 → ADR → 提案              │
│    │                                                        │
│    ▼                                                        │
│  Step 4: 开始开发                                           │
│    │                                                        │
│    └── AI 基于完整上下文编写代码                             │
│                                                             │
│  ...(开发完成后)                                           │
│                                                             │
│  Step N: OpenSpec Archive 触发 Push                         │
│    │                                                        │
│    ├── 提取知识变更                                         │
│    ├── 写入 signals/auto-ingest/service-xxx/                │
│    ├── 追加 SYNC_LOG.md (push 记录)                         │
│    └── 更新 STATUS.md                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘
4.6.5 多开发者 / CI 环境下的注意事项
场景 问题 解决方案
开发者 A 更新了 wiki 开发者 B 仍然看到旧知识 AI pull 时自动检测远程更新,STATUS.md 自动变 🔴
CI 流水线同时跑多个 job 各自 clone wiki 耗时 在 runner 上缓存 wiki 仓库,路径通过环境变量传入
两个服务同时 push 回流 signals/auto-ingest/ 写入冲突 按服务名分目录写入,各自隔离
wiki 仓库被 force push submodule 无法同步 推荐方式 B(submodule)时禁用 force push,方式 A 无此问题
开发者离线工作 无法 pull 最新知识 STATUS.md 标记为 ⚠️ 离线,允许基于本地缓存继续开发,上线前必须重新 pull

5.1 知识中枢 AGENTS.md (koi-llm-wiki/AGENTS.md)

定义中枢本身的维护规则:

markdown 复制代码
# AGENTS.md --- koi-llm-wiki 知识中枢

## 目录语义
- signals/:   只读输入区,AI 不可修改原始素材
- wiki/:      AI 维护的知识区,按规则增删改
- ops/:       自动化脚本存放地
- outputs/:   生成物输出目录

## 知识维护规则
1. 每次写入知识时,必须引用 glossary/ 中的术语
2. 每篇文章必须包含关联实体/概念的 [[链接]]
3. 新概念出现时,必须检查是否存在于 glossary/
4. 修改知识时,必须同步更新 INDEX.md
5. 从 auto-ingest/ 提取知识后,标记来源路径

## 知识保鲜
- MANIFEST.md 中的 lastReviewed 超过 30 天的页面标记 stale
- stale 页面优先在下次日检中重写或删除

5.2 服务仓库 AGENTS.md (service-xxx/AGENTS.md)

衔接知识中枢与开发过程:

markdown 复制代码
# AGENTS.md --- service-auth

## 知识源
本服务的架构知识存储在项目级知识中枢:
  ../koi-llm-wiki/ (同级目录或 git submodule 引入)

## 强制流程

### Step 0: 启动时检查同步状态
读取 .wiki-context/STATUS.md:
  1. 如果同步状态为 🔴 落后 → 先执行 pull 再继续
  2. 如果同步状态为 ⚠️ 冲突 → 通知人类,暂停开发
  3. pull 完成后更新 STATUS.md 为 🟢,并写入 SYNC_LOG.md

### Step 1: 加载知识上下文
读取 .wiki-context/MANIFEST.md → 加载所有相关的 wiki 知识
按以下优先级加载:
  1. 架构决策(ADR)--- 理解历史原因
  2. 实体定义 --- 确保数据模型一致
  3. 模块设计 --- 理解当前架构
  4. 相关提案(proposals)--- 了解进行中的变更

### Step 2: 变更前验证知识
对照已加载的 wiki 知识与当前代码:
  1. 代码是否已偏离 wiki 中的设计?
  2. wiki 中的知识是否需要更新?
  3. 如果存在差异 → 先更新 wiki,再改代码

### Step 3: 变更后回流
OpenSpec archive 时自动执行:
  1. 提取本变更引入的新实体 / 新概念
  2. 提取设计决策 → 形成 ADR 素材
  3. 写入 signals/auto-ingest/service-auth/
  4. 追加 SYNC_LOG.md 记录(push 条目)
  5. 更新 STATUS.md 确认回流已发出

6. OpenSpec 在架构中的位置

6.1 范围限定

复制代码
OpenSpec 只存在于微服务仓库中,用于管理功能级别的变更。

koi-llm-wiki 仓库中不需要 openspec/ 目录。

6.2 OpenSpec 生命周期与知识回流的对应关系

复制代码
  propose     →  设计文档写入 wiki/architecture/proposals/
                      │
                      ▼
  apply       →  代码实现(无知识操作)
                      │
                      ▼
  archive ◀──→  知识回流(关键节点)
                      │
                      ├── 提取新实体     → wiki/entities/
                      ├── 更新模块设计   → wiki/modules/
                      ├── 生成 ADR      → wiki/architecture/decisions/
                      ├── 更新术语      → wiki/glossary/
                      └── 写入回流记录  → signals/auto-ingest/service-xxx/

6.3 为什么 wiki 仓库不需要 OpenSpec

原因 说明
OpenSpec 的生命周期是 propose → apply → archive wiki 仓库没有代码可 apply
知识中枢的变更(如新增分类)直接改即可 不需要用 OpenSpec 管理知识结构调整
跨服务设计提案是知识 不是变更 放在 architecture/proposals/ 作为文档被消费

7. OpenGem (Obsidian 同步)

7.1 同步模式

Push 模式(AI 主动推送):

复制代码
wiki/ 发生变更(AI 写入/修改知识)
        │
        ▼
    ops/sync-obsidian.sh
        │
        ├── 读取 wiki/INDEX.md 获取全量文章列表
        ├── 比较 Obsidian vault 中的状态
        ├── 将新增/修改的 .md 文件推送到 Obsidian vault
        ├── 删除 Obsidian 中不再存在的条目(需确认)
        └── 记录同步结果到 log.md

7.2 OpenGem 的作用

OpenGem 是 OpenCode 的 Obsidian 插件桥,核心能力:

  • 读取:AI 从 Obsidian vault 中搜索和读取笔记
  • 写入:AI 将知识写入 Obsidian vault
  • 搜索:AI 在 Obsidian 笔记中执行全文搜索
  • 维护:自动维护 Obsidian 中的知识结构和链接

7.3 同步策略

场景 策略
AI 写入新知识到 wiki/ 立即 push 到 Obsidian
AI 更新已有知识 push 更新到 Obsidian
手动在 Obsidian 中写笔记 可选:定期 pull 到 signals/inbox/
删除知识 标记删除,确认后同步

8. 关键问题与决策记录

Q1: 多仓库间代码如何存放?

决策:代码放在各自的微服务仓库中,知识中枢只存知识和规格。

  • koi-llm-wiki/ --- 知识中枢(当前仓库)
  • service-auth/ --- 独立微服务仓库
  • service-order/ --- 独立微服务仓库

Q2: 跨服务架构变更如何协调?

决策:不使用 OpenSpec 编排,使用 wiki/architecture/proposals/ 作为共享知识。

  1. 在知识中枢写一篇 proposal 文档
  2. 各服务 AGENTS.md 强制读取 proposal
  3. 各自在本地 OpenSpec 实现自己的部分
  4. 归档时各自回流,知识自动编织

Q3: 开发时 AI 如何获取知识?

决策 :通过 AGENTS.md + .wiki-context/MANIFEST.md 实现。

AI 在服务仓库启动时,AGENTS.md 强制要求:

  1. 读取 MANIFEST.md 获取相关知识的路径索引
  2. 按索引读取 wiki 中的模块设计、实体定义、ADR
  3. 基于完整上下文编写代码

Q4: 每个服务仓库启动时,AI 如何从远程 wiki 仓库拉取知识?

决策:采用三级路径解析 + 自动拉取。

复制代码
AI 路径解析优先级:
  P0: $KOI_WIKI_PATH 环境变量        (推荐,团队标准化)
  P1: git submodule .wiki-context/   (开箱即用)
  P2: ../koi-llm-wiki/ 相对路径      (本地开发约定)
  P3: 自动 clone 到 ~/.koi-wiki/     (零配置兜底)

AI 启动时自动执行:

  1. 解析 wiki 仓库路径(按优先级链尝试)
  2. 检查 .wiki-context/STATUS.md 记录的本地版本
  3. git fetch 远程对比,发现落后则自动 pull
  4. 更新 STATUS.md 和 SYNC_LOG.md
  5. MANIFEST.md 索引加载知识

详见 [4.6 知识拉取机制](#4.6 知识拉取机制)。

Q5: 知识保鲜如何实现?

决策:通过 MANIFEST.md + 日检脚本。

  • 每篇知识条目有 lastReviewed 时间戳
  • 超过 30 天未审核的标记为 stale
  • 日检时优先处理 stale 条目
  • 周检时分析知识缺口

相关推荐
zzz_23683 小时前
从 200 行规则到一条好渠——Agent 工程化的踩坑与解法
人工智能·agent
Bruce_Liuxiaowei3 小时前
2026年7月第1周网络安全形势周报
人工智能·安全·web安全·ai·智能体
A.说学逗唱的Coke3 小时前
【大模型专题】Claude Haiku vs Sonnet vs Opus:三款模型深度对比与选型指南(2026最新)
大数据·人工智能
梦想的旅途23 小时前
基于RPA技术的企业微信自动化接口设计思路与应用实践
人工智能·机器人·自动化·企业微信·rpa
2601_954526753 小时前
【工控底层架构】进口阀门和国产阀门哪个性价比高?从TCO模型到边缘诊断源码的全栈解析
人工智能·架构·硬件工程
sunywz3 小时前
【AI智能客服系统】02.项目部署与运行
人工智能
JackHCC3 小时前
自进化智能体协同进化综述
人工智能·机器学习
项目管理者3 小时前
PMP 专业项目管理软件核心应用场景指南
人工智能·甘特图·敏捷流程
Arranging157883 小时前
会议纪要整理场景下主流办公效率工具使用体验分析
人工智能
cd_949217213 小时前
AI Infra选型指南:企业算力底座怎么建
人工智能