1. 先搞清楚这套教程到底解决什么问题

如果你刚接触AI大模型,看到RAG、Agent、LangChain、Prompt、微调这些词,第一反应可能是“每个字都认识,连起来不知道在说什么”。这套教程最实际的价值,是把这些看似高大上的概念,拆解成可操作的步骤:从怎么让大模型回答你公司的内部文档问题(RAG),到怎么让模型按流程执行任务(Agent),再到怎么用框架把多个工具串起来(LangChain),最后到怎么调教模型更懂你的需求(Prompt和微调)。

我一般会先跟新手说:别急着跑代码,先弄明白每个技术到底解决什么场景的问题。RAG适合“模型知识库之外”的问答,比如内部文档、最新政策、私有数据;Agent适合“多步骤任务”,比如先查天气再订机票;LangChain是帮你把模型、工具、数据源连接起来的脚手架;Prompt是告诉模型“具体怎么回答”的指令;微调则是让模型彻底适应你的业务话术或专业领域。

这套组合拳学下来,你才能真正把大模型用起来,而不是只停留在聊天界面。但要注意,这些技术栈有学习梯度——建议按RAG → Prompt → LangChain → Agent → 微调的顺序推进,别一上来就啃最难的。

2. 环境准备:最低什么配置能跑起来?

很多人卡在第一步:环境装不上。这里我给一个最低可行配置,以及推荐配置。

最低配置(能跑通Demo)

  • CPU:4核以上(Intel i5或同级)
  • 内存:8GB(跑小模型或API调用)
  • 磁盘:20GB剩余空间(放模型、依赖包)
  • 系统:Windows 10/11、macOS 10.15+、Linux Ubuntu 18.04+(推荐Linux,少踩坑)
  • 网络:能稳定访问Hugging Face、PyPI(必要时配置镜像源)

推荐配置(流畅学习+小规模实测)

  • CPU:8核以上(Intel i7或同级)
  • 内存:16GB~32GB(本地跑7B以下模型)
  • GPU:可选,但有GPU会快很多(GTX 3060 12GB或以上,能跑13B模型)
  • 磁盘:100GB SSD(模型文件很大)

关键依赖清单

  • Python 3.8~3.11(别用3.12,很多包还没适配)
  • pip 20.3+
  • 虚拟环境(必选!用conda或venv隔离项目)
  • 基础包:torch、transformers、langchain、openai(或其他模型API包)

安装时最容易翻车的是torch和CUDA版本不对应。我建议直接用官方命令查兼容版本:

# 查看CUDA版本
nvidia-smi
# 根据CUDA版本安装torch(示例为CUDA 11.8)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

如果没GPU,就用CPU版torch,但推理速度会慢10倍以上,建议先跑小模型或直接用API(如OpenAI、通义千问、DeepSeek)。

3. RAG实战:从零搭建一个企业知识库问答

RAG(Retrieval-Augmented Generation)是大模型落地最实用的技术之一。核心思路是:先从你的文档里检索相关片段,再让模型基于这些片段生成答案。这样模型就不会胡编乱造,尤其适合内部文档、产品手册、法规条文等场景。

3.1 文档处理四步走

  1. 加载文档 :支持txt、pdf、word、markdown等。用LangChain的DocumentLoader:
    from langchain.document_loaders import TextLoader
    loader = TextLoader("公司制度.txt")
    documents = loader.load()
    
  2. 切分文本 :大文档必须切块,否则模型记不住。按段落或固定长度切:
    from langchain.text_splitter import RecursiveCharacterTextSplitter
    splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
    chunks = splitter.split_documents(documents)
    
  3. 向量化 :把文本变成数学向量,才能快速检索。用Sentence-BERT或OpenAI Embeddings:
    from langchain.embeddings import HuggingFaceEmbeddings
    embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
    
  4. 存储向量库 :用FAISS、Chroma等存起来,方便后续检索:
    from langchain.vectorstores import FAISS
    vectorstore = FAISS.from_documents(chunks, embeddings)
    vectorstore.save_local("faiss_index")
    

3.2 检索与生成闭环

检索阶段最怕“搜不到”或“搜偏了”。建议先测试检索质量:

query = "年假有多少天?"
docs = vectorstore.similarity_search(query, k=3)  # 返回最相关的3个片段
for doc in docs:
    print(doc.page_content)  # 看检索结果是否相关

