Solicitar una salida estructurada
Al crear grafos léxicos, extraías el nombre del personaje y sus líneas del texto usando un divisor de texto, pero este enfoque a menudo hace que se pierda contexto en los límites de los fragmentos. Por ejemplo, las acotaciones presentes en el texto pueden servir para determinar con quién está hablando el personaje en ese momento.
Usarás la clase Character dentro de una nueva clase Line para describir la línea que se pronuncia, junto con la persona que habla y una lista de personajes a quienes va dirigida la línea. También crearás una clase contenedora LineOutput para extraer varias de estas líneas a la vez.
La variable prompt con las instrucciones de extracción ya está definida para ti, junto con una instancia de LLM como llm.
Este ejercicio forma parte del curso
Graph RAG con LangChain y Neo4j
Instrucciones del ejercicio
- Actualiza la clase
LineOutputpara solicitar una lista de objetosLine. - Define un LLM que genere salidas estructuradas usando la clase
LineOutput.
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
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)