首页 > 编程语言 >LangChain:构建智能应用程序的开源框架

LangChain:构建智能应用程序的开源框架

时间:2024-12-15 13:28:34浏览次数:5  
标签:agent LangChain langchain 开源 应用程序 llm memory import

一、引言

        LangChain 是一个旨在简化基于大型语言模型(LLM)的应用程序开发的开源框架。它通过模块化设计和链式结构,提供了一系列工具和组件,帮助开发者快速构建复杂的自然语言处理应用。本文将深入探讨 LangChain 的工作原理、核心组件实现、生态系统以及应用场景,并结合具体代码示例进行说明。


二、LangChain 框架的工作原理

(一)模块化设计与链式调用机制

LangChain 的工作原理主要基于模块化设计和链式调用机制。框架的核心在于将不同的组件“链接”在一起,形成一个连贯的应用程序。这些组件包括模型输入/输出、数据连接、链、记忆、代理和回调等。每个组件都有其特定的功能,它们协同工作,完成复杂的数据处理任务。

模型输入/输出(Model I/O)

负责与 LLM 交互,管理提示、调用模型并从输出中提取信息。这使得开发者可以轻松地集成多种语言模型,如 OpenAI 的 GPT 系列、Google 的 BERT 等,以适应不同的应用场景。

from langchain.llms import OpenAI

llm = OpenAI(model_name="text-davinci-003")
response = llm("What is the capital of France?")
print(response)
数据连接(Data Connection)

用于加载、转换、存储和查询数据,使 LLM 能够利用自有数据回答问题。LangChain 支持多种数据源格式,如 PDF、TXT、Word 和 Excel 文件,同时提供了相应的加载器函数来读取这些文件。

from langchain.document_loaders import PyPDFLoader, UnstructuredFileLoader

pdf_loader = PyPDFLoader("example.pdf")
pages = pdf_loader.load()

txt_loader = UnstructuredFileLoader("example.txt")
text = txt_loader.load()
链(Chains)

将多个组件组合在一起,创建连贯的应用程序。支持配置运行时变量、故障回退、并行调用、逻辑分支、自定义流式函数和外部内存链接。这种链式结构不仅提高了开发效率,还赋予了应用更高的灵活性和可扩展性。

from langchain.chains import SequentialChain

sequential_chain = SequentialChain([
    # 第一步:加载文档
    document_loader,
    # 第二步:切分文本
    text_splitter,
    # 第三步:向量化
    vectorizer,
    # 第四步:相似性匹配
    similarity_search,
    # 第五步:生成答案
    answer_generator
])

result = sequential_chain(user_input)
记忆(Memory)

保存和传递上下文状态,使对话更加连贯。这对于构建多轮对话系统尤为重要,能够确保每次交互都能基于之前的对话内容进行。

from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory()
memory.chat_memory.add_user_message("Hello!")
memory.chat_memory.add_ai_message("Hi there!")

response = llm_chain.run({"context": retrieved_docs, "question": user_question}, memory=memory)
代理(Agents)

决定模型行动,让 LLM 具有主动性和智能性,动态选择和调用工具。Agent 可以被视为自带路由消费 Chains 的代理,其设计基于 MRKL 和 LangChain 的原理,适用于需要动态调整和复杂决策的应用场景。

from langchain.agents import initialize_agent, Tool
from langchain.tools import DuckDuckGoSearchRun

agent = initialize_agent(
    tools=[Tool(name="Search", func=DuckDuckGoSearchRun().run)],
    llm=OpenAI(),
    agent="zero-shot-react-description",
    verbose=True
)

response = agent.run("What is the weather like in Beijing today?")
回调(Callbacks)

在链中插入自定义逻辑,允许开发者控制和调整 LLM 的行为。例如,可以通过回调监听事件并在特定情况下采取行动,便于调试和监控。

from langchain.callbacks import CallbackManager, StdOutCallbackHandler

callback_manager = CallbackManager([StdOutCallbackHandler()])
llm = OpenAI(callback_manager=callback_manager)

三、LangChain 框架的组件实现

LangChain 由多个核心组件构成,每个组件都扮演着特定的角色,共同构成了一个功能强大的整体。以下是 LangChain 的主要组件及其功能:

(一)Prompt Templates

用于设置提示格式,引导模型生成特定输出。通过定制化的提示词模板,可以更好地控制模型的回答方向,确保其符合预期。

from langchain.prompts import PromptTemplate

template = """请根据以下提供的文本片段回答问题:
{context}
问题是:{question}"""
prompt = PromptTemplate(template=template, input_variables=["context", "question"])

(二)Chains

将多个步骤链接起来,完成复杂任务。LangChain 提供了丰富的 Chain 类型,如 LLMChainSequentialChain 等,满足不同需求。

from langchain.chains import LLMChain

llm_chain = LLMChain(llm=OpenAI(), prompt=prompt)
response = llm_chain.run({"context": retrieved_docs, "question": user_question})

(三)Agents

允许模型与外部环境交互,执行复杂任务。Agent 可以根据用户输入灵活调用不同的工具链,适用于需要动态调整和复杂决策的应用场景。

