评估一个 AI 代理
本教程演示了如何使用 Ragas 评估一个 AI 代理,具体来说是一个能够使用原子操作和函数调用功能来解决复杂表达式的数学代理。通过本教程,您将学习如何使用评估驱动的开发方式来评估和迭代您的代理。
graph TD
A[User Input<br/>Math Expression] --> B[MathToolsAgent]
subgraph LLM Agent Loop
B --> D{Need to use a Tool?}
D -- Yes --> E[Call Tool<br/>add/sub/mul/div]
E --> F[Tool Result]
F --> B
D -- No --> G[Emit Final Answer]
end
G --> H[Final Answer]
我们将从测试我们这个能够使用原子操作和函数调用功能来解决数学表达式的简单代理开始。
接下来,我们将为我们的代理创建一些示例表达式和预期输出,然后将它们转换为一个 CSV 文件。
import pandas as pd
dataset = [
{"expression": "(2 + 3) * (4 - 1)", "expected": 15},
{"expression": "5 * (6 + 2)", "expected": 40},
{"expression": "10 - (3 + 2)", "expected": 5},
]
df = pd.DataFrame(dataset)
df.to_csv("datasets/test_dataset.csv", index=False)
为了评估我们代理的性能,我们将定义一个非 LLM 指标,该指标比较我们代理的输出是否在预期输出的某个容差范围内,并根据比较结果返回 1/0。
from ragas.metrics import numeric_metric
from ragas.metrics.result import MetricResult
@numeric_metric(name="correctness")
def correctness_metric(prediction: float, actual: float):
"""Calculate correctness of the prediction."""
if isinstance(prediction, str) and "ERROR" in prediction:
return 0.0
result = 1.0 if abs(prediction - actual) < 1e-5 else 0.0
return MetricResult(value=result, reason=f"Prediction: {prediction}, Actual: {actual}")
接下来,我们将编写实验循环,该循环将在测试数据集上运行我们的代理,并使用该指标进行评估,然后将结果存储在一个 CSV 文件中。
from ragas import experiment
@experiment()
async def run_experiment(row):
expression = row["expression"]
expected_result = row["expected"]
# Get the model's prediction
prediction = math_agent.solve(expression)
# Calculate the correctness metric
correctness = correctness_metric.score(prediction=prediction.get("result"), actual=expected_result)
return {
"expression": expression,
"expected_result": expected_result,
"prediction": prediction.get("result"),
"log_file": prediction.get("log_file"),
"correctness": correctness.value
}
现在,每当您对代理进行更改时,您都可以运行实验并查看它如何影响您代理的性能。
端到端运行示例
-
设置您的 OpenAI API 密钥
-
运行评估
完成!您已使用 Ragas 成功评估了一个 AI 代理。您现在可以通过打开 experiments/experiment_name.csv 文件来查看结果。