いつもお世話になっております。
生成AIを利用したアプリケーションでプロンプトの扱いに関して質問させてください。
特定フォーマットのデータセットを用意し、セットのプロンプトを生成AIのAPIに渡してサマリーやレポーティングをするようなサービスがあります。
この時に、アプリケーションに組み込むため構造化レスポンスを必ず使うのですが、それに合わせた出力をさせるプロンプト設計を行います。
こういったアプリケーションでプロンプトが1種類しかないためソースコード中にハードコートしようとしているのですが、これの置き場に関していくつか考え方があるように思いまあるように思います。
1. プロンプトはそのままドメイン知識でありビジネス要件とセットの手順書だから、自然言語で書かれたドメインサービスとして扱うべきでは?
2. プロンプトも構造化レスポンスのスキーマもプリミティブ値の延長なのだから、 ValueObjectとして管理してしまってもいいのでは?
3. 特定のユースケースでしか使わないプロンプトなのだからアプリケーションサービスの中に隠蔽してしまってもいいのでは?
4. 生成AIという外部の領域に依存するものだからインフラ層側に書いて、特定の知識のレスポンスを返してくる外部サービスのように見せてしまうのは?
といったように幾つも思いつきます。
単純に文章量が多いため、読みやすさの観点でも切り分けて管理したいのですが、どのように考えるのが良いでしょうか?
ご意見いただけますと幸いです。

松岡@ログラス/DDD,アジャイルさん
4ですね!
ドメイン層にはドメインの知識として実現したいwhat、インフラ層にはhowを置くと考えてください。そうすると「特定のデータを渡してサマリー、構造化を行う」はwhat、「それをどのようなプロンプトで行うか」はhowです。さらに言うと、しゅだんとして生成AIを使うこと、そしてどの生成AIのサービスを使うかもhowです。なので、そのあたりは丸っとインフラ層にとじこめましょう。
そうしておくと、「やっぱりコストがかかるのでスクリプトで簡易的になんとかすることになった」「生成aiサービスを変える」などの変更を加えてもドメイン層やユースケース層は一切の影響を受けず、インフラ層に変更を閉じ込めることができます。