【必修· 扫盲】主干必读——看懂 AI 全貌的最短路径。
我们的第一个实战,是 AI 应用界的"Hello World"——个人文档问答助手。这一篇,我会带你一步一步、从零到能跑地把它做出来。
它解决一个特别实在的痛点:你有一堆资料(产品手册、学习笔记、合同、电子书),想问它点什么却懒得翻页。做完这个,你能像聊天一样问"第三章讲了啥""退货是几天",它直接从你的资料里给出准确答案,还告诉你出处。
一、最终效果与价值
把一份 50 页的 PDF 丢给它 → 问"企业版和专业版区别?" → 它基于文档准确回答,并注明出自第几节。
注意:大模型从没读过你这份文档。它能答对,全靠我们搭的 RAG 脚手架。学会这一个,你就掌握了市面上 80% 的"和 PDF 聊天""企业知识库问答"产品的内核。
二、需求拆解(对应积木)
| 功能 | 用到的积木 |
|---|---|
| 读取各种格式文档 | 文档加载器 |
| 把长文切成小块 | 文本切分(因上下文窗口有限 B01) |
| 让"意思"可检索 | 嵌入 Embedding(A21/B14) |
| 海量片段快速找 | 向量数据库(B06) |
| 基于资料作答 | RAG + 提示工程(B05/B02) |
三、技术选型(为什么用这些)
·框架:LangChain——把 RAG 各环节的接口都对好了,拼装最快,适合入门。
·向量库:Chroma——轻量、本地就能跑,不用搭服务器,最适合个人项目。
·嵌入模型:中文场景选 BGE / M3E(开源免费、中文效果好);图省事可用 OpenAI 的嵌入。
·大模型:国产 DeepSeek、通义,或 GPT-4o-mini,按你的 Key 来。
四、分步实现(跟着敲)

图:个人文档问答助手架构:建库阶段(文档→切块→嵌入→向量库) + 问答阶段(问题→检索→拼提示→作答)
步骤 0:装环境
pip install langchain langchain-community chromadb sentence-transformers pypdf
步骤 1:读取并切块文档
from langchain_community.document_loaders import PyPDFLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterdocs = PyPDFLoader("产品手册.pdf").load() # 读取PDFsplitter = RecursiveCharacterTextSplitter( chunk_size=500, # 每块约500字(太大塞不下、太小丢上下文) chunk_overlap=50) # 块之间重叠50字,避免切断关键句chunks = splitter.split_documents(docs)print(f"文档被切成 {len(chunks)} 块")
步骤 2:嵌入并存入向量库
from langchain_community.vectorstores import Chromafrom langchain_community.embeddings import HuggingFaceEmbeddingsembeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-small-zh-v1.5") # 中文嵌入vectordb = Chroma.from_documents(chunks, embeddings, persist_directory="./db")print("知识库建好,已持久化到 ./db")
步骤 3:检索 + 大模型作答(RAG)
from langchain.chains import RetrievalQAfrom langchain_openai import ChatOpenAIretriever = vectordb.as_retriever(search_kwargs={"k": 3}) # 每次找最相关3块qa = RetrievalQA.from_chain_type( llm=ChatOpenAI(model="gpt-4o-mini", temperature=0), # 温度0求准确(B04) retriever=retriever, return_source_documents=True) # 返回出处result = qa.invoke("企业版和专业版有什么区别?")print("答案:", result["result"])print("依据来自:", [d.metadata.get("page") for d in result["source_documents"]])
跑通这三步,你的文档助手就能用了——问什么,它从你的资料里找答案。
五、踩坑与优化(实战经验)
·切块大小:500~1000 字常是好起点;表格、代码类文档要特殊处理,别硬切。
·检索数量 k:太少漏信息、太多又贵又干扰,先试 3~5。
·治幻觉(B03):在提示里加"如果资料中没有,请回答'资料未提及',不要编造"。
·中文嵌入:务必用中文优化的嵌入模型,否则检索准确率会明显下降。
·多文档:可以一次性灌入整个文件夹,给每块记好来源,方便溯源。
六、部署:从"能跑"到"能用"
·最简:包一个 Web 界面(用 Gradio 几行就能做一个聊天框),本地或内网用。
·进阶:做成 API,接到你的网站、或上一篇的微信公众号里。
·数据安全:敏感文档优先用本地嵌入 + 本地向量库 + 本地大模型(如 Ollama 跑开源模型),数据不出门。
# 用 Gradio 5行包一个聊天界面import gradio as grdef chat(q): return qa.invoke(q)["result"]gr.Interface(fn=chat, inputs="text", outputs="text", title="我的文档助手").launch()
七、从这个小案例,你学到了什么?
·AI 应用 = 大模型 + 脚手架:大模型没动,你给它配了"读资料"的能力。
·RAG 是最高频的落地模式:无数产品的内核就是这套。
·积木通用:嵌入、向量库、检索、提示词——中案例、大案例、微信旗舰案例里你还会反复见到它们。
八、一句话记住它
个人文档问答助手 = 文档→切块→嵌入→向量库(建库),问题→检索→拼提示→大模型作答(问答);是 RAG 最经典的落地,也是一切 AI 应用的 Hello World。
记住:你没改造大模型,只是给它配了"一本随身资料 + 一套查阅流程"。
下一篇预告:个人助手只会"查资料答问题"。但企业要的客服,还得能查订单、看物流、办退款——这些不在任何文档里,得调真实系统。下一篇,难度升级,我们做一个会查、会答、还会办事的企业智能客服。
夜雨聆风