确认检索片段靠谱后,再拼接到Prompt里给模型:

from langchain.llms import Ollama  # 本地模型示例
llm = Ollama(model="qwen2.5:7b")
context = "\n".join([doc.page_content for doc in docs])
prompt = f"基于以下资料回答问题:\n{context}\n问题:{query}"
answer = llm.invoke(prompt)

3.3 避坑指南

  • 块大小不是越大越好 :超过模型上下文长度会截断,一般设500~1000字。
  • 重叠度影响连贯性 :chunk_overlap设50~100,避免关键信息被切碎。
  • 嵌入模型选通用的 :先用all-MiniLM-L6-v2这种通用模型,别一上来就训专用模型。
  • 检索数量k=3起步 :太少信息不足,太多噪声大,根据文档密度调整。

如果输出答案还是胡编乱造,90%是检索环节出了问题——不是文档没切好,就是向量模型没选对。先别急着调模型,把检索结果打印出来看看。

4. Prompt工程:让模型听懂人话的关键

Prompt是你和模型沟通的“翻译器”。同样的模型,Prompt水平差,输出可能完全没法用。我总结了三层Prompt技巧:基础指令、思维链、模板化。

4.1 基础指令结构

坏Prompt:“介绍一下云计算” 好Prompt:“用通俗易懂的方式向高中生介绍云计算,包括定义、主要特点、常见服务形式。分点输出,每点不超过20字。”

好Prompt包含:

  • 角色 :向高中生介绍
  • 任务 :介绍云计算
  • 要求 :通俗易懂、分点、每点20字内
  • 格式 :分点输出

在代码里,可以用LangChain的PromptTemplate规范起来:

from langchain.prompts import PromptTemplate
template = """你是一名{role}。请用{style}的方式回答以下问题:
问题:{question}
{format_requirement}"""
prompt = PromptTemplate(
    input_variables=["role", "style", "question", "format_requirement"],
    template=template
)
filled_prompt = prompt.format(
    role="科技科普作者",
    style="通俗易懂",
    question="什么是区块链?",
    format_requirement="分三点说明,每点不超过30字"
)

4.2 思维链(Chain-of-Thought)

对于复杂问题,让模型“一步一步想”:

请逐步推理:如果小明每天存10元,存了30天后花掉一半,然后又每天存15元存了20天,最后有多少钱?
第一步:计算第一阶段存款...
第二步:计算花掉一半后剩余...
第三步:计算第二阶段存款...
第四步:计算总额...

在代码中可以用LangChain的LLMChain实现多步推理:

from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run({
    "role": "数学老师",
    "style": "步骤清晰", 
    "question": "小明存款问题",
    "format_requirement": "分四步推理,最后给出答案"
})

4.3 模板化应对批量任务

当你要处理大量相似问题时,建一个Prompt模板库:

templates = {
    "summary": "用不超过100字总结以下内容:{text}",
    "qa": "基于已知信息回答:已知:{context} 问题:{question}",
    "classification": "将以下文本分类为{classes}中的一类:{text}"
}
# 使用时根据任务类型选择模板
prompt_type = "qa"
formatted = templates[prompt_type].format(context=doc_text, question=query)

常见错误:Prompt太长导致截断。模型有上下文限制(如4K、8K、16K token),算上你的Prompt和输出,别超限。看到"prompt is too long"错误时,先压缩Prompt或换长上下文模型。

5. LangChain框架:把零散工具组装成流水线

LangChain不是魔法,它只是一个“连接器”——把模型、工具、数据源连接成可复用的流程。学LangChain最关键的是理解其核心概念:Model I/O、Retrieval、Chains、Agents。

5.1 Model I/O:统一接口调用不同模型

不管用OpenAI、本地模型还是开源API,写法统一:

from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.llms import Ollama

# 三种调用方式示例
llm_openai = OpenAI(api_key="你的密钥")  # OpenAI GPT
chat_model = ChatOpenAI(model="gpt-3.5-turbo")  # 聊天模式
llm_local = Ollama(model="qwen2.5:7b")  # 本地模型

# 同样的调用方式
response = llm_local.invoke("你好")

这样换模型时只需改一行代码,不用重写整个项目。

5.2 Chains:把多个步骤串起来

比如先检索文档再生成答案的RAG链:

