LangChain 与 LangSmith:构建与微调支持LLM的智能应用双重攻略

一、前言

随着人工智能领域的不断发展,自然语言处理 (NLP) 技术也在不断进步。近年来,革命性的大型语言模型 (LLM) 已经成为了 NLP 技术的重要组成部分。作为一种可以理解并生成类似人类的文本的技术,LLM 已经在机器翻译、情感分析、聊天机器人和内容生成等任务中发挥了重要作用。

在这个以语言为桥梁的世界中,LLM 的应用前景无限,而 LangChain 创新平台则是充分利用 LLM 潜力的重要手段。在本文中,我们将探索 LLM 的奇迹,并介绍如何使用 LangChain 构建 LLM 支持的应用程序。

二、介绍

2.1、什么是 LLM

LLM,即大型语言模型,是一种利用深度学习技术训练的语言模型。它通过在大量文本数据上进行训练,可以理解和生成类似人类的文本,从而成为各种应用程序的强大工具。LLM 的核心目标是准确地学习和理解人类语言,让计算机能够像我们人类一样理解和生成语言。这种技术的出现和发展彻底改变了计算机理解和生成人类语言的方式。目前,LLM 最著名的例子之一是 OpenAI 的 GPT 模型,它因其惊人的语言生成能力而受到了广泛的关注和赞誉。除了文本生成、语言翻译、情感分析等应用外,LLM 还有着广泛的应用前景,将会在未来的自然语言处理领域中发挥越来越重要的作用。

2.2、什么是 LangChain

LangChain 是一个开源的Python库,为开发人员提供了构建由大型语言模型 (LLM) 驱动的应用程序的工具。更具体地说,LangChain是一个提示编排工具,可以让开发者更轻松地以交互方式链接不同的提示。

LLM(如 GPT-3)提供单个提示的完成 - 你可以将其视为获得单个请求的完整结果。例如,你可以说“给我烤一个蛋糕”,LLM就会制作一个蛋糕。您还可以发出更复杂的命令,例如“给我烤一个带有巧克力糖霜的香草蛋糕”,LLM也可能会返回所述蛋糕。

但相反,如果你问:“给我烤蛋糕所需的原料以及烤蛋糕的步骤”怎么办? (LLM 不会发生这种情况,但 ChatGPT 会发生)。

为了避免用户手动给出每个步骤并确定执行顺序,我们可以使用 LLM 在每个点生成下一步,并使用前面步骤的输出作为上下文。

简而言之,LangChain是一个可以编排一系列提示以达到预期结果的框架。它为开发人员与LLM合作提供了一种易于使用的方式。用简化的术语来说,LangChain 是使用 LLM 的包装器。

2.3、什么是 LangSmith

LangSmith 是一个用于构建生产级 LLM 应用程序的平台。它可以让您调试、测试、评估和监控基于任何LLM框架构建的链和智能代理,并与LangChain无缝集成,LangChain是使用LLM构建的首选开源框架。

2.4、LangChain LLM 与其他语言模型

以下比较主要是强调 LangChain LLM 与其他主流的大语言模型之间的独特特性和功能差异:

  • 记忆力:一些LLM的记忆力很差,如果提示超出记忆力限制,通常会导致上下文丢失。而LangChain则提供了之前的聊天提示和回复,解决了内存限制的问题。响应消息的历史记录使用户能够向 LLM 重复之前的消息以回顾之前的上下文。

  • LLM 切换:与使用单一模型 API 锁定软件的其他 LLM 相比,LangChain 提供了一种抽象,可以简化 LLM 的切换或将多个 LLM 集成到您的应用程序中。当你想要使用紧凑模型(例如 OpenAI 的 GPT-3.5 中的 Stability AI 的 StableLM)升级软件功能时,这非常有用。

  • 集成:与其他LLM相比,将 LangChain 集成到您的应用程序中很容易。它通过链和代理提供管道工作流程,让您快速将LangChain整合到您的应用程序中。就线性管道而言,链条本质上是连接多个部件的物体。代理更高级,允许您选择组件如何使用业务逻辑进行交互。例如,您可能希望使用条件逻辑根据LLM的结果确定下一步行动。

  • 数据传递:由于LLM一般基于文本的性质,将数据传递到模型通常很棘手。 LangChain通过使用索引来解决这个问题。索引使应用程序能够以可变格式导入数据,并以可以逐行向LLM提供服务的方式存储数据。

  • 响应:LangChain 提供输出解析器工具,以合适的格式给出答案,这与其他模型响应由一般文本组成的LLM不同。在应用程序中使用人工智能时,最好有一个可以编程的结构化响应。