from langchain.agents import initialize_agent, Tool
from langchain.tools import DuckDuckGoSearchRun

agent = initialize_agent(
    tools=[Tool(name="Search", func=DuckDuckGoSearchRun().run)],
    llm=OpenAI(),
    agent="zero-shot-react-description",
    verbose=True
)

response = agent.run("What is the weather like in Beijing today?")

(四)VectorStore

存储和检索文本向量化后的数据。常用的向量数据库包括 Faiss、Chroma 和 Milvus,相比 MySQL,专用的向量数据库在检索速度上有显著优势。

from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma

embeddings = OpenAIEmbeddings()
db = Chroma(persist_directory="./data", embedding_function=embeddings)

for chunk in chunks:
    db.add_texts([chunk])

(五)Memory

为 LLM 提供上下文记忆能力,使其能够记住先前的对话或操作。这对于构建多轮对话系统至关重要,能够确保每次交互都能基于之前的对话内容进行。

from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory()
memory.chat_memory.add_user_message("Hello!")
memory.chat_memory.add_ai_message("Hi there!")

(六)Tools

扩展了代理的能力,使其能够使用外部工具。例如,可以通过 API 接口获取实时天气信息,或者调用其他第三方服务来增强模型的功能。

from langchain.tools import DuckDuckGoSearchRun

search_tool = DuckDuckGoSearchRun()
response = search_tool.run("What is the weather like in Beijing today?")

四、LangChain 生态系统

LangChain 的生态系统包括多个子包和工具,如 langchain-corelangchain-communityLangGraphLangServeLangSmith 等。这些子包分别负责基础抽象、第三方集成、链构建和状态与多角色应用的构建。

(一)langchain-core

提供了 LangChain 的核心功能和抽象层,是整个框架的基础。它定义了所有组件的接口和行为规范,确保各个部分能够无缝协作。

(二)langchain-community

包含了社区贡献的各种插件和扩展,丰富了 LangChain 的功能。例如,社区成员可能会贡献新的工具、链或提示词模板,进一步提升框架的灵活性和实用性。

(三)LangGraph

用于构建和管理复杂的链结构。通过可视化界面,开发者可以直观地设计和调试链,提高开发效率。

(四)LangServe

用于将 LangChain 链部署为 REST API,方便与其他系统集成。它可以轻松地将本地开发的链发布到云端,供其他应用程序调用。

from fastapi import FastAPI
from langserve import serve

app = FastAPI()
serve(app, chain=llm_chain)

(五)LangSmith

用于调试、测试、评估和监控基于 LLM 的应用程序。它提供了详细的日志记录、性能分析等功能,帮助开发者优化应用表现。


五、LangChain 的应用场景

(一)智能问答系统

LangChain 在构建智能问答系统方面表现出色。它不仅能够处理结构化数据(如数据库查询),还能高效地解析和回答非结构化文本中的问题。通过将文档加载、文本切分、向量化、相似性搜索和答案生成等步骤串联起来,LangChain 可以快速从大量文档中提取相关信息,为用户提供精准的答案。

from langchain.chains import RetrievalQA
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.document_loaders import PyPDFLoader

# 加载 PDF 文件并创建向量库
pdf_loader = PyPDFLoader("example.pdf")
pages = pdf_loader.load()
embeddings = OpenAIEmbeddings()
db = Chroma.from_documents(pages, embeddings)

# 创建问答链
qa_chain = RetrievalQA.from_llm(llm=OpenAI(), retriever=db.as_retriever())

# 提问并获取答案
response = qa_chain.run("What is the main topic of this document?")
print(response)

(二)多轮对话机器人

借助 LangChain 的 Memory 模块,可以轻松实现多轮对话功能。这使得聊天机器人能够记住之前的交互信息,从而提供更加连贯和个性化的回答。无论是客户服务、智能助手还是在线教育等领域,这种能力都极大地提升了用户体验。

from langchain.memory import ConversationBufferMemory
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# 初始化对话记忆
memory = ConversationBufferMemory()

# 定义提示词模板
template = """请根据以下提供的上下文回答用户的问题:
{history}
问题是:{question}"""
prompt = PromptTemplate(template=template, input_variables=["history", "question"])

# 创建 LLMChain 并生成答案
llm_chain = LLMChain(llm=OpenAI(), prompt=prompt, memory=memory)

# 进行多轮对话
for _ in range(3):
    user_input = input("User: ")
    response = llm_chain.run({"question": user_input})
    print(f"Bot: {response}")

(三)自动化工作流

LangChain 的 Agents 模块允许开发者定义复杂的自动化工作流。例如,在接收到用户请求后,Agent 可以调用多个 API 接口来完成一系列任务,如数据检索、分析和报告生成等。这种灵活性使得 LangChain 成为了构建企业级应用的理想选择。

from langchain.agents import initialize_agent, Tool
from langchain.tools import DuckDuckGoSearchRun, WikipediaQueryRun

