Požadavek na strukturovaný výstup
Při vytváření lexikálních grafů jsi z textu extrahoval/a jméno postavy a repliky pomocí text splitteru – tento přístup ale často vede ke ztrátě kontextu na hranicích rozdělení. Například scénické poznámky obsažené v textu lze využít k určení, ke komu postava v danou chvíli mluví.
Použiješ třídu Character uvnitř nové třídy Line, která bude popisovat pronášenou repliku, mluvčího a seznam postav, kterým je replika adresována. Dále vytvoříš obalovou třídu LineOutput pro extrakci více těchto replik najednou.
Proměnná prompt obsahující instrukce pro extrakci je již definována, stejně jako instance LLM jako llm.
Toto cvičení je součástí kurzu
Graph RAG s LangChain a Neo4j
Pokyny k cvičení
- Uprav třídu
LineOutputtak, aby požadovala seznam objektůLine. - Definuj LLM, který generuje strukturované výstupy pomocí třídy
LineOutput.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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)