三、设置 LangChain

接下来我们将实战如何在真实的应用场景中实现 LangChain,以了解其工作原理。在开始开发之前,需要搭建开发环境。

3.1、设置开发环境

首先,创建一个虚拟环境并安装以下依赖项:

  • OpenAI:将 GPT-3 API 集成到您的应用程序中。

  • LangChain:将LangChain集成到您的应用程序中。

使用 pip,运行以下命令来安装依赖项:

 pip install langchain openai

3.2、导入必要的库

import langchain
import openai
import os
import IPython
from langchain.llms import OpenAI
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import LLMChain
from langchain.chains import RetrievalQA
from langchain import ConversationChain

load_dotenv()
# 配置OpenAI Key
openai.api_key = os.getenv("OPENAI_API_KEY")

四、使用 LangChain LLM 开发应用程序

使用 LangChain LLM 进行文本生成和理解任务,需要进行一系列步骤。下面是每个部分的详细解释和代码实现。

4.1、初始化LLM

首先需要导入必要的库和依赖项

from langchain import LangModel

# 指定要使用的语言模型
model_name = 'gpt3'

# 初始化 LLM
llm = LangModel(model_name)

4.1.1、输入提示

初始化 LLM 后,可以输入提示来生成文本或获取响应。提示是语言模型生成文本的起点。你可以根据您的要求提供单个提示或多个提示:

# 输入单个提示
prompt = "请按李白的风格为鲁迅写一首诗"

# 从前面的提示生成文本
generated_text = llm.generate_text(prompt)

4.1.2、检索生成的文本或响应

输入提示后,你可以从 LLM 检索生成的文本或响应。生成的文本或响应将基于提示提供的上下文和语言模型的功能:

# 打印生成的文本
print(generated_text)

# 打印回复
for response in responses:
    print(response)

通过遵循这些步骤并实现相应的代码,你可以使用 LangChain 与预先训练的 LLM 无缝交互,利用它们的能力来完成各种文本生成和理解任务。

五、LangChain 组件介绍?

LangChain 的功能多样性,为开发人员在应用程序中探索和利用提供了广泛的可能性。让我们深入了解 LangChain 的关键组件,并了解每个组件可以完成的任务。

LangChain 中主要支持的组件如下所述:

  • Models:各种类型的模型和模型集成,比如OpenAI 的 ChatGPT。

  • Prompts:提示管理、提示优化和提示序列化,通过提示微调模型的语义理解。

  • Memory:用来保存和模型交互时的上下文状态。

  • Indexes:用来结构化文档,以便和模型交互。

  • Chains:一系列对各种组件的调用。

  • Agents:决定模型采取哪些行动,执行并且观察流程,直到完成为止。

5.1 、模型

目前,有许多新的 LLM 模型涌现。LangChain 为各种模型提供了简化的界面和集成。LangChain 的核心是强大的语言模型(LLM),使应用程序能够理解和生成类似人类的文本。通过 LangChain,开发人员可以接触到大量的 LLM,每个模型都接受过大量数据的训练,能够出色地完成各种与语言相关的任务。无论是理解用户查询、生成响应,还是执行复杂的语言任务,LangChain 的模型都是语言处理能力的支柱。

