本地运行#
LangChain 基准测试包最适合与 LangSmith 一起使用。您可以创建一个免费帐户 在这里 并阅读 文档在这里。
如果您无法创建帐户,仍然可以在没有帐户的情况下本地运行这些基准测试。
以下是一个示例。
# Prove that we can run without LangSmith
import os
_ = [
os.environ.pop(key)
for key in list(os.environ.keys())
if key.startswith("LANGCHAIN_")
]
from langchain_benchmarks import registry
task = registry["Multiverse Math"]
task
名称 | 多元宇宙数学 |
类型 | ToolUsageTask |
数据集 ID | 594f9f60-30a0-49bf-b075-f44beabf546a |
描述 | 一个包含一些基本数学运算的环境,但结果被改变。例如,5*3 的乘法将被重新解释为 5*3*1.1。基本运算保留了一些基本性质,如交换律、结合律和分配律;然而,结果与预期不同。此任务的目标是评估使用提供的工具解决简单数学问题的能力,并忽略有关数学的任何固有知识。 |
评估#
现在让我们评估一个代理。不会保存任何内容到 langsmith,因此请确保将测试结果保存到您的文件系统,如果您以后要使用它们。
import uuid
from langchain_benchmarks.tool_usage import agents, get_eval_config
from langchain_benchmarks.utils import run_without_langsmith
experiment_uuid = uuid.uuid4().hex[:4]
models = ["gpt-3.5-turbo-1106"]
for model in models:
print()
eval_config = get_eval_config(output_evaluation="qa_math")
agent_factory = agents.OpenAIAgentFactory(task, model=model)
test_run = run_without_langsmith(
# This will clone the dataset locally if not already there
path_or_token_id=task.dataset_id,
llm_or_chain_factory=agent_factory,
evaluation=eval_config,
verbose=True,
)
实验结果
inputs.question | outputs.input | outputs.output | outputs.intermediate_steps | feedback.Intermediate steps correctness | feedback.# steps / # expected steps | feedback.correctness | error | execution_time | |
---|---|---|---|---|---|---|---|---|---|
count | 10 | 10 | 10 | 10 | 10.0 | 10.0 | 10.0 | 0 | 10.000000 |
unique | 10 | 10 | 1 | 1 | NaN | NaN | NaN | 0 | NaN |
top | 将 (以 10 为底的对数 100) 的结果乘以... | 将 (以 10 为底的对数 100) 的结果乘以... | [] | NaN | NaN | NaN | NaN | NaN | |
freq | 1 | 1 | 10 | 10 | NaN | NaN | NaN | NaN | NaN |
mean | NaN | NaN | NaN | NaN | 0.0 | 0.0 | 0.0 | NaN | 1.453172 |
std | NaN | NaN | NaN | NaN | 0.0 | 0.0 | 0.0 | NaN | 0.496547 |
min | NaN | NaN | NaN | NaN | 0.0 | 0.0 | 0.0 | NaN | 0.763208 |
25% | NaN | NaN | NaN | NaN | 0.0 | 0.0 | 0.0 | NaN | 0.963885 |
50% | NaN | NaN | NaN | NaN | 0.0 | 0.0 | 0.0 | NaN | 1.593439 |
75% | NaN | NaN | NaN | NaN | 0.0 | 0.0 | 0.0 | NaN | 1.870549 |
max | NaN | NaN | NaN | NaN | 0.0 | 0.0 | 0.0 | NaN | 1.957470 |
# You can interact with the object directly or as a flattened dataframe
df = test_run.to_dataframe()
df.head()
inputs.question | outputs.input | outputs.output | outputs.intermediate_steps | feedback.Intermediate steps correctness | feedback.# steps / # expected steps | feedback.correctness | error | execution_time | |
---|---|---|---|---|---|---|---|---|---|
27c44572-6c67-4129-a95a-fe1509c350be | 将 (以 10 为底的对数 100) 的结果乘以... | 将 (以 10 为底的对数 100) 的结果乘以... | [] | 0 | 0.0 | 0 | None | 0.763208 | |
2a20a13d-050e-4a16-84ff-22d9582f1449 | 计算 1.5 弧度的正弦值后,将其除以... | 计算 1.5 弧度的正弦值后,将其除以... | [] | 0 | 0.0 | 0 | None | 1.413695 | |
67867526-791a-452f-b534-ef2c1f5efd20 | 大肠杆菌每 20 分钟分裂一次。有多少个细胞...? | 大肠杆菌每 20 分钟分裂一次。有多少个细胞...? | [] | 0 | 0.0 | 0 | None | 1.773183 | |
4ac33c1a-62f0-4da4-9455-07b582f6ff52 | 计算 101 的 0.5 次方,保留 4 位小数... | 计算 101 的 0.5 次方,保留 4 位小数... | [] | 0 | 0.0 | 0 | None | 1.819677 | |
2e82a924-8382-425e-8738-daa2d912e9fe | 将 15 度转换为弧度 | 将 15 度转换为弧度 | [] | 0 | 0.0 | 0 | None | 1.957470 |
df.to_csv("output.csv", index=False)