测试、评估与监控你的 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 的游乐场上迭代、优化和测试提示词。调整完成后,你可以部署该提示词,这意味着它可以通过 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}}
}