大语言模型:基于LLM的应用开发框架「LangChain」最全指南

‍‍

在前面的文章,基本上把LLM的知识板块儿都介绍了一边,从中大家可以感受到LLM的有很多比较强大的能力。

虽然大部分LLM平台都有开放的API接口,但是想要快速低成本的将LLM集成到自己的产品中,且拥有良好的扩展性和多LLM迁移能力,还是挺复杂的。

那有没有一种解决方案来低成本、高效能的解决LLM的集成问题呢?当然有,目前市场上应运而生的有很多基于LLM的开发框架,其中以LangChain最为出名。

作为本专题的最后一节,我们就来详细的介绍一下如何利用开源框架LangChain来快速实现LLM的应用开发

注意:由于LangChain在快速的迭代(几乎每今天就会有一个小版本发布),本节后半部分涉及到比较多的代码演示部分,不能保障后续能够完全正常跑起来,但是大体逻辑不会变化太大,如果有用到示例的地方,可结合示例参考LangChain官网最新文档。

LangChain官网:https://www.langchain.com

一、LangChain框架简介

LangChain是专用于开发LLM驱动型应用程序的框架,是用于不同LLM的通用接口。

LangChain的文档包含一份集成列表(如下图所示),其中涉许多LLM提供商,包括OpenAI,以及国内的月之暗面、通义千问等等,同时LangChain还支持自定义LLM,也就是说,未集成的LLM也可以使用LangChain来进行应用开发。大多数集成需要API密钥才能建立连接。

LangChain框架的核心包括以下几部分:

1、 Models

该模块是由LangChain提供的标准接口,你可以通过它与各种LLM进行交互。

2、 Prompts

提示词已成为LLM编程的新标准。该模块包含许多用于管理提示词的工具。

3、 Indexes

该模块让你能够将LLM与你的数据结合使用

4、 Chains

通过该模块,LangChain提供了Chain接口。你可以使用该接口创建一个调用序列,将多个模型或提示词组合在一起。

5、 Agents

该模块引入了Agent接口。所谓智能体,就是一个可以处理用户输入、做出决策并选择适当工具来完成任务的组件。它以迭代方式工作,采取一系列行动,直到解决问题。

6、 Memory

该模块让你能够在链调用或智能体调用之间维持状态。默认情况下,链和智能体是无状态的。这意味着它们独立地处理每个传入的请求,就像LLM一样。

二、 LangChain框架的突出功能

1、动态提示词

LangChain中可以通过变量插入的方式,实现动态提示词,具体案例如下所示:



`from langchain.chat_models import ChatOpenAI   from langchain import PromptTemplate, LLMChain      template ="""   Question: {question} Let's think step by step.    Answer:    """   # PromptTemplate负责构建模型的输入。也就是说,它能以可复制的方式生成提示词。它包含:template的输入文本字符串,其中的值可以通过input_variables进行指定。   prompt = PromptTemplate(template=template,input_variables=["question"])      llm = ChatOpenAI(model_name="gpt-4")   llm_chain = LLMChain(prompt=prompt, llm=llm)   question =""" What is the population of the capital of the country where the Olympic Games were held in 2016?"""   llm_chain.run(question)   `


输出如下:



`Step 1: Identify the country where the Olympic Games were held in 2016.   Answer: The 2016 Olympic Games were held in Brazil.   Step 2: Identify the capital of Brazil.   Answer: The capital of Brazil is Brasília.   Step 3: Find the population of Brasília.   Answer: As of 2021, the estimated population of Brasília is around   3.1 million. So, the population of the capital of the country where   the Olympic Games were held in 2016 is around 3.1 million. Note that   this is an estimate and may vary slightly.'   `


提示词和模型由LLMChain函数组合在一起,形成包含这两个元素的一条链。最后,我们需要调用run函数来请求补全输入问题。

当运行run函数时,LLMChain使用提供的输入键值(以及可用的记忆键值)格式化提示词模板,随后将经过格式化的字符串传递给LLM,并返回LLM输出。我们可以看到,模型运用“逐步思考”的技巧自动回答问题。

2、智能体

智能体及工具是LangChain框架提供的关键功能:它们可以使应用程序变得非常强大,让LLM能够执行各种操作并与各种功能集成,从而解决复杂的问题。

这里所指的“工具”是围绕函数的特定抽象,使语言模型更容易与之交互。智能体可以使用工具与世界进行交互。具体来说,工具的接口有一个文本输入和一个文本输出。

LangChain中有许多预定义的工具,包括谷歌搜索、维基百科搜索、Python REPL、计算器、世界天气预报API等。要获取完整的工具列表,请查看LangChain文档中的工具页面。除了使用预定义的工具,你还可以构建自定义工具并将其加载到智能体中,这使得智能体非常灵活和强大。

通过运用“逐步思考”的技巧,你可以在一定程度上提高模型的推理能力。在提示词末尾添加“Let’s think step by step”,相当于要求模型花更多时间来回答问题。

