以编程方式使用文档

断言将审阅者的英语标准转换为自动化检查。它们是关于正确答案应该或不应该包含什么的简短、自由格式的声明。您在审阅单次运行时编写它们 单次运行标注队列,LangSmith 将每个断言保存到一个 数据集示例。任何 离线评估器 都可以检查您应用程序的新输出是否满足每个断言。

使用断言的场景:

  • - 运行的输出是错误的,而您更愿意描述正确答案的外观,而不是手动编写一个。
  • - 您想在不离开审阅流程的情况下用简单英语捕获验收标准。

添加断言

  1. LangSmith UI中,导航到 **标注队列** 在左侧边栏中。打开一个单次运行队列并选择一个运行。
  2. 在侧面板中,找到 **断言** 部分,位于 **反馈**.
  3. 下方。点击 **+ 添加** 以创建断言行。
  4. 输入一个 **键** 来总结该断言(例如, must_cite_source, must_not_invent_url)和一句 **评论** 来描述该断言。

该键是自由格式的。 must_ / must_not_ 前缀只是一种命名约定;LangSmith 不会特别处理它们。

  1. 为您想要捕获的每个标准重复步骤 3 和 4。

运行编辑器与断言侧面板并排显示运行的输入和输出。一旦您添加至少一个断言,运行编辑器的 **输出** 面板从运行的输出切换为您添加的断言的只读预览。此预览将保存到数据集中。运行的输出不会被保存,因为断言描述的是正确答案应该包含的内容,而不是这个运行产生的内容。

侧边栏中添加了断言的注释队列运行编辑器,输出面板显示这些断言的只读预览。 侧边栏中添加了断言的注释队列运行编辑器,输出面板显示这些断言的只读预览。

您可以随时编辑运行的 **输入** ,例如在保存示例之前优化提示词。 **输出** 面板会在存在任何断言时保持锁定在断言预览状态。

  1. 点击 **添加到数据集并继续** 在侧边栏底部(键盘快捷键: <kbd>⌘ Enter</kbd> 在 macOS 上,或 <kbd>Ctrl Enter</kbd> 在其他位置)。LangSmith 会将当前运行添加到队列的 默认数据集,如果没有配置默认数据集,则会提示您选择一个。然后队列会转到下一个运行。

保存的示例的 outputs 字段存储为 JSON。例如:

{
  "assertions": [
    {
      "key": "must_cite_source",
      "comment": "The response cites the source URL it is drawing from."
    },
    {
      "key": "must_not_invent_url",
      "comment": "The response does not include URLs that do not appear in the inputs."
    }
  ]
}

示例的 inputs 字段存储运行的输入,如果您进行了修改,则存储编辑后的版本。参见 示例数据格式 了解保存示例的完整结构。

根据断言进行评估

编写一个 离线评估器 ,用于读取保存的断言 reference_outputs["assertions"] 并为每个断言返回一个反馈分数。最小形状:

def grade_against_assertions(outputs: dict, reference_outputs: dict) -> list[dict]:
    """Return one feedback score per assertion."""
    feedback = []
    for assertion in reference_outputs["assertions"]:
        # Replace with your scoring logic: LLM judge, regex, schema check, and so on.
        score = ...
        feedback.append({"key": assertion["key"], "score": score})
    return feedback

如何对每个声明进行评分取决于您。三种模式较为常见,可以在一个评估器中组合使用:

  • - **LLM-as-a-judge**:对于每个断言,使用应用程序的输出和断言的 comment来提示模型,并让它返回一个分数。当声明较为主观或难以机械验证时效果最佳。
  • - **代码检查**:对于每个断言,根据断言的 key运行确定性检查,例如正则匹配、模式验证或子字符串存在性检查。当声明有明确、机械的答案时效果最佳。
  • - **部分信用评分**:返回数值分数(例如 0.0 到 1.0 之间)而不是布尔值,以便按等级评分,并对满足部分但非全部声明的输出给予"部分信用"。