官方文档
简介
LangChain 是一个开源的 Python 库,旨在简化大语言模型(LLM)在应用程序中的使用和集成。它提供了一种结构化的方法来构建基于 LLM 的应用程序,并解决了许多常见的开发挑战。
LangChain 的核心组件
代理(Agents)
代理是 LangChain 中最强大的概念之一。代理可以感知环境、制定计划并采取行动,以完成复杂的任务。开发人员可以创建自定义的代理,让它们具有特定的能力和行为。代理可以用于构建聊天机器人、虚拟助手等应用程序。
提示(Prompts)
LangChain 提供了一种结构化的方法来设计提示,以获得更好的 LLM 输出。提示模板可以包含占位符,开发人员可以在运行时填充这些占位符。这使得提示更加灵活和可重复使用。
记忆(Memory)
LangChain 支持为代理或应用程序添加记忆功能。记忆可以存储对话历史、任务状态或其他上下文信息,并在未来的交互中使用。这有助于构建更连贯和上下文相关的应用程序。
文档(Documents)
LangChain 提供了处理和管理文档的抽象,包括加载、查询和嵌入文档。这使得开发人员可以更轻松地将 LLM 应用于各种类型的文本数据,如知识库、API 文档等。
工具(Tools)
LangChain 允许开发人员为代理添加外部功能,如搜索、计算等。这使得代理可以执行更复杂的任务,并与真实世界的服务进行交互。
链(Chains)
链是 LangChain 中的另一个关键概念。它提供了一种方法来组合和编排多个 LLM 任务,以构建更复杂的应用程序流程。开发人员可以创建自定义的链,以实现特定的业务逻辑。
LangChain 还提供了许多其他有用的功能,如模块化设计、可插拔组件、丰富的文档和示例代码。这使得开发人员可以快速构建基于 LLM 的应用程序,并专注于应用程序的核心功能,而不是重复解决常见的开发挑战。
常见用法
问答系统
LangChain 可以用于构建基于 LLM 的问答系统。开发人员可以使用 Agents、Prompts 和 Memory 等组件,建立一个能够回答各种问题的智能助手。
from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
from langchain.tools import GoogleSearchAPIWrapperllm = OpenAI(temperature=0)
search = GoogleSearchAPIWrapper()agent = initialize_agent([search], llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
result = agent.run("什么是人工智能?")
print(result)
文档问答
LangChain 可以帮助开发人员构建基于文档的问答系统。开发人员可以使用 Documents、VectorStores 和 Chains 等组件,将 LLM 与文档知识库集成,为用户提供定制的问答体验。
from langchain.document_loaders import TextLoader
from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chains import RetrievalQA# 加载文档
loader = TextLoader('document.txt')
documents = loader.load()# 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(documents, embeddings)# 构建问答链
qa = RetrievalQA.from_llm(llm=OpenAI(), retriever=vectorstore.as_retriever())
result = qa.run("文档中提到了什么?")
print(result)
任务执行代理
LangChain 可以用于构建能够自主完成复杂任务的代理。开发人员可以使用 Agents、Tools 和 Memory 等组件,让代理感知环境,制定计划并采取行动。
from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
from langchain.tools import PythonREPLTool, BashToolllm = OpenAI(temperature=0)
tools = [PythonREPLTool(),BashTool()
]agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
result = agent.run("请用Python计算1+1的结果,然后用bash命令打印出来。")
print(result)
对话式应用程序
LangChain 可以用于构建基于对话的应用程序,如聊天机器人或虚拟助手。开发人员可以使用 Agents、Memory 和 Prompts 等组件,让应用程序能够记忆上下文,并与用户进行自然语言交互。
from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
from langchain.memory import ConversationBufferMemoryllm = OpenAI(temperature=0.9)
memory = ConversationBufferMemory(memory_key="chat_history")agent = initialize_agent([search], llm, agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION, memory=memory, verbose=True)print("你好!我是您的虚拟助手。我们聊聊天吧。")
while True:user_input = input("你: ")if user_input.lower() == "quit":breakresult = agent.run(user_input)print("助手: " + result)
常见组合
Language Models (LLMs)
最常见的是 GPT-3、GPT-J、GPT-NeoX 等大型预训练语言模型。LangChain 提供了对这些模型的统一访问接口。
开发人员可以将 LangChain 与自己训练的定制化 LLMs 集成使用。
Retrieval Systems
LangChain 可以与各种信息检索系统(如 Elasticsearch、Pinecone、Weaviate 等)集成,以提供更强大的问答和信息查询能力。
这些检索系统可以帮助 LangChain 应用程序快速访问相关的知识和数据。
Knowledge Bases
LangChain 可以与知识库(如 Notion、Confluence、Google Drive 等)集成,以获取结构化的知识数据。
这些知识库中的信息可以用于增强 LangChain 应用程序的理解和推理能力。
Databases
LangChain 可以与关系型数据库(如 PostgreSQL、MySQL)或文档型数据库(如 MongoDB、Couchbase)集成,以访问应用程序所需的结构化数据。
这些数据可以用于支持 LangChain 应用程序的知识推理和问答功能。
Web APIs
LangChain 可以与各种 Web API(如 OpenWeatherMap、NewsAPI 等)集成,以获取外部数据源的信息。
这些API提供的数据可以丰富 LangChain 应用程序的知识和功能。
langchain 与NLP的结合
import os
from langchain.agents import AgentType, initialize_agent
from langchain.chains import ConversationalRetrievalChain
from langchain.embeddings.hugging_face import HuggingFaceEmbeddings
from langchain.llms.hugging_face import HuggingFaceLLM
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate
from langchain.vectorstores import Chroma# 加载 Hugging Face 预训练模型
llm = HuggingFaceLLM(model_name="gpt-j-6b")
embeddings = HuggingFaceEmbeddings(model_name="all-mpnet-base-v2")# 创建 Chroma 向量存储
persist_directory = "chroma_data"
os.makedirs(persist_directory, exist_ok=True)
vectorstore = Chroma(persist_directory=persist_directory, embedding_function=embeddings)# 创建会话内存
memory = ConversationBufferMemory(memory_key="chat_history")# 创建问答链
qa_chain = ConversationalRetrievalChain.from_llm(llm=llm,retriever=vectorstore.as_retriever(),qa_prompt=PromptTemplate(template="你的问题是: {question}\n你的背景是: {chat_history}",input_variables=["question", "chat_history"]),result_key="result"
)# 创建智能代理
agent = initialize_agent(tools=[qa_chain],llm=llm,agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,verbose=True,memory=memory
)# 开始对话
agent.run("你好,我能问你几个问题吗?")
在这个示例中,我们使用了以下 LangChain 和 NLP 技术:
HuggingFaceLLM
我们使用了 Hugging Face 提供的 GPT-J-6B 预训练模型作为语言模型,以提供高质量的自然语言生成能力。
HuggingFaceEmbeddings
我们使用了 Hugging Face 的 all-mpnet-base-v2 模型来计算文本的向量表示,为向量存储做准备。
Chroma
我们使用 Chroma 向量存储来保存和查询知识库信息,支持高效的语义检索。
ConversationBufferMemory
我们使用会话内存来记录对话历史,让代理能够根据上下文做出更好的响应。
ConversationalRetrievalChain
我们创建了一个可以进行对话式问答的检索链,利用向量存储快速找到相关信息。
initialize_agent
我们使用 LangChain 的智能代理功能,让代理能够感知环境、制定计划并执行操作,实现更加自然的交互体验。