金句:没有沉淀的学习是漏斗,有沉淀的学习是水库。AI 编程的真正护城河,不是你用过多少工具,而是你积累了多少可复用的知识资产。
一、为什么需要个人知识库?
现实困境:
- 学了一个很好的提示词技巧,下次遇到类似问题又想不起来
- 解决了一个复杂的 Bug,半年后遇到类似问题又从头排查
- 每次和 AI 协作,都要重新描述项目规范和个人偏好
知识库的价值:
- 把每次学习转化为可检索的资产
- 让 AI 工具随时获取你的个人最佳实践
- 随时间积累,形成真正的竞争优势
二、个人 AI 编程知识库的结构设计
~/my-ai-knowledge-base/
├── prompts/ # 提示词库
│ ├── code-review.md # 代码审查提示词
│ ├── debug.md # 调试提示词
│ ├── architecture.md # 架构设计提示词
│ └── refactor.md # 重构提示词
│
├── solutions/ # 问题解决方案
│ ├── database/
│ │ ├── n-plus-one.md # N+1 查询解决方案
│ │ └── migration.md # 数据库迁移方案
│ ├── performance/
│ │ └── caching.md # 缓存策略
│ └── security/
│ └── sql-injection.md # SQL 注入防范
│
├── snippets/ # 代码片段
│ ├── auth/
│ │ └── jwt-middleware.ts
│ ├── api/
│ │ └── rate-limiter.ts
│ └── utils/
│ └── retry-with-backoff.ts
│
├── cursorrules/ # 各类项目的 .cursorrules 模板
│ ├── nextjs-fullstack.md
│ ├── python-fastapi.md
│ └── react-component.md
│
└── learnings/ # 每日学习记录
├── 2025-01/
└── 2025-02/
三、自动化知识捕获系统
方法一:Git Hook 自动记录解决方案
#!/bin/bash
# .git/hooks/commit-msg
# 当提交包含 "fix:" 关键词时,提示记录解决方案
commit_message=$(cat "$1")
if echo "$commit_message" | grep -q "^fix:"; then
echo ""
echo "💡 检测到 Bug 修复提交,是否要记录到知识库?"
echo " 运行:kb-add-solution '问题描述'"
fi
方法二:CLI 快速记录工具
#!/usr/bin/env python3
# ~/bin/kb - 知识库命令行工具
import sys
import os
import anthropic
from datetime import datetime
from pathlib import Path
KB_ROOT = Path.home() / "my-ai-knowledge-base"
def add_prompt(prompt_name: str, prompt_content: str):
"""添加提示词到知识库"""
filepath = KB_ROOT / "prompts" / f"{prompt_name}.md"
filepath.parent.mkdir(parents=True, exist_ok=True)
with open(filepath, 'w', encoding='utf-8') as f:
f.write(f"# {prompt_name}\n\n")
f.write(f"*添加时间:{datetime.now().strftime('%Y-%m-%d')}*\n\n")
f.write(prompt_content)
print(f"✅ 提示词已保存:{filepath}")
def add_learning(content: str):
"""添加今日学习记录"""
today = datetime.now()
dir_path = KB_ROOT / "learnings" / today.strftime("%Y-%m")
dir_path.mkdir(parents=True, exist_ok=True)
filepath = dir_path / f"{today.strftime('%Y-%m-%d')}.md"
# 如果文件已存在,追加;否则创建
mode = 'a' if filepath.exists() else 'w'
with open(filepath, mode, encoding='utf-8') as f:
if mode == 'w':
f.write(f"# {today.strftime('%Y-%m-%d')} 学习记录\n\n")
timestamp = today.strftime("%H:%M")
f.write(f"\n## {timestamp}\n\n{content}\n")
print(f"✅ 学习记录已添加:{filepath}")
def search_kb(query: str):
"""搜索知识库(使用 AI 语义搜索)"""
# 先用 grep 快速搜索
import subprocess
result = subprocess.run(
['grep', '-r', '-l', query, str(KB_ROOT)],
capture_output=True, text=True
)
files = result.stdout.strip().split('\n')
if files and files[0]:
print(f"找到 {len(files)} 个相关文件:")
for f in files:
print(f" 📄 {f}")
print("\n使用 'kb read <文件路径>' 查看内容")
else:
print("未找到相关内容,尝试使用 AI 搜索...")
ai_search(query)
def ai_search(query: str):
"""使用 AI 语义搜索知识库"""
# 获取所有知识库内容摘要
summaries = []
for md_file in KB_ROOT.rglob("*.md"):
with open(md_file, 'r', encoding='utf-8') as f:
content = f.read()[:500] # 只取前500字
rel_path = md_file.relative_to(KB_ROOT)
summaries.append(f"文件:{rel_path}\n内容:{content}\n")
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[{
"role": "user",
"content": f"""在以下知识库文件中,找出与查询最相关的内容:
查询:{query}
知识库文件摘要:
{'---'.join(summaries[:20])}
请列出最相关的 3-5 个文件路径和相关原因。"""
}]
)
print(message.content[0].text)
if __name__ == '__main__':
if len(sys.argv) < 2:
print("用法:kb [add-prompt|add-learning|search|read] ...")
sys.exit(1)
command = sys.argv[1]
if command == "add-prompt" and len(sys.argv) >= 4:
add_prompt(sys.argv[2], sys.argv[3])
elif command == "add-learning" and len(sys.argv) >= 3:
add_learning(' '.join(sys.argv[2:]))
elif command == "search" and len(sys.argv) >= 3:
search_kb(' '.join(sys.argv[2:]))
else:
print("参数不正确,请检查用法")
四、知识库与 AI 工具的集成
在 Cursor 中引用知识库
# .cursorrules 中添加知识库引用
## 个人最佳实践
请在生成代码前,参考以下知识库文件中的最佳实践:
@~/my-ai-knowledge-base/cursorrules/nextjs-fullstack.md
## 已知解决方案
遇到数据库相关问题,请参考:
@~/my-ai-knowledge-base/solutions/database/
构建个人 RAG 系统
# personal_rag.py - 将个人知识库接入 RAG
from langchain_community.document_loaders import DirectoryLoader
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
def build_personal_kb_rag():
"""将个人知识库构建为 RAG 系统"""
loader = DirectoryLoader(
str(Path.home() / "my-ai-knowledge-base"),
glob="**/*.md"
)
documents = loader.load()
vectorstore = Chroma.from_documents(
documents=documents,
embedding=OpenAIEmbeddings(),
persist_directory=str(Path.home() / ".kb-vectorstore")
)
return vectorstore
# 查询个人知识库
def ask_personal_kb(question: str) -> str:
vectorstore = Chroma(
persist_directory=str(Path.home() / ".kb-vectorstore"),
embedding_function=OpenAIEmbeddings()
)
docs = vectorstore.similarity_search(question, k=3)
context = "\n\n".join([doc.page_content for doc in docs])
# 基于知识库回答
...
五、知识库维护的 5 个习惯
- 每天记录:用
kb add-learning记录当天学到的新技巧(5 分钟) - 解决 Bug 后立即记录:解决方案趁热打铁记下来
- 提示词迭代更新:每次改进了一个提示词,更新到知识库
- 月度清理:每月回顾,删除过时内容,提炼精华
- 与团队共享:把通用的知识上传到团队共享仓库
章节小结:个人 AI 编程知识库是你在 AI 时代最有价值的资产之一。提示词、解决方案、代码片段、学习记录——这些零散的知识经过系统化沉淀,会成为你与其他工程师真正的差异化竞争力。今天就建立你的第一个知识库条目。