# 初始化 Agent
agent = initialize_agent(
    tools=[
        Tool(name="Search", func=DuckDuckGoSearchRun().run),
        Tool(name="Wiki", func=WikipediaQueryRun().run)
    ],
    llm=OpenAI(),
    agent="zero-shot-react-description",
    verbose=True
)

# 执行复杂任务
response = agent.run("Find information about Python programming language and summarize it.")
print(response)

(四)内容创作与编辑

LangChain 还可以用于内容创作和编辑任务。通过 Prompt 控制机制,开发者可以根据特定主题或风格要求生成高质量的文本。此外,结合外部数据源(如新闻网站、学术论文等),还可以实现实时的内容更新和维护。

from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI

# 定义提示词模板
template = """请根据以下提供的背景信息创作一篇关于 {topic} 的文章:
{background}
"""
prompt = PromptTemplate(template=template, input_variables=["topic", "background"])

# 创建 LLMChain 并生成文章
llm_chain = LLMChain(llm=OpenAI(), prompt=prompt)

# 生成文章
article = llm_chain.run({
    "topic": "Artificial Intelligence",
    "background": "Artificial Intelligence (AI) is a branch of computer science that aims to create software which can perform tasks that normally require human intelligence."
})
print(article)


六、结语

        LangChain 以其组件化架构、链式操作和智能集成,显著简化了智能应用的开发流程,提升了效率与创新能力。它不仅为开发者提供了强大的技术支持,更为各行业的数字化转型注入了新的活力。


参考文献

[1] LangChain 简介. (n.d.). Retrieved from LangChain 官方文档

标签:agent,LangChain,langchain,开源,应用程序,llm,memory,import
From: https://blog.csdn.net/TrueYSH/article/details/144448710

相关文章

  • Meta “亮剑”!开源 AI 视频水印工具 Video Seal,狙击 Deepfake 泛滥
    如今,Deepfake已经无孔不入。随着生成式AI的普及,网络上的虚假内容呈爆炸式增长。据身份验证平台Sumsub统计,2023年至2024年,全球Deepfake数量增加了4倍。2024年,Deepfake占所有欺诈行为的7%,从身份冒充、账户盗用到复杂的社会工程攻击,无不涉及Deepfake的身影。为了有......
  • Redis国产替换Tair开源数据库002_编译安装Tair_配置并启动Tair_配置configserver_data
    然后上一节已经安装好了依赖.接下来就可以进行编译安装Tair了.可以看到上面是一些命令,然后首先去下载Tair的源码gitclonehttps://gitee.com/mirrors/Tair.git这个是源码的官网可以去看看,这Tair他们的文档可是不那么的全啊.https://help.aliyun.com/zh/redis/user......
  • Implementing Memory in LLM Applications Using LangChain
    ImplementingMemoryinLLMApplicationsUsingLangChainhttps://www.codecademy.com/article/implementing-memory-in-llm-applications-using-lang-chain老版本https://python.langchain.com/v0.1/docs/modules/memory/types/buffer/ HowtomigratetoLangGraphmemor......
  • 开源音悦工具支持无损,享受视听盛宴!
    音悦这种艺术形式,不仅能够传达丰富的情感,讲述动人的故事,更能跨越语言和文化的边界,拉近人与人之间的距离。在我们繁忙的生活中,它就像一位知心的好友,陪伴我们度过每一个闲暇时刻。沉浸在悠扬的古典乐、动感的流行曲或抒情的民谣之中,我们能够享受到它带来的宁静与美好,放松身心......
  • PHP实现开源Consul服务发现与治理
    PHP实现开源Consul服务发现与治理在分布式系统中,服务发现和治理是必不可少的组成部分。其中,consul作为一款服务发现和治理工具,被广泛应用于微服务架构中。本文将介绍如何使用php实现开源consul服务发现与治理。一、什么是Consul?Consul是一款由HashiCorp公司开发的服务发现和治......
  • 基于LangChain+ChatGLM 部署本地私有化知识库
    前言随着人工智能技术的不断发展,越来越多的企业和机构开始认识到知识库的重要性。知识库不仅能够集中管理大量的信息和数据,还能通过智能检索和推理功能,为用户提供准确、高效的知识服务。LangChain与ChatGLM作为当前领先的AI技术,为部署本地私有化知识库提供了强大的支......
  • 启动应用程序出现vmfirmwarehcl.dll找不到问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个vmfirmwarehcl.dll文件(挑选合适的版本文件)......
  • 启动应用程序出现vmprox.dll找不到问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个vmprox.dll文件(挑选合适的版本文件)把它放......
  • 腾讯优图最新开源Freeze-Omini:冻结LLM引入语音处理能力
    作者:yearn原文:https://zhuanlan.zhihu.com/p/8242564370 近年来大语言模型(LLM)的快速发展为智能应用带来了巨大机会,而语音作为自然的人机交互形式,其与LLM的结合可以显著提升用户体验。然而,传统的语音交互方式通过ASR+LLM+TTS的级联方式实现,存在高工程复杂性和较大交......
  • 【开源免费】基于Vue和SpringBoot的课程管理平台(附论文)
    本文项目编号T006,文末自助获取源码\color{red}{T006,文末自助获取源码}......