from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003")

# LLM 将提示作为输入,输出一个完成的文本
prompt = "如何在浑浊的娱乐圈里更好的生存下去?"
completion = llm(prompt)

5.2、聊天模型

这将使用 ChatOpenAI 类在用户和 AI 聊天机器人之间建立对话。聊天机器人的初始化 temperature 为 0,这使其响应更加集中和确定。对话以一条说明机器人目的的系统消息开始,然后是一条表达食物偏好的人类消息。聊天机器人将根据给定的输入生成响应。

使用 ChatOpenAI 类可以在用户和 AI 聊天机器人之间建立对话。聊天机器人的初始化 temperature 为 0,说明其响应内容更加集中和确定。聊天对话以一条说明机器人目的的系统消息开始,然后是一条表达食物偏好的人类消息。聊天机器人将根据给定的输入生成响应。

chat = ChatOpenAI(temperature=0)

chat(
    [
        SystemMessage(content="你好,我是 AI 聊天机器人。我可以帮助你提高关于健康饮食的建议。"),
        HumanMessage(content="我想吃点甜点,但是不想吃巧克力,你有什么推荐吗?")
    ]
)

5.3、文本嵌入模型

文本嵌入模型是一种接收文本输入并将其转化为数字形式的模型,以表示输入文本的嵌入列表。通过使用这些嵌入,我们可以从文本中提取信息,并用于确定两个文本(如电影摘要)的相似程度。

embeddings = OpenAIEmbeddings()

text = "Alice 有一只鹦鹉。Alice 的宠物是什么动物?"
text_embedding = embeddings.embed_query(text)

5.4、提示

语言模型的提示是用户提供的一组指令或输入,用于指导模型的响应,帮助模型理解上下文并生成相关且连贯的基于语言的输出,例如回答问题、完成句子或参与某项活动。Prompt指的是模型生成内容时所需要的输入,它可以包含模型生成内容时所需要的背景知识、用户期望模型执行的指令、模型输出需要遵循的格式等。由于不同的Prompt会使得模型产生的内容质量差异很大。

在LangChain中的Prompts有三个部分:Prompt TemplatesOutput ParsersExample Selectors

5.4.1、Prompt Templates(提示模板)

Prompt Template支持你通过一个模板生成一个对应的Prompt,这样的好处是可以根据用户的输入或一些其他参数,来动态构建Prompt。

5.4.2、Output Parsers(输出解析器)

LLM模型生成的都是文本,但是我们通常期望能够获取到一些结构化的输出,以便后续进一步处理。而Output Parsers的主要作用是将LLM的文本解析为结构化的数据。

在LangChain的Output Parsers中,必须要实现两个方法:

  • getFormatInstructions(): str 该方法返回一个包含语言模型输出格式说明的字符串,简单来说就是告诉LLM模型应该以何种格式返回数据。

  • parse(raw: string): any 该方法是将一个原始字符串raw解析为一个特定结构的数据.

5.4.3、Example Selectors(示例选择器)

为了让LLM的输出符合自己期望的文本,可以通过Few-shot(少样本)的方式,即给出一些示例,让LLM生成与示例相似的文本。Few-shot这种方式可以一定程度上避免LLM输出质量波动过大的问题,但是同样也会引入一些其他问题例如,过于遵循示例的风格,导致有时候会有种强行拼凑的感觉。

Example Selector就是负责帮助你构建一个Few-shot的Prompt。ExampleSelector接受一个最大长度的参数,可以根据用户的输入长度,动态的选择示例的个数,以保证最终的Prompt不会超过LLM模型对于Prompt的长度限制。

template = "明天{city}的天气如何?"

prompt = PromptTemplate(
    input_variables=["city"],
    template=template,
)

prompt.format(city="北京")

5.5、链条

链,顾名思义,是允许 LangChain 库无缝处理语言模型输入和输出的操作序列。 LangChain 的这些组成部分基本上是由链接组成的,这些链接可以是其他链,也可以是提示、语言模型或实用程序等原语。

