Demander une sortie structurée
Lors de la création de graphes lexicaux, vous avez extrait le nom du personnage et les répliques à partir du texte à l’aide d’un découpeur de texte, mais cette approche entraîne souvent une perte de contexte aux points de séparation. Par exemple, les didascalies présentes dans le texte peuvent servir à déterminer à qui le personnage s’adresse à ce moment-là.
Vous allez utiliser la classe Character au sein d’une nouvelle classe Line pour décrire la réplique prononcée, ainsi que l’orateur et la liste des personnages à qui la réplique est adressée. Vous créerez également une classe enveloppe LineOutput pour extraire plusieurs de ces répliques en une seule fois.
La variable prompt contenant les instructions d’extraction a été définie pour vous, ainsi qu’une instance de LLM sous le nom llm.
Cet exercice fait partie du cours
<cours>Graph RAG avec LangChain et Neo4j</cours>Instructions de l’exercice
- Mettez à jour la classe
LineOutputpour demander une liste d’objetsLine. - Définissez un LLM qui génère des sorties structurées en utilisant la classe
LineOutput.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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)