from langsmith import evaluate, traceable, wrappers, Client
from openai import OpenAI
from pydantic import BaseModel
# 包装 OpenAI 客户端以自动跟踪所有 LLM 调用
oai_client = wrappers.wrap_openai(OpenAI())
# 1. 定义您的评估器函数
# 此函数接收每个测试示例的输入和输出
def valid_reasoning(inputs: dict, outputs: dict) -> bool:
"""使用 LLM 判断推理和答案是否一致。"""
# 定义评估标准
instructions = """
给定以下问题、答案和推理,判断答案的推理在逻辑上是否有效,并且与问题和答案一致。"""
# 使用结构化输出获取布尔分数
class Response(BaseModel):
reasoning_is_valid: bool
# 使用实际输入和输出构建提示
msg = f"问题: {inputs['question']}\n答案: {outputs['answer']}\n推理: {outputs['reasoning']}"
# 调用 LLM 来判断输出
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
# 2. 定义您的目标函数(被评估的应用程序)
# @traceable 装饰器将跟踪记录到 LangSmith 以进行调试
@traceable
def dummy_app(inputs: dict) -> dict:
return {"answer": "hmm i'm not sure", "reasoning": "i didn't understand the question"}
# 3. 创建包含测试示例的数据集
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)
# 4. 运行评估
# 这会在每个示例上运行 dummy_app 并应用 valid_reasoning 评估器
results = evaluate(
dummy_app, # 您的应用程序函数
data=dataset, # 要评估的数据集
evaluators=[valid_reasoning] # 评估器函数列表
)