Как использовать pydantic evals для проверки подсказокPython

Программы на Python
Ответить
Anonymous
 Как использовать pydantic evals для проверки подсказок

Сообщение Anonymous »

Примеры в документации, которые я могу найти, используют только обычные функции для тестирования, поэтому я попытался использовать в качестве примера тестовый пример колеса рулетки из документации pydantic-ai. У меня настроен агент следующим образом

Код: Выделить всё

from pydantic_ai import Agent, RunContext
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.providers.ollama import OllamaProvider

ollama_model = OpenAIChatModel(
model_name="llama3.1:latest",
provider=OllamaProvider(base_url="http://localhost:11434/v1"),
)

roulette_agent = Agent(
ollama_model,
deps_type=int,
output_type=bool,
system_prompt=(
"Use the `roulette_wheel` function to see if the "
"customer has won based on the number they provide."
),
)

@roulette_agent.tool
async def roulette_wheel(ctx: RunContext[int], square: int) -> str:
"""check if the square is a winner"""
return "winner" if square == ctx.deps else "loser"

if __name__ == "__main__":
# Run the agent
success_number = 18
result = roulette_agent.run_sync(
"Put my money on square eighteen", deps=success_number
)
print(result.output)
# > True
Когда я запускаю это, я в основном получаю правильный ответ, но иногда получаю ошибку UnexpectedModelBehavior: превышено максимальное количество повторов (1) для проверки вывода. Я попытался проверить это поведение с помощью следующего теста:

Код: Выделить всё

from roulette_wheel import roulette_agent

from pydantic_evals import Case, Dataset
from pydantic_evals.evaluators import EqualsExpected

# Create a dataset with test cases
success_number = 18
dataset = Dataset(
cases=[
Case(
name="no_win",
inputs={"query": "Put my money on square eighteen", "deps": success_number},
expected_output=False,
),
],
evaluators=[
EqualsExpected(),  # Check exact match with expected_output
],
)

# Run the evaluation
report = dataset.evaluate_sync(roulette_agent.run_sync)

# Print the results
report.print()
Однако похоже, что тест вызывает только ошибку UnexpectedModelBehaviour. Результат выглядит следующим образом

Код: Выделить всё

Evaluating run_sync ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Evaluation Summary:
run_sync
┏━━━━━━━━━┳━━━━━━━━━━┓
┃ Case ID ┃ Duration ┃
┡━━━━━━━━━╇━━━━━━━━━━┩
└─────────┴──────────┘
Case Failures
┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Case ID ┃ Error Message                                                               ┃
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ no_win  │ UnexpectedModelBehavior: Exceeded maximum retries (1) for output validation │
└─────────┴─────────────────────────────────────────────────────────────────────────────┘
Конечно, в результате тестирования мне хотелось бы узнать, может ли возникнуть такая ошибка, но я предполагаю, что хотя бы иногда функция должна возвращать ожидаемый результат. Я совершенно неправильно использую функции eval или мне просто нужно как-то реализовать обработку ошибок?

Подробнее здесь: https://stackoverflow.com/questions/798 ... st-prompts
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»