智能体安排的步骤如下所述:

01.智能体收到来自用户的输入。

02.智能体决定要使用的工具(如果有的话)和要输入的文本

03.使用该输入文本调用相应的工具,并从工具中接收输出文本。

04.将输出文本输入到智能体的上下文中。

05.重复执行步骤2~步骤4,直到智能体决定不再需要使用工具。此时,它将直接回应用户。

我们希望模型能够回答以下问题:2016年奥运会举办国首都的人口的平方根是多少?这个问题并没有特殊的含义,但它很好地展示了LangChain智能体及工具如何提高LLM的推理能力。

LangChain智能体可以使用两个工具:维基百科搜索和计算器。在通过load_tools函数创建工具之后,我们使用initialize_agent函数创建智能体。智能体的推理功能需要用到一个LLM,本例使用的是gpt-3.5-turbo。

在使用维基百科搜索工具之前,需要安装相应的Python包wikipedia。可以使用pip install wikipedia来安装这个包。



`from langchain.chat_models import ChatOpenAI   from langchain.agents import load_tools, initialize_agent, AgentType   llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)   tools = load_tools(["wikipedia","llm-math"], llm=llm)   agent = initialize_agent(       tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,       verbose=True   )   question ="""What is the square root of the population of the capital   of the Country where the Olympic Games were held in 2016?"""   agent.run(question)   `


智能体决定查询维基百科以获取有关2016年奥运会的信息:



`> Entering new chain...   I need to find the country where the Olympic Games were held in2016   and then find the population of its capital city. Then I can take the   square root of that population.   Action: Wikipedia   Action Input:"2016 Summer Olympics"   Observation: Page:2016 Summer Olympics   [...]   `


输出的下一行包含维基百科关于奥运会的摘录。接下来,智能体使用维基百科搜索工具又进行了两次额外的操作:



`Thought:I need to search for the capital city of Brazil.   Action: Wikipedia   Action Input:"Capital of Brazil"   Observation: Page: Capitals of Brazil   Summary: The current capital of Brazil, since its construction in   1960,is Brasilia.[...]   Thought: I have found the capital city of Brazil, which is Brasilia.   Now I need to find the population of Brasilia.   Action: Wikipedia   Action Input:"Population of Brasilia"   Observation: Page: Brasilia   [...]   `


下一步,智能体使用计算器工具:



`Thought: I have found the population of Brasilia, but I need to   calculate the square root of that population.   Action: Calculator   Action Input: Square root of the population of Brasilia (population:   found in previous observation)   Observation: Answer:1587.051038876822   `


正如你所见,该智能体展示了较强的推理能力:在得出最终答案之前,它完成了4个步骤。LangChain框架使开发人员能够仅用几行代码就实现这种推理能力。

3、 记忆

在某些应用程序中,记住之前的交互是至关重要的,无论是短期记忆还是长期记忆。使用LangChain,你可以轻松地为链和智能体添加状态以管理记忆。

构建聊天机器人是这种能力最常见的用例。在LangChain中,你可以使用ConversationChain很快地完成这个过程,只需几行代码即可将语言模型转换为聊天工具。

以下代码使用GPT的text-ada-001模型创建一个聊天机器人。该模型从未针对聊天任务做过微调,但我们可以看到,只需几行LangChain代码,即可使用这个简单的文本补全模型开始聊天:



`from langchain import OpenAI, ConversationChain   chatbot_llm = OpenAI(model_name='text-ada-001')   chatbot = ConversationChain(llm=chatbot_llm , verbose=True)   chatbot.predict(input='Hello')   `


在以上代码的最后一行,我们执行了predict(input=‘Hello’)。这要求聊天机器人回复我们的’Hello’消息。模型的回答如下所示:



`> Entering new ConversationChain chain...   Prompt after formatting:   The following is a friendly conversation between a human and an   AI. The AI is talkative and provides lots of specific details from   its context. If the AI does not know the answer to a question, it   truthfully says it does not know.   Current conversation:   Human: Hello   AI:   > Finished chain.   ' Hello! How can I help you?'   `


由于将ConversationChain中的verbose设置为True,因此我们可以查看LangChain使用的完整提示词。当我们执行predict(input=‘Hello’)时,text-ada-001模型收到的不仅仅是’Hello’消息,而是完整的提示词。该提示词位于标签> Entering new ConversationChain chain…和>Finished chain之间。如果继续对话,我们会发现该函数在提示词中保留了对话的历史记录。如果我们接着问模型是不是AI,那么这个问题也将被包含在提示词中:



`> Entering new ConversationChain chain...   Prompt after formatting:   The following [...] does not know.   Current conversation:   Human: Hello   AI:  Hello! How can I help you?   Human: Can I ask you a question? Are you an AI?   AI:   > Finished chain.   '\n\nYes, I am an AI.'   `


ConversationChain对象使用提示工程技巧和记忆技巧,将进行文本补全的LLM转换为聊天工具。

