OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  Parea AI — 面向 LLM 应用的评测与可观测工具

Parea AI — 面向 LLM 应用的评测与可观测工具

 
  course ·  2026-02-13 02:02:21 · 7 次点击  · 0 条评论  

测试、评估与监控您的AI应用

测试、评估与监控您的AI应用

PyPI PyPI - Downloads from official pypistats License

🐦 Twitter/X   •   📢 Discord   •   Parea AI   •   📙 文档

Parea AI 提供了一个 SDK,用于评估和监控您的 AI 应用程序。以下是快速入门指南:

完整文档请参阅此处

安装

pip install -U parea-ai

或使用 Poetry 安装

poetry add parea-ai

评估您的 LLM 应用

测试您的 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 调用

要自动记录任何 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 调用

要自动记录任何 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)

🛡 许可证

License

本项目根据 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}}
}
7 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 22 ms
Developed with Cursor