15天学会AI应用开发(十四)搭建LangChain的开发环境
15天学会AI应用开发(十四)搭建LangChain的开发环境
大家好,我是你们的技术博主。今天,我们进入“15天学会AI应用开发”系列的第十四天。在前面的章节中,我们学习了Python基础、API调用、以及一些AI模型的基本使用。现在,是时候把这些知识整合起来,进入一个更强大的框架——LangChain。LangChain是一个用于构建基于大语言模型(LLM)的应用程序的框架,它简化了与LLM的交互、链式调用、以及集成外部工具的过程。今天,我们就来搭建LangChain的开发环境,并运行第一个示例。## 什么是LangChain?简单来说,LangChain是一个“万能工具箱”,它帮你把各种AI模型(如OpenAI的GPT、Anthropic的Claude等)和外部数据源(如数据库、文档、API)连接起来。比如,你想做一个能自动回答公司内部文档问题的聊天机器人,LangChain可以帮你:1. 加载文档:从PDF、网页等读取内容。2. 分割文本:把长文档切成小块,方便处理。3. 嵌入向量:把文本转换成机器能理解的数字形式。4. 存储和检索:用向量数据库(如Chroma)保存这些向量,并快速找到相关文档。5. 生成回答:结合大模型,生成基于上下文的答案。这些步骤在LangChain中被称为“链”(Chain),你可以像搭积木一样组合它们。今天,我们先搭建环境,确保一切就绪。## 环境准备在开始之前,确保你的电脑上已经安装了Python(推荐3.8或更高版本)。如果你还没有Python,可以去python.org下载安装。另外,你需要一个代码编辑器,比如VS Code或PyCharm。### 步骤1:创建虚拟环境(推荐)为了避免依赖冲突,我们创建一个独立的虚拟环境。打开终端(Windows用CMD或PowerShell,Mac/Linux用Terminal),运行:bash# 创建名为langchain_env的虚拟环境python -m venv langchain_env# 激活虚拟环境# Windows:langchain_env\Scripts\activate# Mac/Linux:source langchain_env/bin/activate激活后,终端前面会显示(langchain_env),表示我们在虚拟环境中。### 步骤2:安装LangChain和依赖库LangChain的核心库和扩展库需要安装。我们还需要一个LLM后端,比如OpenAI的API。这里以OpenAI为例(你需要有OpenAI的API密钥)。运行以下命令:bashpip install langchain langchain-openai chromadb pypdf- langchain:核心框架。- langchain-openai:让LangChain支持OpenAI模型。- chromadb:向量数据库,用于存储文档嵌入。- pypdf:用于读取PDF文件(后续示例需要)。安装完成后,验证一下:pythonimport langchainprint(langchain.__version__)如果输出类似0.3.0的版本号,说明安装成功。## 第一个示例:简单问答链现在,我们来写一个最简单的LangChain程序:它接收用户问题,然后用LLM(这里用OpenAI的GPT-4)直接回答。注意:你需要有OpenAI API密钥,并且设置环境变量OPENAI_API_KEY。你可以通过以下方式设置:bash# 在终端设置(临时)export OPENAI_API_KEY="你的密钥"# 或者在代码中设置(不推荐,但方便测试)import osos.environ["OPENAI_API_KEY"] = "你的密钥"### 代码示例1:直接问答python# 导入必要的库from langchain_openai import ChatOpenAIfrom langchain.schema import HumanMessage# 初始化一个ChatOpenAI模型,使用GPT-4(或GPT-3.5-turbo)# temperature控制创造性,0表示确定性高llm = ChatOpenAI(model="gpt-4", temperature=0)# 创建一个用户消息user_message = HumanMessage(content="请用中文解释什么是LangChain?")# 调用模型获取回答response = llm.invoke([user_message])# 打印回答内容print("AI回答:", response.content)代码说明:- ChatOpenAI是LangChain对OpenAI聊天模型的封装。- HumanMessage表示用户输入的消息。- invoke方法执行模型调用,返回一个AIMessage对象,其中content包含文本回答。运行这段代码,你会看到类似这样的输出(具体内容取决于模型):AI回答: LangChain是一个用于构建基于大语言模型(LLM)的应用程序的框架。它提供了模块化组件,如模型、提示、链、代理等,帮助开发者轻松集成LLM与外部数据、工具和API,实现复杂的任务自动化。这个例子虽然简单,但展示了LangChain的核心思想:用统一的接口调用LLM,而不需要关心底层的HTTP请求细节。## 第二个示例:带文档检索的问答链接下来,我们做一个更实用的示例:从PDF文件中提取信息,然后基于这些信息回答问题。假设你有一个PDF文件sample.pdf(内容可以是任何主题,比如产品说明书),我们想让AI只根据这个文档的内容来回答。### 代码示例2:RAG(检索增强生成)链python# 导入所需模块from langchain_community.document_loaders import PyPDFLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain_openai import OpenAIEmbeddingsfrom langchain_community.vectorstores import Chromafrom langchain.chains import RetrievalQAfrom langchain_openai import ChatOpenAI# 步骤1:加载PDF文档loader = PyPDFLoader("sample.pdf") # 确保文件在当前目录documents = loader.load()# 步骤2:分割文档为小块(每个块500字符,重叠50字符)text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50)chunks = text_splitter.split_documents(documents)# 步骤3:创建嵌入模型(将文本转为向量)embeddings = OpenAIEmbeddings()# 步骤4:将文档块存入Chroma向量数据库# 这里使用persist_directory参数,以便持久化存储vectorstore = Chroma.from_documents( documents=chunks, embedding=embeddings, persist_directory="./chroma_db" # 存储目录)# 步骤5:创建检索器(从向量库中查找相关文档)retriever = vectorstore.as_retriever(search_kwargs={"k": 2}) # 返回最相关的2个块# 步骤6:初始化LLMllm = ChatOpenAI(model="gpt-4", temperature=0)# 步骤7:构建RetrievalQA链qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", # 将检索到的文档块“塞入”提示 retriever=retriever)# 步骤8:提问query = "sample.pdf中提到了哪些关键特性?"answer = qa_chain.invoke(query)print("基于文档的回答:", answer['result'])# 清理:关闭向量数据库连接(可选)vectorstore.delete_collection()代码说明:- PyPDFLoader从PDF读取内容。- RecursiveCharacterTextSplitter将长文本分割成小块,避免超出模型上下文长度。- OpenAIEmbeddings计算文本的嵌入向量(需要API)。- Chroma是一个轻量级向量数据库,from_documents方法自动创建索引。- RetrievalQA是LangChain内置的检索问答链,它先检索相关文档,再用LLM生成答案。- invoke返回一个字典,result键包含最终回答。运行这个代码前,请确保:1. 有一个名为sample.pdf的文件在当前目录。2. API密钥已设置。如果一切顺利,你会看到类似这样的输出:基于文档的回答: 根据文档,该产品的关键特性包括:高能效比、智能温控系统、多模式运行选项,以及远程控制功能。如果没有PDF文件,也可以临时创建一个简单的文本文件,用TextLoader代替(来自langchain_community.document_loaders)。## 常见问题与调试1. API密钥错误:如果报错AuthenticationError,检查OPENAI_API_KEY是否设置正确。2. 依赖冲突:如果安装失败,可以尝试升级pip:pip install --upgrade pip。3. PyPDFLoader找不到文件:确保PDF文件路径正确,或者使用绝对路径。4. 内存不足:如果PDF很大,可以减少chunk_size或只加载部分页面。## 总结今天,我们成功搭建了LangChain的开发环境,并运行了两个示例:- 直接问答:展示了LangChain如何封装LLM调用。- 带文档检索的问答:演示了RAG(检索增强生成)模式,这是LangChain的核心应用之一。通过这两个例子,你应该已经感受到了LangChain的便利:它把复杂的流程(加载、分割、嵌入、检索、生成)封装成简单的函数调用。在后续的课程中,我们将深入探讨如何自定义链、使用代理(Agent)调用外部工具(如搜索引擎、计算器),以及构建多模态应用。记住,实践是学习的最佳方式。试着修改参数、更换模型(比如用gpt-3.5-turbo),或者测试自己的PDF文件。如果你遇到任何问题,欢迎在评论区留言,我们一起解决。下一课,我们将学习如何用LangChain创建自定义工具和代理,让你的AI应用“活”起来!
更多推荐




所有评论(0)