使用单独的LLM对于一些简单的应用程序来说是可以的,但许多更复杂的应用程序需要链接LLM——无论是相互链接还是与其他专家链接。LangChain为链提供了标准接口,以及一些常见的链实现,以便于使用。

将LLM与其他组件结合起来创建应用程序的过程在LangChain中称为链接。示例包括:

  • 结合提示模板和 LLM

  • 通过使用第一个 LLM 的输出作为第二个 LLM 的输入,可以按顺序组合多个 LLS。

  • 例如,将LLM与外部数据相结合来回答问题。

  • 将LLM与长期记忆(例如聊天记录)相结合。

chain = LLMChain(llm = llm, 
                  prompt = prompt)

chain.run("colorful socks")

5.6、索引

缺乏上下文信息(例如访问特定文档或电子邮件)是LLM的一大缺点。允许LLM访问特定的外部数据将帮助您避免这种情况。

一旦外部数据准备好存储为文档,您就可以使用文本嵌入模型在名为 VectorStore 的矢量数据库中对其进行索引。

矢量存储现在将您的文档存储为嵌入。利用这些外部数据,您现在可以采取许多操作。以下是一个类似的例子,用来解释如何使用 RetrievalQA 类进行检索式问答。

# 将数据库转换为检索器
retriever = my_database.as_retriever()

# 创建 RetrievalQA 对象,指定语言模型、检索器和链路类型
qa = RetrievalQA.from_chain_type(
    llm=my_llm, 
    chain_type="my_chain_type", 
    retriever=retriever, 
    return_source_documents=True)

# 定义一个问题
query = "什么是深度学习?"

# 使用 RetrievalQA 对象回答问题
result = qa({"query": query})

# 打印结果
print(result['result'])

5.7、记忆

对于聊天机器人这样的程序来说,能够回忆起之前的对话至关重要。然而,除非你输入聊天记录,否则LLM默认缺乏任何长期记忆。通过提供多种处理聊天记录的选项,LangChain 通过维护所有对话、跟上最近的 K 条对话并总结所说内容来解决这个问题。

# 创建 ConversationChain 对象,指定语言模型和 verbose 参数
conversation = ConversationChain(llm=my_llm, verbose=True)

# 输入一些句子
conversation.predict(input="我喜欢看电影。")
conversation.predict(input="我也喜欢听音乐。")

# 提问
conversation.predict(input="你喜欢什么类型的电影?")

六、构建对话式聊天机器人

对话式聊天机器人已成为许多应用程序不可或缺的一部分,为用户提供无缝交互和个性化体验。开发成功的聊天机器人的关键在于其理解和生成类似人类响应的能力。借助LangChain先进的语言处理能力,您可以创建超越传统基于规则的系统的智能聊天机器人。

6.1、导入必要的库

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

# 导入聊天特定组件
from langchain.memory import ConversationBufferMemory

6.2、使用提示模板

创建一个聊天机器人模板,该模板通过获取用户的输入并将其合并到预定义的笑话格式中来生成笑话。它使用 PromptTemplateConversationBufferMemory 来存储和检索聊天历史记录,使聊天机器人能够生成上下文相关的笑话。

template = """
你是一名有趣的聊天机器人。你的目标是帮助用户制造笑话。将用户说的话转化为一个笑话

{chat_history}
用户: {human_input}
机器人:"""

prompt = PromptTemplate(
    input_variables=["chat_history", "human_input"], 
    template=template
)
memory = ConversationBufferMemory(memory_key="chat_history")

6.3、聊天机器人

设置 LLMChain 类的实例,该实例利用 OpenAI 语言模型来生成响应。然后使用llm_chain.predict()方法根据提供的用户输入生成响应。

