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

Parea SDK — 面向 LLM 应用的评测、追踪与观测工具

 
  authority ·  2026-08-05 11:00:23 · 4 次点击  · 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 的游乐场上迭代、优化和测试提示词。调整完成后,你可以部署该提示词,这意味着它可以通过 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}}
}
4 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 30 ms
Developed with Cursor