首页 >科技周边 >人工智能 >Langsmith的调试和测试LLMS的简介

Langsmith的调试和测试LLMS的简介

Joseph Gordon-Levitt
Joseph Gordon-Levitt原创
2025-03-08 09:35:13161浏览

>我最近找到了一个AI平台,该平台会自动从任何类型的媒体生成抽认卡。由于我喜欢用间距重复记忆的概念,因此我立即上传了XGBoost教程,并要求AI在其上创建50个抽认卡。

,但我很失望。大多数问题太容易了,很少有关于代码语法。更奇怪的是,有10%的问题是相同的,并且完全不明显 - “法国的首都是什么?”。 这些类型的错误表明缺乏适当的评估和对AI服务产生的产出的验证。也许他们不知道兰史密斯。

> Langsmith是一个完善的平台,用于测试,调试和评估LLM应用程序。也许,其最重要的功能是LLM输出评估和性能监控。在本教程中,我们将看到行动中的框架并学习将其应用于您自己的项目中的技术。

>让我们开始!

为什么langsmith?

正如我上面提到的,Langsmith是评估大型语言应用程序的综合平台。以下是它们带来的一些特征和切实的现实世界好处:

快速设置

>程序员可以在几分钟而不是小时内开始尝试Langsmith。这意味着小型团队或独奏开发人员可以在一个周末进行AI申请,并可能在周一之前运送付费服务。

质量保证

>使用严格的评估工具,公司可以避免AI发行错误的尴尬和成本(例如我在介绍中给出的示例)。 Langsmith允许您根据内置标准检查LLM的输出,例如乐于助人,连贯性,厌女症,甚至是自然语言的定制评估,例如“输出陈词滥调的内容?”或者,在抽认卡的情况下,“卡是否包含编码问题?”。

实时监视和可视化

langsmith使用痕迹来记录LLM运行的各个方面。这些包括标准,例如延迟,代币计数,运行价格和所有类型的元数据。 Web UI允许您使用自然语言来快速根据错误百分比,延迟,日期甚至文本内容来快速过滤运行。这意味着,例如,如果AI导师开始对其对实际学生的反应进行故障,则可以在几个小时内推出修复程序。

>

与Langchain

集成 Langchain是专门针对LLMS开发阶段的Langmith的父框架。它提供模块化软件设计,可链多个LLM(代理),并将它们与其他API(例如YouTube,Google Search等)集成在一起。 Langsmith是顶部的樱桃,确保使用Langchain制造的原型通过使用其强大的评估和监视工具来按预期进行。

>与Langchain教程查看我们的LLM申请,以了解有关Langchain的更多信息。

数据集

Langsmith的另一个重要功能是数据集。它们可用于在部署前针对一组标准化示例来改善兰链链,代理或模型。例如,我们可能有一个包含两个列的CSV文件 - 以特定格式的抽认卡的问题和答案。

>通过将此文件转换为参考数据集,我们可以使用前面提到的质量保证指标来指示LLMS评估其自己的输出。

>我们现在将通过一对一的示例看到所有这些功能。

>

> llm应用程序开发工作流程

在ML应用程序开发中,您可以收集数据,训练,微调,测试和部署模型 - 这些步骤定义明确。但是,使用LLM应用程序,您通常会从供应商的现成模型开始。微调?那可能很昂贵。因此,您将专注于制定正确的提示 - 这全都是向您的LLM应用程序提出正确的问题。将其视为需要大量提示来测试内容,就像您需要大量的数据以进行良好的ML模型一样。

但是,在提示下,您正在处理进出的文本,而不是数字。因此,测量错误或准确性的通常方法,例如MSE或跨凝性,在这里不工作。另外,想象一下阅读所有输入和输出以进行评估 - 如果您有成千上万的提示进行评估,那将需要几天的时间。

>

因此,您需要一个工作流程,这一切都涉及有效地创建和测试这些提示,以查看LLM应用程序的表现,而不会淹没手动检查。这是可能的样子:

1。开发