llm_chain = LLMChain(
    llm=OpenAI(temperature=0), 
    prompt=prompt, 
    verbose=True, 
    memory=memory
)
llm_chain.predict(human_input="苹果是水果还是蔬菜?")

七、使用 LangSmith 微调 LLM

首先,开源LLM生态系统已经显著发展,从大幅落后于最先进的模型发展到可以在其上运行近SOTA的LLM,这得益于更大的训练数据集和微调技术的应用。其次,领先的LLM提供商OpenAI发布了对新型模型的微调支持,这意味着微调技术有望改变旧模型无法与新模型竞争的局面。

微调是一个过程,其中现有的预训练LLM在特定数据集上进一步训练,以使其适应特定任务或领域。通过将模型暴露于特定于任务的数据,它可以学习更好地理解目标领域的细微差别、上下文和复杂性。此过程使开发人员能够改进模型的性能,提高准确性,并使其与现实世界的应用程序更加相关。

7.1、何时进行微调

LLM 学习新知识有两种主要方式:权重更新和提示。权重更新可以通过预训练或微调来实现,而提示则可以通过检索增强生成(RAG)等方式来实现。模型的权重类似于长期记忆,而提示则类似于短期记忆。一个有用的类比是将微调比作一周后准备考试,而将插入提示的知识比作使用开放笔记参加考试。

然而,在教授LLM新知识或回忆事实时,并不建议进行微调。OpenAI 的 John Schulman 在他的演讲中指出,微调可能会导致幻觉。相对而言,微调更适合用于教授特定任务,并应与提示或 RAG 相结合使用。具体情况取决于LLM需要明确定义任务、具备充足示例和/或缺少少量提示的上下文学习能力。Anyscale 在他们的博客中很好地总结了这些观点:微调是为形式服务,而不是为事实服务

7.2、如何进行微调

已经有许多有用的 LLaMA 微调方法发布了,用于在聊天等任务中使用 HuggingFace 中 OpenAssistant 语料库的子集。需要注意的是,这些工作流程可以在单个 CoLab GPU 上运行,使其易于使用。然而,在微调过程中还存在两个主要问题,即数据集收集/清理和评估。下面我们将介绍如何使用 LangSmith 来解决这两个问题(绿色部分)。

7.3、任务

对于分类/标记或提取等任务,微调是非常适合的。Anyscale 使用LLaMA 7B和13B LLM 进行了微调,在提取、文本到 SQL 和 QA 方面取得了令人鼓舞的结果(超过 GPT4)。作为一个测试用例,我们选择从文本中提取形式为(主体、关系、客体)的知识三元组:其中主体和客体是实体,关系是它们之间的属性或联系。然后,这些三元组可以用于构建知识图谱,即存储有关实体及其关系信息的数据库。我们还创建了一个公共 Streamlit 应用程序,以便从用户输入的文本中提取三元组,并探索 LLM(GPT3.5 或 4)通过函数调用来提取三元组的能力。同时,我们使用公共数据集对 LLaMA2-7b-chat 和 GPT-3.5 进行了微调。

7.4、数据集

在LLM培训中,数据集收集和清理通常是具有挑战性的任务。在 LangSmith 中建立项目时,代数会自动记录下来,使得获取大量数据变得容易。LangSmith 提供了一个可查询界面,因此您可以使用用户反馈过滤器、标签和其他指标来选择质量较差案例,并将其纠正并保存到可用于改进模型结果的数据集中(见下文)。

例如,我们使用公共 BenchIE 和 CarbIE 数据集中的知识图三元组创建了 LangSmith 的训练和测试数据集。我们将这些数据转换为共享的 JSON 格式,每个三元组都表示为 {s: 主题, o: 对象, r: 关系},并将组合数据随机拆分为约1500个带有标签的句子的训练集和100个句子的测试集。在 CoLab 中,您可以轻松加载 LangSmith 数据集。加载完毕后,我们可以使用下面的系统提示符和 LLaMA 指令标记来创建微调指令(如下所示):

