長文の出力を要求する際、回答内容が途中で途切れる場合があります。
それはmax_tokensを超えていることが原因です。
どのようにすれば、途切れずに長文出力ができるでしょうか?
再帰的継続生成
概要: 最大トークン制限に達したら、生成済みテキストをアシスタントの発言として含め、同じプロンプトで再度リクエスト
Bedrockからのレスポンスで“stop_reason”というキーがあり、
メリット:
- 実装がシンプル
- 文脈の連続性が維持される
デメリット:
- 入力トークン数が増加するためコスト増
- 前の出力内容をすべて含める必要がある
チャンク分割と事前計画
概要: 最初に全体の構造を計画させ、各部分を個別に生成する
メリット:
- 効率的なトークン利用
- 並列処理の可能性
デメリット:
- 実装が複雑
- 各部分の結合が難しい場合がある
LangChainフレームワーク利用
LangChainとは言語モデルを便利に使うためのフレームワークです。
いくつかのモジュールがあり、その中でも「Chains」が長文出力に有効となる可能性があります。
Chainsとは
複数のプロンプトを組み合わせて実行できます。
メリット:
- 最適化されたトークン管理
- エラーハンドリングが充実
デメリット:
- 追加の依存関係
- 学習コスト