在此阶段,您将使用Langchain之类的框架制作应用程序的基础。对于抽认卡生成器项目,您的原型可能包括供应商所选LLM顶部的多个组件。例如,您可能需要将其链接到:

检索器:搜索引擎API,Web刮板

文档加载程序:文件输入 - PDF,文本,CSV,JSON,剪贴板,YouTube,搜索等
    聊天加载程序
  • >向量存储
  • 嵌入模型
  • >回调
  • 等等(请参阅可以从Langchain Docs的此页面中添加哪种组件)。但是,您可以通过使用Langchain提供的普通高级任务的现成连锁店大幅度缩短开发时间。
  • >
  • 2。生产
  • 在此阶段,您将针对尽可能多的方案测试您的应用程序。这意味着您必须确保每个添加的组件效果很好,链条良好,并产生一致的高质量输出。
给定的LLM是非确定性的(它们不会为相同的输入产生相同的输出)和添加组件的复杂性,您将在此阶段将大部分时间花费在此阶段。朗史密斯的发展是使这段时间尽可能短的唯一目的。我们将在整个教程中进行更多讨论。

>

3。部署

>拥有可行的应用程序后,您可以将其部署为REST API。 REST API基本上将您现有的Langchain链或代理转换为其他人可以发送请求以与您的AI模型进行交互的HTTPS链接。现在,您将构建服务的用户界面,例如桌面应用程序,或者更常见的是网站。

>现在,没有简单的方法可以做到这一点,但是Langchain开发人员即将释放Langserve,这将集成到Fastapi中(那真是太棒了?)。查看文档此页面的潜行峰。

>

现在,让我们终于开始用langsmith进行修补。

>

langsmith平台概述

>我们将从理解Web UI开始。它可通过Smith.langchain.com链接获得。对于访问,您必须注册并从候补名单中清除,因为它目前处于封闭的beta中。

>但是,一旦您进入,着陆页将看起来像这样:

>

Langsmith的调试和测试LLMS的简介

>两个主要部分是项目和数据集和测试,并且可以通过Python SDK来操纵这两个部分。该平台还具有用于部署和注释队列的选项卡,但它们超出了本文的范围。

设置Langmith Python SDK

通过其Python SDK,在Langsmith中管理项目的管理要容易得多,该SDK通过API密钥连接到平台。

。 要获取钥匙,请单击平台中的密钥图标,然后将其保存在安全的地方。然后,在具有新的虚拟环境初始化的新目录中,创建一个.env文件。内部,粘贴以下两行:

接下来,在您的终端中,运行以下命令以安装langsmith和python-dotenv读取环境变量:

LANGCHAIN_API_KEY="LangSmith-API-key"
OPENAI_API_KEY="Your-OPENAI-key"
现在是时候编写代码了:

>

python-dotenv to read environment variables:
pip install -U langsmith
pip install python-dotenv
我们导入find_dotenv和load_dotenv函数以读取环境变量,并使用OS设置它们:

import warnings

from dotenv import find_dotenv, load_dotenv

warnings.filterwarnings("ignore")
>将langchain_tracing_v2设置为true启用跟踪(记录),这对于调试LLMS至关重要。之后,我们初始化一个客户与Langsmith平台进行交谈:

>客户包含在Langsmith中操纵项目和资产的高级命令。我们将使用的客户端的第一个命令是创建一个新项目:
import os

load_dotenv(find_dotenv())
os.environ["LANGCHAIN_API_KEY"] = str(os.getenv("LANGCHAIN_API_KEY"))
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"

成功运行后,您可以在Web UI的“项目”部分中查看列出的项目:>
from langsmith import Client

# Initialize a client
client = Client()

import uuid

# Create id
uid = uuid.uuid4()
# Create a unique name
PROJECT_NAME = "flashcards-generator-" + str(uid)
# Create the project
session = client.create_project(
   project_name=PROJECT_NAME,
   description="A project that generates flashcards from user input",
)
接下来,我们需要将新项目设置为默认值,并使用另一个环境变量:>

