Код Middle Промптинг и структурированный вывод спрашивают часто обновлено
Достать JSON из ответа модели
Условие
Модель иногда оборачивает JSON в текст или блок ```json. Напишите extract_json(text, required):
- найдите первый символ
{и попробуйте разобрать JSON-объект, начинающийся с него (используйтеjson.JSONDecoder().raw_decode); если не вышло, пробуйте со следующего{; - первый успешно разобранный объект проверьте: все ключи из списка
requiredдолжны присутствовать; - верните словарь
{"ok": True, "data": obj}или{"ok": False, "error": "no_json"}(объект не найден) /{"ok": False, "error": "missing:<ключ>"}(первый отсутствующий ключ в порядкеrequired).
Примеры
extract_json("{\"a\": 1}", ["a"]) // {"ok":true,"data":{"a":1}}
extract_json("Вот ответ:\n```json\n{\"label\": \"spam\", \"score\": 0.9}\n```", ["label", "score"]) // {"ok":true,"data":{"label":"spam","score":0.9}}
extract_json("Нет данных", ["a"]) // {"ok":false,"error":"no_json"}
Как подойти
Подсказки: 1
json.JSONDecoder().raw_decode(text, i)возвращает объект и позицию конца.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Ещё по теме «Промптинг и структурированный вывод»
- Constrained decoding
- Роли сообщений в чат-API
- Зачем отделять данные от инструкций
- Few-shot: подвох в примерах
- Порядок полей в схеме ответа
- Роли сообщений: заполните пропуски
- JSON mode против structured outputs
- Смена модели под тем же промптом