LangChain LLM应用完整开发流程

LangChain LLM应用完整开发流程

核心链路:需求分析 → 数据准备 → 向量库构建(RAG) → Prompt设计 → Chain/Agent编排 → 接入大模型 → 测试调优 → 部署上线 → 监控迭代

分为普通问答链、RAG知识库、Agent智能代理三种典型场景。

一、整体架构流程

  1. 需求确定

    明确业务:知识库问答 / 工具调用Agent / 文档摘要 / 数据解析 / 多轮对话

    确定:大模型(OpenAI/通义千问/LLama/Qwen)、是否需要私有文档、是否需要调用外部工具、是否要记忆会话。

  2. 数据预处理(RAG场景必做)

  • 加载文档:Document Loaders
    支持pdf、md、txt、docx、网页、数据库、csv

  • 文档分割:TextSplitter

    复制代码
    文本 → 分块(chunk) → 每个chunk生成Document对象(page_content+metadata)

    重点:chunk_size、chunk_overlap,避免切碎语义。

  • 清洗:过滤无用字符、空文档。

  1. 向量化 & 向量数据库构建
  • Embedding模型:把文本块转为向量
  • 写入向量数据库:Chroma、FAISS、Milvus、PGVector、Weaviate

离线知识库到此完成,后续检索直接用向量库,不需要重复embedding。

  1. Prompt 模板设计
  • System Prompt:角色、规则、约束、回答格式
  • Human Prompt:用户输入 + 检索上下文
  • 使用ChatPromptTemplate,不要硬编码字符串。

RAG经典:只使用提供的上下文回答,不知道就说不知道,不要编造

  1. 检索(Retriever)

    向量库 similarity_search:输入用户query,返回top‑N相关文档块。

    可增强:重排序Reranker、Self‑query、Multi‑query。

  2. Chain 链路编排(LangChain核心)

    把:检索器 + Prompt + LLM + 记忆组装成链。

典型RAG链流程

复制代码
用户问题
    ↓
Retriever 检索知识库片段
    ↓
把检索上下文 + 用户问题灌入Prompt模板
    ↓
传给LLM生成回答
    ↓
输出给用户

Agent流程(能调用工具)

复制代码
用户问题
    ↓
Agent:思考需要什么工具(搜索、计算器、API)
    ↓
调用Tool工具得到结果
    ↓
把工具返回结果再交给LLM
    ↓
循环直到可以给出最终答案
  1. 记忆 Memory(多轮对话)
    保存历史对话,支持:
  • ConversationBufferMemory:完整保存全部历史
  • SummaryMemory:对历史做摘要节省token
  • WindowMemory:只保留最近N轮

RAG+对话:记忆只存对话历史,不要把全部知识库塞进记忆。

  1. 调用大模型 LLM / ChatModel
  • LLM:文本补全接口(老接口)
  • ChatModel:对话接口(推荐,如ChatOpenAI、ChatQwen)
  1. 测试、评估与调优
  • 业务样例测试:看是否幻觉、是否引用错文档
  • 可调参数:
    • chunk大小、overlap
    • retriever返回top‑k数量
    • temperature(越低越确定,越高创造性)
    • prompt约束、增加reranker重排
  • 评估:RAGAS做自动评估(召回率、忠实度、回答相关性)
  1. 应用封装与部署
  • 封装API:FastAPI封装Chain,对外http接口
  • 前端对接:Web页面、Chatbot
  • 部署:docker容器,向量库独立服务
  1. 线上监控与迭代
  • 记录输入query、llm输出、检索到的文档、token消耗、错误
  • badcase收集,迭代prompt、切分策略、知识库更新

二、最简RAG伪代码流程(Python)

python 复制代码
#1 加载文档
from langchain_community.document_loaders import TextLoader
loader = TextLoader("data.txt")
docs = loader.load()

#2 切分
from langchain_text_splitters import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = splitter.split_documents(docs)

#3 embedding + 向量库
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={"k":3})

#4 prompt
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
    ("system","基于下面上下文回答问题,不知道就如实说不知道:\n{context}"),
    ("human","{question}")
])

#5 构建RAG链
from langchain_openai import ChatOpenAI
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

llm = ChatOpenAI(model="gpt‑4o‑mini", temperature=0)

rag_chain = (
    {"context": retriever | (lambda docs:"\n".join([d.page_content for d in docs])),
     "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

#6 调用
res = rag_chain.invoke("你的问题")
print(res)

三、开发中常见坑点

  1. chunk切分不合理:过大语义混杂,过小丢失完整信息
  2. Prompt没有强约束,LLM产生幻觉编造内容
  3. retriever召回无关文档,污染上下文 → 增加reranker
  4. 历史对话无管理,上下文超长token溢出
  5. Embedding模型和检索模型不匹配
  6. Agent工具描述写的差,大模型不会选工具

四、LangChain两种开发范式

  1. Legacy Chain(旧版)RetrievalQA.from_chain_type,简单但灵活性差
  2. LCEL(LangChain Expression Language,新版推荐) :Runnable,管道符号|,可组合、流式、异步,生产环境首选。

Agent 开发优先使用 LangGraph(LangChain官方状态图框架),替代老版Agent,支持循环、状态、断点,适合复杂业务。

五、LangGraph(复杂Agent)流程补充

当业务需要:多步骤、分支判断、循环调用工具、人工介入、状态持久化,就升级到LangGraph:

  1. 定义Graph状态State(保存query、中间结果、历史、工具返回)
  2. 编写节点node:大模型节点、工具调用节点
  3. 定义条件边(条件路由,判断是否继续调用工具还是输出结果)
  4. 编译图 → invoke执行
相关推荐
未若君雅裁7 小时前
上下文压缩双刃剑-Summarization与ContextEditing中间件实战
python·中间件·langchain
前端 贾公子7 小时前
第09章:上下文与记忆 (3)
python·langchain
sukioe9 小时前
一张图、两把锁:AI 物流履约平台的确定性边界设计
人工智能·python·ai·langchain
何以解忧,唯有..9 小时前
LangChain 中 Pydantic 格式输出:结构化输出的完整指南
java·开发语言·langchain
sukioe10 小时前
城智连响:基于 LangGraph 与四库分层架构的城市公共设施智能报修与派单系统
人工智能·python·ai·架构·langchain
zl_dfq12 小时前
LangChain 之 【MCP】(FastMCP、MultiServerMCPClient、json.dumps)
langchain
爱敲代码的小冰14 小时前
langchain入门基础
langchain
何以解忧,唯有..1 天前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
落魄大学生之流水线上谋生计1 天前
LangGraph 基本用法指南
java·windows·python·langchain