测试、评估与监控您的AI应用
🐦 Twitter/X • 📢 Discord • Parea AI • 📙 文档
Parea AI 提供了一个 SDK,用于评估和监控您的 AI 应用程序。以下是快速入门指南:
完整文档请参阅此处。
pip install -U parea-ai
或使用 Poetry 安装
poetry add parea-ai
测试您的 AI 应用意味着在数据集上执行它并使用评估函数进行评分。在 Parea 中,这是通过定义和运行实验来完成的。以下是一个示例,展示如何使用 Levenshtein 距离指标测试一个问候机器人。
from parea import Parea, trace
from parea.evals.general import levenshtein
p = Parea(api_key="<<PAREA_API_KEY>>") # 替换为您的 Parea AI API 密钥
# 使用 trace 装饰器,通过 Levenshtein 距离评估输出
@trace(eval_funcs=[levenshtein])
def greeting(name: str) -> str:
return f"Hello {name}"
data = [
{"name": "Foo", "target": "Hi Foo"},
{"name": "Bar", "target": "Hello Bar"},
]
p.experiment(
name="Greeting",
data=data,
func=greeting,
).run()
在上面的代码片段中,我们使用 trace 装饰器来捕获函数的任何输入和输出。此装饰器还允许通过在后台执行 levenshtein 评估来对输出进行评分。然后,我们通过 p.experiment 定义了一个实验,以在数据集(这里是一个字典列表)上评估我们的函数(greeting)。最后,调用 run 将执行实验,并为数据集的每个样本创建输出、分数和追踪的报告。您可以在此处找到已执行实验的链接。(待办:填写实验链接)
请阅读我们的文档,了解如何编写、运行和分析实验。
通过包装相应的客户端,您可以自动将所有对 OpenAI 和 Anthropic 的 LLM 调用记录到日志中。此外,使用 trace 装饰器,您可以创建 LLM 应用程序的分层追踪,例如将 LLM 调用与 RAG 管道的检索步骤关联起来。完整的可观测性文档请参见此处,我们对 LangChain、Instructor、DSPy、LiteLLM 等的集成请参见此处。
要自动记录任何 OpenAI 调用,您可以使用 wrap_openai_client 方法将 OpenAI 客户端包装在 Parea 客户端中。
from openai import OpenAI
from parea import Parea
client = OpenAI(api_key="OPENAI_API_KEY")
# 您只需要添加这两行
p = Parea(api_key="PAREA_API_KEY") # 替换为您的 API 密钥
p.wrap_openai_client(client)
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": "Write a Hello World program in Python using FastAPI.",
}
],
)
print(response.choices[0].message.content)
要自动记录任何 Anthropic 调用,您可以使用 wrap_anthropic_client 方法将 Anthropic 客户端包装在 Parea 客户端中。
import anthropic
from parea import Parea
p = Parea(api_key="PAREA_API_KEY") # 替换为您的 API 密钥
client = anthropic.Anthropic()
p.wrap_anthropic_client(client)
message = client.messages.create(
model="claude-3-opus-20240229",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Write a Hello World program in Python using FastAPI.",
}
],
)
print(message.content[0].text)
通过使用 trace 装饰器,您可以创建 LLM 应用程序的分层追踪。
from openai import OpenAI
from parea import Parea, trace
client = OpenAI(api_key="OPENAI_API_KEY") # 替换为您的 API 密钥
p = Parea(api_key="PAREA_API_KEY") # 替换为您的 API 密钥
p.wrap_openai_client(client)
# 我们通常建议创建一个辅助函数来进行 LLM API 调用。
def llm(messages: list[dict[str, str]]) -> str:
response = client.chat.completions.create(model="gpt-4o", messages=messages)
return response.choices[0].message.content
# 这将赋予 Span 函数名。
# 如果没有装饰器,所有 LLM 调用日志的默认名称是 `llm-openai`
@trace
def hello_world(lang: str, framework: str):
return llm([{"role": "user", "content": f"Write a Hello World program in {lang} using {framework}."}])
@trace
def critique_code(code: str):
return llm([{"role": "user", "content": f"How can we improve this code: \n {code}"}])
# 我们的顶层函数名为 chain。通过在此处添加 trace 装饰器,
# 所有子函数将自动被记录并与该追踪关联。
# 注意,您也可以向追踪添加元数据,我们稍后会重新讨论此功能。
@trace(metadata={"purpose": "example"}, end_user_identifier="John Doe")
def chain(lang: str, framework: str) -> str:
return critique_code(hello_world(lang, framework))
print(chain("Python", "FastAPI"))
部署的提示词使非工程师(如产品经理和领域专家)能够参与协作。用户可以在 Parea 的 Playground 上迭代、优化和测试提示词。调整完成后,您可以部署该提示词,这意味着它通过一个 API 端点暴露出来,以便集成到您的应用程序中。完整文档请查看此处。
from parea import Parea
from parea.schemas.models import Completion, UseDeployedPrompt, CompletionResponse, UseDeployedPromptResponse
p = Parea(api_key="<PAREA_API_KEY>")
# 您可以在 Parea 仪表板中找到此 deployment_id
deployment_id = '<DEPLOYMENT_ID>'
# 假设您部署的提示词消息是:
# {"role": "user", "content": "Write a hello world program using {{x}} and the {{y}} framework."}
inputs = {"x": "Golang", "y": "Fiber"}
# 您可以轻松地将字典解包到 attrs 类中
test_completion = Completion(
**{
"deployment_id": deployment_id,
"llm_inputs": inputs,
"metadata": {"purpose": "testing"}
}
)
# 通过传入我的输入,除了包含未填充变量 {{x}} 和 {{y}} 的原始消息外,
# 您还将获得填充后的提示词:
# {"role": "user", "content": "Write a hello world program using Golang and the Fiber framework."}
test_get_prompt = UseDeployedPrompt(deployment_id=deployment_id, llm_inputs=inputs)
def main():
completion_response: CompletionResponse = p.completion(data=test_completion)
print(completion_response)
deployed_prompt: UseDeployedPromptResponse = p.get_prompt(data=test_get_prompt)
print("\n\n")
print(deployed_prompt)
本项目根据 Apache Software License 2.0 许可证的条款授权。
有关更多详细信息,请参阅 LICENSE。
@misc{parea-sdk,
author = {joel-parea-ai,joschkabraun},
title = {Parea python sdk},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/parea-ai/parea-sdk}}
}