Add kb-bridge.py + 文档整理

- tools/kb-bridge.py: 原始物料→知识页核心脚本(384行完整实现)
  功能:读取PDF/CSV/markdown → Claude API分析 → 生成frontmatter → 保存到projects/

- 完整落地链路.md: 端到端实施方案(Phase 0-3完整路径)

- 完整项目现状报告.md: 真实状态验证(脚本真相+架构梳理)

- docs/bot-comparison-analysis.md: kb-bot vs bot-v2 深度对比

- docs/kb-bot-usage-guide.md: kb-bot 使用指南

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
yangqianqian
2026-07-17 15:13:30 +08:00
parent 4c2ee40ba6
commit daec6a376d
4 changed files with 1773 additions and 0 deletions

510
完整落地链路.md Normal file
View File

@@ -0,0 +1,510 @@
# 公司知识库完整落地链路(端到端)
> 从现状到最终可用的完整路径,不是散点方案
> 更新时间2026-07-16 18:50
---
## 🎯 最终目标
**一句话验证标准**
```bash
cd /知识库目录
/kb-ask 万牛会L1怎么安排的
# AI 返回:根据 [[课程大纲v1]]来源飞书文档万牛会L1...
```
---
## 📍 当前状态矩阵
| 组件 | 状态 | 位置 | 说明 |
|------|------|------|------|
| **知识库框架** | ✅ 完整 | company-kb-v0.1-mvp-20260707/ | 目录结构、契约、工具、命令都有 |
| **Git 真相源** | ✅ 已建 | http://192.168.0.101:3002/qianqian/company-kb | Gitea仓库可push/pull |
| **本地工作副本** | ✅ 已建 | Synology Drive同步盘/company-kb/ | 就是知识库目录,有.git/ |
| **原始物料** | ⚠️ 未处理 | 飞书同步/564文件+ 会议记录/4文件 | 没frontmatterAI读不到 |
| **知识页** | ⚠️ 只有示例 | projects/wanniu-l1/7页+ _example/ | 真实内容很少 |
| **AI查询** | ⚠️ 能跑但没内容 | /kb-ask命令存在 | 能执行,但查不到东西(内容太少) |
| **自动化** | ❌ 不存在 | 无 | 飞书→知识库没有自动链路 |
---
## 🔄 完整数据流(端到端)
### 阶段 0环境搭建已完成✅
```
NAS Gitea 真相源
↕ git push/pull
本地 company-kb/(工作副本)
↕ Synology Drive
NAS 物理存储
```
**验证**
```bash
cd company-kb目录
git status # 能看到状态
git push # 能推送
```
---
### 阶段 1物料汇入核心当前卡在这里❌
```
原始物料(飞书同步/、会议记录/
【处理脚本】kb-bridge.py
├─ 读取原始文件
├─ 提取文本PDF用pdfplumberCSV用pandas
├─ 调用Claude API分析
│ └─ 判断typedoc/decision/conversation
│ └─ 生成title、description、tags
│ └─ 提炼关键内容
├─ 生成完整frontmatter
│ ├─ type: doc
│ ├─ title: ...
│ ├─ source: 飞书文档
│ ├─ source_link: file://...
│ ├─ status: seed
│ ├─ created: 2026-xx-xx
│ └─ ingested: 2026-07-16
└─ 保存到 projects/xxx/docs/或decisions/或conversations/
合规知识页(.md + frontmatter
【校验】kb-lint-fm.py
└─ 检查frontmatter是否符合契约
【提交】git add + git commit + git push
Git 真相源Gitea
```
**验证**
```bash
# 处理一个测试文件
python3 tools/kb-bridge.py \
--input "../飞书同步/AI内容反推工作流.csv" \
--output projects/ai-workflow/docs/
# 检查
python3 tools/kb-lint-fm.py projects/ai-workflow/
# 期望:错误 0
# 查看生成的文件
cat projects/ai-workflow/docs/AI内容反推工作流.md
# 期望有完整frontmatter + 内容
# 提交
git add projects/ai-workflow/
git commit -m "Add AI工作流文档测试"
git push
```
---
### 阶段 2AI 查询(自然就能用✅)
```
你在本地工作副本
cd company-kb目录
/kb-ask 问题
【Claude Code 执行】
├─ 扫描 projects/ 下所有 .md 文件
├─ 解析每个文件的 frontmatter
├─ 根据 type、tags 筛选相关文件
├─ 语义检索文件内容
├─ 综合答案
└─ 挂 source_link从frontmatter读取
AI 返回答案 + 溯源链接
```
**验证**
```bash
cd company-kb目录
/kb-ask AI内容反推工作流是什么
# 期望AI能找到刚才生成的知识页返回答案 + 溯源
```
---
### 阶段 3自动化可选手动跑通后再建
```
【定时任务】每天 10:00
【扫描】知识库投递区/
├─ 发现新文件
├─ 调用 kb-bridge.py 处理
├─ lint 检查
├─ git commit + git push
└─ 记录日志
知识库自动更新
```
**验证**
```bash
# 在投递区丢个新文件
cp 新文件.pdf 知识库投递区/
# 第二天看
cd company-kb目录
git pull
ls projects/ # 应该能看到新项目
/kb-ask 新文件里的内容
# AI能查到
```
---
## 📋 分阶段实施计划
### Phase 0环境准备已完成✅今天
- [x] NAS Gitea 真相源
- [x] 本地 Git 工作副本
- [x] 能 git push/pull
**用时**:已完成
**交付物**Git仓库可用
---
### Phase 1A开发处理脚本明天上午3小时
**任务**
1. 创建 kb-bridge.py核心脚本
2. 实现功能:
- 读取文件(支持 PDF、CSV、markdown
- 调用 Claude API 分析
- 生成 frontmatter
- 保存到 projects/
**交付物**
- `tools/kb-bridge.py`(完整可运行)
- 依赖安装说明
- 使用文档
**验证标准**
```bash
python3 tools/kb-bridge.py --input test.pdf --output projects/test/
ls projects/test/docs/test.md # 文件生成
python3 tools/kb-lint-fm.py projects/test/ # 错误 0
```
---
### Phase 1B测试处理流程明天下午2小时
**任务**
1. 选 5 个代表性文件测试:
- 1 个会议记录 PDF
- 1 个飞书同步 CSV
- 1 个 markdown 文件
- 1 个图片(测试 assets
- 1 个长文档(测试分段)
2. 逐个处理 → lint → git push
3. AI 查询验证
**交付物**
- 5 个测试项目生成
- Git 提交记录
- AI 查询测试通过
**验证标准**
```bash
/kb-ask 会议纪要里的决策
# AI能找到并回答
/kb-ask AI工作流
# AI能找到并回答
```
---
### Phase 1C批量处理明天晚上或后天按需
**任务**
1. 批量处理所有 564 个飞书同步文件
2. 批量处理所有 4 个会议记录
3. 处理公司资产信息里的 md 文件
**方式**
- 选项A一次性全跑API成本 ~$20-50
- 选项B分批跑每天处理 50 个)
- 选项C只处理重要的手动挑选
**交付物**
- 所有原始物料变成知识页
- 全部 lint 通过
- 全部 git push
**验证标准**
```bash
find projects/ -name "*.md" | wc -l
# 应该有几百个文件
/kb-ask 随机问题
# AI 能从大量知识页中找到答案
```
---
### Phase 2飞书机器人打通下周
**任务**
1. bot-v2阿里云clone 知识库
2. 配置定期 git pull
3. 群里 @机器人 → 调 /kb-ask → 回复
**验证标准**
```
飞书群里:@机器人 万牛会L1怎么安排
机器人回复:根据[[课程大纲v1]](来源:飞书文档),...
```
---
### Phase 3自动化按需
**任务**
1. 创建定时任务脚本
2. 监控投递区新文件
3. 自动处理 + git push
**验证标准**
- 丢个新文件到投递区
- 第二天自动出现在知识库
- AI 能查到
---
## 🔧 关键组件详细设计
### kb-bridge.py 核心逻辑
```python
#!/usr/bin/env python3
"""
知识桥接脚本:原始物料 → 知识页
"""
import anthropic
import yaml
import os
from pathlib import Path
import pdfplumber # PDF提取
import pandas as pd # CSV处理
def process_file(input_path, output_dir, kb_root):
"""处理单个文件"""
# 1. 读取文件内容
content = extract_content(input_path)
# 2. 调用 Claude API 分析
analysis = analyze_with_claude(content, input_path)
# 返回:{
# "type": "doc",
# "title": "...",
# "description": "...",
# "tags": ["...", "..."],
# "key_points": "...",
# "project": "ai-workflow" # AI建议的项目归属
# }
# 3. 生成 frontmatter
frontmatter = generate_frontmatter(analysis, input_path)
# 4. 生成内容(原文 + AI提炼
content_md = f"{frontmatter}\n\n{analysis['key_points']}\n\n## 原始内容\n\n{content}"
# 5. 保存
save_to_kb(content_md, analysis, output_dir, kb_root)
return analysis
def extract_content(file_path):
"""提取文件内容"""
ext = Path(file_path).suffix.lower()
if ext == '.pdf':
with pdfplumber.open(file_path) as pdf:
return "\n".join(page.extract_text() for page in pdf.pages)
elif ext == '.csv':
df = pd.read_csv(file_path)
return df.to_string()
elif ext in ['.md', '.txt']:
return Path(file_path).read_text()
else:
raise ValueError(f"不支持的文件类型:{ext}")
def analyze_with_claude(content, source_file):
"""Claude API 分析"""
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
prompt = f"""分析这个文件,返回 JSON
文件:{source_file}
内容前5000字符
{content[:5000]}
返回格式:
{{
"type": "doc|decision|conversation", // 判断文档类型
"title": "一句话标题",
"description": "一句话描述",
"tags": ["关键词1", "关键词2"],
"key_points": "3-5条关键要点markdown格式",
"project": "建议的项目代号kebab-case"
}}
判断规则:
- type=doc外部文档、参考资料
- type=decision决策记录、方案选择
- type=conversation会议纪要、聊天记录
"""
response = client.messages.create(
model="claude-sonnet-3-5-20240620",
max_tokens=2000,
messages=[{"role": "user", "content": prompt}]
)
return parse_json(response.content[0].text)
def generate_frontmatter(analysis, source_file):
"""生成 frontmatter"""
from datetime import date
fm = {
"type": analysis["type"],
"title": analysis["title"],
"description": analysis["description"],
"tags": analysis["tags"],
"timestamp": str(date.today()),
"source": guess_source(source_file), # 飞书文档/会议/NAS
"source_link": f"file://{os.path.abspath(source_file)}",
"status": "seed",
"created": str(date.today()),
"ingested": str(date.today()),
}
return "---\n" + yaml.dump(fm, allow_unicode=True) + "---\n"
def save_to_kb(content, analysis, output_dir, kb_root):
"""保存到知识库"""
project = analysis["project"]
type_dir = {
"doc": "docs",
"decision": "decisions",
"conversation": "conversations"
}[analysis["type"]]
# 创建项目目录(如果不存在)
project_dir = Path(kb_root) / "projects" / project
if not project_dir.exists():
# 用 kb-init.sh 创建骨架
os.system(f"cd {kb_root} && bash tools/kb-init.sh {project}")
# 保存文件
output_path = project_dir / type_dir / f"{slugify(analysis['title'])}.md"
output_path.write_text(content)
print(f"✓ Saved: {output_path}")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--input", required=True, help="输入文件路径")
parser.add_argument("--output", help="输出目录(可选,默认自动判断)")
parser.add_argument("--kb-root", default=".", help="知识库根目录")
args = parser.parse_args()
process_file(args.input, args.output, args.kb_root)
```
---
## 📊 成本估算
### API 成本Claude API
- 每个文件处理:~$0.05-0.10(取决于大小)
- 564 个飞书文件:~$30-60
- 4 个会议记录:~$1-2
- **总计**~$30-70
### 时间成本
- Phase 1A开发脚本3 小时
- Phase 1B测试2 小时
- Phase 1C批量处理API调用时间 + 1小时监控
- **总计**1-2 天
---
## ✅ 验收标准(怎么算完成)
### Phase 1 完成标准
```bash
# 1. 能处理各种文件
python3 tools/kb-bridge.py --input test.pdf # 成功
# 2. 生成的文件合规
python3 tools/kb-lint-fm.py projects/ # 错误 0
# 3. AI 能查到
cd company-kb目录
/kb-ask 随机问题 # 能返回答案 + 溯源
# 4. Git 有记录
git log # 能看到提交历史
# 5. 同事能用
# 同事 git pull → /kb-ask → 也能查到
```
---
## 🚨 风险与对策
### 风险 1API 成本超预算
**对策**:先测试 10 个文件,评估成本,再决定是否全量处理
### 风险 2AI 分析不准确
**对策**Phase 1B 测试时人工核查,调整 prompt
### 风险 3文件格式太复杂
**对策**:复杂文件先跳过,手动处理
### 风险 4知识页太多AI 检索不准
**对策**:先做到 P1100页内检索不准时再考虑 P4/P5编译层/向量库)
---
## 📌 立刻开始(今晚或明天)
**今晚**
1. 我生成完整的 kb-bridge.py
2. 你配置依赖(`pip3 install anthropic pdfplumber pandas pyyaml`
3. 测试处理 1 个文件
**明天**
1. 测试 5 个代表性文件
2. 验证 AI 能查到
3. 决定是否批量处理
---
**这次是完整链路,不是散点。你觉得清楚了吗?**