Files
company-kb/完整落地链路.md
yangqianqian daec6a376d 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>
2026-07-17 15:13:30 +08:00

511 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 公司知识库完整落地链路(端到端)
> 从现状到最终可用的完整路径,不是散点方案
> 更新时间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. 决定是否批量处理
---
**这次是完整链路,不是散点。你觉得清楚了吗?**