Files
brojs-task-69dd4221f309a98b…/answer.md
T
2026-05-18 11:12:23 +00:00

5.8 KiB

{ "task": { "_id": "69dd4221f309a98be0006b2e", "title": "сырой текст задания → плоская карточка", "description": "## Контекст проекта\n\nВ рамках курса вы собираете своего ассистента по учёбе: программа должна принимать неформальное описание задачи (как в переписке или на сайте курса) и превращать его в данные, с которыми дальше можно работать в коде (фильтровать, сохранять, передавать следующему шагу пайплайна). Здесь вы делаете модуль разбора одной формулировки в компактную сводку.\n\n## Цель\n\nНаучиться из одного пользовательского текста получить проверяемый набор полей без диалога и без «ручного» разбора строки в Python.\n\n## Стек и установка\n\n- Python 3.10+\n- Пакеты: langchain-core, langchain-openai, pydantic (версии — как рекомендует преподаватель).\n- Подключение к модели через переменные окружения или настройки клиента (конкретную модель в задании не фиксируем).\n\nУстановка (пример):\n\nbash\npip install langchain-core langchain-openai pydantic python-dotenv\n\n\n## Условия сценария (важно для выбора способа)\n\n- Вход: одна строка или короткий абзац — формулировка задания от «преподавателя» (выдуманная).\n- Нужно сразу получить объект с полями, например: title, subject, deadline_hint (строка в свободной форме), deliverable_type (что сдать: отчёт, код, презентация…), grading_hints (список строк — что упомянуто про оценку).\n- Нет уточняющих вопросов: модель не ведёт переписку, только один ответ на один запрос.\n- Вложенность минимальная: один уровень списка, без деревьев и без ссылок «узел → дети».\n\n## Что нужно сделать\n\n1. Описать Pydantic-модель карточки задания с полями выше (имена можно слегка изменить, смысл сохранить).\n2. Собрать цепочку: шаблон промпта → вызов языковой модели → парсер, который гарантирует тип результата BaseModel (или эквивалент по соглашению курса).\n3. В промпте явно попросить модель вернуть данные в формате, который ожидает ваш парсер.\n4. Вывести в консоль и валидированный объект (например model_dump()), и краткую человекочитаемую сводку.\n\n## Подсказки\n\npython\nfrom pydantic import BaseModel, Field\nfrom langchain_core.prompts import PromptTemplate\nfrom langchain_openai import ChatOpenAI\nfrom langchain_core.output_parsers import PydanticOutputParser\n\n# карточка задания — ваши поля и описания Field(...)\n\n\npython\nparser = PydanticOutputParser(pydantic_object=ВашаМодель)\nprompt = PromptTemplate(\n template=\"...\\n{format_instructions}\",\n input_variables=[...],\n partial_variables={\"format_instructions\": parser.get_format_instructions()},\n)\nchain = prompt | llm | parser\n\n\n## Ожидаемый результат\n\nПример входа:\n\n> Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. Оценка: за полноту и за пример кода.\n\nПример вывода (фрагмент):\n\ntext\ntitle: ...\nsubject: ...\ndeadline_hint: к пятнице\ndeliverable_type: отчёт\ngrading_hints: ['полнота', 'пример кода']\n\n\n## Критерии оценки\n\n| Критерий | Баллы |\n|----------|-------|\n| Модель данных отражает сценарий (поля + типы) | 2 |\n| Один запрос — один проход по цепочке, без лишнего диалога | 2 |\n| Используется парсер структуры, а не «разбор руками» | 2 |\n| Промпт согласован с инструкциями формата | 2 |\n| Вывод: и структура, и краткая сводка | 2 |\n| Итого | 10 |\n\n## Документация\n\n- Structured output (LangChain)", "course": "698b49da77cb6d4d2e43ce78", "lesson": { "_id": "69bc15e1b8fb4038bdc7b5c4", "name": "Generating Structured Outputs with AI Models Union + Enums + StructuredOutput", "date": "2026-03-19T15:30:00.000Z", "id": "69bc15e1b8fb4038bdc7b5c4" }, "gradeType": "passfail", "maxScore": 100, "assignmentType": "individual", "allowSubmissions": true, "allowRevisions": false, "creator": { "sub": "8ae348ab-f32e-46c7-9960-8b7fdf0e4c0e", "name": "Александр Примаков" }, "teamGrades": [], "created": "2026-04-13T19:21:05.241Z", "id": "69dd4221f309a98be0006b2e" } }