实战教程系列:从零到生产,构建企业级 AI 应用
基于老李和小王的探索历程,我们将之前文章中涉及的案例提炼为 5 个循序渐进的实战项目,覆盖 RAG、知识库、Agent、MCP 和多模态检索。每个项目包含清晰的目标、前置知识、章节大纲和核心代码示例。
项目一:企业级 RAG 系统——从文档到精准问答
描述:
搭建一个完整的检索增强生成系统,将公司内部文档转化为可精准问答的 AI 助手。从文档分块、向量化入库,到混合检索与重排序,最后通过 RAGAS 评测体系验证效果,并部署生产环境。
前置知识:Python 基础、向量嵌入概念(建议阅读《向量嵌入:把文字变成数字的魔法》)
章节大纲:
文档分块的艺术
- 固定大小分块 vs 语义分块 vs 递归分块
- 用烤串比喻理解重叠窗口
- 实战:使用 LangChain 的
RecursiveCharacterTextSplitter
向量数据库选型与搭建
- 为什么 PostgreSQL + pgvector 不够用?
- 主流向量数据库对比(Chroma, Qdrant, Milvus)
- 实战:用 Chroma 三步构建向量存储
检索策略:从关键词到混合搜索
- 稠密检索 vs 稀疏检索(BM25)的优劣
- 混合搜索与 RRF 融合算法
- 实战:Elasticsearch 混合搜索配置
重排序:让结果从“还行”到“精准”
- Bi-Encoder vs Cross-Encoder
- 两阶段检索架构
- 实战:集成 BGE-Reranker 进行精排
RAG 系统评测
- 为什么“看着挺好”不靠谱?
- RAGAS 指标:忠实度、答案相关性、上下文召回率
- 实战:用 RAGAS 跑通自动化评测,集成 CI 门禁
生产环境七大坑与监控
- 索引更新、碎片化、成本爆炸、延迟炸弹……
- 监控仪表盘搭建:检索延迟、召回率、API 调用量
- 实战:给 RAG 系统加上告警和缓存
核心代码示例:
# 完整 RAG Pipeline 伪代码
from langchain.text_splitter import RecursiveCharacterTextSplitter
from chromadb import Client
from FlagEmbedding import FlagReranker
from ragas import evaluate
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
vector_db = Client().create_collection("kb")
vector_db.add(documents=chunks, embeddings=embeddings)
def hybrid_search(query):
dense_results = vector_db.query(query, top_k=20)
sparse_results = bm25.search(query, top_k=20)
fused = reciprocal_rank_fusion(dense_results, sparse_results)
reranked = reranker.compute_score([[query, doc] for doc in fused])
return reranked[:5]
eval_result = evaluate(dataset, metrics=[faithfulness, answer_relevancy])项目二:智能知识库——让知识活起来
描述:
构建一个可管理、可进化、可溯源的企业知识库。涵盖知识分类、版本管理、结构化与非结构化数据处理、知识图谱及质量保证,最终将知识库通过 MCP 暴露给 AI 应用。
前置知识:RAG 基础、数据库概念
章节大纲:
知识库 vs RAG:图书馆与借书服务
- 知识库的职责:存储、组织、更新、权限
- 知识库四种形态:文档库、FAQ 库、图谱库、混合库
- 实战:设计一个三层知识分类体系(领域→主题→概念)
结构化与非结构化数据的处理管道
- 结构化(员工表)、半结构化(Markdown)、非结构化(会议纪要)
- 不同数据的存储与索引策略
- 实战:用 SpaCy + LLM 实现实体抽取
知识版本管理:
latest不是策略- 用 Git 管理文档版本
- 时间旅行查询:“2023 年的政策是什么?”
- 实战:基于 Git 的 Markdown 知识库,打 tag 发布
知识图谱与 Graph RAG
- 节点、边、属性 vs 向量孤岛
- 用 LLM 自动抽取三元组构建图谱
- 实战:Neo4j + LLM 实现 Text2Cypher 查询
知识质量保证:垃圾进,垃圾出
- 质量四维度:准确、完整、一致、新鲜
- 自动化质检管道(去重、矛盾检测、过期标记)
- 实战:每周自动生成知识体检报告
知识同步:让知识库与变化的世界同步
- 定时、事件驱动、CDC 三种同步模式
- 增量更新与冲突处理
- 实战:监听 Git Webhook 实时更新向量库
用 MCP 暴露知识库
- 将知识库封装为 MCP Server(Resources + Tools)
- 让任何 AI 应用都能按需访问知识
- 实战:用 TypeScript 编写知识库 MCP Server,接入 Claude Desktop
核心代码示例:
# 自动打标签 + 版本管理示意
def auto_tag_and_commit(doc, repo):
tags = llm.generate(f"为这篇文档生成3个标签:{doc.content}")
doc.tags = tags
repo.add(doc)
repo.commit(f"feat: {doc.title} - 标签 {tags}")
repo.tag(f"v{datetime.now().strftime('%Y%m%d')}")项目三:AI Agent 开发——从实习生到多面手
描述:
开发一个能够自主规划、调用工具、拥有记忆的 AI Agent。从 ReAct 推理循环开始,逐步加入工具调用、记忆系统、任务规划、安全护栏,最后构建一个多 Agent 协作的编辑部系统。
前置知识:LLM 基础、Python 异步编程
章节大纲:
Agent 本质:不是套壳的 LLM
- 实习生的比喻:感知 → 推理 → 决策 → 执行
- 为什么 cron job 不是 Agent?
- 实战:20 行代码的天气查询 Agent
ReAct 模式:先想,再动,再想
- Thought → Action → Observation 循环
- Prompt 工程:如何编写 ReAct 系统指令
- 实战:订机票 Agent 的完整轨迹
工具调用:给 Agent 装上瑞士军刀
- JSON Schema 定义工具
- 工具设计黄金法则(单一职责、幂等、错误处理)
- 实战:为 Agent 添加搜索、计算器、数据库三个工具
记忆系统:短期、长期和工作记忆
- 便签纸、笔记本、档案室的比喻
- 会话摘要 + 向量数据库持久化用户偏好
- 实战:带三层记忆的个人助手 Agent
任务规划:把大象放进冰箱
- Plan-then-Execute vs Tree of Thoughts
- 子任务依赖管理与动态重规划
- 实战:让 Agent 自动撰写竞品分析报告
安全护栏:别让 Agent 变成脱缰野马
- 输入层、推理层、执行层三层护栏
- 分级权限与二次确认
- 实战:用 Guardrails-AI 给客服 Agent 加上金额拦截
多 Agent 系统:编辑部协作
- 搜索员、分析师、写手三个角色
- 协调者模式(AutoGen 群聊)
- 实战:AutoGen 实现季度报告自动生成
核心代码示例:
# ReAct 循环骨架
def react_loop(query, tools, max_steps=10):
messages = [{"role": "system", "content": REACT_PROMPT}]
for _ in range(max_steps):
response = llm.generate(messages)
if "Final Answer" in response:
return response
action = parse_action(response)
observation = execute_tool(action)
messages.append({"role": "assistant", "content": response})
messages.append({"role": "user", "content": f"Observation: {observation}"})项目四:MCP 全栈开发——连接一切 AI 应用与工具
描述:
深入理解并实践 Model Context Protocol,从零编写 MCP Server,掌握 Resources、Tools、Prompts、Transport、Sampling 等核心特性,最终将公司内部服务(数据库、API、文件系统)全部接入 MCP 生态。
前置知识:TypeScript/JavaScript 基础,了解客户端-服务端模型
章节大纲:
MCP 是什么?AI 的 USB-C 接口
- MCP vs 传统插件系统
- Client、Server、Transport 三大概念
- 实战:Hello World MCP Server(30 行代码)
Resources:给数据一个门牌号
- URI 模板与参数化访问
- 内容类型与二进制支持
- 实战:把产品文档抽成
docs://products/{id}资源
Tools 与 Prompts:菜刀和菜谱
- Tool 负责执行,Prompt 负责引导
- 巨型 Tool 拆分与 Prompt 编排
- 实战:报表导出功能(三个 Tool + 一个 Prompt)
Transport 选型:stdio、SSE 和 Streamable HTTP
- 性能对比与适用场景
- 本地用 stdio,远程用 SSE
- 实战:混合部署架构——本地文件 Server(stdio) + 远程数据库 Server(SSE)
安全:OAuth 舞蹈、权限迷宫和信任链
- Tool 级别权限分级(只读、写入、管理)
- OAuth 2.0 授权码流程
- 实战:给数据库 Server 加上读写分离与审批
Sampling:让 Server 反过来请教 LLM
- 逆调用与决策辅助
- 文件删除前的风险评估
- 实战:文件清理 Server 在执行前请求 LLM 判断
真实世界案例剖析
- 订单查询 MCP Server(客服团队)
- API 网关 MCP Server(运维团队)
- 项目文件管理 MCP Server(开发团队)
- 通用模式:权限包裹、限制声明、审计日志
核心代码示例:
// 订单查询 Server 的安全核心
server.setRequestHandler("tools/call", async (request) => {
const { name, arguments: args } = request.params;
if (name === "query_order") {
const sql = `SELECT * FROM orders WHERE user_id = ${args.userId}`;
if (/INSERT|UPDATE|DELETE|DROP/i.test(sql)) throw new Error("禁止写操作");
const result = await db.query(sql);
return { content: [{ type: "text", text: JSON.stringify(maskSensitive(result)) }] };
}
});项目五:多模态知识库与智能体——图文表代码,一个都不少
描述:
扩展传统文本知识库,将图片、表格、代码片段纳入检索范围。利用 CLIP 实现图文互搜,结合浏览器 Agent 自动抓取外部信息,最后构建一个能理解多种模态的智能助手。
前置知识:RAG 基础、Agent 基础、深度学习初步
章节大纲:
多模态嵌入:文字、图片共享同一个语义空间
- CLIP 模型原理
- 实战:用自然语言搜索架构图
表格与代码的特殊处理
- 结构化提取 + 语义索引混合
- 实战:自动回答“支付回调的 QPS 上限是多少?”
浏览器 Agent:教 AI 点点点
- Playwright + 视觉理解定位元素
- 安全模式与误操作防护
- 实战:自动抓取竞品价格并生成报表
代码生成 Agent:你的新初级开发
- SWE-Agent 工作流:从 Issue 到 PR
- 测试驱动修复与自主 debug
- 实战:让 Agent 修一个真实 backlog Bug
多模态知识库的构建与暴露
- 混合存储:文字向量 + 图片向量 + 结构化表
- 多模态 RAG 检索流程
- 实战:用 MCP 包装多模态知识库,供 Claude 调用
综合实战:搭建一个全能的研发助手
- 集成:知识库(MCP)+ 代码 Agent + 浏览器 Agent
- 协作流程:用户提问 → 检索文档/代码/页面 → 生成回答
- 实战:处理一个真实的开发任务“给系统增加一个新 API,并更新文档”
核心代码示例:
# 多模态检索示意
def multimodal_search(query):
text_results = text_vector_db.search(query, top_k=5)
image_results = image_vector_db.search(query, top_k=3)
table_results = table_index.search(query, top_k=2)
return fuse_results(text_results, image_results, table_results)学习路径建议:
- 初学者:项目一 → 项目二(前 4 章)→ 项目三(前 3 章)
- 进阶者:项目二(后 3 章)→ 项目四 → 项目五
- 架构师/团队负责人:完整走过所有项目,重点阅读生产部署、安全、评测章节
每个项目均可独立实践,代码示例均可在本地运行。老李和小王的故事将继续陪伴你的学习旅程——从怀疑到相信,从 Hello World 到生产环境。

