📅 三步学习路径:从入门到实战
1
基础入门
理解核心概念
2
工具掌握
熟悉AI工具链
3
实战项目
完成完整项目
🛠️ 实战工作坊:从零搭建AI知识库
1
数据采集与清洗
30分钟
收集散落在各处的信息源:微信收藏、飞书文档、浏览器书签、本地笔记。用脚本统一转成 Markdown 格式。
# 批量转换文档为 Markdown
find ./sources -type f ( -name “*.pdf” -o -name “*.docx” ) | while read f; do
pandoc “$f” -t markdown -o “./md/$(basename “$f” | sed ‘s/.[^.]*$/.md/’)”
done
find ./sources -type f ( -name “*.pdf” -o -name “*.docx” ) | while read f; do
pandoc “$f” -t markdown -o “./md/$(basename “$f” | sed ‘s/.[^.]*$/.md/’)”
done
2
向量化与索引构建
20分钟
使用开源 embedding 模型将文档转为向量,存入向量数据库。推荐 BGE-M3 + ChromaDB 组合,本地运行零成本。
import chromadb
from sentence_transformers import SentenceTransformer
model = SentenceTransformer(‘BAAI/bge-m3’)
client = chromadb.PersistentClient(path=”./kb”)
collection = client.create_collection(name=”my_knowledge”)
# 批量添加文档
collection.add(documents=texts, ids=ids, embeddings=model.encode(texts))
from sentence_transformers import SentenceTransformer
model = SentenceTransformer(‘BAAI/bge-m3’)
client = chromadb.PersistentClient(path=”./kb”)
collection = client.create_collection(name=”my_knowledge”)
# 批量添加文档
collection.add(documents=texts, ids=ids, embeddings=model.encode(texts))
3
RAG 问答链搭建
40分钟
构建检索增强生成(RAG)管道:用户提问 → 语义检索 → 上下文拼接 → LLM 生成回答。这是知识库的核心智能环节。
from openai import OpenAI
def ask(query, top_k=3):
# 检索
q_vec = model.encode([query])
results = collection.query(query_embeddings=q_vec, n_results=top_k)
context = “\n\n”.join(results[‘documents’][0])
# 生成
client = OpenAI(base_url=”https://api.deepseek.com”, api_key=”sk-xxx”)
resp = client.chat.completions.create(
model=”deepseek-chat”,
messages=[
{“role”: “system”, “content”: “基于以下资料回答问题:” + context},
{“role”: “user”, “content”: query}
]
)
return resp.choices[0].message.content
def ask(query, top_k=3):
# 检索
q_vec = model.encode([query])
results = collection.query(query_embeddings=q_vec, n_results=top_k)
context = “\n\n”.join(results[‘documents’][0])
# 生成
client = OpenAI(base_url=”https://api.deepseek.com”, api_key=”sk-xxx”)
resp = client.chat.completions.create(
model=”deepseek-chat”,
messages=[
{“role”: “system”, “content”: “基于以下资料回答问题:” + context},
{“role”: “user”, “content”: query}
]
)
return resp.choices[0].message.content
4
部署与分享
30分钟
使用 Gradio 或 Streamlit 搭建 Web 界面,一键分享给团队。支持 Docker 部署,方便扩展和迁移。
import gradio as gr
def chat_ui(query, history):
return ask(query)
gr.ChatInterface(
fn=chat_ui,
title=”个人AI知识库”,
description=”基于 RAG 的智能问答系统”
).launch(server_name=”0.0.0.0″, server_port=7860)
def chat_ui(query, history):
return ask(query)
gr.ChatInterface(
fn=chat_ui,
title=”个人AI知识库”,
description=”基于 RAG 的智能问答系统”
).launch(server_name=”0.0.0.0″, server_port=7860)
⚖️ 技术选型对比
| 组件 | 推荐方案 | 备选方案 | 选型建议 |
|---|---|---|---|
| Embedding 模型 | BGE-M3 推荐 | text2vec / M3E | 中文场景首选 BGE-M3 |
| 向量数据库 | ChromaDB 轻量 | Milvus / Qdrant | 个人用 ChromaDB,企业用 Milvus |
| LLM | DeepSeek API 高性价比 | 通义千问 / GLM | 性价比首选 DeepSeek |
| 部署框架 | Gradio 快速 | Streamlit / Next.js | 原型用 Gradio,产品用 Next.js |
⚠️ 常见错误排查
检索结果不相关
✅ 解决方案:检查 chunk 大小,建议 512 tokens 加 128 overlap。尝试不同的 embedding 模型,BGE-M3 的指令前缀不要遗漏。
API 调用超时
✅ 解决方案:设置合理的超时时间(30s+),加入重试机制。使用 streaming 模式可以改善用户体验,不会完全超时。
内存占用过高
✅ 解决方案:大量文档时使用批量处理,控制单批 100 篇。使用 lazy loading 加载向量,避免全部读入内存。
🔐 付费内容:知识库完整项目模板
包含:完整项目代码包、Docker 部署配置、20+ 实用 Prompt 模板、企业级 RAG 架构图、性能优化指南。
© 版权声明
仅作整理分享版权归原作者所有,查看或者使用表示同意
点击查看协议THE END











暂无评论内容