2
0

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システム開発 #05 「プロンプトエンジニアリング」

Posted at

入門書3章「生成AIアプリ開発手法」

たびたび同じ画像で申し訳ないですが、こちらの入門書の第3章へ。今回は前半。
Amazon Bedrock 生成AIアプリ開発入門 [AWS深掘りガイド]
https://amzn.asia/d/co7MB5S
2240915.jpg

プロンプトとは

生成AIモデルとのやり取りに使用する文字列のこと。以下の3種類がある。

システムプロンプト

AIの口調や役割など、システムとして指定しておきたいことを記述するプロンプト。2章で実践したSDKによるAPI呼び出しを使用する。一つだけ指定可能。

ユーザープロンプト

AIの利用者が入力する部分。

アシスタントプロンプト

AIの出力結果。

トークンとは

AIの内部で処理する文字列の単位のこと。トークン数によって生成AIの利用料金が決まる。

トークンの分割

トークナイザーという処理によって文字列をトークンに分割する。以下ではJurassic-2のトークナイザーを利用。

1_ai21lab-token.py
from ai21_tokenizer import Tokenizer
tokenizer = Tokenizer.get_tokenizer()
text = "Amazon BedrockはAWSの生成サービスです。"
encoded_text = tokenizer.encode(text)
tokens = tokenizer.convert_ids_to_tokens(encoded_text)
print(tokens)
  • モジュールのインポート
  • トークナイザー生成
  • トークナイザーでテキストをエンコード
  • トークンに分割して出力
    結果
    image.png
    アルファベットは単語や略称で区切られているが日本語は句読点も含めて一文字ずつで区切られるようだ。空白も_で表現されるので情報が欠落することはない。

トークン数を算出

BedrockにはAPIを呼び出す前にトークン数を算出する方法はないが、生成AIモデル開発元が提供するSDKを使うと事前に確認できる。

3_ai21lab-token-count.py
from ai21_tokenizer import Tokenizer
tokenizer = Tokenizer.get_tokenizer()
encoded_text = tokenizer.encode("Amazon BedrockはAWSの生成AIサービスです。")
print(len(encoded_text))
encoded_text = tokenizer.encode("Amazon Bedrock is an AWS generative AI service")
print(len(encoded_text))
  • モジュールのインポート
  • トークナイザー生成
  • トークナイザーでテキストをエンコードして長さを出力×2
    結果
    image.png
    トークン数は同じ文字列でもモデルによって異なり、日本語のほうがトークン数が多くなる傾向にある。
    日本語が一文字ずつに分割されるのはトークナイザーが日本語に最適化されていないためであり、日本国内ではトークナイザーを日本語に最適化した生成AIが開発されているとのこと。
    ELYZA社
    https://elyza.ai/
    image.png
    東京工大のSwallow
    https://www.titech.ac.jp/news/2023/068089
    image.png

プロンプトエンジニアリング

プロンプトを使用して生成AIに指示を出す手法をプロンプトエンジニアリングと呼ぶ。

タスクを明確にする

「あなたは作詞家です」と役割を与えたり「科学的な原理を示して」など求める回答の傾向を指定したりできる。

ドキュメントを提示する

ドキュメントを提示してその内容に基づいた回答を生成させる。引用部分を<Document>タグで囲うのが一般的だがタグの名前に決まりはない。引用部分以外の付加情報も記述することができる。

詳細なルールを指定する

「重要な部分を箇条書きにして」などのルールを細かく指定することができる。

例を示す

<example>などタグを使って回答の形を指定できる。

順序立てて考えさせる

回答だけ、あるいは回答に至るまでの過程を表示させたりできる。過程と結果を別タグで分けて表示も可能。

プロンプトエンジニアリングのガイドライン

Bedrockのユーザーガイドではさまざまな生成AIのプロンプトエンジニアリング手法が紹介されている。
https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/prompt-engineering-guidelines.html
image.png
Anthropic社提供のガイドラインではプロンプトのサンプルテンプレをまとめたプロンプトライブラリも用意されている。
https://docs.anthropic.com/en/prompt-library/library
image.png

次回へ

今回で入門書は全体の30%くらいまで進んだ。次回は3章のハンズオンで実際にアプリを作るところまで行くらしい。ほんとに??

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?