尽管LangChain让所有语言模型拥有了聊天能力,但这个解决方案并不像GPT-3.5 Turbo和GPT-4这样强大,后两者已经专门针对聊天任务进行了优化。此外,OpenAI已经宣布弃用text-ada-001模型。

4、嵌入

将语言模型与你自己的文本数据相结合,这样做有助于将应用程序所用的模型知识个性化。

其大致原理为:首先检索信息,即获取用户的查询并返回最相关的文档;然后将这些文档发送到模型的输入上下文中,以便它响应查询。

下面展示使用LangChain和嵌入技术实现这一点是多么简单。

document_loaders是LangChain中的一个重要模块。通过这个模块,你可以快速地将文本数据从不同的来源加载到应用程序中。比如,应用程序可以加载CSV文件、电子邮件、PowerPoint文档、Evernote笔记、Facebook聊天记录、HTML页面、PDF文件和许多其他格式。要查看完整的加载器列表,请查阅LangChain文档。每个加载器设置起来都非常简单。

如果PDF文件位于当前工作目录下,则以下代码将加载文件内容并按页进行划分。

在使用PDF加载器之前,需要安装pypdf包。这可以通过pip install pypdf来完成。



`from langchain.document_loaders import PyPDFLoader   loader = PyPDFLoader("ExplorersGuide.pdf")   pages = loader.load_and_split()   `


进行信息检索时,需要嵌入每个加载的页面。

在信息检索中,嵌入是用于将非数值概念(如单词、标记和句子)转换为数值向量的一种技术。这些嵌入使得模型能够高效地处理这些概念之间的关系。借助OpenAI的嵌入端点,开发人员可以获取输入文本的数值向量表示。此外,LangChain提供了一个包装器来调用这些嵌入,如下所示。

要使用OpenAIEmbeddings,请先使用pip install tiktoken安装tiktoken包。



`from langchain.embeddings import OpenAIEmbeddings   embeddings = OpenAIEmbeddings()   `


索引保存页面嵌入并使搜索变得容易。LangChain以向量数据库为中心。有许多向量数据库可供选择,详见LangChain文档。

以下代码片段使用Faiss向量数据库,这是一个主要由Facebook AI团队开发的相似性搜索库。在使用Faiss向量数据库之前,需要使用pip install faiss-cpu命令安装faiss-cpu包。



`from langchain.vectorstores import FAISS   db = FAISS.from_documents(pages, embeddings)   `


下图为PDF文件转换为嵌入向量的过程:

现在很容易搜索相似内容:



`q = "What is Link's traditional outfit color?"   db.similarity_search(q)[0]   `


我们得到以下内容:



`Document(page_content='While Link’s traditional green tunic is certainly an iconic look, his wardrobe has expanded [...] Dress for Success',   metadata={'source': 'ExplorersGuide.pdf', 'page': 35})   `


这个问题的答案是,Link的服装颜色是绿色。我们可以看到,答案就在选定的内容中。输出显示,答案在ExplorersGuide.pdf的第35页。请记住,Python从0开始计数。因此,如果查看原始PDF文件,你会发现答案在第36页,而非第35页。

下图显示了信息检索过程如何使用查询的嵌入和向量数据库来识别与查询最相似的页面。

你可能希望将嵌入整合到聊天机器人中,以便在回答问题时使用它检索到的信息。再次强调,使用LangChain,只需几行代码即可轻松实现。我们使用RetrievalQA,它接受LLM和向量数据库作为输入。然后,我们像往常一样向所获得的对象提问:



`from langchain.chains import RetrievalQA   from langchain import OpenAI   llm = OpenAI()   chain = RetrievalQA.from_llm(llm=llm, retriever=db.as_retriever())   q ="What is Link's traditional outfit color?"   chain(q, return_only_outputs=True)   `


这一次,我们得到以下答案:



`{'result':" Link's traditional outfit color is green."}   `


下图显示了RetrievalQA如何使用信息检索来回答用户的问题。

你可能会问:为什么在将信息添加到LLM的上下文中之前需要进行信息检索?事实上,目前已有的语言模型无法处理包含数百页的大型文件。因此,如果输入文件过大,那么我们会对其进行预过滤。这是信息检索过程的任务。在不久的将来,随着输入上下文的不断增加,可能就不再需要使用信息检索技术了。


如何学习AI大模型 ?

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓

CSDN粉丝独家福利

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】

读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈

(👆👆👆安全链接,放心点击)

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

👉1.大模型入门学习思维导图👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
在这里插入图片描述

👉2.AGI大模型配套视频👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。

在这里插入图片描述
在这里插入图片描述

👉3.大模型实际应用报告合集👈

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)

在这里插入图片描述

👉4.大模型落地应用案例PPT👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(全套教程文末领取哈)

在这里插入图片描述

👉5.大模型经典学习电子书👈

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
img

在这里插入图片描述

👉6.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)

在这里插入图片描述
👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习

CSDN粉丝独家福利

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】

读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈

(👆👆👆安全链接,放心点击)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值