Langchain の構造化出力パーサー

Langchain の構造化出力パーサー

この出力パーサーは、複数のフィールドを返したい場合に使用できます。Pydantic/JSON パーサーはより強力ですが、最初はテキスト フィールドのみを含むデータ構造を試しました。

サンプルコード、

from langchain.output_parsers import StructuredOutputParser, ResponseSchema
from langchain.prompts import PromptTemplate, ChatPromptTemplate, HumanMessagePromptTemplate
from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI

ここで、受信したい応答パターンを定義します。

サンプルコード、

response_schemas = [
    ResponseSchema(name="answer", description="answer to the user's question"),
    ResponseSchema(name="source", description="source used to answer the user's question, should be a website.")
]
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)

ここで、応答のフォーマット方法に関する指示を含む文字列を取得し、それをプロンプトに挿入します。

format_instructions = output_parser.get_format_instructions()
prompt = PromptTemplate(
    template="answer the users question as best as possible.\n{format_instructions}\n{question}",
    input_variables=["question"],
    partial_variables={"format_instructions": format_instructions}
)

これを使用してヒントをフォーマットして言語モデルに送信し、返された結果を解析できるようになりました。

model = OpenAI(temperature=0)
_input = prompt.format_prompt(question="what's the capital of france?")
output = model(_input.to_string())
output_parser.parse(output)

出力結果、

    {'answer': 'Paris',
     'source': 'https://www.worldatlas.com/articles/what-is-the-capital-of-france.html'}

以下はチャットモデルでの使用例です。

chat_model = ChatOpenAI(temperature=0)
prompt = ChatPromptTemplate(
    messages=[
        HumanMessagePromptTemplate.from_template("answer the users question as best as possible.\n{format_instructions}\n{question}")  
    ],
    input_variables=["question"],
    partial_variables={"format_instructions": format_instructions}
)
_input = prompt.format_prompt(question="what's the capital of france?")
output = chat_model(_input.to_messages())
output_parser.parse(output.content)

出力結果、

    {'answer': 'Paris', 'source': 'https://en.wikipedia.org/wiki/Paris'}

終わり!

おすすめ

転載: blog.csdn.net/engchina/article/details/131873603