Demander une sortie structurée
Lorsque vous créez des graphes lexicaux, vous avez extrait le nom du personnage et ses répliques à partir du texte au moyen d'un séparateur de texte, mais cette approche fait souvent perdre du contexte autour des limites de découpage. Par exemple, les didascalies incluses dans le texte peuvent servir à déterminer à qui le personnage s'adresse à ce moment-là.
Vous utiliserez la classe Character à l'intérieur d'une nouvelle classe Line pour décrire la réplique prononcée, ainsi que l'intervenant et la liste des personnages à qui la réplique est adressée. Vous créerez aussi une classe d'enrobage LineOutput pour extraire plusieurs de ces répliques en une seule fois.
La variable prompt contenant les consignes d'extraction a été définie pour vous, ainsi qu'une instance de LLM sous le nom llm.
Cette activité fait partie du cours
Graph RAG avec LangChain et Neo4j
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)