首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >非算法背景构建大模型应用:由最小 Demo 迭代业务 RAG 系统(完整 LangChain 示例)

非算法背景构建大模型应用:由最小 Demo 迭代业务 RAG 系统(完整 LangChain 示例)

原创
作者头像
三合卓学
修改于 2026-10-08 17:24:10
修改于 2026-10-08 17:24:10
1540
举报

绝大多数企业业务场景不需要模型预训练、LoRA 微调,核心集中在数据预处理、RAG 检索配置、提示词工程。工程的标准思路是先完成最小可用 Demo 跑通完整链路,再迭代叠加业务规则,而不是一次性构建复杂系统。

下面为基于 LangChain 的文档问答最小可运行 Demo。

代码语言:javascript
复制
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA

# 1.加载本地业务文档
loader = TextLoader("./business.txt", encoding="utf‑8")
docs = loader.load()

# 2.文本切片
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=800,
    chunk_overlap=150
)
splits = text_splitter.split_documents(docs)

# 3.初始化向量模型与向量库
embedding = OpenAIEmbeddings(api_key="your-api-key")
vectordb = Chroma.from_documents(documents=splits, embedding=embedding, persist_directory="./chroma_db")

# 4.构建检索问答链
llm = ChatOpenAI(model="gpt‑4o‑mini", api_key="your-api-key", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectordb.as_retriever(search_kwargs={"k":4}),
    return_source_documents=True
)

# 5.执行问答
result = qa_chain.invoke({"query":"本产品售后保修周期是多久?"})
print(result["result"])

代码逐段解析

  1. TextLoader 读取本地业务文本文件;
  2. RecursiveCharacterTextSplitter 完成文本分块,chunk_size=800,重叠 150;
  3. OpenAIEmbeddings 做文本向量化,存入 Chroma 本地向量库;
  4. RetrievalQA 组装 RAG 链路,k=4 代表每次检索返回 4 个片段;
  5. 传入业务问题获取答案,同时返回原始参考文档。

运行中高频问题与修复

  1. 问答结果混乱,混入无关信息:chunk_size 设置过大,单块包含多个主题 → 降低 chunk_size 重新切片入库;
  2. 关键业务信息回答不出:chunk_overlap 设置过低,跨块语义被切断 → 调大 overlap;
  3. PDF 扫描文档问答全部乱码:直接读取图片 PDF,没有文本提取 → 先完成 OCR 文本导出,再送入切片。

最小 Demo 跑通之后,再逐步叠加业务约束:增加拒绝回答逻辑、输出格式约束。每新增规则,保留版本快照,准备正常与异常测试用例做回归测试。同时记录系统能力边界,明确哪些场景必须人工兜底。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 代码逐段解析
  • 运行中高频问题与修复
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档