大模型应用开发实战:LangChain、Agent与RAG技术全解析

发布时间:2026/7/29 12:06:25

大模型应用开发实战:LangChain、Agent与RAG技术全解析 这次我们来看一套完整的大模型应用开发教程重点覆盖 Agent、LangChain 和 RAG 三大核心方向。如果你正在寻找从零基础到实战落地的全栈学习路径这篇文章可以直接收藏。这套教程面向有一定 Python 基础但未深入接触过大模型的开发者目标是带大家掌握大模型应用开发的核心技术栈。我们将重点介绍如何利用 LangChain 构建可复用的应用框架如何设计具备自主决策能力的 AI Agent以及如何通过 RAG 技术为企业知识库或私有数据构建智能问答系统。教程内容强调实战每一部分都配有可运行的代码示例和部署验证流程。从技术选型上看这套教程基于当前主流的技术栈LangChain 作为应用开发框架支持多种大模型接入Agent 设计涵盖工具调用、任务规划和多步推理RAG 部分则从文档解析、向量检索到生成答案完整落地。硬件门槛上大部分示例支持 CPU 运行部分实验需 GPU 加速我们会明确标注资源要求。下面我们将按以下顺序展开先快速梳理核心能力与学习路径再分模块讲解环境准备、LangChain 基础、Agent 开发实战、RAG 系统搭建、接口服务化以及性能优化。每一部分都会提供可复现的代码和常见问题排查方法。1. 核心能力速览能力项说明技术栈覆盖LangChain框架、Agent智能体、RAG检索增强生成主要功能大模型接入、工具调用、任务规划、文档检索、问答系统构建推荐基础Python 基础了解 API 调用有 Linux/Windows 操作经验硬件要求大部分示例支持 CPUGPU 可加速向量检索与模型推理显存占用依赖所选大模型轻量级模型 2-4GB重量级模型 8GB支持平台Windows / Linux / Mac推荐 Python 3.8启动方式命令行、Jupyter Notebook、Web 服务、API 接口是否支持 API是可封装为 HTTP 服务供前端或移动端调用是否支持批量任务是RAG 支持批量文档入库Agent 支持任务队列适合场景企业知识库、智能客服、自动化流程、个人学习助手2. 适用场景与使用边界这套教程主要面向以下几类开发者初学者希望系统学习大模型应用开发从环境搭建到项目部署全流程掌握。中级开发者已有一定 Python 和 API 经验想快速切入 Agent 或 RAG 开发。团队技术选型需要评估 LangChain 是否适合现有业务或为知识库项目做技术预研。能解决的典型问题包括如何将大模型接入自有业务系统如何让 AI 自动调用工具如搜索、计算、数据库查询如何基于私有文档构建智能问答能力如何设计能完成多步任务的智能体教程也有明确的边界不涉及大模型预训练或微调但会介绍如何接入已有模型。不深入多模态生成如文生图、图生视频但文本类 RAG 和 Agent 是重点。企业级部署需考虑权限、审计、数据隔离等附加要求教程以功能验证为主。所有示例均强调合规使用涉及外部数据时需确认版权接入公开模型需遵守平台条款企业内部部署时注意数据隐私。3. 环境准备与前置条件在开始编码前请确保你的本地或服务器环境满足以下条件3.1 基础软件要求操作系统Windows 10/11、Ubuntu 18.04、CentOS 7 或 macOS 10.15。推荐 Linux 环境进行生产级部署。Python 版本Python 3.8–3.11避免使用 3.12 等过新版本可能存在库兼容问题。包管理工具pip 版本 20.3建议使用虚拟环境venv 或 conda隔离项目依赖。3.2 开发工具与关键依赖代码编辑器VS Code推荐安装 Python 插件、PyCharm 或 Jupyter Notebook。核心 Python 库langchain/langchain-community主体框架与社区集成openai/zhipuai/qianfan大模型 API 调用根据选用模型配置chromadb/faiss向量数据库用于 RAG 检索sentence-transformers文本嵌入模型requests/fastapiHTTP 服务与接口封装可选 GPU 支持如需本地运行嵌入模型或轻量级大模型可安装 PyTorchCUDA 版本加速。3.3 网络与权限准备大部分示例需要联网调用大模型 API如 OpenAI、智谱、文心一言等请确保网络通畅。如在内网环境运行需提前部署本地模型服务如 Ollama、LocalAI并调整代码中的模型端点。如需处理企业内部文档确保有权限读取相关文件如 PDF、Word、Excel。4. 安装部署与启动方式我们使用 pip 安装核心依赖并通过几个脚本来验证环境是否就绪。4.1 创建虚拟环境与安装依赖# 创建并激活虚拟环境Windows python -m venv langchain_env langchain_env\Scripts\activate # 安装核心包 pip install langchain langchain-community openai chromadb sentence-transformers # 如需 Web 界面或 API 服务可额外安装 pip install fastapi uvicorn gradio4.2 验证 LangChain 基础功能创建一个简单的 Python 脚本test_langchain.py测试大模型连接与对话from langchain.chat_models import ChatOpenAI from langchain.schema import HumanMessage # 使用 OpenAI 模型需设置环境变量 OPENAI_API_KEY chat ChatOpenAI(modelgpt-3.5-turbo, temperature0.7) messages [HumanMessage(content你好请介绍一下你自己。)] response chat(messages) print(模型回复, response.content)运行前请设置 API Key# 在终端中设置临时 export OPENAI_API_KEY你的密钥 # Linux/Mac set OPENAI_API_KEY你的密钥 # Windows执行脚本python test_langchain.py如果输出模型自我介绍说明 LangChain 基础环境配置成功。4.3 启动 RAG 检索服务以下示例启动一个本地向量数据库并加载自定义文档from langchain.vectorstores import Chroma from langchain.embeddings import HuggingFaceEmbeddings from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.document_loaders import TextLoader # 加载文档示例为本地文本文件 loader TextLoader(./example.txt) documents loader.load() # 分割文本 text_splitter RecursiveCharacterTextSplitter(chunk_size500, chunk_overlap50) texts text_splitter.split_documents(documents) # 使用本地嵌入模型 embeddings HuggingFaceEmbeddings(model_nameall-MiniLM-L6-v2) # 构建向量库 vectorstore Chroma.from_documents(documentstexts, embeddingembeddings, persist_directory./chroma_db) # 测试检索 retriever vectorstore.as_retriever() docs retriever.get_relevant_documents(什么是大模型) print(检索结果, docs[0].page_content[:200])4.4 启动 Web 服务供前端调用如需将能力封装为 HTTP API可使用 FastAPI 编写一个简易服务from fastapi import FastAPI from pydantic import BaseModel from langchain.chains import RetrievalQA from langchain.llms import OpenAI app FastAPI() # 定义请求体 class QueryRequest(BaseModel): question: str # 初始化链假设 vectorstore 已初始化 qa_chain RetrievalQA.from_chain_type( llmOpenAI(temperature0), chain_typestuff, retrievervectorstore.as_retriever() ) app.post(/ask) def answer_question(request: QueryRequest): result qa_chain.run(request.question) return {answer: result} if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)启动后可通过http://127.0.0.1:8000/ask调用问答接口。5. 功能测试与效果验证下面我们分模块验证 LangChain、Agent 和 RAG 的核心功能。5.1 LangChain 基础功能测试测试目的验证 LangChain 能否正常调用大模型完成基础对话与内容生成。操作步骤选用一个可用的大模型如 GPT-3.5-turbo、文心一言、通义千问。发送多轮对话请求观察上下文保持能力。测试不同 temperature 参数对生成多样性的影响。输入示例from langchain.chat_models import ChatOpenAI from langchain.schema import HumanMessage, SystemMessage chat ChatOpenAI(modelgpt-3.5-turbo, temperature0.8) # 多轮对话 messages [ SystemMessage(content你是一个技术助手擅长 Python 和 AI 开发。), HumanMessage(content如何用 LangChain 调用大模型), HumanMessage(content上一问中是否需要安装额外依赖) ] response chat(messages) print(response.content)预期结果模型应能理解上下文第二问能关联第一问的回答。判断成功标准模型返回内容符合问题意图多轮对话中能引用前文信息响应时间在合理范围内API 调用一般 2-10 秒5.2 Agent 工具调用测试测试目的验证 Agent 能否自动选择并执行工具如计算、搜索、文件读写。操作步骤定义工具函数如计算器、天气查询、数据库连接。初始化 Agent并传入工具列表。发送需要多步推理的请求观察 Agent 是否正确调用工具。输入示例from langchain.agents import initialize_agent, Tool from langchain.agents import AgentType from langchain.llms import OpenAI # 定义一个简单工具计算平方 def square_number(n): return n * n tools [ Tool( nameSquareCalculator, funcsquare_number, description计算一个数的平方。输入应为数字。 ) ] llm OpenAI(temperature0) agent initialize_agent(tools, llm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, verboseTrue) # 测试工具调用 result agent.run(计算 15 的平方是多少) print(Agent 执行结果, result)预期结果Agent 应识别出需要调用 SquareCalculator并返回 225。判断成功标准Agent 正确选择工具工具执行结果被整合到最终回答中整个流程无需人工干预5.3 RAG 知识库问答测试测试目的验证 RAG 系统能否基于私有文档准确回答问题。操作步骤准备测试文档如技术文档、产品手册、公司制度。构建向量数据库并测试检索相似度。提问文档中的知识点观察答案是否来自文档内容。输入示例from langchain.chains import RetrievalQA from langchain.llms import OpenAI # 假设 vectorstore 已构建并包含文档 qa_chain RetrievalQA.from_chain_type( llmOpenAI(temperature0), chain_typestuff, retrievervectorstore.as_retriever(), return_source_documentsTrue ) # 提问 question 本产品支持哪些操作系统 result qa_chain({query: question}) print(答案, result[result]) print(来源文档, result[source_documents][0].page_content[:100])预期结果答案应准确反映文档内容并标注来源段落。判断成功标准答案与文档内容一致检索到的文档片段与问题相关对于文档未覆盖的问题模型应回答“未知”或基于通用知识回答根据配置6. 接口 API 与批量任务将上述能力封装为可复用的服务是项目实战的关键一步。6.1 接口服务化部署LangChain 应用通常通过 FastAPI 或 Gradio 提供 Web 接口。以下是一个支持问答、文档上传和检索的完整服务示例from fastapi import FastAPI, UploadFile, File from pydantic import BaseModel import os from langchain.vectorstores import Chroma from langchain.embeddings import HuggingFaceEmbeddings from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.document_loaders import TextLoader app FastAPI(titleRAG 问答服务) # 存储上传的文档 UPLOAD_DIR ./uploads os.makedirs(UPLOAD_DIR, exist_okTrue) class QueryRequest(BaseModel): question: str app.post(/upload) async def upload_document(file: UploadFile File(...)): 上传文档并自动入库 file_path os.path.join(UPLOAD_DIR, file.filename) with open(file_path, wb) as f: f.write(await file.read()) # 加载、分割、向量化文档 loader TextLoader(file_path) documents loader.load() text_splitter RecursiveCharacterTextSplitter(chunk_size500, chunk_overlap50) texts text_splitter.split_documents(documents) embeddings HuggingFaceEmbeddings(model_nameall-MiniLM-L6-v2) vectorstore Chroma.from_documents(documentstexts, embeddingembeddings, persist_directory./chroma_db) return {status: success, message: f文档 {file.filename} 已入库} app.post(/ask) def answer_question(request: QueryRequest): 提问接口 # 初始化检索器实际项目应全局初始化 embeddings HuggingFaceEmbeddings(model_nameall-MiniLM-L6-v2) vectorstore Chroma(persist_directory./chroma_db, embedding_functionembeddings) from langchain.chains import RetrievalQA from langchain.llms import OpenAI qa_chain RetrievalQA.from_chain_type( llmOpenAI(temperature0), chain_typestuff, retrievervectorstore.as_retriever() ) result qa_chain.run(request.question) return {answer: result} if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)启动后可通过以下方式测试接口# 上传文档 curl -X POST -F fileexample.txt http://127.0.0.1:8000/upload # 提问 curl -X POST -H Content-Type: application/json -d {question:文档中的主要内容是什么} http://127.0.0.1:8000/ask6.2 批量任务处理对于需要处理大量文档或批量问答的场景我们可以设计任务队列。以下示例使用 Python 多线程处理批量提问import concurrent.futures from langchain.chains import RetrievalQA from langchain.llms import OpenAI def init_qa_chain(): 初始化 QA 链避免重复加载 embeddings HuggingFaceEmbeddings(model_nameall-MiniLM-L6-v2) vectorstore Chroma(persist_directory./chroma_db, embedding_functionembeddings) return RetrievalQA.from_chain_type( llmOpenAI(temperature0), chain_typestuff, retrievervectorstore.as_retriever() ) def process_question(question): 处理单个问题 qa_chain init_qa_chain() try: result qa_chain.run(question) return {question: question, answer: result, status: success} except Exception as e: return {question: question, error: str(e), status: failed} # 批量问题列表 questions [ 产品的主要功能是什么, 技术支持联系方式是什么, 如何安装和部署, 常见问题有哪些 ] # 使用线程池并行处理 with concurrent.futures.ThreadPoolExecutor(max_workers3) as executor: results list(executor.map(process_question, questions)) for result in results: print(f问题{result[question]}) if result[status] success: print(f答案{result[answer][:100]}...) else: print(f失败{result[error]}) print(- * 50)批量任务最佳实践控制并发数避免 API 限流或资源耗尽添加重试机制应对临时失败记录任务日志便于排查问题对于大量文档入库可分批处理并显示进度7. 资源占用与性能观察大模型应用在不同阶段的资源需求差异很大以下是关键观察点。7.1 内存与显存占用分析向量数据库构建阶段嵌入模型推理会占用较多内存/显存。例如 all-MiniLM-L6-v2 模型在 CPU 下约占用 1-2GB 内存GPU 下显存占用类似。检索阶段ChromaDB 或 FAISS 加载索引后内存占用与文档数量成正比。10万条文档的索引可能占用 500MB-1GB 内存。大模型推理阶段如果使用本地模型如通过 Ollama 部署 Llama2-7B7B 模型需要 8-10GB 显存API 调用则主要消耗网络带宽。观察方法# Linux 下查看进程内存占用 top -p $(pgrep -f python) # 查看 GPU 显存如有 NVIDIA 显卡 nvidia-smi7.2 响应时间优化冷启动时间首次加载嵌入模型或向量数据库可能较慢10-30秒后续请求会快很多。检索优化调整 chunk_size 和 chunk_overlap 参数平衡检索精度和速度。缓存策略对常见问题答案可做缓存减少大模型调用。示例添加内存缓存from langchain.cache import InMemoryCache from langchain.globals import set_llm_cache # 启用缓存 set_llm_cache(InMemoryCache()) # 相同问题第二次调用会直接返回缓存结果7.3 并发处理能力API 限制OpenAI 等商业 API 有每分钟请求数限制需在代码中控制并发。本地模型如果自建模型服务需根据 GPU 显存设置最大并发数。向量检索ChromaDB 支持并发查询但大量同时写入可能需排队。压力测试建议使用 Apache Bench 或 Python 的concurrent.futures模拟多用户访问观察服务稳定性。8. 常见问题与排查方法问题现象可能原因排查方式解决方案导入 LangChain 报错版本不兼容或依赖缺失检查 Python 版本和 pip list使用虚拟环境按教程版本安装API 调用返回认证错误API Key 未设置或错误检查环境变量正确设置 OPENAI_API_KEY 等变量向量检索结果不相关文档分割参数不合理检查 chunk_size 和嵌入模型调整分割策略尝试不同嵌入模型Agent 不调用工具工具描述不清晰或 LLM 理解偏差查看 Agent 的推理过程verboseTrue优化工具描述尝试不同 Agent 类型服务启动后端口被占用端口冲突检查 8000 端口是否被占用更换端口或结束占用进程批量处理时内存溢出文档过大或并发太多监控内存使用情况减小 batch_size增加内存或使用流式处理本地模型加载失败模型文件缺失或显存不足检查模型路径和显存确保模型文件完整尝试 CPU 模式或减小模型尺寸8.1 依赖版本冲突解决LangChain 生态更新较快版本兼容性是常见问题。如果遇到导入错误可尝试固定版本pip install langchain0.0.350 langchain-community0.0.208.2 模型接入故障排查不同模型提供商接入方式各异通用排查步骤验证网络连通性是否能访问模型 API 端点检查认证信息API Key 或 Token 是否正确查看配额限制是否超过免费额度或商用限制测试简单请求先用最简代码验证模型可用性9. 最佳实践与使用建议根据实际项目经验总结以下建议帮助大家避坑9.1 项目结构规划my_agent_project/ ├── app/ # 应用代码 │ ├── agents/ # Agent 实现 │ ├── chains/ # 自定义链 │ ├── tools/ # 工具函数 │ └── utils/ # 工具类 ├── data/ # 文档数据 │ ├── raw/ # 原始文档 │ └── processed/ # 处理后的向量库 ├── tests/ # 单元测试 ├── requirements.txt # 依赖列表 └── main.py # 启动入口9.2 配置管理使用环境变量或配置文件管理敏感信息和参数import os from dotenv import load_dotenv load_dotenv() # 加载 .env 文件 config { openai_api_key: os.getenv(OPENAI_API_KEY), model_name: os.getenv(MODEL_NAME, gpt-3.5-turbo), embedding_model: os.getenv(EMBEDDING_MODEL, all-MiniLM-L6-v2) }9.3 错误处理与日志添加完善的错误处理和日志记录import logging logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) try: result agent.run(user_query) logger.info(fAgent 执行成功: {user_query}) except Exception as e: logger.error(fAgent 执行失败: {str(e)}) result 抱歉处理过程中出现了错误。9.4 安全与合规数据隐私处理用户数据时遵循隐私政策必要时脱敏内容过滤对模型输出添加审核机制避免不当内容权限控制API 接口添加认证限制访问范围版权合规确保训练数据和文档有合法使用权10. 总结与下一步这套大模型应用开发教程的核心价值在于提供了从基础到实战的完整路径。最值得尝试的起点是 LangChain 基础调用和 RAG 知识库搭建这两部分能快速带来实用价值。在实际部署中最容易踩的坑是版本兼容性和模型接入配置。建议先在一个干净的虚拟环境中按教程步骤验证成功后再逐步添加复杂功能。对于想深入学习的开发者后续可以探索以下方向高级 Agent 架构学习 ReAct、Plan-and-Execute 等模式构建更复杂的决策系统多模态 RAG扩展支持图像、表格、代码等复杂文档类型性能优化向量检索加速、模型量化、缓存策略等工程化优化生产部署Docker 容器化、监控告警、自动扩缩容教程中的代码示例建议亲手运行和修改只有通过实践才能深入理解每个组件的工作原理。遇到问题时优先查看官方文档和社区讨论大模型技术栈更新很快保持学习是关键。建议收藏本文备用在具体实施不同模块时可快速回顾相关配置和排查方法。

相关新闻