본문으로 건너뛰기

[pydantic-ai] Validation 에러 재시도 메시지 개선 — Markdown 코드 블록 포맷

PR 링크: pydantic/pydantic-ai#3193 상태: Merged | 변경: +11 / -5

들어가며

Pydantic AI에서 LLM의 tool call 결과가 validation에 실패하면, 에러 메시지를 포함한 retry prompt를 LLM에게 다시 전달합니다. 기존 포맷은 "1 validation errors: [{...}]" 형태의 평문이었는데, JSON 데이터가 텍스트에 섞여 LLM이 에러 구조를 파싱하기 어려웠습니다. 이 PR은 Markdown 코드 블록으로 감싸고, 단수/복수 문법도 교정합니다.

핵심 코드 분석

Before (messages.py):

json_errors = error_details_ta.dump_json(self.content, exclude={'__all__': {'ctx'}}, indent=2)
description = f'{len(self.content)} validation errors: {json_errors.decode()}'

After:

json_errors = error_details_ta.dump_json(self.content, exclude={'__all__': {'ctx'}}, indent=2)
plural = isinstance(self.content, list) and len(self.content) != 1
description = (
    f'{len(self.content)} validation error{"s" if plural else ""}:\n```json\n{json_errors.decode()}\n```'
)

변경 사항:

  1. 단수/복수 처리: 1 validation error vs 2 validation errors
  2. Markdown json 코드 블록: JSON 에러 상세를 ```json ```으로 감싸 구조를 명확히 전달

실제 출력 비교

Before:

1 validation errors: [{"type": "value_error", "loc": ["b"], "msg": "...", "input": "foo"}]

Fix the errors and try again.

After:

1 validation error:
```json
[
  {
    "type": "value_error",
    "loc": ["b"],
    "msg": "...",
    "input": "foo"
  }
]

Fix the errors and try again.


## 왜 이게 좋은가

- LLM이 Markdown 포맷을 더 잘 이해하므로, validation 에러 수정 성공률이 높아질 수 있습니다.
- 코드 블록 구분으로 JSON 구조가 명확해져, LLM이 어떤 필드에서 어떤 에러가 발생했는지 파악하기 쉽습니다.
- 단수/복수 문법 교정은 작지만 프로페셔널한 메시지 품질을 제공합니다.

## 정리

- **LLM에게 보내는 메시지도 포맷이 중요하다**: 구조화된 Markdown은 평문보다 LLM의 이해도를 높입니다.
- **에러 메시지의 문법을 신경 써라**: 단수/복수 같은 세부 사항이 전체적인 품질 인상을 결정합니다.

## 참고 자료

- [pydantic/pydantic-ai#3193](https://github.com/pydantic/pydantic-ai/pull/3193) — PR 전체 diff

> ⚠️ **알림:** 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.

댓글

관련 포스트

PR Analysis 의 다른글