Richiedere un output strutturato
Quando crei grafi lessicali, hai estratto il nome del personaggio e le battute dal testo usando uno splitter di testo, ma questo approccio spesso fa perdere il contesto vicino ai punti di divisione. Ad esempio, le indicazioni di scena contenute nel testo possono aiutare a capire a chi sta parlando il personaggio in quel momento.
Userai la classe Character all'interno di una nuova classe Line per descrivere la battuta pronunciata, insieme all’oratore e a un elenco di personaggi a cui è rivolta la battuta. Creerai anche una classe wrapper LineOutput per estrarre più di queste battute in una sola volta.
La variabile prompt che contiene le istruzioni di estrazione è già stata definita per te, insieme a un'istanza di LLM come llm.
Questo esercizio fa parte del corso
Graph RAG con LangChain e Neo4j
Istruzioni dell'esercizio
- Aggiorna la classe
LineOutputper richiedere un elenco di oggettiLine. - Definisci un LLM che generi output strutturati usando la classe
LineOutput.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
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)