始める無料で始める

構造化出力をリクエストする

語彙グラフを作成するとき、テキストスプリッターを使ってテキストから登場人物名とセリフを抽出しましたが、この方法では分割境界付近の文脈が失われがちです。たとえば、テキスト中のト書きは、その時点で誰に話しているかを判断する手がかりになります。

ここでは、新しい Line クラスの中で Character クラスを使い、話されたセリフ、話し手、そしてそのセリフの宛先となる登場人物のリストを表現します。さらに、これらの複数のセリフを一度に抽出できるよう、ラッパーの LineOutput クラスも作成します。

抽出手順を含む prompt 変数と、llm という名前の LLM インスタンスは用意されています。

この演習はコースの一部です

Graph RAG with LangChain and Neo4j

コースを見る

演習の手順

  • LineOutput クラスを、Line オブジェクトのリストを要求するように更新します。
  • LineOutput クラスを使って構造化出力を生成する LLM を定義します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

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)
コードを編集して実行