LangChain实战:7天掌握RAG与Ollama本地大模型部署

📅 发布时间:2026/7/30 3:52:59
LangChain实战:7天掌握RAG与Ollama本地大模型部署 LangChain开发实战零基础入门教程7天从RAG应用到Ollama本地大模型部署在AI应用开发领域很多开发者面临着一个共同困境想要快速构建智能应用却被复杂的技术栈和分散的学习资料困扰。LangChain作为当前最流行的AI应用开发框架能够有效解决这一问题。本文将带你用7天时间系统掌握LangChain核心技能从基础的RAG知识库构建到Ollama本地大模型部署最后实现Agent智能体开发。无论你是刚接触AI开发的初学者还是希望将AI能力集成到现有项目的开发者本教程都提供了完整的实操路径。我们将通过具体的代码示例和项目实战确保每个环节都能直接运行和验证。1. LangChain基础概念与环境搭建1.1 LangChain是什么及其核心价值LangChain是一个用于开发由语言模型驱动的应用程序的框架。它提供了一套工具和组件简化了与大模型交互的复杂性。LangChain的核心价值在于组件化设计将复杂任务拆分为可重用的组件如模型调用、提示模板、记忆管理等链式操作通过链Chain将多个组件连接起来实现复杂的工作流程多模型支持兼容OpenAI、Azure、本地部署等多种大模型生态丰富拥有活跃的社区和大量的扩展组件在实际项目中LangChain能够帮助开发者快速构建问答系统、文档分析、代码生成等AI应用大大降低开发门槛。1.2 环境准备与版本兼容性在开始LangChain开发前需要确保环境配置正确。以下是推荐的环境配置操作系统要求Windows 10/11、macOS 10.15、Ubuntu 18.04Python 3.8-3.11版本推荐Python 3.9核心依赖安装# 创建虚拟环境 python -m venv langchain_env source langchain_env/bin/activate # Linux/macOS # 或 langchain_env\Scripts\activate # Windows # 安装LangChain核心包 pip install langchain0.1.0 # 安装社区扩展组件 pip install langchain-community0.0.10 # 安装文本分割和向量化工具 pip install chromadb0.4.15 tiktoken # 安装Web框架用于演示 pip install fastapi0.104.1 uvicorn0.24.0版本兼容性说明 当前LangChain生态版本迭代较快建议保持版本一致性。如果遇到兼容性问题可以查看官方文档的版本对应关系。特别要注意的是langchain-core、langchain-community等组件的版本需要与主包匹配。1.3 开发工具配置推荐使用VS Code或PyCharm作为开发环境安装Python扩展和必要的调试工具。配置好代码自动补全和语法检查能够显著提升开发效率。2. LangChain核心组件详解2.1 模型组件ModelsLangChain支持多种类型的模型包括LLM大语言模型和ChatModel对话模型。以下是基本用法示例from langchain.llms import OpenAI from langchain.chat_models import ChatOpenAI from langchain.schema import HumanMessage # 使用OpenAI模型需要API密钥 llm OpenAI(openai_api_keyyour-api-key) chat_model ChatOpenAI(openai_api_keyyour-api-key) # 基本文本生成 text 请用一句话介绍人工智能 result llm(text) print(result) # 对话模式 messages [HumanMessage(content你好请介绍一下你自己)] chat_result chat_model(messages) print(chat_result.content)对于本地部署的模型LangChain也提供了很好的支持我们将在Ollama部分详细讲解。2.2 提示模板Prompt Templates提示模板是LangChain中的重要概念它帮助标准化与大模型的交互格式from langchain.prompts import PromptTemplate # 创建简单的提示模板 template 你是一个专业的{role}请根据以下问题提供详细的回答 问题{question} 回答 prompt PromptTemplate( input_variables[role, question], templatetemplate ) # 使用模板 formatted_prompt prompt.format(role技术专家, question什么是机器学习) print(formatted_prompt) # 结合模型使用 from langchain.chains import LLMChain chain LLMChain(llmllm, promptprompt) result chain.run(roleAI工程师, question解释深度学习的基本原理) print(result)2.3 记忆管理Memory记忆组件使模型能够记住对话历史实现多轮对话from langchain.memory import ConversationBufferMemory memory ConversationBufferMemory() memory.chat_memory.add_user_message(我喜欢编程) memory.chat_memory.add_ai_message(那很棒编程是很有价值的技能) # 在链中使用记忆 from langchain.chains import ConversationChain conversation ConversationChain( llmllm, memorymemory, verboseTrue ) response conversation.predict(input你能给我一些学习建议吗) print(response)3. RAG知识库构建实战3.1 RAG技术原理与应用场景RAGRetrieval-Augmented Generation检索增强生成技术通过结合检索器和生成器让大模型能够基于特定知识库生成更准确的回答。其核心优势包括知识实时性可以基于最新文档生成回答不受模型训练数据时间限制准确性提升基于检索到的相关文档生成内容减少幻觉现象可控性强可以控制知识来源确保回答符合特定领域要求典型应用场景包括企业知识库问答、技术文档查询、法律条文检索等。3.2 文档加载与处理构建RAG系统的第一步是文档加载和处理from langchain.document_loaders import TextLoader, PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter # 加载文档 loader PyPDFLoader(example.pdf) documents loader.load() # 文本分割 text_splitter RecursiveCharacterTextSplitter( chunk_size1000, chunk_overlap200 ) split_docs text_splitter.split_documents(documents) print(f原始文档数{len(documents)}) print(f分割后文档块数{len(split_docs)})3.3 向量化存储与检索将文档转换为向量并建立检索系统from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma # 创建嵌入模型 embeddings OpenAIEmbeddings(openai_api_keyyour-api-key) # 创建向量数据库 vectorstore Chroma.from_documents( documentssplit_docs, embeddingembeddings, persist_directory./chroma_db ) # 相似性检索 query 什么是人工智能的核心技术 docs vectorstore.similarity_search(query, k3) for i, doc in enumerate(docs): print(f文档 {i1}:) print(doc.page_content[:200] ...) print(- * 50)3.4 完整RAG系统实现将检索器与生成器结合构建完整的RAG流水线from langchain.chains import RetrievalQA from langchain.prompts import PromptTemplate # 自定义提示模板 qa_prompt PromptTemplate( template基于以下上下文信息请回答问题。如果上下文信息不足以回答问题请说明你不知道。 上下文{context} 问题{question} 回答, input_variables[context, question] ) # 创建RAG链 qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, retrievervectorstore.as_retriever(), chain_type_kwargs{prompt: qa_prompt}, return_source_documentsTrue ) # 使用RAG系统 question 请详细解释机器学习的主要类型 result qa_chain({query: question}) print(回答, result[result]) print(\n参考文档) for doc in result[source_documents]: print(f- {doc.metadata.get(source, 未知)}: {doc.page_content[:100]}...)4. Ollama本地大模型部署4.1 Ollama简介与优势Ollama是一个强大的本地大模型部署工具主要优势包括本地部署数据不出本地保障隐私安全资源友好支持CPU和GPU推理适应不同硬件配置模型丰富支持Llama、Mistral、Gemma等多种开源模型简单易用命令行工具部署配置简单4.2 Ollama安装与配置安装步骤# Linux/macOS 安装 curl -fsSL https://ollama.ai/install.sh | sh # Windows 安装通过官网下载安装包 # 访问 https://ollama.ai/download 下载安装程序国内镜像加速 由于网络原因国内用户下载模型可能较慢可以使用镜像源# 设置镜像环境变量Linux/macOS export OLLAMA_HOST0.0.0.0 export OLLAMA_ORIGINS* # 或者使用国内镜像源下载模型 OLLAMA_MODELShttps://mirror.ghproxy.com/ollama ollama pull llama2:7b4.3 常用模型部署部署适合本地运行的中文模型# 下载并运行Llama2中文优化版 ollama pull llama2-chinese:7b ollama run llama2-chinese:7b # 或者使用更轻量的模型 ollama pull gemma:2b ollama run gemma:2b4.4 LangChain与Ollama集成将Ollama本地模型集成到LangChain应用中from langchain.llms import Ollama from langchain.callbacks.manager import CallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler # 创建Ollama LLM实例 llm Ollama( modelllama2:7b, callback_managerCallbackManager([StreamingStdOutCallbackHandler()]) ) # 测试模型 response llm(请用中文回答人工智能的未来发展趋势是什么) print(response) # 结合提示模板使用 from langchain.prompts import ChatPromptTemplate template 你是一个AI助手请用专业但易懂的方式回答以下问题 问题{question} 回答 prompt ChatPromptTemplate.from_template(template) chain prompt | llm result chain.invoke({question: 解释神经网络的基本原理}) print(result)5. Agent智能体开发进阶5.1 Agent核心概念与类型Agent是LangChain中的高级组件能够根据目标自主选择工具和执行动作。主要类型包括Zero-shot ReAct Agent基于ReAct框架不需要示例就能执行任务Conversational Agent专为对话场景优化支持多轮交互Plan-and-Execute Agent先制定计划再执行适合复杂任务5.2 工具Tools开发与集成Agent的核心能力来自于工具的使用from langchain.agents import tool from datetime import datetime import requests tool def get_current_time(): 获取当前时间 return datetime.now().strftime(%Y-%m-%d %H:%M:%S) tool def get_weather(city: str) - str: 获取指定城市的天气信息 # 这里使用模拟数据实际项目中可以接入天气API weather_data { 北京: 晴15°C, 上海: 多云18°C, 深圳: 雨22°C } return weather_data.get(city, 暂未找到该城市天气信息) # 工具测试 print(get_current_time.invoke({})) print(get_weather.invoke({city: 北京}))5.3 构建完整Agent系统结合工具和模型构建完整的Agentfrom langchain.agents import initialize_agent, AgentType from langchain.memory import ConversationBufferMemory # 准备工具列表 tools [get_current_time, get_weather] # 创建记忆组件 memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue) # 初始化Agent agent initialize_agent( tools, llm, agentAgentType.CONVERSATIONAL_REACT_DESCRIPTION, memorymemory, verboseTrue, handle_parsing_errorsTrue ) # 测试Agent result agent.run(现在北京天气怎么样) print(result) # 多轮对话测试 result2 agent.run(那现在的时间是多少) print(result2)5.4 高级Agent应用自主任务执行开发能够自主规划执行复杂任务的Agentfrom langchain.agents import load_tools from langchain.agents import AgentExecutor from langchain.agents.format_scratchpad import format_log_to_str from langchain.agents.output_parsers import ReActSingleInputOutputParser # 加载更多工具 tools load_tools([serpapi, llm-math], llmllm) # 构建高级Agent agent initialize_agent( tools, llm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, verboseTrue, max_iterations3, early_stopping_methodgenerate ) # 复杂任务执行 complex_task 请执行以下任务 1. 搜索最新的AI技术新闻 2. 总结主要发展趋势 3. 分析对行业的影响 result agent.run(complex_task) print(result)6. 项目实战企业知识库问答系统6.1 项目需求分析与设计构建一个完整的企业内部知识库问答系统需求包括支持多种文档格式PDF、Word、TXT实现准确的文档检索和答案生成支持多轮对话和历史记录提供Web界面方便使用6.2 系统架构设计企业知识库问答系统架构 1. 文档处理层文档加载、文本分割、向量化 2. 存储层向量数据库、对话历史存储 3. 服务层RAG检索、LLM生成、Agent调度 4. 接口层REST API、Web界面6.3 核心代码实现文档处理模块import os from langchain.document_loaders import ( PyPDFLoader, Docx2txtLoader, TextLoader ) class DocumentProcessor: def __init__(self, chunk_size1000, chunk_overlap200): self.text_splitter RecursiveCharacterTextSplitter( chunk_sizechunk_size, chunk_overlapchunk_overlap ) def load_documents(self, directory_path): 加载目录下的所有文档 documents [] for filename in os.listdir(directory_path): file_path os.path.join(directory_path, filename) if filename.endswith(.pdf): loader PyPDFLoader(file_path) elif filename.endswith(.docx): loader Docx2txtLoader(file_path) elif filename.endswith(.txt): loader TextLoader(file_path) else: continue docs loader.load() documents.extend(docs) return self.text_splitter.split_documents(documents)知识库管理模块class KnowledgeBase: def __init__(self, persist_directory./knowledge_db): self.embeddings OpenAIEmbeddings() self.persist_directory persist_directory self.vectorstore None def build_knowledge_base(self, documents): 构建知识库 self.vectorstore Chroma.from_documents( documentsdocuments, embeddingself.embeddings, persist_directoryself.persist_directory ) return self.vectorstore def get_retriever(self, k5): 获取检索器 if self.vectorstore is None: # 加载已有知识库 self.vectorstore Chroma( persist_directoryself.persist_directory, embedding_functionself.embeddings ) return self.vectorstore.as_retriever(search_kwargs{k: k})问答服务模块class QAService: def __init__(self, knowledge_base): self.knowledge_base knowledge_base self.llm Ollama(modelllama2:7b) self.memory ConversationBufferMemory( memory_keychat_history, return_messagesTrue ) # 创建问答链 self.qa_chain RetrievalQA.from_chain_type( llmself.llm, chain_typestuff, retrieverself.knowledge_base.get_retriever(), memoryself.memory, return_source_documentsTrue ) def ask_question(self, question): 回答问题 result self.qa_chain({query: question}) return { answer: result[result], sources: [ { content: doc.page_content, metadata: doc.metadata } for doc in result[source_documents] ] }6.4 Web界面集成使用FastAPI创建Web服务from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel app FastAPI(title企业知识库问答系统) # CORS配置 app.add_middleware( CORSMiddleware, allow_origins[*], allow_methods[*], allow_headers[*], ) class QuestionRequest(BaseModel): question: str class QuestionResponse(BaseModel): answer: str sources: list # 全局服务实例 qa_service None app.on_event(startup) async def startup_event(): global qa_service # 初始化知识库和服务 processor DocumentProcessor() documents processor.load_documents(./knowledge_docs) kb KnowledgeBase() kb.build_knowledge_base(documents) qa_service QAService(kb) app.post(/ask, response_modelQuestionResponse) async def ask_question(request: QuestionRequest): try: result qa_service.ask_question(request.question) return QuestionResponse(**result) except Exception as e: raise HTTPException(status_code500, detailstr(e)) if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)7. 常见问题与优化方案7.1 环境配置问题排查问题1依赖冲突解决方案使用虚拟环境确保版本兼容性 pip freeze requirements.txt # 导出依赖 pip install -r requirements.txt # 重新安装问题2Ollama连接失败解决方案检查Ollama服务状态 ollama serve # 启动服务 netstat -an | grep 11434 # 检查端口7.2 RAG系统优化技巧检索质量优化调整chunk大小和重叠度使用更好的嵌入模型实现多路检索关键词向量生成质量优化设计更好的提示模板实现重排序机制添加后处理步骤# 改进的检索器配置 def create_advanced_retriever(vectorstore): from langchain.retrievers import ContextualCompressionRetriever from langchain.retrievers.document_compressors import LLMChainExtractor compressor LLMChainExtractor.from_llm(llm) compression_retriever ContextualCompressionRetriever( base_compressorcompressor, base_retrievervectorstore.as_retriever() ) return compression_retriever7.3 性能优化方案缓存优化from langchain.cache import InMemoryCache from langchain.globals import set_llm_cache # 启用缓存提升性能 set_llm_cache(InMemoryCache())批量处理优化# 批量处理文档提升效率 def batch_process_documents(documents, batch_size10): results [] for i in range(0, len(documents), batch_size): batch documents[i:ibatch_size] # 处理批次 processed_batch process_batch(batch) results.extend(processed_batch) return results8. 生产环境部署建议8.1 安全考虑API密钥管理使用环境变量或密钥管理服务访问控制实现身份验证和授权机制输入验证对用户输入进行严格过滤和验证日志审计记录所有操作日志便于审计8.2 性能监控建立监控体系跟踪系统性能响应时间监控错误率统计资源使用情况用户行为分析8.3 扩展性设计微服务架构 将系统拆分为多个独立服务便于扩展和维护文档处理服务向量检索服务LLM推理服务前端交互服务负载均衡 对于高并发场景部署多个实例并使用负载均衡器。通过本教程的系统学习你已经掌握了LangChain开发的核心技能。从基础概念到项目实战从RAG构建到Agent开发这些知识将为你在AI应用开发领域奠定坚实基础。建议在实际项目中不断实践和优化逐步提升技术水平。