🚀

具体例から知る実践的LLMプロンプトテクニック - プロンプトエンジニアリング最初のステップ

2024/01/26に公開

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

プロンプトエンジニアリングは「LLMのパワーを効果的に活用しよう」というアプローチであり、複雑な推論など実験的な手法も含んでいるとは思います。
その一方で、要素としては現状ですでに実践的な手法も含んでいると感じました。
そこで、現状において実践的なプロンプトテクニックだと感じたものをまとめました。

ケーススタディ

逆順のアルファベットテキストを生成するということを具体例とします。

1文で行う

まず、シンプルに一文で行うパターンです。

input

I'd like to get text which is alphabet reversed sequence.

output

Sure, here is the alphabet in reverse sequence:

Z Y X W V U T S R Q P O N M L K J I H G F E D C B A

生成してくれました。
ただ、ここで小文字のアルファベットとしたい場合に、一文だと文章が長くなって追加が難しくなっていきます。

条件をリストとし、依頼を最後にする

以下のテクニックを含めます。

  • 意味ごとに分類する(この場合は条件を明確に分類することを含む)
  • テキストにおいて、最後のものの方がより重要に扱われることを考慮して、依頼を最後に行う

input

I'd like to get text

conditions:
- alphabet
- reversed sequence
- lower case

could you make this?

output

Sure, here is the alphabet in reverse sequence in lower case:

z y x w v u t s r q p o n m l k j i h g f e d c b a

小文字で生成してくれました。

依頼形式ではない形式とする

本来的に「文脈を考慮した連続するテキストを生成する」ということをベースとしている部分を重要に感じたので、それを考慮した形式を紹介します。

input

I'd like to get text

conditions:
- alphabet
- reversed sequence
- lower case

text is:

output

The text you're asking for, which is the alphabet in lower case and in reversed sequence, is:

z y x w v u t s r q p o n m l k j i h g f e d c b a

生成してもらいたい文章につながるようにテキストを終わらせることで、続きとして生成されます。

さらに条件を追加する

さらに条件を追加して隣の文字と入れ替えた文字列を生成してみます。

input

I'd like to get text

conditions:
- alphabet
- reversed sequence
- swap order in every two characters
- every character is lower case
- each character separated by single space

text is:

output

Understood. Here's the alphabet in lower case, in reversed sequence, with the order of every two characters swapped, and each character separated by a single space:

"y z w x u v s t q r o p m n k l i j g h e f c d a b"

まとめ

具体例を通して順番に紹介しましたが、プロンプトエンジニアリングの最初のステップとして重要だと感じたエッセンスは以下です。

  • 本来的には「文脈を考慮した連続するテキストを生成する」のであり、それを会話のようにするかどうかは形式の一つ
  • 情報の属性(条件なのか出力形式なのかなど)を明示し、LLMが解釈に困らないようにする
  • テキストの提示順によって扱われる重要度が違ってくる

最後の「隣の文字と入れ替えたテキスト生成」では、同じプロンプトを入力してもスペースを含まずに"yzw..."という形式で出力されることがあったので「スペース区切り」という条件を追加しています。
そのように、プロンプトも調整していくことが考えられ、プロンプトもバージョン管理する対象になっていくだろうと感じました。

参考資料

Prompt Engineering Guide
https://www.promptingguide.ai/jp

プロンプト エンジニアリングの概要
https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/prompt-engineering

Happy Elements

Discussion