"您是一个模型,任务是从给定的文本中提取知识图谱三元组。"
"这些三元组由三个部分组成:"
"- \"s\" 表示主题,即陈述的主要实体。"
"- \"object\" 表示主题所涉及的实体或概念。"
"- \"relation\" 表示主题和对象之间的关系。"
"您的目标是输入一个句子,并输出代表该句子中包含的知识的三元组。"

7.5、量化

我们对7B参数的LLaMA聊天模型进行了微调。希望在单个GPU上完成此操作(参考HuggingFace指南),但这带来了一个挑战:如果每个参数都是32位,那么7B参数的LLaMA2模型将占用28GB的内存,超过了T4 GPU的VRAM(16GB)。为了解决这个问题,我们对模型参数进行了量化,即将值分箱(例如,在4位量化下有16个值),从而减少了存储模型所需的内存(7B * 4位/参数 = 3.5GB)约8倍。

7.6、LoRA和qLoRA

当模型在内存中时,我们仍然需要一种在剩余GPU资源受限的情况下进行微调的方法。为此,参数高效微调(PEFT)是一种常见方法:LoRA冻结预训练模型权重,并将可训练的秩分解矩阵注入到每一层的模型架构中(请参见此处),从而减少可训练参数数量微调(例如,总体模型约1%)。qLoRA通过冻结量化权重来扩展此方法。在微调过程中,前向和后向传递使用反量化权重,并且只有少部分LoRA适配器保存在内存中,从而减少了微调模型的占用空间。

7.7、训练

我们开始使用预训练的LLaMA-7b聊天模型llama-2-7b-chat-hf,并在CoLab上的A100上对大约1500个指令进行了微调。对于训练配置,我们使用了LLaMA微调参数(BitsAndBytes),以4位精度加载基础模型,但前向和后向传递使用fp16。我们使用监督微调(SFT)对指令进行微调,在A100上处理如此小规模的数据非常快速(<15分钟)。

7.8、OpenAI微调

为了微调OpenAI的GPT-3.5-turbo聊天模型,我们从训练数据集中选择了50个示例,并将它们转换为所需格式的聊天消息列表:

{
    "messages": [
        {
            "role": "user", 
            "content": "从下面的句子中提取三连音:\n\n{sentence}"},
        {
            "role": "assistant", 
            "content": "{triples}"
        },
        ...
    ]
}

由于基本模型的功能非常广泛,因此我们不需要大量的数据来实现所需的行为。训练数据的目的是引导模型始终生成正确的格式和风格,而不是教给它大量信息。正如我们将在下面的评估部分看到的,50个训练示例足以让模型每次都以正确的格式预测三元组。

我们通过OpenAI SDK上传微调数据,并直接在LangChain的ChatOpenAI类中使用生成的模型。微调后的模型可以直接使用:

from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(model="ft:gpt-3.5-turbo-0613:{openaiOrg}::{modelId}")

整个过程只花了几分钟,除了在提示模板中添加少量示例之外,无需对我们的链进行任何代码更改。然后,我们将该模型与其他模型进行基准测试,以评估其性能。您可以在我们CoLab笔记本中查看整个过程示例。

7.9、评估

我们使用LangSmith对每个模型进行评估,并应用LLM(GPT-4)评估器对每个预测进行评分,以衡量评估器识别标签与预测三元组之间的事实差异。当预测中存在标签中不存在的三元组,或者预测未能包含三元组时,会受到惩罚。然而,如果对象或关系的确切措辞以无意义的方式有所不同,评估器将宽容处理。评分范围为0-100。我们在CoLab中运行了评估,在其中可以轻松配置我们自定义的评估器和链进行测试。

