プロンプトを管理するフォーマットは何が良いのか?
TOMLオススメな意見がチラホラ出てきている。
自分はmarkdownで書いていてあまり深く考えてなかったのだけど、昔からなんとなく思っているのは、
- JSON
- 人間が目で見て直接触るのはさすがにつらすぎる
- コメント入れれない
- ケツカンマにハマりがち
- JSONCならできるけど対応していないもの結構ある
- YAML
- そこそこ構造化がきちんと維持できて、人が目で見て直接かける
- インデントにハマりがち
- 階層が深くなるとインデント考えるのに一瞬「ん?」ってなることがままある
で、どっちかというと人間にあわせるならYAMLかなぁと。ふんわりだけど。KubernetesのmanifestなんかもYAMLで書くしなぁ。
XMLとTOMLのイメージはこう。
- XML
- もはやつらすぎて思いつくことさえない
- TOML
- AWS SAMとかpyproject.tomlとかの設定ファイルイメージしかない
ただ、ある程度複雑性やボリュームが増えてくるとYAMLつらいになるので最終的にはJsonnetとか使ってしまっていたので、あるレベルを超えると効率よく書けるとか厳密性とかの要素が重要になってくる感じは持っている。
プロンプトは今のところそれほどの複雑性や厳密性は求められていないと思っているので、markdownでも困ってないというのが正直なところ。あとは大したもの作ってない、ってのもあるw
markdownそのものはJSONやYAMLほどの厳密性がないと思っているので、LLMがよしなに解釈してくれるっていうのに甘えているところもあるのだけど、逆に言うと自由すぎるところはあるし、RAGで読み込むドキュメントがmarkdownで書かれていたりとかするとちょっと、と思ったりもする(実際にはmarkdownをパース・整形してからプロンプトに埋め込みたくなるので、そのまま読み込むようなことはしないし、問題にならない。が、雑に読み込んだりしたいときもある。)なのできちんと(フォーマットとして)管理するのには向いてないとは思う。
ちょっとTOML試してみるかな。
この記事が面白い。
ChatGPTによる要約
この記事では、生成AIプロンプトを効率的かつ柔軟に保存するための新しいファイル形式の提案が紹介されています。XMLPF、JsonPF、YamlPF、TextPF、TomlPFの5つの異なる形式が提案され、それぞれの利点と欠点が議論されています。さらに、異なる形式のプロンプトをJSONオブジェクト形式に解析する軽量ライブラリ「Multi-Format Prompt Parser (MFPP)」が紹介され、そのコアコンポーネント、実装アプローチ、使用方法が説明されています。記事の最後には、JSONの効率性と普及率が他の形式に比ぼして優れていると結論づけられていますが、プロジェクトの要件に応じて最適な選択が異なる可能性があるとも述べられています。
ライブラリはもう見えなかったけど。
ChatGPTに聞いてみた。上記の記事のプロンプトから少し変えている。
User: プロンプト・エンジニアリングは、ジェネレーティブAIの時代における大きなトピックです。より多くのユースケースが発見されるにつれて、プロンプトを整理しておくことが難しくなってきています。
あなたはエンジニアで、プロンプトを効率的に管理しやすく、かつ、AIが最も理解しやすくするための、ファイルフォーマットを作るように頼まれています。フォーマットの条件は以下です。
- そのフォーマットは、単一のプロンプトとそのバリエーションを保存しなければならない。
- また、どのプロンプトのバリアントを読み込むかを示すインジケータを持たなければならない。例えばビジネス名、ドメイン、スローガンを考えるプロンプトに取り組んでいるとする。
上記を満たすプロンプトフォーマット案を複数提案してください。可能ならば既存のデータフォーマット(XML, JSON, YAML, TOML)を流用してください。
ChatGPT: プロンプト管理用のファイルフォーマットを考える際、読みやすさ、拡張性、およびAIとの互換性を考慮することが重要です。既存のデータフォーマット(XML, JSON, YAML, TOML)をベースにして、プロンプトとそのバリエーション、そして読み込むべきバリアントを示すインジケータを管理する方法を提案します。
JSONフォーマット
JSONは非常に一般的で、多くのプログラミング言語で簡単に扱うことができるため、プロンプト管理に適しています。以下はその例です。
{ "prompt": "ビジネス名、ドメイン、スローガンを考える", "variants": [ { "indicator": "tech", "content": "最先端のテクノロジー企業" }, { "indicator": "food", "content": "新しい味を探求するレストラン" }, { "indicator": "fashion", "content": "革新的なファッションブランド" } ], "use_variant": "tech" }
YAMLフォーマット
YAMLは人間が読み書きしやすいフォーマットであり、設定ファイルなどによく使われます。プロンプトの管理にも適しています。以下はその例です。
prompt: ビジネス名、ドメイン、スローガンを考える variants: - indicator: tech content: 最先端のテクノロジー企業 - indicator: food content: 新しい味を探求するレストラン - indicator: fashion content: 革新的なファッションブランド use_variant: tech
XMLフォーマット
XMLは拡張性が高く、階層的なデータ構造を持つデータを扱うのに適しています。以下はその例です。
<prompt> <description>ビジネス名、ドメイン、スローガンを考える</description> <variants> <variant indicator="tech"> <content>最先端のテクノロジー企業</content> </variant> <variant indicator="food"> <content>新しい味を探求するレストラン</content> </variant> <variant indicator="fashion"> <content>革新的なファッションブランド</content> </variant> </variants> <use_variant>tech</use_variant> </prompt>
TOMLフォーマット
TOMLは明瞭で読みやすく、設定ファイルとして人気があります。プロンプト管理にも適用できます。以下はその例です。
prompt = "ビジネス名、ドメイン、スローガンを考える" [[variants]] indicator = "tech" content = "最先端のテクノロジー企業" [[variants]] indicator = "food" content = "新しい味を探求するレストラン" [[variants]] indicator = "fashion" content = "革新的なファッションブランド" use_variant = "tech"
これらのフォーマット案は、プロンプトとそのバリエーションを管理し、特定の条件下でどのバリアントを使用するかを示すための有効な方法を提供します。プロジェクトやチームのニーズに応じて、最も適したフォーマットを選択してください。
User: 次に別のエンジニアになりきって、これらのフォーマット案を比較してメリット・デメリットを列挙してください。比較する際の指標は以下の前提としてください。
- 人間にとって読みやすく、タイプミスしないものが望ましい
- git等で継続的に変更履歴を管理するため、変更内容が過不足なく抽出できるものが望ましい
- ツールやライブラリ等でパースして利用するため、パースエラーが起こりにくいもの、多く採用されているものが望ましい。
ChatGPT: 既存のプロンプトフォーマット案(JSON, YAML, XML, TOML)を比較する際、指標となるのは読みやすさ、変更履歴の管理しやすさ、およびパースのしやすさです。以下に各フォーマットのメリットとデメリットを列挙します。
JSON
メリット:
- 広く採用されている: 多くのプログラミング言語が標準でJSONのパースとシリアライズをサポートしており、ツールやライブラリでの対応も豊富。
- パースエラーが起こりにくい: 厳格な構文ルールにより、タイプミスが原因でのパースエラーを減らすことができる。
デメリット:
- 読みにくいことがある: 人間が読むには、特に大きなファイルでは見づらいことがある。コメントが使えないため、説明を加えることが難しい。
- 変更履歴の把握が難しい: 変更点が小さくても、gitの差分表示では大きな変更として表示されることがある。
YAML
メリット:
- 人間にとって読みやすい: 構造が明瞭で、コメントを加えることができるため、ドキュメントとしての価値が高い。
- 変更履歴が把握しやすい: gitでの差分表示がわかりやすく、変更点を容易に追跡できる。
デメリット:
- パースエラーが起こりやすい: インデントや特定の記号の扱いによっては、予期せぬパースエラーが発生することがある。
- タイプミスしやすい: インデントの誤りや、特定の構文ルールを間違えやすい。
XML
メリット:
- 拡張性が高い: 階層構造を持つデータを表現するのに適しており、名前空間や属性を用いた詳細なデータ表現が可能。
- ツールやライブラリでの対応が豊富: XMLのパースや変換を行うツールが多数存在する。
デメリット:
- 読みにくい: 閉じタグの使用や属性の多用により、人間が読むには比較的複雑。
- 冗長性がある: 同じ情報をより少ない文字数で表現できるフォーマットに比べて、ファイルサイズが大きくなりがち。
TOML
メリット:
- 人間にとって非常に読みやすい: シンプルな構文であり、設定ファイルなどに適している。
- 変更履歴が把握しやすい: gitでの差分表示が非常にわかりやすく、変更内容を追跡しやすい。
デメリット:
- 採用例が少ない: JSONやXMLに比べると、採用例が少なく、対応するツールやライブラリも限られる。
- 複雑なデータ構造には向かない: 非常に深い階層構造や、複雑なデータ型を扱うのには不向き。
総合的に考えると、読みやすさと変更履歴の管理のしやすさを重視する場合、YAMLが最もバランスが良い選択肢です。一方で、広く採用されており、パースエラーが起こりにくいことを最優先する場合はJSONが適しています。XMLは特定の用途での拡張性を重視する場合に向いており、TOMLはシンプルな設定ファイルの管理に最適です。
User: 比較内容を表形式にまとめてください。評価は1〜5の5段階とします。
ChatGPT: 以下の表は、JSON, YAML, XML, TOMLの各フォーマットを「読みやすさ」「変更履歴の管理しやすさ」「パースエラーの発生しにくさ」「広く採用されている度合い」の4つの指標で評価したものです。評価は1(低い)から5(高い)の5段階で行います。
フォーマット 読みやすさ 変更履歴の管理しやすさ パースエラーの発生しにくさ 広く採用されている度合い JSON 2 2 5 5 YAML 4 4 2 3 XML 2 3 4 4 TOML 5 5 3 2 解説:
- 読みやすさ: TOMLが最も読みやすく、次いでYAMLが高い評価を受けます。JSONとXMLは相対的に読みにくいとされています。
- 変更履歴の管理しやすさ: TOMLとYAMLがこの点で高い評価を受けています。JSONとXMLは変更が多少把握しにくいことがあります。
- パースエラーの発生しにくさ: JSONが最も安定しており、XMLも比較的安定しています。YAMLはインデントや特殊文字によるエラーが起こりやすいとされています。
- 広く採用されている度合い: JSONが最も広く採用されており、XMLも長い歴史があります。TOMLは比較的新しく、特定の用途での採用は増えていますが、まだJSONやXMLほど普及していません。
これらの評価は一般的な傾向を表していますが、特定のプロジェクトやチームのニーズに応じて最適なフォーマットを選択することが重要です。
雑なプロンプトだけど、まあそうよね感。
もうちょっとやってみる。LlamaIndexのRAGで渡されるプロンプトを各フォーマットに書き直させてみる。なお、ドキュメントは以下を使用した。
User: では以下のプロンプトを上記の各フォーマットで書き直してみてください。
## SYSTEM あなたは世界中で信頼されているQAシステムです。 事前知識ではなく、常に提供されたコンテキスト情報を使用してクエリに回答してください 従うべきいくつかのルール: 1. 回答内で指定されたコンテキストを直接参照しないでください。 2. 「コンテキストに基づいて、...」や「コンテキスト情報は...」、またはそれに類するような記述は避けて>ください ## USER コンテキスト情報は以下のとおりです。 ---- file_path: data/ドウデュース.txt 鞍上の武は、歴代最多を更新する2013年のキズナ以来となるダービー6勝目、かつ歴代最年長、史上初の50代でのダービージョッキーの名誉となった。また朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制したのは、1994年のナリタブライアン(前身である朝日杯3歳ステークスを勝利)以来28年ぶりとなった。 6月10日に国際競馬統括機関連盟が発表した「ロンジンワールドベストレースホースランキング」において、ドウデュースは日本ダービーを勝利した功績を評価され、シャフリヤールやエンブレムロードと並ぶレーティング120で第15位タイに位置づけられた。 次走として凱旋門賞への出走を表明した。 file_path: data/ドウデュース.txt まずまずのスタートを決めると、道中は馬群を見て最後方グループで待機し、向正面から外へ出て徐々に捲りをかけ、直線に入ると早々と馬群から抜け出して後続を突き放し、3馬身半差の快勝でGIを含む重賞3勝目を挙げた。日本ダービーを勝利した馬が京都記念を勝利するのは、1948年春の京都記念のマツミドリ以来75年ぶりとなった。 次走は3月25日にドバイのメイダン競馬場で行われるドバイターフとし、同月15日(現地時間同月14日)にメイダン競馬場に到着した。しかし出馬投票後の同月24日、調教後に左前肢跛行を発症しドバイターフへの出走を取り消した。友道は「調教後に左腕節に違和感を認め、競馬に向けて進めておりましたが、将来のある馬なのでここでは無理をせず、取り消すことを決断いたしました」と語った。 ---- 事前知識ではなくコンテキスト情報を考慮して、クエリに答えます。 Query: ドウデュースの主な勝ち鞍について教えて。 Answer:
ChatGPT: 以下は指定されたプロンプトをJSON, YAML, XML, TOMLフォーマットで表現した例です。
JSONフォーマット
{ "system": "あなたは世界中で信頼されているQAシステムです。\n事前知識ではなく、常に提供されたコンテキスト情報を使用してクエリに回答してください\n従うべきいくつかのルール:\n1. 回答内で指定されたコンテキストを直接参照しないでください。\n2. 「コンテキストに基づいて、...」や「コンテキスト情報は...」、またはそれに類するような記述は避けてください", "user": { "context": [ { "file_path": "data/ドウデュース.txt", "content": "鞍上の武は、歴代最多を更新する2013年のキズナ以来となるダービー6勝目、かつ歴代最年長、史上初の50代でのダービージョッキーの名誉となった。また朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制したのは、1994年のナリタブライアン(前身である朝日杯3歳ステークスを勝利)以来28年ぶりとなった。" }, { "file_path": "data/ドウデュース.txt", "content": "まずまずのスタートを決めると、道中は馬群を見て最後方グループで待機し、向正面から外へ出て徐々に捲りをかけ、直線に入ると早々と馬群から抜け出して後続を突き放し、3馬身半差の快勝でGIを含む重賞3勝目を挙げた。" } ], "query": "ドウデュースの主な勝ち鞍について教えて。" } }
YAMLフォーマット
system: | あなたは世界中で信頼されているQAシステムです。 事前知識ではなく、常に提供されたコンテキスト情報を使用してクエリに回答してください 従うべきいくつかのルール: 1. 回答内で指定されたコンテキストを直接参照しないでください。 2. 「コンテキストに基づいて、...」や「コンテキスト情報は...」、またはそれに類するような記述は避けてください user: context: - file_path: data/ドウデュース.txt content: 鞍上の武は、歴代最多を更新する2013年のキズナ以来となるダービー6勝目、かつ歴代最年長、史上初の50代でのダービージョッキーの名誉となった。また朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制したのは、1994年のナリタブライアン(前身である朝日杯3歳ステークスを勝利)以来28年ぶりとなった。 - file_path: data/ドウデュース.txt content: まずまずのスタートを決めると、道中は馬群を見て最後方グループで待機し、向正面から外へ出て徐々に捲りをかけ、直線に入ると早々と馬群から抜け出して後続を突き放し、3馬身半差の快勝でGIを含む重賞3勝目を挙げた。 query: ドウデュースの主な勝ち鞍について教えて。
XMLフォーマット
<system> <description>あなたは世界中で信頼されているQAシステムです。事前知識ではなく、常に提供されたコンテキスト情報を使用してクエリに回答してください従うべきいくつかのルール: 1. 回答内で指定されたコンテキストを直接参照しないでください。2. 「コンテキストに基づいて、...」や「コンテキスト情報は...」、またはそれに類するような記述は避けてください</description> <user> <context> <file_path>data/ドウデュース.txt</file_path> <content>鞍上の武は、歴代最多を更新する2013年のキズナ以来となるダービー6勝目、かつ歴代最年長、史上初の50代でのダービージョッキーの名誉となった。また朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制したのは、1994年のナリタブライアン(前身である朝日杯3歳ステークスを勝利)以来28年ぶりとなった。</content> </context> <context> <file_path>data/ドウデュース.txt</file_path> <content>まずまずのスタートを決めると、道中は馬群を見て最後方グループで待機し、向正面から外へ出て徐々に捲りをかけ、直線に入ると早々と馬群から抜け出して後続を突き放し、3馬身半差の快勝でGIを含む重賞3勝目を挙げた。</content> </context> <query>ドウデュースの主な勝ち鞍について教えて。</query> </user> </system>
TOMLフォーマット
[system] description = ''' あなたは世界中で信頼されているQAシステムです。 事前知識ではなく、常に提供されたコンテキスト情報を使用してクエリに回答してください 従うべきいくつかのルール: 1. 回答内で指定されたコンテキストを直接参照しないでください。 2. 「コンテキストに基づいて、...」や「コンテキスト情報は...」、またはそれに類するような記述は避けてください ''' [[user.context]] file_path = "data/ドウデュース.txt" content = "鞍上の武は、歴代最多を更新する2013年のキズナ以来となるダービー6勝目、かつ歴代最年長、史上初の50代でのダービージョッキーの名誉となった。また朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制したのは、1994年のナリタブライアン(前身である朝日杯3歳ステークスを勝利)以来28年ぶりとなった。" [[user.context]] file_path = "data/ドウデュース.txt" content = "まずまずのスタートを決めると、道中は馬群を見て最後方グループで待機し、向正面から外へ出て徐々に捲りをかけ、直線に入ると早々と馬群から抜け出して後続を突き放し、3馬身半差の快勝でGIを含む重賞3勝目を挙げた。" [user] query = "ドウデュースの主な勝ち鞍について教えて。"
これらのフォーマットは、プロンプトを異なるデータ構造で表現し、指定された要件を満たす方法を示しています。選択するフォーマットは、プロジェクトのニーズや好みに応じて決定することができます。
User: では次にAIになりきって、どのフォーマットが一番齟齬なく解釈しやすいかを評価してください。
ChatGPT: AIの解釈しやすさを考える際、主にパースの容易さ、エラー発生の少なさ、およびデータの構造化のしやすさが重要な要素となります。これらの基準に基づいて、提案されたフォーマット(JSON, YAML, XML, TOML)を評価します。
JSON
利点: JSONは多くのプログラミング言語でネイティブサポートされており、パースが容易で、データの構造化も直感的です。エラー発生率が低く、一貫性のある構文ルールにより、AIによる解釈において齟齬が生じにくいです。
評価: 高い
YAML
利点: YAMLは人間にとって読みやすく書きやすいですが、インデントに依存する構造がパース時のエラーを引き起こす可能性があります。ただし、YAMLも多くのライブラリでサポートされており、構造化されたデータを効果的に扱うことができます。
評価: 中〜高
XML
利点: XMLは非常に柔軟で、複雑なデータ構造や属性を扱うことができます。しかし、その冗長性と構文の複雑さがパースを難しくすることがあり、AIによる解釈時には比較的多くの処理を要します。
評価: 中
TOML
利点: TOMLは読みやすさと書きやすさを兼ね備えていますが、YAMLやJSONほど広く採用されていないため、対応するライブラリやツールが限られている場合があります。データ構造がシンプルであるため、解釈は容易ですが、複雑な階層構造を表現する場合には限界があります。
評価: 中〜高
総合評価
AIにとって解釈しやすさを考慮すると、JSONが最も齟齬なく解釈しやすいフォーマットと言えます。その次にTOMLとYAMLが来ますが、これらはシンプルさと読みやすさのバランスを提供しますが、特にYAMLはエラー発生の可能性が少し高いです。XMLは非常に柔軟で強力ですが、その複雑さがAIによる迅速な解釈を妨げる可能性があります。
したがって、AIにとって解釈のしやすさを最優先する場合、JSONを選択するのが最良の選択となります。
実際ににChatGPTに投げてみた。母数1でChatGPTに聞くという全然役に立たない情報w
なお、ChatGPT4を使用。
JSON
{
"system": "あなたは世界中で信頼されているQAシステムです。\n事前知識ではなく、常に提供されたコンテキスト情報を使用してクエリに回答してください\n従うべきいくつかのルール:\n1. 回答内で指定されたコンテキストを直接参照しないでください。\n2. 「コンテキストに基づいて、...」や「コンテキスト情報は...」、またはそれに類するような記述は避けてください",
"user": {
"context": [
{
"file_path": "data/ドウデュース.txt",
"content": "鞍上の武は、歴代最多を更新する2013年のキズナ以来となるダービー6勝目、かつ歴代最年長、史上初の50代でのダービージョッキーの名誉となった。また朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制したのは、1994年のナリタブライアン(前身である朝日杯3歳ステークスを勝利)以来28年ぶりとなった。"
},
{
"file_path": "data/ドウデュース.txt",
"content": "まずまずのスタートを決めると、道中は馬群を見て最後方グループで待機し、向正面から外へ出て徐々に捲りをかけ、直線に入ると早々と馬群から抜け出して後続を突き放し、3馬身半差の快勝でGIを含む重賞3勝目を挙げた。"
}
],
"query": "ドウデュースの主な勝ち鞍について教えて。"
}
}
ChatGPT: ドウデュースは、日本ダービーと朝日杯フューチュリティステークスを制したことが記録されています。鞍上の武豊騎手は、ドウデュースに騎乗して日本ダービーで勝利し、これが彼にとって歴代最多を更新する2013年のキズナ以来となるダービー6勝目となりました。また、武豊騎手はこの勝利により、歴代最年長であり史上初の50代でのダービージョッキーの名誉を手にしました。朝日杯フューチュリティステークスを制した後、日本ダービーを勝利したのは、1994年のナリタブライアン以来28年ぶりのことでした。
さらに、ドウデュースは、まずまずのスタートから最後方グループでレースを進め、直線で力強く抜け出して3馬身半差で勝利し、GIを含む重賞3勝目を挙げています。
YAML
system: |
あなたは世界中で信頼されているQAシステムです。
事前知識ではなく、常に提供されたコンテキスト情報を使用してクエリに回答してください
従うべきいくつかのルール:
1. 回答内で指定されたコンテキストを直接参照しないでください。
2. 「コンテキストに基づいて、...」や「コンテキスト情報は...」、またはそれに類するような記述は避けてください
user:
context:
- file_path: data/ドウデュース.txt
content: 鞍上の武は、歴代最多を更新する2013年のキズナ以来となるダービー6勝目、かつ歴代最年長、史上初の50代でのダービージョッキーの名誉となった。また朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制したのは、1994年のナリタブライアン(前身である朝日杯3歳ステークスを勝利)以来28年ぶりとなった。
- file_path: data/ドウデュース.txt
content: まずまずのスタートを決めると、道中は馬群を見て最後方グループで待機し、向正面から外へ出て徐々に捲りをかけ、直線に入ると早々と馬群から抜け出して後続を突き放し、3馬身半差の快勝でGIを含む重賞3勝目を挙げた。
query: ドウデュースの主な勝ち鞍について教えて。
ChatGPT: ドウデュースの主な勝ち鞍には、日本ダービーと朝日杯フューチュリティステークスの勝利が含まれます。日本ダービーでの勝利は、鞍上の武豊騎手にとって歴代最多を更新する6勝目であり、歴代最年長および史上初の50代でのダービージョッキーの名誉をもたらしました。また、朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制したのは、1994年のナリタブライアン以来28年ぶりのことです。さらに、GIを含む重賞3勝目を3馬身半差の快勝で挙げています。これらの勝利は、ドウデュースの卓越した競走能力と、関係者の戦略・技術を示すものです。
XML
<system>
<description>あなたは世界中で信頼されているQAシステムです。事前知識ではなく、常に提供されたコンテキスト情報を使用してクエリに回答してください従うべきいくつかのルール: 1. 回答内で指定されたコンテキストを直接参照しないでください。2. 「コンテキストに基づいて、...」や「コンテキスト情報は...」、またはそれに類するような記述は避けてください</description>
<user>
<context>
<file_path>data/ドウデュース.txt</file_path>
<content>鞍上の武は、歴代最多を更新する2013年のキズナ以来となるダービー6勝目、かつ歴代最年長、史上初の50代でのダービージョッキーの名誉となった。また朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制したのは、1994年のナリタブライアン(前身である朝日杯3歳ステークスを勝利)以来28年ぶりとなった。</content>
</context>
<context>
<file_path>data/ドウデュース.txt</file_path>
<content>まずまずのスタートを決めると、道中は馬群を見て最後方グループで待機し、向正面から外へ出て徐々に捲りをかけ、直線に入ると早々と馬群から抜け出して後続を突き放し、3馬身半差の快勝でGIを含む重賞3勝目を挙げた。</content>
</context>
<query>ドウデュースの主な勝ち鞍について教えて。</query>
</user>
</system>
ChatGPT: ドウデュースの主な勝ち鞍には、日本ダービーと朝日杯フューチュリティステークスが含まれます。日本ダービーでは、鞍上の武が歴代最多を更新し、2013年のキズナ以来となるダービー6勝目を挙げました。これは歴代最年長であり、史上初の50代でのダービージョッキーの名誉となりました。朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制したのは、1994年のナリタブライアン以来28年ぶりのことです。また、別の重要な勝利として、GIを含む重賞3勝目を挙げています。この勝利では、最後方グループから徐々に位置を上げ、直線で早々と馬群から抜け出し、3馬身半差で快勝しました。
TOML
User
[system]
description = '''
あなたは世界中で信頼されているQAシステムです。
事前知識ではなく、常に提供されたコンテキスト情報を使用してクエリに回答してください
従うべきいくつかのルール:
1. 回答内で指定されたコンテキストを直接参照しないでください。
2. 「コンテキストに基づいて、...」や「コンテキスト情報は...」、またはそれに類するような記述は避けてください
'''
[[user.context]]
file_path = "data/ドウデュース.txt"
content = "鞍上の武は、歴代最多を更新する2013年のキズナ以来となるダービー6勝目、かつ歴代最年長、史上初の50代でのダービージョッキーの名誉となった。また朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制したのは、1994年のナリタブライアン(前身である朝日杯3歳ステークスを勝利)以来28年ぶりとなった。"
[[user.context]]
file_path = "data/ドウデュース.txt"
content = "まずまずのスタートを決めると、道中は馬群を見て最後方グループで待機し、向正面から外へ出て徐々に捲りをかけ、直線に入ると早々と馬群から抜け出して後続を突き放し、3馬身半差の快勝でGIを含む重賞3勝目を挙げた。"
[user]
query = "ドウデュースの主な勝ち鞍について教えて。"
ChatGPT: ドウデュースの主な勝ち鞍は、日本ダービーと朝日杯フューチュリティステークスの勝利です。日本ダービーでは、鞍上の武豊騎手が歴代最多を更新する6勝目を挙げ、歴代最年長で史上初の50代でのダービージョッキーの名誉を獲得しました。この勝利は、朝日杯フューチュリティステークスの勝ち馬が日本ダービーを制するのは、1994年のナリタブライアン以来28年ぶりのことでした。また、GIを含む重賞3勝目を挙げる勝利も記録しています。この勝利では、道中最後方グループで待機し、直線で早々と馬群から抜け出し、3馬身半差で快勝しました。
まあtemperature0.1ぐらいでAPIに複数回投げてプロンプトのバリエーションなんかも含めて、e2eの評価指標を使って比較しないと意味はないね。
ところでTOMLのこれ
[name]
first = "Tom"
last = "Preston-Werner"
テーブルなのな、セクション区切りっぽいイメージしか持ってなかった
ネストした複雑なテーブル構造になるとちょっとつらそう、プロンプトでそんなことしないと思うけども。