Żądanie ustrukturyzowanego wyjścia
Podczas tworzenia grafów leksykalnych wyodrębniałeś imię postaci oraz kwestie z tekstu za pomocą narzędzia do podziału tekstu, jednak takie podejście często powoduje utratę kontekstu wokół granic podziału. Na przykład didaskalia zawarte w tekście można wykorzystać do ustalenia, do kogo dana postać się zwraca.
Użyjesz klasy Character wewnątrz nowej klasy Line, aby opisać wypowiadaną kwestię, mówiącego oraz listę postaci, do których kwestia jest kierowana. Stworzysz też klasę opakowującą LineOutput, która pozwoli wyodrębnić kilka takich kwestii naraz.
Zmienna prompt zawierająca instrukcje ekstrakcji została już dla ciebie zdefiniowana, podobnie jak instancja LLM o nazwie llm.
To ćwiczenie jest częścią kursu
Graph RAG z LangChain i Neo4j
Instrukcje do ćwiczenia
- Zaktualizuj klasę
LineOutput, aby żądała listy obiektówLine. - Zdefiniuj LLM generujący ustrukturyzowane dane wyjściowe, korzystając z klasy
LineOutput.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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)