from langchain.chains import RetrievalQA
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",  # 简单拼接检索结果
    retriever=vectorstore.as_retriever(),
    return_source_documents=True  # 返回参考文档
)
result = qa_chain.invoke({"query": "公司年假政策"})
print(result["result"])  # 答案
print(result["source_documents"])  # 参考来源

Chain_type有四种选择:

  • stuff :所有检索结果拼一起喂给模型(简单快速)
  • map_reduce :先分别处理每个片段,再汇总(处理长文档)
  • refine :迭代式逐步完善答案(质量高但慢)
  • map_rerank :给每个片段打分,选最好的(平衡质量速度)

新手先用 stuff ,文档大或要求高时用 map_reduce

5.3 与LangGraph的区别

LangChain是线性流水线,LangGraph支持循环、分支等复杂流程。比如一个客服Agent:用户提问→检索知识库→生成答案→用户不满意→转人工。这种带反馈循环的场景用LangGraph更合适。

刚开始学不必纠结区别,90%的场景LangChain够用。等需要复杂工作流时再上LangGraph。

6. Agent开发:让模型学会使用工具

Agent是大模型应用的进阶阶段——模型不再只是回答问题,而是能调用工具完成任务。比如“查一下北京天气然后推荐穿衣”这种多步骤任务。

6.1 工具定义:告诉模型能用什么

首先定义工具函数:

from langchain.agents import tool
import requests

@tool
def get_weather(city: str) -> str:
    """获取指定城市的天气情况"""
    # 模拟API调用
    return f"{city}天气:晴,25℃"

@tool  
def recommend_clothing(temperature: int) -> str:
    """根据温度推荐穿衣"""
    if temperature > 30:
        return "建议穿短袖"
    elif temperature > 20:
        return "建议穿长袖"
    else:
        return "建议穿外套"

6.2 创建Agent:组合工具和模型

from langchain.agents import initialize_agent, AgentType
from langchain.tools import Tool

tools = [get_weather, recommend_clothing]
agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,  # 最稳定的类型
    verbose=True  # 显示思考过程
)

6.3 执行任务:看模型如何思考

result = agent.run("北京天气怎么样?该穿什么衣服?")

设置verbose=True后,你会看到模型的思考过程:

Thought: 用户问了两个问题:天气和穿衣建议。我需要先获取北京天气,再根据温度推荐穿衣。
Action: get_weather
Action Input: {"city": "北京"}
Observation: 北京天气:晴,25℃
Thought: 现在温度是25℃,需要调用推荐穿衣工具。
Action: recommend_clothing  
Action Input: {"temperature": 25}
Observation: 建议穿长袖
Final Answer: 北京天气晴朗,25摄氏度,建议穿长袖。

这种结构化的思考-行动-观察循环,就是Agent的核心。

6.4 常见问题排查

  • 模型不调用工具 :检查工具描述是否清晰,Prompt是否明确要求使用工具。
  • 工具参数错误 :确保工具的参数类型和描述匹配。
  • 无限循环 :设置max_iterations参数限制最大步数。

对于复杂任务,建议先用Hermes Agent、PI Agent这类现成框架,它们已经处理了很多边界情况。

7. 微调:让模型真正理解你的业务

当Prompt工程无法满足需求时(比如需要特定术语、固定格式、专业领域知识),就需要微调。但微调成本高,要先判断是否必要。

7.1 什么情况需要微调?

  • 领域专有名词 :医疗、法律、金融等专业术语
  • 固定输出格式 :始终返回JSON、特定报告格式
  • 风格一致性 :公司特有的文案风格、客服话术
  • 大量私有数据 :成千上万的业务问答对

如果只是偶尔需要特定格式,用Prompt模板更划算;如果需要处理大量私有数据且要求高一致性,再考虑微调。

7.2 微调数据准备

数据质量决定微调效果。需要准备问答对或指令-响应对:

[
    {
        "instruction": "用公司标准格式介绍产品A",
        "input": "产品A参数:尺寸10x10cm,重量200g", 
        "output": "产品A是一款尺寸为10x10cm、重量200g的优质产品..."
    },
    {
        "instruction": "回答客户关于退换货政策的问题",
        "input": "购买后7天内可以退换吗?",
        "output": "根据我司政策,商品购买后7天内无理由退换货..."
    }
]

