什么是 LangChain LangChain 是一个强大的开源框架,旨在帮助开发者快速构建和管理基于大语言模型(LLMs)的应用程序。随着自然语言处理技术的飞速发展,LLMs 在文本生成、对话系统、内容推荐等领域展现出巨大的潜力。然而,要充分利用这些强大的模型并整合到复杂的应用中,开发者需要处理许多复杂的任务,如上下文管理、调用外部工具和数据整合。LangChain 通过提供一套模块化、可扩展的工具,简化了这些过程。
LangChain 的核心目标是使开发者能够构建 “智能” 应用,这些应用可以理解上下文、动态调整和集成外部资源。
LangChain 的主要应用场景 1. 对话式 AI 通过记忆功能和高级提示优化,可以构建更智能、更自然的聊天机器人。
2. 信息抽取与总结 LangChain 可以处理长文档,提取关键信息并生成简洁摘要。
3. 搜索增强 结合搜索工具,构建支持实时信息检索的问答系统。
4. 多步骤工作流自动化 通过链和代理,可以创建复杂的自动化工作流,例如客户支持、教育内容生成等。
5. 多模态应用 结合图像、视频等其他数据源,构建更丰富的交互体验。
LangChain 的核心组件 LangChain 的设计是模块化的,以下是其主要组件:
1. 模型(Models) 这是应用的核心,用于生成或理解自然语言。LangChain 支持多种语言模型,包括但不限于 OpenAI、Hugging Face,以及其他开源和商业模型。开发者可以选择最适合的模型来满足特定需求。
2. 提示(Prompts) 提示(Prompts)是与语言模型交互的关键。LangChain 允许开发者设计、优化和动态构建提示,以确保更好的输出效果。它还支持模板化提示和参数化的动态生成。
3. 链(Chains) 链是 LangChain 的核心概念,用于将多个模型或功能模块组合成复杂的工作流。例如,一个典型的链可能包括:
先从用户输入中提取关键信息。
然后用提取的信息生成新的文本。
最后返回结构化的响应。
4. 记忆(Memory) LangChain 支持应用记忆功能,用于存储上下文信息。这在构建对话系统时尤为重要,因为它允许模型记住对话历史,从而提供更连贯的交互体验。
LangChain 支持与外部工具和 API 集成。例如,可以通过工具调用数据库、执行计算,甚至访问实时信息。此外,代理(Agents)允许模型根据上下文动态选择合适的工具。
安装 LangChain 在开始使用 LangChain 之前,需要先安装相关依赖。
1. 安装 LangChain 使用pip
安装 LangChain:
2. 安装支持的 LLM 依赖 例如,安装 OpenAI API 的依赖:
3. 其他依赖 根据具体需求安装其他库,例如:
1 2 pip install sqlalchemy pip install faiss
使用 1. Prompt Templates(提示模板)示例 用途 :定义一个可复用的提示模板,用于生成动态输入。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from langchain.prompts import PromptTemplatetemplate = """ 你是一位经验丰富的翻译官。 请将以下英文翻译成中文: "{text}" """ prompt = PromptTemplate( input_variables=["text" ], template=template, ) result = prompt.format (text="This is an example sentence." ) print (result)
2. Chains(链)示例 用途 :将多个逻辑步骤连接在一起,形成一个完整的任务流程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 from langchain.chains import LLMChainfrom langchain.prompts import PromptTemplatefrom langchain.llms import OpenAIprompt = PromptTemplate( input_variables=["topic" ], template="请为以下主题写一段简短的文章:{topic}" , ) llm = OpenAI(model_name="text-davinci-003" , api_key="your_openai_api_key" ) chain = LLMChain(llm=llm, prompt=prompt) response = chain.run("人工智能的未来" ) print (response)
3. Agents(智能体)示例 用途 :智能体根据工具动态决定解决问题的策略。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from langchain.agents import load_tools, initialize_agentfrom langchain.llms import OpenAIllm = OpenAI(model_name="text-davinci-003" , api_key="your_openai_api_key" ) tools = load_tools(["serpapi" , "llm-math" ], llm=llm) agent = initialize_agent(tools, llm, agent="zero-shot-react-description" , verbose=True ) response = agent.run("谁赢得了2018年世界杯冠军?17乘以23等于多少?" ) print (response)
4. Memory(记忆)示例 用途 :为会话保存上下文,使模型能在多轮对话中理解用户意图。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from langchain.chains import ConversationChainfrom langchain.memory import ConversationBufferMemoryfrom langchain.llms import OpenAImemory = ConversationBufferMemory() llm = OpenAI(model_name="text-davinci-003" , api_key="your_openai_api_key" ) conversation = ConversationChain(llm=llm, memory=memory, verbose=True ) response1 = conversation.predict(input ="你好,你是谁?" ) response2 = conversation.predict(input ="你还记得我们之前聊过什么吗?" ) print ("Response 1:" , response1)print ("Response 2:" , response2)
案例 案例 1:创建一个简单的问答系统 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 from langchain import OpenAI, PromptTemplatefrom langchain.chains import LLMChainllm = OpenAI(model_name="text-davinci-003" , api_key="your_openai_api_key" ) prompt = PromptTemplate( input_variables=["question" ], template="以下是一个问题:{question}。请提供详细回答。" ) qa_chain = LLMChain(llm=llm, prompt=prompt) question = "什么是LangChain?" answer = qa_chain.run(question=question) print ("回答:" , answer)
案例 2:多轮对话示例 1 2 3 4 5 6 7 8 9 10 11 12 from langchain.memory import ConversationBufferMemory llm = OpenAI(model_name="text-davinci-003" , api_key="your_openai_api_key" ) memory = ConversationBufferMemory() qa_chain = LLMChain(llm=llm, prompt=prompt, memory=memory) question1 = "LangChain有哪些核心组件?" print (qa_chain.run(question=question1)) question2 = "可以详细说说记忆模块吗?" print (qa_chain.run(question=question2))
案例 3: 结合外部数据源 1 2 3 4 5 6 7 8 9 10 from langchain.chains import SQLDatabaseChainfrom langchain.sql_database import SQLDatabasedb = SQLDatabase.from_uri("sqlite:///example.db" ) llm = OpenAI(model_name="text-davinci-003" , api_key="your_openai_api_key" ) db_chain = SQLDatabaseChain(llm=llm, database=db) query = "SELECT * FROM users WHERE age > 30;" print (db_chain.run(query))
案例 4:知识库问答 结合外部文档数据,实现基于知识库的问答系统:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 from langchain.document_loaders import TextLoaderfrom langchain.vectorstores import FAISSfrom langchain.chains import RetrievalQAfrom langchain.llms import OpenAIloader = TextLoader("knowledge_base.txt" ) documents = loader.load() vector_store = FAISS.from_documents(documents) llm = OpenAI(model="text-davinci-003" , temperature=0.7 , api_key="your_openai_api_key" ) qa_chain = RetrievalQA(llm=llm, retriever=vector_store.as_retriever()) response = qa_chain.run("这篇文档的主要内容是什么?" ) print (response)