Einen strukturierten Output anfordern
Beim Erstellen lexikalischer Graphen hast du den Charakternamen und die Zeilen mithilfe eines Text-Splitters aus dem Text extrahiert. Dieser Ansatz führt jedoch oft dazu, dass Kontext an den Schnittstellen verloren geht. Zum Beispiel können Regieanweisungen im Text dabei helfen zu bestimmen, mit wem die Figur gerade spricht.
Du wirst die Klasse Character innerhalb einer neuen Klasse Line verwenden, um die gesprochene Zeile zu beschreiben – zusammen mit der sprechenden Figur und einer Liste von Figuren, an die sich die Zeile richtet. Außerdem erstellst du eine Wrapper-Klasse LineOutput, um mehrere dieser Zeilen auf einmal zu extrahieren.
Die Variable prompt, die Extraktionsanweisungen enthält, wurde bereits für dich definiert, ebenso wie eine LLM-Instanz als llm.
Diese Übung ist Teil des Kurses
<Kurs>Graph RAG mit LangChain und Neo4j</Kurs>Übungsanweisungen
- Aktualisiere die Klasse
LineOutput, um eine Liste vonLine-Objekten anzufordern. - Definiere ein LLM, das mithilfe der Klasse
LineOutputstrukturierte Outputs erzeugt.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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)