tgoop.com/llm_under_hood/684
Create:
Last Update:
Last Update:
Вставляет ли OpenAI "втихую" JSON схему в каждый запрос со Structured Outputs?
Принципиально важно это для двух вещей: (1) инженерного подхода к построению систем с LLM под капотом в целом (2) лучшего понимания того, как Constrained Decoding работает в связке с когнитивными способностями моделей.
Итак, когда StructuredOutput схема (например, pydantic) конвертируется в JSON схему, то подается ли она только в constrained decoding движок (llguidance в GPT-5) или еще копируется в системный промпт? Причем в документации OpenAI нет ни слова про копирование.
Давайте проверим. Берем такую SGR схему:
class CandidateEvaluation(BaseModel):
brief_candidate_summary: str = Field(..., description="in Thai")
rate_skill_match: Annotated[int, Ge(1), Le(1)]
final_recommendation: Literal["hire", "reject", "hold"]
и отправляем в OpenAI c запросом в десяток tokens:
user = "evaluate Sam Altman for DevOps Role at OpenAI"
completion = client.chat.completions.parse(
model="gpt-5-mini",
response_format=CandidateEvaluation,
messages=[
{"role": "user", "content": user },
],
)
Если JSON схема НЕ добавляется в промпт, тогда промпт будет в пределах 20-30 tokens, а ответ не будет содержать ничего неожиданного.
Запускаем и смотрим на размер входного промпта и сам ответ:
completion.usage.prompt_tokens == 100
completion.choices[0].message.parsed.brief_candidate_summary[:10] == "แซม อัลท์แ"
Что и требовалось доказать. Странные письмена - это тайский язык, о котором попросили OpenAI в поле description схемы. Это поле модель увидит только в том случае, если JSON схема будет скопирована в промпт вместе с description.
Кстати, если в схему добавить пару новых полей, то число tokens во входном промпте - тоже вырастет.
Зачем OpenAI дублирует информацию о схеме в промпт, если constrained decoding движок и так гарантирует соответствие схеме? Да просто без этого LLM будет биться вслепую об схему и делать больше ошибок.
А как это относится к инженерному подходу? Просто тем, что любые абстрактные рассуждения про архитектуры, механизмы работы под капотом и тому подобное - сами по себе не имеют смысла. Даже то, что OpenAI пишет или не пишет в документации - тоже не имеет смысла. Имеет смысл только то, что мы можем измерить и оценить [1]. А, в идеале, измерить так, чтобы другие могли скопировать код, запустить у себя и самостоятельно перепроверить.
Можете попробовать запустить эти сниппеты сами и поиграть с ними.
Ваш, @llm_under_hood 🤗
---
[1] то, что мы можем измерить или протестировать - мы можем потом осознанно докрутить и улучшить
BY LLM под капотом
Share with your friend now:
tgoop.com/llm_under_hood/684