现在,我们需要一个llm来进行我们的项目。我们将使用GPT-3.5 Turbo,因为它便宜,但是您可以使用Langchain提供的许多其他型号。 Openai模型是通过Chatopenai类初始化的。

Langsmith的调试和测试LLMS的简介

>让我们进行第一次运行:

LANGCHAIN_API_KEY="LangSmith-API-key"
OPENAI_API_KEY="Your-OPENAI-key"

>如果您快速从UI检查项目,则会看到上述运行跟踪(已记录):

Langsmith的调试和测试LLMS的简介

>设置环境变量和客户端时,我们会自动启用日志记录。如您所见,我们已经有一堆关于运行的元数据。

Langsmith的调试和测试LLMS的简介

让我们再运行几个提示:

python-dotenv to read environment variables:
pip install -U langsmith
pip install python-dotenv
>我们已经可以构建一个基本的文本摘要。让我们总结一下上次运行的输出:>

太好了,现在是时候创建我们的第一个数据集了。

>
import warnings

from dotenv import find_dotenv, load_dotenv

warnings.filterwarnings("ignore")
在langmith

中创建一个未标记的数据集

>正如我在“ LLM应用程序开发工作流程”部分中提到的,您可能需要创建或收集数千个提示来评估您的LLM模型,链条或代理。因此,像我们上面所做的那样,运行那些一对一的人并不是最好的做法。

>

出于这个原因,Langsmith提供了三种类型的数据集:>

键值(KV) - 默认值:将输入定义为任意键值对。在评估需要多个输入或返回多个输出的链条和代理时,它们很有用。

>

llm数据集(LLM):输入和输出是在llms -string in,string out的“完成样式”中定义的。
    >聊天数据集(CHAT):这些是从LLM CHATS转换并使用结构化输入和序列化消息定义的数据集。
  • 首先,让我们看看如何创建一个没有输出的键值数据集。我们将使用客户端的create_dataset函数:
  • 现在,让我们添加三个输入,每个输入都要求LLM创建一个抽认卡:

>如果您浏览UI的数据集选项卡,则将看到每个提示符都列出了null输出:
import os

load_dotenv(find_dotenv())
os.environ["LANGCHAIN_API_KEY"] = str(os.getenv("LANGCHAIN_API_KEY"))
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"

from langsmith import Client

# Initialize a client
client = Client()

现在,让我们使用run_on_dataset函数在一行代码中运行所有提示:

Langsmith的调试和测试LLMS的简介>运行完成后,它将在数据集页面上列出。这是它的外观:

import uuid

# Create id
uid = uuid.uuid4()
# Create a unique name
PROJECT_NAME = "flashcards-generator-" + str(uid)
# Create the project
session = client.create_project(
   project_name=PROJECT_NAME,
   description="A project that generates flashcards from user input",
)

>我们刚刚在未标记的数据集上进行了测试 - 一个带有示例提示的数据集但没有示例输出。我们的测试只是对每个提示产生了回应,但没有评估任何问题。但是我们想执行基本检查,例如“输出有帮助吗?”或“响应是短的还是长的”?

>

langsmith允许我们使用内置的评估者进行此类检查。 Langsmith的调试和测试LLMS的简介评估langmith

中的LLMS

>使用数据集中的三个提示来运行简洁性和连贯性评估,我们可以使用RunevalConfig类:

LANGCHAIN_API_KEY="LangSmith-API-key"
OPENAI_API_KEY="Your-OPENAI-key"
上面的

,我们在称为评估者的列表中定义了两个标准。我们将这些评估器传递给RUN_ON_DATASET函数的评估参数:

python-dotenv to read environment variables:
pip install -U langsmith
pip install python-dotenv

> run_on_dataset是一个有用的功能,可以使用提供的LLM在数据集中运行所有提示,并随时执行任何类型的评估。它的结果将在每个数据集的专用页面上可见:

>

Langsmith的调试和测试LLMS的简介

这次,每个提示的运行都具有连贯性和简洁性指标。在底部,您还将看到每个度量的平均分数。