至少需要几百条高质量数据,最好覆盖所有业务场景。

7.3 微调实战步骤

以Qwen2.5-7B为例,使用PEFT(参数高效微调)技术:

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model

# 加载基础模型
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B")

# 配置LoRA(降低显存占用)
lora_config = LoraConfig(
    r=8,  # 秩
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],  # 注意力层
    lora_dropout=0.1
)
model = get_peft_model(model, lora_config)

# 训练配置
training_args = TrainingArguments(
    output_dir="./results",
    per_device_train_batch_size=4,  # 根据显存调整
    gradient_accumulation_steps=4,
    learning_rate=2e-5,
    num_train_epochs=3
)

7.4 微调避坑指南

  • 显存不够 :用QLoRA进一步压缩,4GB显存就能微调7B模型。
  • 过拟合 :早停(early stopping)、验证集监控、数据增强。
  • 效果不好 :检查数据质量、增加数据量、调整学习率。

微调后一定要做评估:准备测试集,对比微调前后的回答质量。

8. 完整项目实战:搭建企业知识库问答系统

现在我们把所有技术串起来,搭建一个真实可用的系统。

8.1 系统架构设计

用户提问 → LangChain路由 → 
   简单问题: 直接Prompt回答
   复杂问题: RAG检索 → 生成答案
   多步骤问题: Agent调度工具
   
答案 → 格式检查 → 返回用户

8.2 核心代码框架

from langchain import LangChain
from langchain.agents import AgentExecutor
from langchain.chains import RetrievalQA

class EnterpriseQASystem:
    def __init__(self):
        # 初始化组件
        self.simple_llm = load_model("local:7b")  # 简单问题模型
        self.rag_chain = self.setup_rag()  # RAG链
        self.agent = self.setup_agent()  # Agent
        
    def setup_rag(self):
        # 加载已有向量库
        vectorstore = FAISS.load_local("faiss_index", embeddings)
        return RetrievalQA.from_chain_type(llm=self.simple_llm, retriever=vectorstore.as_retriever())
    
    def setup_agent(self):
        tools = [get_weather, search_internet, calculate]  # 自定义工具
        return initialize_agent(tools, self.simple_llm, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION)
    
    def route_question(self, question):
        # 简单路由逻辑
        if len(question) < 10:  # 短问题直接回答
            return self.simple_llm.invoke(question)
        elif "步骤" in question or "先" in question:  # 多步骤用Agent
            return self.agent.run(question)
        else:  # 复杂问题用RAG
            return self.rag_chain.invoke(question)

# 使用系统
qa_system = EnterpriseQASystem()
answer = qa_system.route_question("公司年假政策是什么?")

8.3 部署优化建议

  • 本地部署 :用Ollama、LM Studio管理本地模型,避免API费用。
  • API混合 :关键任务用付费API(稳定性高),内部测试用本地模型。
  • 缓存机制 :相同问题缓存答案,减少模型调用。
  • 监控日志 :记录问答历史,用于后续优化。

9. 学习路线与资源推荐

9.1 四阶段学习路径

阶段1:基础入门(1-2周)

  • 跑通第一个Prompt工程示例
  • 理解RAG基本概念和流程
  • 学会使用LangChain基础组件

阶段2:项目实战(2-3周)

  • 搭建个人知识库问答系统
  • 实现多工具调用的Agent
  • 掌握Prompt优化技巧

阶段3:进阶优化(2-3周)

  • 模型微调实战
  • 系统性能调优
  • 复杂工作流设计

阶段4:生产部署(1-2周)

  • Docker容器化部署
  • API服务化
  • 监控与维护

9.2 优质资源

  • 官方文档 :LangChain、Hugging Face文档最权威
  • 实战项目 :从RAG系统开始,逐步增加复杂度
  • 社区资源 :GitHub热门项目、技术博客、论文解读

9.3 常见误区避免

  • 不要追求最新技术 :先掌握稳定可用的基础方案
  • 不要一上来就微调 :Prompt能解决的先用Prompt
  • 不要忽视数据质量 :垃圾进,垃圾出
  • 不要过度设计架构 :从最小可行产品开始迭代

最实用的建议:先用一个周末把RAG系统跑通,再花一周加入Agent功能,一个月内你就能独立开发大多数AI应用了。关键是要动手写代码,而不是只看理论。

更多推荐