Обновить solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/solution.py

This commit is contained in:
2026-05-27 07:15:34 +00:00
parent dc3012773d
commit 91cf0036be
@@ -1,11 +1,15 @@
import os import os
from typing import List from typing import List
from pydantic import BaseModel, Field # LangChain — обёртки над моделью и парсером
from langchain_core.prompts import PromptTemplate from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import PydanticOutputParser from langchain_core.output_parsers import PydanticOutputParser
# LangChain — интеграция с OpenAI
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
class AssignmentCard(BaseModel): class AssignmentCard(BaseModel):
"""Структурированная карточка учебного задания.""" """Структурированная карточка учебного задания."""
@@ -26,9 +30,11 @@ class AssignmentCard(BaseModel):
) )
def run(raw_text: str) -> None: def main() -> None:
# Парсер структурированного вывода из langchain_core
output_parser = PydanticOutputParser(pydantic_object=AssignmentCard) output_parser = PydanticOutputParser(pydantic_object=AssignmentCard)
# Шаблон промпта из langchain_core
template = PromptTemplate( template = PromptTemplate(
template=( template=(
"Прочитай описание учебного задания и заполни все поля карточки.\n\n" "Прочитай описание учебного задания и заполни все поля карточки.\n\n"
@@ -42,11 +48,18 @@ def run(raw_text: str) -> None:
}, },
) )
# Языковая модель через обёртку langchain_openai
model = ChatOpenAI(model="gpt-4o-mini", temperature=0) model = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# Цепочка LangChain: промпт | модель | парсер
chain = template | model | output_parser chain = template | model | output_parser
card: AssignmentCard = chain.invoke({"raw_text": raw_text}) sample = (
"Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. "
"Оценка: за полноту и за пример кода."
)
card: AssignmentCard = chain.invoke({"raw_text": sample})
print("Валидированный объект:") print("Валидированный объект:")
print(card.model_dump()) print(card.model_dump())
@@ -61,8 +74,4 @@ def run(raw_text: str) -> None:
if __name__ == "__main__": if __name__ == "__main__":
sample = ( main()
"Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. "
"Оценка: за полноту и за пример кода."
)
run(sample)