如何定义 LLM-as-a-judge 评估器
LLM 应用的评估可能具有挑战性,因为它们通常生成对话文本,没有唯一的正确答案。
本指南向您展示如何使用 LangSmith SDK 或 UI 为 离线评估 定义 LLM-as-a-judge 评估器。注意:要在生产追踪中实时运行评估,请参阅设置在线评估。
- SDK
- UI
预构建的评估器
预构建的评估器是设置评估的有用起点。有关如何将预构建的评估器与 LangSmith 一起使用的信息,请参阅预构建的评估器。
创建您自己的 LLM-as-a-judge 评估器
为了完全控制评估器逻辑,请创建您自己的 LLM-as-a-judge 评估器,并使用 LangSmith SDK (Python / TypeScript) 运行它。
- Python
需要 langsmith>=0.2.0
from langsmith import evaluate, traceable, wrappers, Client
from openai import OpenAI
# Assumes you've installed pydantic
from pydantic import BaseModel
# Optionally wrap the OpenAI client to trace all model calls.
oai_client = wrappers.wrap_openai(OpenAI())
def valid_reasoning(inputs: dict, outputs: dict) -> bool:
"""Use an LLM to judge if the reasoning and the answer are consistent."""
instructions = """\
Given the following question, answer, and reasoning, determine if the reasoning \
for the answer is logically valid and consistent with question and the answer.\
"""
class Response(BaseModel):
reasoning_is_valid: bool
msg = f"Question: {inputs['question']}\nAnswer: {outputs['answer']}\nReasoning: {outputs['reasoning']}"
response = oai_client.beta.chat.completions.parse(
model="gpt-4o",
messages=[{"role": "system", "content": instructions,}, {"role": "user", "content": msg}],
response_format=Response
)
return response.choices[0].message.parsed.reasoning_is_valid
# Optionally add the 'traceable' decorator to trace the inputs/outputs of this function.
@traceable
def dummy_app(inputs: dict) -> dict:
return {"answer": "hmm i'm not sure", "reasoning": "i didn't understand the question"}
ls_client = Client()
dataset = ls_client.create_dataset("big questions")
examples = [
{"inputs": {"question": "how will the universe end"}},
{"inputs": {"question": "are we alone"}},
]
ls_client.create_examples(dataset_id=dataset.id, examples=examples)
results = evaluate(
dummy_app,
data=dataset,
evaluators=[valid_reasoning]
)
有关如何编写自定义评估器的更多信息,请参阅此处。
预构建的评估器
预构建的评估器是设置评估时的一个有用的起点。LangSmith UI 支持以下预构建的评估器
- 幻觉检测:检测事实不正确的输出。需要参考输出。
- 正确性:检查与参考的语义相似性。
- 简洁性:评估答案是否是对问题的简洁回复。
- 代码检查器:验证代码答案的正确性。
您可以配置这些评估器:
- 当使用playground运行评估时
- 作为数据集的一部分,自动对数据集运行实验
- 当运行在线评估时
自定义您的 LLM-as-a-judge 评估器
为您的 LLM-as-a-judge 评估器 Prompt 添加具体说明,并配置应将输入/输出/参考输出的哪些部分传递给评估器。
选择/创建评估器
- 在 Playground 中或从数据集中:选择 +评估器 按钮
- 从追踪项目中:选择 添加规则,配置您的规则,然后选择 应用评估器
选择 创建您自己的评估器选项。或者,您可以先选择一个预构建的评估器并对其进行编辑。
配置评估器
Prompt
创建新的 Prompt,或从Prompt Hub中选择现有的 Prompt。
-
创建您自己的 Prompt:内联创建自定义 Prompt。
-
从 Prompt Hub 拉取 Prompt:使用 选择 Prompt 下拉菜单从现有 Prompt 中选择。您无法在 Prompt 编辑器中直接编辑这些 Prompt,但可以查看 Prompt 及其使用的架构。要进行更改,请在 Playground 中编辑 Prompt 并提交版本,然后在评估器中拉取您的新 Prompt。
模型
从提供的选项中选择所需的模型。
映射变量
使用变量映射来指示从您的运行或示例传递到评估器 Prompt 的变量。为了帮助进行变量映射,提供了一个示例(或运行)供参考。单击 Prompt 中的变量,然后使用下拉菜单将其映射到输入、输出或参考输出的相关部分。
要添加 Prompt 变量,如果使用 Mustache 格式(默认),请使用双花括号 {{prompt_var}}
输入变量,如果使用 f-string 格式,请使用单花括号 {prompt_var}
。
您可以根据需要删除变量。例如,如果您正在评估简洁性等指标,则通常不需要参考输出,因此您可以删除该变量。
预览
预览 Prompt 将向您展示使用右侧显示的参考运行和数据集示例格式化的 Prompt 的外观。
使用 Few-shot 示例改进您的评估器
为了使 LLM-as-a-judge 评估器更好地与人类偏好对齐,LangSmith 允许您收集关于评估器分数的人工校正。启用此选项后,校正将自动作为 Few-shot 示例插入到您的 Prompt 中。
反馈配置
反馈配置是您的 LLM-as-a-judge 评估器将使用的评分标准。将其视为您的评估器将基于其进行评分的规则。分数将作为反馈添加到运行或示例中。为您的评估器定义反馈
-
命名反馈键:这是查看评估结果时将出现的名称。名称在实验中应是唯一的。
-
添加描述:描述反馈代表的内容。
-
选择反馈类型:
- 布尔值:真/假反馈。
- 分类:从预定义类别中选择。
- 连续:指定范围内的数值评分。
如果您正在使用来自 Hub 的现有 Prompt,则必须在配置评估器以使用它之前,向 Prompt 添加输出架构。输出架构中的每个顶级键都将被视为单独的反馈。
保存评估器
完成配置后,保存您的更改。