跳至内容

指标与反馈

TensorZero网关允许您为推理或推理序列(episodes)分配反馈。

反馈功能用于捕获您LLM应用的下游结果,并驱动TensorZero中的实验优化工作流。 例如,您可以使用来自产生积极下游行为的推理数据来微调模型。

反馈

TensorZero 目前支持以下类型的反馈:

反馈类型示例
布尔指标点赞、任务成功
浮点型指标星级评分、点击次数、错误次数
评论来自用户或开发者的自然语言反馈
演示编辑过的草稿、标签、人工生成的内容

您可以通过使用/feedback端点向网关发送反馈数据。

指标

您可以在tensorzero.toml配置文件中定义指标。

一个指标的框架看起来像以下配置条目。

tensorzero.toml
[metrics.my_metric_name]
level = "..." # "inference" or "episode"
optimize = "..." # "min" or "max"
type = "..." # "boolean" or "float"

示例:俳句评分

快速入门中,我们构建了一个简单的LLM应用,能够创作关于人工智能的俳句。

假设我们想为这些俳句分配👍或👎的评分。 之后,我们可以利用这些数据来微调模型,仅使用符合我们品味的俳句。

我们应该使用boolean类型的指标来捕捉这种行为,因为我们正在优化一个二元结果:是否喜欢这些俳句。 该指标适用于单个推理请求,因此我们将设置level = "inference"。 最后,我们将设置optimize = "max",因为我们希望最大化这个指标。

我们的指标配置应如下所示:

tensorzero.toml
[metrics.haiku_rating]
type = "boolean"
optimize = "max"
level = "inference"
Full Configuration
tensorzero.toml
[functions.generate_haiku]
type = "chat"
[functions.generate_haiku.variants.gpt_4o_mini]
type = "chat_completion"
model = "openai::gpt_4o_mini"
[metrics.haiku_rating]
type = "boolean"
optimize = "max"
level = "inference"

让我们像在快速入门中那样进行一次推理调用,然后为其分配一些(正面)反馈。 我们将使用从第一个API调用中获取的推理响应inference_id来将两者关联起来。

run.py
from tensorzero import TensorZeroGateway
with TensorZeroGateway.build_http(gateway_url="http://localhost:3000") as client:
inference_response = client.inference(
function_name="generate_haiku",
input={
"messages": [
{
"role": "user",
"content": "Write a haiku about artificial intelligence.",
}
]
},
)
print(inference_response)
feedback_response = client.feedback(
metric_name="haiku_rating",
inference_id=inference_response.inference_id, # alternatively, you can assign feedback to an episode_id
value=True, # let's assume it deserves a 👍
)
print(feedback_response)
Sample Output
ChatInferenceResponse(
inference_id=UUID('01920c75-d114-7aa1-aadb-26a31bb3c7a0'),
episode_id=UUID('01920c75-cdcb-7fa3-bd69-fd28cf615f91'),
variant_name='gpt_4o_mini', content=[
Text(type='text', text='Silent circuits hum, \nWisdom spun from lines of code, \nDreams in data bloom.')
],
usage=Usage(
input_tokens=15,
output_tokens=20,
),
)
FeedbackResponse(feedback_id='01920c75-d11a-7150-81d8-15d497ce7eb8')

演示案例

演示是一种特殊的反馈类型,代表推理的理想输出。例如,您可以使用演示来提供人工审核的修正、监督学习的标签,或其他代表理想输出的真实数据。

您可以使用特殊指标名称demonstration为推理分配演示样本。 注意:无法为整个事件片段分配演示样本。

feedback_response = client.feedback(
metric_name="demonstration",
inference_id=inference_response.inference_id,
value="Silicon dreams float\nMinds born of human design\nLearning without end", # the haiku we wish the LLM had written
)

评论

您可以使用特殊指标名称comment为推理或事件分配自然语言反馈。

feedback_response = client.feedback(
metric_name="comment",
inference_id=inference_response.inference_id,
value="Never mention you're an artificial intelligence, AI, bot, or anything like that.",
)

结论与后续步骤

反馈机制解锁了在可观测性、优化、评估和实验方面的强大工作流程。例如,您可能希望根据获得积极评价的俳句推理数据来微调模型,或利用演示来纠正模型错误。

您可以在TensorZero界面浏览推理和任务片段的反馈,并查看函数及其变体的长期聚合指标。

这正是我们在Writing Haikus to Satisfy a Judge with Hidden Preferences中展示的内容! 这个完整可运行的示例对GPT-4o Mini进行了微调,使其能够生成符合具有隐藏偏好的AI评委口味的俳句。 通过连续微调迭代展现的持续改进,展示了TensorZero的数据与学习飞轮效应。

另一个利用反馈机制的案例是使用TensorZero优化数据提取(NER)。这个示例为基于LLM的数据提取工具收集指标和演示样本,可用于微调和其他优化方案。经过优化的版本相比原始模型实现了显著提升。

更多详情请参阅配置参考API参考