下表显示了LLaMA基础聊天模型和微调变体的评估结果。为了比较,我们还使用OpenAI的聊天模型对3个链进行了基准测试:使用少量提示的gpt-3.5-turbo、在50个训练数据点上微调的gpt-3.5-turbo模型以及少量提示gpt-4链:

  • GPT-4在少样本提示下表现最好

  • 经过微调后的GPT-3.5获得第二名

  • 经过微调后的LLaMA超越了GPT-3.5性能

  • 经过微调后的LLaMA比基线LLaMA性能提高约29%

7.10、结论

我们可以提炼出一些核心教训:

  • LangSmith 可以帮助解决微调工作流程中的痛点,例如数据收集、评估和结果检查。我们展示了 LangSmith 如何轻松收集和加载数据集以及运行评估和检查特定代。

  • 在进行更具挑战性和成本更高的微调之前,应仔细考虑 RAG 或少发提示。少样本提示 GPT-4 实际上比我们所有经过微调的变体表现更好。

  • 在明确定义的任务上微调小型开源模型可以胜过更大的通才模型。正如 Anyscale 和其他人之前报道的那样,我们看到经过微调的 LLaMA2-chat-7B 模型超过了更大的通才 LLM (GPT-3.5-turbo) 的性能。

  • 有许多方法可以提高微调性能,最值得注意的是仔细的任务定义和数据集管理。一些作品,例如 LIMA,通过对 LLaMA 进行微调,获得了令人印象深刻的性能,这些指令被选择为高质量的少至 1000 条指令。进一步的数据收集/清理、使用更大的基础模型(例如 LLaMA 13B)以及使用 GPU 服务进行扩展以进行微调(Lambda Labs、Modal、Vast.ai、Mosaic、Anyscale 等)都是可预见的改进方法这些结果。

总的来说,这些结果(以及链接的 CoLab)为使用 LangSmith 工具来微调开源 LLM 提供了快速方法,以帮助完成整个工作流程。

八、使用LangChain的好处

  • 使用 LangChain 微调LLM可以提高模型的准确性和特定任务或领域的上下文相关性,从而产生更高质量的输出。

  • LangChain 允许开发人员定制LLM来处理独特的任务、行业特定的术语和特定领域的上下文,以满足特定的用户需求。

  • 经过微调的LLM可以通过对特定领域语言的更深入理解来开发功能强大的应用程序,从而获得更准确和上下文感知的响应。

  • 使用 LangChain 进行微调减少了对大量训练数据和计算资源的需求,节省了时间和精力,同时实现了显着的性能改进。

九、总结

在构建 LLM 支持的应用程序方面,LangChain 开启了一个充满可能性的世界。如果您的兴趣在于文本完成、语言翻译、情感分析、文本摘要或命名实体识别。 LangChain 提供直观的平台和强大的 API,将您的想法变为现实。通过利用LLM的功能,您可以创建能够理解和生成类人文本的智能应用程序,从而彻底改变我们与语言交互的方式。

另外本文介绍了微调开源LLM的教训,包括使用LangSmith工具解决微调工作流程中的痛点,仔细考虑RAG或少发提示,以及微调小型开源模型可以胜过更大的通才模型。此外,文章还提到了提高微调性能的方法,例如仔细的任务定义和数据集管理、进一步的数据收集/清理、使用更大的基础模型以及使用GPU服务进行扩展。总的来说,这些结果为使用LangSmith工具来微调开源LLM提供了快速方法,以帮助完成整个工作流程。

十、References

  • LangChain:https://www.langchain.com/

  • LangChain GitHub: https://github.com/langchain-ai/langchain

  • LangChain Introduction:https://www.pinecone.io/learn/series/langchain/langchain-intro/

  • LangSmith: https://docs.smith.langchain.com/

  • Announcing LangSmith: https://blog.langchain.dev/announcing-langsmith/

如果你对这篇文章感兴趣,而且你想要了解更多关于AI领域的实战技巧,可以关注「技术狂潮AI」公众号。在这里,你可以看到最新最热的AIGC领域的干货文章和案例实战教程。

猜你喜欢

转载自blog.csdn.net/FrenzyTechAI/article/details/132695264