Parea:用于观察、测试和微调 Instructor¶
Parea 是一个平台,使团队能够监控、协作、测试和标记 LLM 应用程序。在本博客中,我们将探讨如何使用 Parea 增强 OpenAI 客户端并结合 instructor
来调试和改进 instructor
调用。Parea 具有一些使其对 instructor
特别有用的特性:
- 它会自动将因重试而产生的任何 LLM 调用归入一个单一的跟踪中
- 它会自动跟踪在使用
instructor
时发生的任何验证错误计数和字段 - 它提供了一个 UI,允许用户通过填写表单而不是编辑 JSON 对象来标记 JSON 响应
示例:使用 Instructor 文档中的 URL 编写电子邮件¶
我们将演示如何使用 instructor
结合 Parea 来编写只包含 instructor
文档中 URL 的电子邮件。在继续之前,我们需要安装依赖项,只需运行以下命令即可。
Parea 的集成非常简单——只需要两行代码,我们就可以完成设置。
import os
import instructor
from dotenv import load_dotenv
from openai import OpenAI
from parea import Parea # (1)!
load_dotenv()
client = OpenAI()
p = Parea(api_key=os.getenv("PAREA_API_KEY")) # (2)!
p.wrap_openai_client(client, "instructor")
client = instructor.from_openai(client)
- 从
parea
模块导入Parea
- 使用 Parea 与
instructor
的原生集成设置跟踪
在此示例中,我们将探讨如何编写只包含 instructor 文档链接的电子邮件。为此,我们可以定义一个简单的 Pydantic 模型,如下所示。
class Email(BaseModel):
subject: str
body: str = Field(
...,
description="Email body, Should contain links to instructor documentation. ",
)
@field_validator("body")
def check_urls(cls, v):
urls = re.findall(r"https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+", v)
errors = []
for url in urls:
if not url.startswith("https://python.instructor.net.cn"):
errors.append(
f"URL {url} is not from useinstructor.com, Only include URLs that include use instructor.com. "
)
response = requests.get(url)
if response.status_code != 200:
errors.append(
f"URL {url} returned status code {response.status_code}. Only include valid URLs that exist."
)
elif "404" in response.text:
errors.append(
f"URL {url} contained '404' in the body. Only include valid URLs that exist."
)
if errors:
raise ValueError("\n".join(errors))
return
现在我们可以使用上面的 Pydantic 模型来创建一封电子邮件。
email = client.messages.create(
model="gpt-3.5-turbo",
max_tokens=1024,
max_retries=3,
messages=[ # (1)!
{
"role": "user",
"content": "I'm responding to a student's question. Here is the link to the documentation: {{doc_link1}} and {{doc_link2}}",
}
],
template_inputs={
"doc_link1": "https://python.instructor.net.cn/docs/tutorial/tutorial-1",
"doc_link2": "https://jxnl.github.io/docs/tutorial/tutorial-2",
},
response_model=Email,
)
print(email)
- Parea 支持在
messages
参数中使用{{...}}
语法创建模板化提示。我们可以将模板输入作为一个字典传递给template_inputs
参数。
如果您按照我们所做的操作,Parea 已经包装了客户端,并且我们编写了一封包含 instructor 文档链接的电子邮件。
验证错误跟踪¶
要查看此执行的跟踪,请查看下面的截图。值得注意的有:
- 左侧边栏:所有相关的 LLM 调用都分组在一个名为
instructor
的跟踪下 - 中间部分:根跟踪将
templated_inputs
作为输入,并将创建的Email
对象作为输出进行可视化 - 右侧边栏底部:任何验证错误都会被捕获并作为该跟踪的分数进行跟踪,这使得可以在仪表板中可视化它们并在表格中按它们进行过滤
从上面我们可以看到,虽然电子邮件成功创建了,但出现了一个验证错误,这意味着由于最初的验证失败,引入了额外的成本和延迟。下面我们可以看到随着时间推移,我们的 instructor 使用的平均验证错误计数的可视化图表。
标记响应用于微调¶
有时,您可能希望让主题专家 (SME) 标记响应,以便将其用于微调。Parea 提供了一种通过注释队列来实现此目的的方法。编辑原始 JSON 对象来纠正工具使用和函数调用响应可能容易出错,特别是对于非开发人员。为此,Parea 提供了一个所谓的“表单模式”,允许用户安全地填写表单而不是编辑 JSON 对象。然后可以将标记的数据导出并用于微调。