LangSmith 允许您按反馈分数和元数据过滤以前的实验,以便轻松找到您关心的实验。

背景:向实验添加元数据

当您在 SDK 中运行实验时,您可以附加元数据以便在 UI 中更容易过滤。如果您知道在运行实验时要深入研究的轴,这会很有帮助。 在我们的示例中,我们将围绕使用的模型、模型提供商和提示的已知 ID 向实验附加元数据:
models = {
    "openai-gpt-4o": ChatOpenAI(model="gpt-4o", temperature=0),
    "openai-gpt-4o-mini": ChatOpenAI(model="gpt-4o-mini", temperature=0),
    "anthropic-claude-3-sonnet-20240229": ChatAnthropic(temperature=0, model_name="claude-3-sonnet-20240229")
}

prompts = {
    "singleminded": "always answer questions with the word banana.",
    "fruitminded": "always discuss fruit in your answers.",
    "basic": "you are a chatbot."
}

def answer_evaluator(run, example) -> dict:
    llm = ChatOpenAI(model="gpt-4o", temperature=0)
    answer_grader = hub.pull("langchain-ai/rag-answer-vs-reference") | llm
    score = answer_grader.invoke(
        {
            "question": example.inputs["question"],
            "correct_answer": example.outputs["answer"],
            "student_answer": run.outputs,
        }
    )
    return {"key": "correctness", "score": score["Score"]}

dataset_name = "Filterable Dataset"

for model_type, model in models.items():
    for prompt_type, prompt in prompts.items():
        def predict(example):
            return model.invoke(
                [("system", prompt), ("user", example["question"])]
            )

        model_provider = model_type.split("-")[0]
        model_name = model_type[len(model_provider) + 1:]

        evaluate(
            predict,
            data=dataset_name,
            evaluators=[answer_evaluator],
            # ADD IN METADATA HERE!!
            metadata={
                "model_provider": model_provider,
                "model_name": model_name,
                "prompt_id": prompt_type
            }
        )

在 UI 中过滤实验

在 UI 中,默认情况下我们看到所有已运行的实验。 如果我们,比如说,偏好 openai 模型,我们可以轻松过滤并首先仅查看 openai 模型中的分数: 我们可以堆叠过滤器,允许我们过滤掉正确性的低分,以确保我们只比较相关实验: 最后,我们可以清除和重置过滤器。例如,如果我们看到 singleminded 提示有明显的获胜者,我们可以更改过滤设置以查看任何其他模型提供商的模型是否也能很好地使用它:
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.