这次我们来看一个 LangChain 快速入门实战项目。如果你正在学习大模型应用开发特别是想快速掌握从基础 Prompt 工程到 RAG 知识库再到智能 Agent 的完整开发流程这篇文章可以直接收藏。LangChain 作为当前最流行的大模型应用开发框架能够帮助开发者快速构建基于 LLM 的应用系统。本文重点不是讲解复杂概念而是通过代码实战带你快速上手重点关注环境配置、核心模块使用、常见坑点排查和实际效果验证。无论你是刚接触大模型的开发者还是希望系统学习 LangChain 的工程师都能在 20 分钟内掌握核心开发要点。我们将按照 Prompt 工程、RAG 知识库、智能 Agent 三个核心模块展开每个模块都包含可运行的代码示例、效果验证方法和问题排查指南。文章最后还会提供完整的项目结构和最佳实践建议确保你能快速应用到实际项目中。1. 核心能力速览能力项说明框架类型大模型应用开发框架核心模块Prompt 模板、RAG 检索、Agent 智能体硬件要求普通开发环境即可无需特殊 GPU启动方式Python 环境 依赖安装主要功能大模型对话、文档检索、工具调用、任务规划接口能力支持 REST API 和流式响应批量任务支持批量文档处理和并行推理适合场景企业知识库、智能客服、数据分析、自动化流程2. 适用场景与使用边界LangChain 适合需要集成大模型能力的各类应用场景。如果你是以下类型的开发者这篇文章会特别有用前端开发者想要为产品添加智能对话功能后端工程师需要构建企业级知识库系统数据科学家希望用大模型进行数据分析和处理产品经理想要快速验证 AI 功能原型具体适用场景包括基于文档的智能问答系统多步骤任务规划与执行自动化数据处理流程智能客服和对话机器人使用边界方面需要注意涉及敏感数据时需确保合规性商业使用需确认模型服务授权高并发场景需要设计缓存和限流关键业务需要添加人工审核环节3. 环境准备与前置条件在开始实战之前需要确保开发环境准备就绪。以下是基础环境要求操作系统要求Windows 10/11、macOS 10.15 或 Linux Ubuntu 18.04建议使用 WSL2Windows 用户Python 环境# 推荐使用 Python 3.8-3.11 python --version # 输出应为 Python 3.8.x 或更高版本 # 创建虚拟环境推荐 python -m venv langchain_env source langchain_env/bin/activate # Linux/macOS # 或 langchain_env\Scripts\activate # Windows基础依赖安装# 安装 LangChain 核心包 pip install langchain langchain-core # 安装常用社区组件 pip install langchain-community # 安装文本嵌入模型依赖 pip install sentence-transformers # 安装向量数据库客户端 pip install chromadb # 安装 Web 框架可选用于 API 服务 pip install fastapi uvicorn大模型接入准备你需要准备以下任一种大模型接入方式OpenAI API Key推荐新手使用本地部署的 Ollama 模型阿里云通义千问、百度文心一言等国内模型其他兼容 OpenAI API 的模型服务4. 安装部署与启动方式LangChain 的安装相对简单主要分为基础安装和功能模块安装两个步骤。基础安装验证# 检查安装是否成功 python -c import langchain; print(langchain.__version__) # 应该输出版本号如 0.1.0 或更高项目结构准备建议按以下结构组织代码langchain-project/ ├── main.py # 主入口文件 ├── prompts/ # Prompt 模板目录 ├── data/ # 文档数据目录 ├── vector_store/ # 向量数据库存储 └── requirements.txt # 依赖文件快速启动示例创建一个最简单的 LangChain 应用来验证环境# quick_start.py from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain_community.llms import Ollama # 使用本地 Ollama # 初始化模型这里以 Ollama 为例 llm Ollama(modelllama3.1:8b) # 创建 Prompt 模板 prompt PromptTemplate( input_variables[topic], template请用简单的话解释一下{topic}是什么 ) # 创建链 chain LLMChain(llmllm, promptprompt) # 测试运行 result chain.run(topic机器学习) print(result)运行这个脚本验证环境python quick_start.py如果看到模型返回了对机器学习的解释说明环境配置成功。5. Prompt 工程实战Prompt 工程是 LangChain 的基础好的 Prompt 能显著提升模型效果。我们先从基础 Prompt 模板开始。5.1 基础 Prompt 模板from langchain.prompts import PromptTemplate # 创建带变量的 Prompt 模板 prompt_template PromptTemplate( input_variables[product, audience], template为{audience}写一个关于{product}的营销文案要求简洁有力不超过100字。 ) # 使用模板 formatted_prompt prompt_template.format( product智能手表, audience年轻人 ) print(生成的 Prompt:, formatted_prompt)5.2 多轮对话 Promptfrom langchain.schema import HumanMessage, AIMessage, SystemMessage from langchain.prompts import ChatPromptTemplate # 创建对话模板 chat_template ChatPromptTemplate.from_messages([ (system, 你是一个专业的技术顾问回答要准确且易于理解。), (human, 请问{question}), ]) # 格式化对话 messages chat_template.format_messages( question如何优化 Python 代码的性能 ) # 与模型交互 from langchain_community.chat_models import ChatOpenAI chat ChatOpenAI(modelgpt-3.5-turbo) response chat.invoke(messages) print(模型回复:, response.content)5.3 Prompt 工程常见问题排查问题1变量未定义错误KeyError: variable_name解决方案检查input_variables和实际传入的变量名是否一致。问题2模板格式错误TemplateSyntaxError: Invalid template解决方案确保花括号{}成对出现避免嵌套错误。问题3模型返回内容不符合预期排查方法先打印出完整的 Prompt 内容检查调整 System Message 的角色设定添加更具体的指令约束6. RAG 知识库实战RAGRetrieval-Augmented Generation是 LangChain 的核心应用场景下面我们构建一个完整的文档问答系统。6.1 文档加载与处理from langchain_community.document_loaders import TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter # 加载文档 loader TextLoader(data/sample.txt) documents loader.load() # 文档分割 text_splitter RecursiveCharacterTextSplitter( chunk_size1000, chunk_overlap200 ) splits text_splitter.split_documents(documents) print(f原始文档数: {len(documents)}) print(f分割后文档块数: {len(splits)})6.2 向量化与存储from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import Chroma # 初始化嵌入模型 embeddings HuggingFaceEmbeddings( model_namesentence-transformers/all-MiniLM-L6-v2 ) # 创建向量数据库 vectorstore Chroma.from_documents( documentssplits, embeddingembeddings, persist_directory./vector_store ) print(向量数据库创建完成)6.3 检索与生成from langchain.chains import RetrievalQA from langchain_community.llms import Ollama # 初始化 LLM llm Ollama(modelllama3.1:8b) # 创建检索链 qa_chain RetrievalQA.from_chain_type( llmllm, retrievervectorstore.as_retriever(), return_source_documentsTrue ) # 提问测试 question 文档中提到了哪些重要概念 result qa_chain.invoke({query: question}) print(答案:, result[result]) print(参考文档:, result[source_documents][0].page_content[:200])6.4 RAG 效果验证方法测试1基础问答准确性输入文档中明确包含的问题预期模型能准确回答并引用相关文档判断标准答案与文档内容一致测试2超出文档范围的提问输入文档中未涉及的问题预期模型应说明无法回答或基于常识推理判断标准不产生误导性信息测试3多文档检索能力输入需要综合多个文档片段的问题预期模型能整合不同文档的信息判断标准答案完整且引用多个来源7. Agent 智能体实战Agent 是 LangChain 的高级功能能够让模型使用工具、规划任务步骤。7.1 基础工具调用 Agentfrom langchain.agents import AgentType, initialize_agent, load_tools from langchain_community.llms import Ollama # 初始化模型和工具 llm Ollama(modelllama3.1:8b) tools load_tools([serpapi, llm-math], llmllm) # 创建 Agent agent initialize_agent( tools, llm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, verboseTrue ) # 测试工具调用 result agent.run(目前北京的温度是多少如果是华氏度请转换成摄氏度。) print(Agent 执行结果:, result)7.2 自定义工具开发from langchain.agents import tool from datetime import datetime tool def get_current_time(timezone: str UTC) - str: 获取指定时区的当前时间 now datetime.now() if timezone CST: now now.astimezone() return now.strftime(%Y-%m-%d %H:%M:%S) # 使用自定义工具 custom_tools [get_current_time] agent_with_custom_tool initialize_agent( custom_tools, llm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, verboseTrue ) result agent_with_custom_tool.run(现在北京时间是多少) print(自定义工具执行结果:, result)7.3 多步骤任务规划from langchain.agents import AgentExecutor from langchain import hub from langchain.agents.format_scratchpad import format_log_to_str from langchain.agents.output_parsers import ReActSingleInputOutputParser # 加载预定义的 ReAct Prompt prompt hub.pull(hwchase17/react) # 创建支持多步骤的 Agent agent ( { input: lambda x: x[input], agent_scratchpad: lambda x: format_log_to_str(x[intermediate_steps]), } | prompt | llm | ReActSingleInputOutputParser() ) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue) # 执行复杂任务 complex_question 先搜索苹果公司的最新股价然后计算如果我投资10000美元现在价值多少 result agent_executor.invoke({input: complex_question}) print(多步骤任务结果:, result)8. 接口 API 与批量任务LangChain 应用可以轻松封装为 API 服务支持批量处理任务。8.1 FastAPI 接口封装from fastapi import FastAPI from pydantic import BaseModel from langchain.chains import RetrievalQA from langchain_community.vectorstores import Chroma app FastAPI() class QueryRequest(BaseModel): question: str top_k: int 3 class QueryResponse(BaseModel): answer: str sources: list[str] app.post(/query, response_modelQueryResponse) async def query_documents(request: QueryRequest): # 初始化检索链实际项目中应该全局初始化 embeddings HuggingFaceEmbeddings() vectorstore Chroma( persist_directory./vector_store, embedding_functionembeddings ) qa_chain RetrievalQA.from_chain_type( llmllm, retrievervectorstore.as_retriever(search_kwargs{k: request.top_k}), return_source_documentsTrue ) result qa_chain.invoke({query: request.question}) return QueryResponse( answerresult[result], sources[doc.page_content[:100] for doc in result[source_documents]] ) # 启动服务 # uvicorn main:app --reload --port 80008.2 批量任务处理import asyncio from concurrent.futures import ThreadPoolExecutor from langchain.schema import Document class BatchProcessor: def __init__(self, qa_chain, max_workers3): self.qa_chain qa_chain self.executor ThreadPoolExecutor(max_workersmax_workers) def process_single_question(self, question): 处理单个问题 try: result self.qa_chain.invoke({query: question}) return { question: question, answer: result[result], success: True } except Exception as e: return { question: question, error: str(e), success: False } def process_batch(self, questions): 批量处理问题列表 with self.executor as executor: results list(executor.map( self.process_single_question, questions )) return results # 使用示例 questions [ 什么是机器学习, 深度学习与机器学习有什么区别, 请解释神经网络的基本原理。 ] processor BatchProcessor(qa_chain) results processor.process_batch(questions) for result in results: status 成功 if result[success] else 失败 print(f问题: {result[question]} - 状态: {status})9. 资源占用与性能观察LangChain 应用性能主要取决于模型推理和向量检索两个环节。9.1 性能监控指标import time import psutil import GPUtil def monitor_performance(func): 性能监控装饰器 def wrapper(*args, **kwargs): start_time time.time() start_memory psutil.virtual_memory().used result func(*args, **kwargs) end_time time.time() end_memory psutil.virtual_memory().used print(f执行时间: {end_time - start_time:.2f}秒) print(f内存占用: {(end_memory - start_memory) / 1024 / 1024:.2f}MB) # 如果有 GPU监控 GPU 使用情况 try: gpus GPUtil.getGPUs() if gpus: print(fGPU 内存占用: {gpus[0].memoryUsed}MB) except: pass return result return wrapper # 使用性能监控 monitor_performance def optimized_qa_question(question): return qa_chain.invoke({query: question}) # 测试性能 result optimized_qa_question(测试问题)9.2 优化建议向量检索优化调整 chunk_size根据文档类型选择合适的分块大小使用更好的嵌入模型如 text-embedding-3-large添加元数据过滤根据文档类型、时间等过滤模型推理优化使用量化模型减少内存占用设置合理的 max_tokens 限制启用流式响应改善用户体验缓存优化对相同问题启用结果缓存使用 Redis 或 SQLite 作为缓存后端设置合理的缓存过期时间10. 常见问题与排查方法问题现象可能原因排查方式解决方案导入 langchain 报错版本冲突或依赖缺失检查 Python 版本和依赖重新创建虚拟环境按顺序安装依赖模型响应速度慢网络问题或模型过大检查网络连接和模型尺寸使用本地模型或优化 Prompt向量检索结果不相关分块策略不合适或嵌入模型效果差检查文档分块质量和相似度计算调整分块参数尝试不同嵌入模型Agent 工具调用失败工具配置错误或 API 密钥无效检查工具配置和 API 密钥验证工具依赖和权限设置内存占用过高文档过多或模型太大监控内存使用情况优化文档处理流程使用量化模型端口冲突多个服务使用相同端口检查端口占用情况更改服务端口或停止冲突进程10.1 依赖版本冲突解决# 检查当前安装的包版本 pip list | grep langchain # 解决冲突的方法 pip install --upgrade langchain-core pip install --force-reinstall langchain-community # 或者使用版本锁定 pip install langchain0.1.0 langchain-community0.0.1010.2 模型接入问题排查OpenAI API 连接问题import os from openai import OpenAI # 检查 API 密钥设置 client OpenAI(api_keyos.getenv(OPENAI_API_KEY)) try: response client.chat.completions.create( modelgpt-3.5-turbo, messages[{role: user, content: Hello}] ) print(API 连接成功) except Exception as e: print(fAPI 连接失败: {e})本地模型服务检查# 检查 Ollama 服务状态 curl http://localhost:11434/api/tags # 如果服务未启动 ollama serve 11. 最佳实践与使用建议11.1 项目结构规范my-langchain-app/ ├── config/ │ ├── __init__.py │ ├── settings.py # 配置管理 │ └── constants.py # 常量定义 ├── core/ │ ├── __init__.py │ ├── chains.py # 自定义 Chain │ └── tools.py # 自定义工具 ├── data/ │ ├── raw/ # 原始数据 │ └── processed/ # 处理后的数据 ├── models/ # 模型文件 ├── prompts/ # Prompt 模板 ├── tests/ # 测试用例 ├── utils/ # 工具函数 ├── main.py # 主程序 └── requirements.txt # 依赖列表11.2 配置管理最佳实践# config/settings.py import os from typing import Optional from pydantic_settings import BaseSettings class Settings(BaseSettings): # 模型配置 model_provider: str openai model_name: str gpt-3.5-turbo api_key: Optional[str] None # 向量数据库配置 vector_store_path: str ./vector_store embedding_model: str all-MiniLM-L6-v2 # 服务配置 host: str 127.0.0.1 port: int 8000 class Config: env_file .env settings Settings()11.3 安全与合规建议数据安全敏感信息不要硬编码在代码中使用环境变量管理 API 密钥对用户输入进行 sanitization 处理合规使用商业使用确保有模型服务授权遵守数据隐私法规GDPR、个人信息保护法等对生成内容添加人工审核环节性能优化为生产环境添加速率限制实现请求队列和负载均衡设置合理的超时时间和重试机制12. 总结与下一步通过本文的实战演练你应该已经掌握了 LangChain 的核心开发能力。最关键的是要理解三个核心模块的配合方式Prompt 工程决定模型的理解能力RAG 提供知识支撑Agent 实现复杂任务规划。建议按照以下步骤继续深入第一步巩固基础熟练使用 PromptTemplate 和 ChatPromptTemplate掌握文档加载、分割、向量化的完整流程理解 Agent 的工具调用机制第二步项目实践选择一个实际场景如个人知识库、智能客服实现端到端的完整功能添加性能监控和错误处理第三步进阶优化学习 LangGraph 实现更复杂的工作流探索自定义 Chain 和 Tool 的开发研究模型微调与 RAG 的配合使用最值得投入时间的是 RAG 系统的优化包括文档预处理质量、检索算法选择和结果重排序策略。这些优化能显著提升应用的实际效果。在实际部署时记得先从简单的功能开始验证逐步增加复杂度。遇到问题多查阅 LangChain 官方文档和社区讨论大多数常见问题都有现成的解决方案。