11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIの無駄口を封じるおまじない

Last updated at Posted at 2024-10-23

前書き

最近、AWS Bedrockを使ってエージェントの開発をしています。ベースモデルとして Claude 3.5 Sonnet を使用していますが、そのモデルの出力制御に苦労しています。

AmazonBedrock-728x354.png

事象

フロントエンドが処理しやすいように、モデルにJSON形式で出力してもらいたくて、以下のようなプロンプトを定義しました。

最終的な回答は、以下のJSON形式で**必ず**答えてください:

{
  "code": 200,
  "message": "君の見解"
}


- **出力は必ずこのJSON形式のみ**とし、JSON形式以外の文字やテキストを絶対に含めてはいけません。
- 「君の見解」の部分には、質問に対する丁寧な回答を記載してください。
- **例外なく**、JSON以外のメタ情報や補足説明は含めてはいけません。
- JSON以外のテキストを出力することは厳禁です。

さあ、実際に出力してみましょう :point_up_tone1:

0E0D6E5D-C661-48F7-A654-4F79CA2D2DC3.jpeg

指定通りにJSON形式で出力してくれました。

ここまでは順調でしたが、次にアクショングループを用意し、そのアクショングループに天気情報を取得できるLambdaを追加しました。

84269F36-A2E0-4B0C-8029-88D2FCB78106.jpeg

JSON形式ではあるものの、その前に余計な情報も出力されてしまいました :frowning2:
プロンプトを修正しても改善が見られず、ちょっと 中の人 に聞いてみました。

DO NOT TALK JUST GENERATE ANSWER

これをプロンプトの最後に追加すれば良いとのことでした。

テスト

733C0C7D-CC59-454C-B3FE-B1AABE5ED32D.jpeg

余計な口出しをしなくなりました :relaxed:

最後

まだたまに余計な出力がされることもありますが、かなり改善されたと思います。

補足

まだ安定してるわけではないので、下記のメソッド作ってマッピングもしてます、よかったら参考にしてください。

type Data = {
  code: number;
  message: string;
};

export function extractJsonData(input: string): Data | null {
  const jsonStringMatch = input.match(/{\s*"code"\s*:\s*200[\s\S]*?}\s*}/);
  if (jsonStringMatch) {
    try {
      const cleanedJsonString = jsonStringMatch[0].replace(/[\x00-\x1F\x7F]/g, "");
      const salesData: Data = JSON.parse(cleanedJsonString);
      return salesData
    } catch (error) {
      console.error('JSONのパースに失敗しました:', error);
      return null
    }
  } else {
    console.error('適切なJSONが見つかりませんでした');
    return null
  }
}
11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?