LangChain之实战指南LangChain 是一个强大的框架用于构建基于大语言模型(LLM)的应用程序。本指南将通过实际案例展示如何使用 LangChain 构建各种实用的应用程序。目录案例1完成一次问答案例2通过谷歌搜索并返回答案案例3对超长文本进行总结构建本地知识库问答机器人构建本地Chroma向量索引数据库实战基于 Langchain私有模型构建一个RAG 聊天机器人实战基于 Langchain公有模型构建一个RAG 聊天机器人基于 LangChain 构建的开源应用案例1完成一次问答这是最基础的 LangChain 应用展示如何与语言模型进行简单的问答交互。实现代码fromlangchain.llmsimportOpenAIfromlangchain.chainsimportLLMChainfromlangchain.promptsimportPromptTemplate# 初始化语言模型llmOpenAI(temperature0.7)# 创建提示模板promptPromptTemplate(input_variables[question],template请回答以下问题{question})# 创建链chainLLMChain(llmllm,promptprompt)# 执行问答question什么是人工智能responsechain.run(question)print(response)代码解析模型初始化使用 OpenAI 模型temperature 参数控制输出的随机性提示模板定义输入格式使模型理解任务链创建将模型和提示组合成可重用的链执行传入问题并获取回答实际应用场景客户服务自动问答教育辅导系统基础信息查询案例2通过谷歌搜索并返回答案本案例展示如何集成外部工具谷歌搜索来增强语言模型的能力获取实时信息。实现代码fromlangchain.agentsimportload_tools,initialize_agent,AgentTypefromlangchain.llmsimportOpenAI# 初始化语言模型llmOpenAI(temperature0)# 加载工具包括谷歌搜索toolsload_tools([google-search,llm-math],llmllm)# 初始化代理agentinitialize_agent(tools,llm,agentAgentType.ZERO_SHOT_REACT_DESCRIPTION,verboseTrue)# 执行查询query2023年诺贝尔物理学奖获得者是谁responseagent.run(query)print(response)代码解析工具加载集成谷歌搜索和数学计算工具代理初始化创建能够自主选择工具的代理查询执行代理根据问题决定使用搜索工具获取最新信息实际应用场景实时信息查询新闻摘要生成市场研究分析案例3对超长文本进行总结处理长文本时需要将文本分块处理然后合并结果。本案例展示如何实现长文本总结。实现代码fromlangchain.chains.summarizeimportload_summarize_chainfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain.llmsimportOpenAIfromlangchain.docstore.documentimportDocument# 初始化模型llmOpenAI(temperature0)# 长文本示例long_text [这里放置一个非常长的文本可以是文章、报告或书籍章节] ...实际使用时替换为真实长文本... # 文本分割器text_splitterRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap100)# 分割文本textstext_splitter.split_text(long_text)docs[Document(page_contentt)fortintexts]# 创建总结链chainload_summarize_chain(llm,chain_typemap_reduce)# 执行总结summarychain.run(docs)print(summary)代码解析文本分割将长文本分割为可处理的块文档创建将文本块转换为 LangChain 文档格式链类型使用 map-reduce 策略处理多个文本块总结生成合并各部分的总结形成最终结果实际应用场景学术论文总结法律文档分析会议记录整理构建本地知识库问答机器人基于本地文档构建问答系统使模型能够回答特定领域的问题。实现代码fromlangchain.embeddings.openaiimportOpenAIEmbeddingsfromlangchain.vectorstoresimportFAISSfromlangchain.text_splitterimportCharacterTextSplitterfromlangchain.chainsimportRetrievalQAfromlangchain.llmsimportOpenAI# 初始化模型和嵌入llmOpenAI()embeddingsOpenAIEmbeddings()# 加载本地文档withopen(your_document.txt,r)asf:raw_textf.read()# 文本分割text_splitterCharacterTextSplitter(separator\n,chunk_size1000,chunk_overlap200,length_functionlen)textstext_splitter.split_text(raw_text)# 创建向量数据库docsearchFAISS.from_texts(texts,embeddings)# 创建问答链qa_chainRetrievalQA.from_chain_type(llmllm,chain_typestuff,retrieverdocsearch.as_retriever())# 执行问答question根据文档主要结论是什么answerqa_chain.run(question)print(answer)代码解析文档加载读取本地文本文件文本分割将文档分割为可处理的段落向量化将文本转换为向量表示相似性搜索根据问题找到相关文档片段答案生成基于检索到的内容生成答案实际应用场景企业内部知识库产品文档问答技术支持系统构建本地Chroma向量索引数据库Chroma 是一个开源的向量数据库适合本地部署和轻量级应用。实现代码fromlangchain.embeddingsimportOpenAIEmbeddingsfromlangchain.vectorstoresimportChromafromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain.document_loadersimportTextLoader# 初始化嵌入embeddingsOpenAIEmbeddings()# 加载文档loaderTextLoader(your_document.txt)documentsloader.load()# 文本分割text_splitterRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap0)textstext_splitter.split_documents(documents)# 创建Chroma向量数据库vector_dbChroma.from_documents(documentstexts,embeddingembeddings,persist_directory./chroma_db)# 持久化数据库vector_db.persist()# 查询示例query你的查询问题docsvector_db.similarity_search(query)print(docs[0].page_content)代码解析文档加载使用 TextLoader 加载文本文件文本分割将文档分割为适当大小的块数据库创建初始化 Chroma 向量数据库持久化保存数据库到本地文件系统相似性查询根据查询向量找到最相似的文档实际应用场景个人知识管理小团队文档检索离线问答系统实战基于 Langchain私有模型构建一个RAG 聊天机器人使用本地部署的私有大语言模型结合检索增强生成(RAG)技术构建聊天机器人。实现代码fromlangchain.llmsimportHuggingFacePipelinefromlangchain.embeddingsimportHuggingFaceEmbeddingsfromlangchain.vectorstoresimportChromafromlangchain.chainsimportRetrievalQAfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromtransformersimportAutoTokenizer,AutoModelForCausalLM,pipeline# 初始化私有模型model_nameyour-private-model-name# 例如 microsoft/DialoGPT-mediumtokenizerAutoTokenizer.from_pretrained(model_name)modelAutoModelForCausalLM.from_pretrained(model_name)# 创建HuggingFace管道pipepipeline(text-generation,modelmodel,tokenizertokenizer,max_length1000,temperature0.7)# 初始化LangChain LLMllmHuggingFacePipeline(pipelinepipe)# 初始化嵌入模型embeddingsHuggingFaceEmbeddings(model_namesentence-transformers/all-MiniLM-L6-v2)# 加载和分割文档loaderTextLoader(knowledge_base.txt)documentsloader.load()text_splitterRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap200)textstext_splitter.split_documents(documents)# 创建向量数据库vector_dbChroma.from_documents(texts,embeddings)# 创建RAG链qa_chainRetrievalQA.from_chain_type(llmllm,chain_typestuff,retrievervector_db.as_retriever(search_kwargs{k:3}))# 聊天循环print(RAG聊天机器人已启动输入退出结束对话。)whileTrue:user_inputinput(你: )ifuser_input.lower()退出:breakresponseqa_chain.run(user_input)print(f机器人:{response})代码解析私有模型加载使用 HuggingFace 加载本地部署的模型管道创建将模型转换为 LangChain 可用的格式嵌入模型使用本地嵌入模型进行向量化RAG架构结合检索和生成提高回答准确性交互循环实现持续对话功能实际应用场景企业内部智能助手领域专家系统数据隐私要求高的场景实战基于 Langchain公有模型构建一个RAG 聊天机器人使用公有云API如OpenAI的大语言模型结合检索增强生成技术构建聊天机器人。实现代码fromlangchain.llmsimportOpenAIfromlangchain.embeddings.openaiimportOpenAIEmbeddingsfromlangchain.vectorstoresimportChromafromlangchain.chainsimportConversationalRetrievalChainfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain.document_loadersimportPyPDFLoader,DirectoryLoaderfromlangchain.memoryimportConversationBufferMemory# 初始化OpenAI模型llmOpenAI(temperature0.7)embeddingsOpenAIEmbeddings()# 加载文档支持多种格式loaderDirectoryLoader(./documents,glob**/*.pdf,loader_clsPyPDFLoader)documentsloader.load()# 文本分割text_splitterRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap200)textstext_splitter.split_documents(documents)# 创建向量数据库vector_dbChroma.from_documents(texts,embeddings,persist_directory./chroma_db)vector_db.persist()# 创建记忆组件memoryConversationBufferMemory(memory_keychat_history,return_messagesTrue)# 创建对话式RAG链qa_chainConversationalRetrievalChain.from_llm(llmllm,retrievervector_db.as_retriever(),memorymemory)# 聊天循环print(RAG聊天机器人已启动输入退出结束对话。)chat_history[]whileTrue:user_inputinput(你: )ifuser_input.lower()退出:breakresultqa_chain({question:user_input,chat_history:chat_history})answerresult[answer]chat_history.append((user_input,answer))print(f机器人:{answer})代码解析文档加载支持多种格式PDF、TXT等的批量加载向量存储使用 OpenAI 嵌入和 Chroma 数据库对话记忆维护对话历史支持上下文理解检索增强结合文档检索和生成能力多轮对话支持连续对话保持上下文连贯性实际应用场景客户服务机器人教育辅导系统个人知识助手基于 LangChain 构建的开源应用1. BabyAGIGitHub: https://github.com/yoheinakajima/babyagi一个自主AI代理能够生成任务、执行任务并创建新任务形成持续的执行循环。核心功能:任务生成与优先级排序自主执行与结果评估基于结果的后续任务创建2. Auto-GPTGitHub: https://github.com/Significant-Gravitas/Auto-GPT自主AI代理能够实现复杂目标无需人类干预。核心功能:互联网访问与搜索文件系统操作长期记忆与规划多步骤任务执行3. ChatGPT-Next-WebGitHub: https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web基于LangChain的ChatGPT网页客户端支持多模型和自定义配置。核心功能:多模型支持自定义提示管理对话历史保存响应流式输出4. LangChain-ChatchatGitHub: https://github.com/chatchat-space/Langchain-Chatchat基于LangChain和ChatGLM等本地模型的中文知识库问答应用。核心功能:本地模型支持知识库管理多种文件格式支持Web界面交互5. PrivateGPTGitHub: https://github.com/imartinez/privateGPT完全私密的AI问答系统无需互联网连接所有数据本地处理。核心功能:100%本地运行多种文档格式支持向量数据库集成隐私保护6. LlamaIndexGitHub: https://github.com/run-llama/llama_index虽然现在是独立项目但最初基于LangChain专注于数据连接和检索增强生成。核心功能:多数据源连接高级检索策略结构化数据查询知识图谱集成7. GPT ResearcherGitHub: https://github.com/assafelovic/gpt-researcher自主AI代理能够进行多步骤研究生成详细报告。核心功能:多源信息收集研究任务规划报告自动生成引用和参考文献管理8. AgentGPTGitHub: https://github.com/reworkd/AgentGPT在浏览器中部署和自定义AI代理的平台。核心功能:可视化代理配置目标定义与分解执行过程监控结果展示与分享总结LangChain 为构建基于大语言模型的应用提供了强大的框架和工具。通过本指南中的案例我们可以看到灵活性从简单问答到复杂RAG系统LangChain都能适应可扩展性支持多种模型、工具和数据源实用性涵盖从个人应用到企业级解决方案的各种场景社区活跃丰富的开源应用和持续的功能更新