要查看所有内置标准的列表,请运行以下片段:>

import warnings

from dotenv import find_dotenv, load_dotenv

warnings.filterwarnings("ignore")
当然,并非所有LLM用例都可以与基本评估者一起检查。例如,没有评估者可以检查抽认卡是否包含编码问题。因此,我们最好定义它:

>通过自然语言传递自定义标准,我们只需将{“ criteria_name”:“检查状态”}传递给标准类。上面,我们正在创建两个额外的评估器,因此Langsmith将在数据集中的提示所产生的输出的顶部运行两个其他提示:
import os

load_dotenv(find_dotenv())
os.environ["LANGCHAIN_API_KEY"] = str(os.getenv("LANGCHAIN_API_KEY"))
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"
>

>如果您查看运行,您将看到我们在每个提示下定义的自定义标准。如果您徘徊,您将获得LLM的推理:
from langsmith import Client

# Initialize a client
client = Client()
>

Langsmith的调试和测试LLMS的简介

通过检查所有提示的评估结果,您会发现我们的标准未按预期进行评估。因此,这是要考虑的事情 - 您还需要提示设计标准以确保它们检查正确的内容。Langsmith的调试和测试LLMS的简介>

创建标记的数据集

有时,您可以决定创建一个带有预期输出(例如标记为数据集)的提示数据集。您可以以各种格式创建标记的数据集,但也许最常见的数据集是CSV文件。例如,这是我用chatgpt生成的文件,其中包含pytorch语法上的五个问题:

为了创建一个数据集,我们可以使用upload_csv函数:>

Langsmith的调试和测试LLMS的简介该函数具有三个必需的参数:CSV路径和输入/输出列的名称。一旦上传完成,数据集将出现在UI中:>

import uuid

# Create id
uid = uuid.uuid4()
# Create a unique name
PROJECT_NAME = "flashcards-generator-" + str(uid)
# Create the project
session = client.create_project(
   project_name=PROJECT_NAME,
   description="A project that generates flashcards from user input",
)
>让我们从本数据集的上一节中运行我们的自定义标准:

>如果您转到数据集页面并查看运行,我们可以看到每个自定义标准的平均分数:

>

Langsmith的调试和测试LLMS的简介

评估标记的数据集

用自然语言编写的内置和自定义评估器

主要用于未标记的数据集。对于我们上传的标记数据集,例如我们上传的CSV数据集,Langsmith提供了更全面的评估者,以衡量对提示的响应的正确性:>

    > context_qa(上下文Q&A):在评估正确性
  • 的同时使用示例输出作为上下文
  • > QA(Q&A):使用参考输出
  • > cot_qa(经过思考链问答):类似于Context_QA,但是该评估者迫使LLM在达成裁决之前使用经过思考的推理。
  • >
让我们在示例中尝试最后一个:

LANGCHAIN_API_KEY="LangSmith-API-key"
OPENAI_API_KEY="Your-OPENAI-key"
> cotqa标准返回一个称为上下文准确性的分数,如下面的GIF(也在UI中)中所示:

>

Langsmith的调试和测试LLMS的简介

请访问Langsmith文档的Langchain评估员部分,以了解有关评估人员的更多信息。

结论

在阅读本教程后,您对Langsmith确实是一个及时工程的工具,您将是正确的!目前,Langsmith是确保LLM的说明和输出的最佳框架实际上是您想要的。

>您还必须意识到构建生产级LLM应用程序所需的精力。因此,在从事LLM项目时,请使用Langsmith进行更流畅的体验。

>

>如果兰史密斯的某些概念没有意义,那么您可能缺乏兰班林的一些基本原理。以下是一些资源:

兰链介绍数据工程

    在Langchain中构建上下文感知聊天机器人
  • > langchain
  • 的及时工程
  • >如何使用langchain
  • 构建LLM应用程序
  • > Langchain Docs
  • langsmith docs

以上是Langsmith的调试和测试LLMS的简介的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn