Запрос структурированного вывода
При создании лексических графов вы извлекали имя персонажа и реплики из текста с помощью разбивки на фрагменты, однако такой подход нередко приводит к потере контекста на границах разбиения. Например, сценические ремарки в тексте позволяют определить, к кому персонаж обращается в данный момент.
Вы используете класс Character внутри нового класса Line, чтобы описать произносимую реплику, а также указать говорящего и список персонажей, к которым обращена реплика. Кроме того, вы создадите класс-обёртку LineOutput для извлечения сразу нескольких таких реплик.
Переменная prompt с инструкциями по извлечению уже определена, как и экземпляр LLM с именем llm.
Это упражнение является частью курса
Graph RAG с LangChain и Neo4j
Инструкции к упражнению
- Обновите класс
LineOutput, чтобы он запрашивал список объектовLine. - Определите LLM, который генерирует структурированные выводы с использованием класса
LineOutput.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
class Line(BaseModel):
text: str = Field(..., description="The text of the line")
spoken_by: Character = Field(..., description="The character who speaks the line")
spoken_to: Optional[list[Character]] = Field(None, description="The character who the line is spoken to")
class LineOutput(BaseModel):
# Request more than one line from the text
lines: ____[Line] = Field(..., description="The lines from the text")
# Return an instance of LineOutput
structured_llm = llm.____(____)
for line in structured_llm.invoke(prompt.format_messages(text=text)):
print(line)