🦜️🔗LangChain : モジュール : モデル I/O – 出力パーサー (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 08/31/2023
* 本ページは、LangChain の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
クラスキャット 人工知能 研究開発支援サービス
◆ クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール。
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
🦜️🔗 LangChain : モジュール : モデル I/O – 出力パーサー
言語モデルはテキストを出力します。しかし単なるテキストを返すのではなく、より構造化された情報を取得したい場合も多くあります。これが出力パーサーが出現する場所です。
出力パーサーは、言語モデルのレスポンスを構造化するのに役立つクラスです。出力パーサーが実装しなければならない 2 つの主要なメソッドがあります :
- 「フォーマット指示の取得」: 言語モデルの出力がフォーマットされる方法の指示を含む文字列を返すメソッドです。
- 「パース (解析)」: 文字列 (言語モデルからのレスポンスであると仮定) を受け取りそれをある構造にパースするメソッドです。
それから一つのオプション :
- 「プロンプトによるパース」: 文字列 (言語モデルからのレスポンスであると仮定) とプロンプト (そのようなレスポンスを生成したプロンプトと仮定) を受け取りそれをある構造にパースするメソッドです。プロンプトは、OutputParser がある方法で出力を再試行または修正する必要があり、そのためにプロンプトからの情報を必要とするイベントで大部分は提供されます。
Get started
以下で出力パーサーの主要なタイプ, PydanticOutputParser を調べます。
from langchain.prompts import PromptTemplate, ChatPromptTemplate, HumanMessagePromptTemplate
from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field, validator
from typing import List
model_name = 'text-davinci-003'
temperature = 0.0
model = OpenAI(model_name=model_name, temperature=temperature)
# Define your desired data structure.
class Joke(BaseModel):
setup: str = Field(description="question to set up a joke")
punchline: str = Field(description="answer to resolve the joke")
# You can add custom validation logic easily with Pydantic.
@validator('setup')
def question_ends_with_question_mark(cls, field):
if field[-1] != '?':
raise ValueError("Badly formed question!")
return field
# Set up a parser + inject instructions into the prompt template.
parser = PydanticOutputParser(pydantic_object=Joke)
prompt = PromptTemplate(
template="Answer the user query.\n{format_instructions}\n{query}\n",
input_variables=["query"],
partial_variables={"format_instructions": parser.get_format_instructions()}
)
# And a query intended to prompt a language model to populate the data structure.
joke_query = "Tell me a joke."
_input = prompt.format_prompt(query=joke_query)
output = model(_input.to_string())
parser.parse(output)
Joke(setup='Why did the chicken cross the road?', punchline='To get to the other side!')
以上