「LangChainとLangGraphによるRAG・AIエージェント［実践］入門」でつまずいたことメモ:3章

# はじめに

[「LangChainとLangGraphによるRAG・AIエージェント［実践］入門」](https://gihyo.jp/book/2024/978-4-297-14530-9)の第3章で私がつまずいたことのメモです。

（このメモのほかの章へ：[1章](https://qiita.com/segavvy/items/b31efa98a2d4c20e9ec8) / [2章](https://qiita.com/segavvy/items/2801a079c686c906e582) / 3章 / [4章](https://qiita.com/segavvy/items/41225198677cf4f498b5) / [5章](https://qiita.com/segavvy/items/7751b41db1e9c672b6f1) / [6章](https://qiita.com/segavvy/items/3185ca18afe28c96e6bd) / [7章](https://qiita.com/segavvy/items/ac0ce03f9b3cd83ee5ed) / [8章](https://qiita.com/segavvy/items/8109b3a1ed3a4efe1140) / [9章](https://qiita.com/segavvy/items/a4f9d80fe6a3f541d4b5) / [10章](https://qiita.com/segavvy/items/0cbd272e280cfaf6ee28) / [11章](https://qiita.com/segavvy/items/7e4c1af72b2280665be3) / [12章](https://qiita.com/segavvy/items/3833525ebace5ff24a4e) / [まとめ](https://qiita.com/segavvy/items/265b101a6ebb82284e4b)）

:::note info
この記事は個人で作成したものであり、内容や意見は所属企業・部門見解を代表するものではありません。
:::

# 第3章 プロンプトエンジニアリング

前章に続き大嶋さんの担当された章です。

## 3.1 プロンプトエンジニアリングの必要性

> ・低くない割合で指示を無視されてしまう
> ・少しプロンプトを変えただけで指示を無視されてしまう

そうなんですよ、もう、うなずきすぎて首がもげそうです。
仕事でお客さん向けにプロンプト調整することがあるのですが、なかなか言うこと聞いてくれなくて時間が溶けていくので大変です。

## 3.2 プロンプトエンジニアリングとは

前章同様に「[GenerativeAgents / agent-book](https://github.com/GenerativeAgents/agent-book)」からソースコードをコピーしてきて進めましょう。

なお、前章とノートブックが変わるので、そのままでは前章の図2.15で保存したAPIキーにアクセスできません。実行すると以下のようなメッセージが出てくるので「アクセスを許可」を選びましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139624/f40a0e9d-986a-7970-475b-5905e92e24ac.png)

ちょっと脱線しますが、本で例としている「100文字程度で答えてください」という文字数の指定は、以前のGPT-4では言うことを聞いてくれずプロンプトの工夫が必要なテーマでした。少し古い記事ですが、工夫されている方の一例です。

https://www.goatman.co.jp/media/chatgpt-character-length-specification/

でも、最近のGPT-4oやGPT-4o miniでは試したことがなかったので、本のコードを少し変えてGPT-4o miniで100文字から1,000文字までを試してみました。

```python
for length in range(100, 1001, 100):
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": f"質問に{length}文字程度で答えてください。"},
            {"role": "user", "content": "プロンプトエンジニアリングとは"},
        ],
    )
    output = response.choices[0].message.content
    print(f"「{length}文字程度」と指定した結果:\n{output}\n({len(output)}文字)\n----------")
```

以下、実行結果です。

```text:GPT-4o mini
「100文字程度」と指定した結果:
プロンプトエンジニアリングとは、AIモデルに対する指示や質問を効果的に設計・調整する技術です。この技術により、AIから得られる出力の質を向上させ、目的に応じた情報を引き出すことが可能になります。
(97文字)
----------
「200文字程度」と指定した結果:
プロンプトエンジニアリングとは、AIモデル（特に言語モデル）に対して、適切な入力（プロンプト）を設計する技術や方法論のことを指します。ユーザーが求める出力を得るためには、効果的なプロンプトを作成することが重要です。これにより、AIの生成する応答の精度や関連性が向上します。プロンプトエンジニアリングは、データ分析、コンテンツ生成、対話システムなど、多岐にわたる分野で活用されています。
(192文字)
----------
「300文字程度」と指定した結果:
プロンプトエンジニアリングとは、AIモデル、特に自然言語処理モデルに対して効果的な入力（プロンプト）を設計・調整する技術や手法のことを指します。この技術は、モデルが特定のタスクに対してより良い出力を生成するのを助けるために重要です。プロンプトの設計には、明確さや具体性、文脈の提供が求められます。例えば、質問形式や求める情報の詳細を明示することが、モデルの応答の質を向上させることに寄与します。プロンプトエンジニアリングは、AIの利活用において、ユーザーが簡単に効果的な結果を得るための戦略的アプローチとして注目されています。
(263文字)
----------
「400文字程度」と指定した結果:
プロンプトエンジニアリングとは、特にAIや機械学習モデルに対して適切な入力（プロンプト）を設計し、モデルから望ましい結果や応答を引き出す技術やアプローチのことを指します。この手法は、自然言語処理（NLP）モデル、特に大規模言語モデル（LLM）において重要な役割を果たします。

プロンプトエンジニアリングの主な目的は、モデルの性能を最大限に引き出すための効果的な質問や指示を構築することです。適切なプロンプトを使用することで、AIの理解力や生成能力を向上させ、ユーザーが必要とする具体的な情報やタスクを効率的に達成できます。

具体的な手法としては、プロンプトの文章構造を工夫したり、さまざまなスタイルやトーンを試したり、モデルに対する具体的な背景情報を提供することが含まれます。また、複数のプロンプトを試すことで、最も適切な応答を生成するプロンプトを見つけることもあります。

この技術は、ビジネス、教育、クリエイティブな分野など、多岐にわたる応用があり、今後ますます重要視される分野となっています。特に、AIと人間のインタラクションが深化する中で、プロンプトエンジニアリングは、AIを効果的に活用するためのコアスキルとも言えます。
(517文字)
----------
「500文字程度」と指定した結果:
プロンプトエンジニアリングとは、主に人工知能（AI）、特に大規模言語モデルに対して効果的な指示や質問（プロンプト）を設計する技術や手法のことを指します。AIに対する指示の内容や形式を工夫することによって、より正確で有用な応答を導き出すことが目的です。

この分野は、AIが自然言語を理解し、生成する能力を活用し、さまざまなタスクに対して最適な結果を引き出すための重要な技術となっています。具体的には、プロンプトの文言、構造、文脈などを考慮することで、AIの出力を調整し、期待される情報やスタイルに近づけることができます。

プロンプトエンジニアリングは、さまざまな場面で応用可能です。例えば、カスタマーサポートのチャットボットや、クリエイティブな文章作成、データ分析、教育コンテンツの生成など、幅広い分野で利用されています。プロンプトの設計が巧妙であればあるほど、AIからのアウトプットが効果的になり、利用者にとっての価値が増します。

また、プロンプトエンジニアリングには、継続的な改善と試行錯誤が重要です。初めてのプロンプトでは望む結果が得られないことが多く、異なる表現や追加の指示を試みたり、フィードバックを受けてプロンプトを調整したりするプロセスが求められます。これにより、AIの性能を最大限に引き出し、利用者のニーズに合った結果を生成することが可能になります。

以上のように、プロンプトエンジニアリングはAIとのインタラクションを最適化し、その能力を引き出すための重要な手法であり、今後ますます注目される分野といえるでしょう。
(669文字)
----------
「600文字程度」と指定した結果:
プロンプトエンジニアリングとは、人工知能（AI）や自然言語処理（NLP）モデル（特に大規模言語モデル）に対して、効果的な入力（プロンプト）を設計・調整するプロセスを指します。この技術は、AIが特定のタスクをより良く実行するために、どのように質問や指示をフォーマットするか、またはどのようなコンテキストを与えるかを研究するものです。

具体的には、プロンプトエンジニアリングは以下のような要素を含みます：

1. **プロンプトの設計**: AIに対して与えるテキストの形式や内容を工夫し、モデルが最も適切な応答を返すようにします。例えば、質問の構造を工夫したり、必要な情報を明示的に提供することで、モデルが意図したとおりの結果を生成しやすくなります。

2. **調整と最適化**: プロンプトの効果を検証し、どのような言い回しや文脈が最も効果的かを試行錯誤します。このプロセスでは、異なるプロンプトを比較したり、実際の出力を分析して改善の余地を見つけます。

3. **バイアスや誤解の回避**: モデルが持つ潜在的なバイアスや誤解を避けるために、プロンプトを注意深く設計することも重要です。適切な言語を使用することで、特定のグループや事象に対する偏見を減らすことが可能です。

4. **応用分野**: プロンプトエンジニアリングは、カスタマーサポート、コンテンツ生成、データ分析など、さまざまな分野で利用されます。たとえば、商品に関する質問をする際には、明確で具体的なプロンプトを使用することで、AIの応答がより有用になるといった具合です。

プロンプトエンジニアリングは、AIモデルの能力を最大限に引き出すための重要なスキルであり、今後も進化していくことでしょう。この分野の発展により、より自然で洗練されたAIとのインタラクションが可能になり、ユーザー体験が向上します。つまり、プロンプトエンジニアリングは、AIと人間のコミュニケーションの架け橋となるのです。
(834文字)
----------
「700文字程度」と指定した結果:
プロンプトエンジニアリングとは、主に自然言語処理（NLP）や人工知能（AI）モデル、とくに大規模言語モデル（LLM）を効果的に活用するための技術とアプローチを指します。最近では、ChatGPTやGPT-3などのモデルが普及し、それを使ったアプリケーションやサービスが増えている中で、プロンプトエンジニアリングの重要性が高まっています。

プロンプトエンジニアリングの基本的な考え方は、AIモデルに対して適切な「プロンプト」（入力文や指示）を提供することによって、望ましい出力を得ることです。プロンプト自体は非常に簡単な文であったり、詳細な指示を含むものであったり任意ですが、その内容や形式がモデルの応答に大きな影響を与えるため、注意深く設計する必要があります。

具体的なプロンプトエンジニアリングの手法には、以下のようなものがあります。まず、特定のタスクに対して明確で具体的な指示を与えることが重要です。たとえば、「この文の要点をまとめてください」といったリクエストが効果的です。また、出力形式を指定することも有効で、「箇条書きで答えてください」といった指示が結果に良い影響を与えることがあります。

さらに、プロンプトエンジニアリングでは、プロンプトを何度も改良していく反復的なプロセスが重要です。初回のプロンプトがうまくいかない場合、その出力を分析し、どの部分を改善するべきかを考察して新たなプロンプトを形成します。試行錯誤を繰り返すことで、望む結果を得られる可能性が高まります。

プロンプトエンジニアリングは、単なるテクニックではなく、AIの可能性を最大限に引き出すための戦略とも言えます。特に、ビジネスや教育、コンテンツ制作などの分野では、効果的なプロンプトを設計することで、AIによるサポートの質を向上させ、作業の効率化や創造性の促進につなげることが期待されています。最新の技術を駆使しながら、この分野は進化し続けています。
(819文字)
----------
「800文字程度」と指定した結果:
プロンプトエンジニアリングとは、AIモデル、特に自然言語処理を用いた生成モデルに対して、適切な「プロンプト」を設計し、効果的な結果を引き出す技術や手法を指します。プロンプトとは、モデルに対して指示や質問を与える文やフレーズのことです。これにより、AIは特定の情報を生成したり、質問に答えたりすることができます。

プロンプトエンジニアリングは、単にモデルに何を尋ねるかに留まらず、AIがより良い応答を生成できるようにその構造や文脈を工夫することを含みます。たとえば、特定のスタイルでの回答を求めたり、注意を向けるべき側面を強調したりすることによって、よりニーズに合った結果を引き出すことが可能になります。

この技術は、特に大規模言語モデル（LLM）を用いたさまざまなアプリケーションで重要です。たとえば、カスタマーサポート、自動翻訳、テキスト生成、情報収集などの分野で使われています。通常、効果的なプロンプトは試行錯誤を通じて洗練され、最適な形式や文脈でAIに指示を与えることが要求されます。

プロンプトエンジニアリングの重要な要素には、具体性、明確さ、文脈の提供が含まれます。具体的な指示を提供することで、モデルはその意図をより正確に理解し、関連性のある応答を生成します。また、文脈を提供することで、AIが受け取る入力をより豊かにし、より適切な出力を得る確率を高めることができます。

今後、AIが社会のさまざまな側面での役割を拡大していく中で、プロンプトエンジニアリングの技術も進化し続けるでしょう。良好なプロンプト設計は、AIの能力を最大限に引き出し、さまざまなタスクに対する精度や効率を向上させるための重要な手段です。そのため、今後もこの分野の研究や実践が増加すると考えられます。
(746文字)
----------
「900文字程度」と指定した結果:
プロンプトエンジニアリングとは、特に人工知能（AI）や自然言語処理（NLP）の分野で、AIモデルに対して適切な指示や質問を設計する技術やスキルを指します。これは、特定のタスクを遂行するためにAIに対して与える「プロンプト」の最適化を目的としています。プロンプトは、AIがどのように反応するかを大きく左右するため、良いプロンプトを用いることは、AIから最も有益なアウトプットを引き出すために非常に重要です。

プロンプトエンジニアリングの基本的な考え方は、AIモデルが自然言語の入力に基づいて応答を生成することを理解し、それがどのように働くかを考えることです。例えば、モデルに対して具体的かつ明瞭な質問をすることで、出力がより的確で有用なものになることがあります。逆に曖昧な質問や指示では、不正確または不十分な応答が返ってくる可能性が高いです。

このプロセスでは、さまざまなアプローチが取られます。例えば、プロンプトを段階的に調整して、モデルの反応を観察しながら、最も効果的な形式や内容を見つける方法です。また、特定のタスクに応じたコンテキストを与えることも重要で、例えば、ビジネスレポート作成のためのプロンプトと、カジュアルな会話のためのプロンプトでは、期待されるアウトプットのスタイルや内容が異なるため、それに合わせた調整が必要です。

プロンプトエンジニアリングの役割は、主にデータサイエンティスト、AI研究者、プログラマー、コンテンツクリエイターなどによって実施されます。彼らは、AIの機能を最大限に引き出すために、プロンプトを設計し、テストし、最適化します。また、この技術は、企業が生産性を向上させるためにAIを導入する際にも重要な要素となります。

最近では、AI技術の普及により、非専門家でもプロンプトを設計する機会が増えています。その結果、プロンプトエンジニアリングの重要性がより一層認識されるようになり、関連する教育やリソースも増えてきています。このように、プロンプトエンジニアリングは、AIを活用する上での新しいスキルとして急速に進化している分野の一つです。
(889文字)
----------
「1000文字程度」と指定した結果:
プロンプトエンジニアリングとは、人工知能（AI）や機械学習モデル、特に自然言語処理（NLP）の分野において、モデルに対して効果的な入力（プロンプト）を設計・調整する技術や手法を指します。例えば、OpenAIのGPTシリーズなどの大規模言語モデルは、入力されたテキストに基づいて応答を生成しますが、その生成される内容は入力の質や形によって大きく変わります。したがって、プロンプトエンジニアリングは、こうしたモデルの出力を最適化するために不可欠な要素となります。

プロンプトエンジニアリングにはいくつかの重要な側面があります。まず、ユーザーが意図する情報を正確に取得するためには、明確で具体的な指示を含むプロンプトを作成する必要があります。このために、文脈を考慮した質問や命令を精密に設計することが求められます。たとえば、単に「レシピを教えて」と尋ねるのではなく、「4人分の簡単なイタリアンパスタのレシピを教えて」と具体的に要求することで、より適切な出力を得ることができます。

次に、プロンプトは、モデルに対して特定のスタイルやフォーマットを指定することも可能です。たとえば、カジュアルなトーンで回答させたり、学術的なアプローチを採用させたりすることができます。これにより、ビジネスや教育などの場面で、目的に応じた情報を効率的に引き出すことができます。

また、プロンプトエンジニアリングは、試行錯誤のプロセスであることが多いです。生成された出力を評価し、必要に応じてプロンプトを調整して再実行することで、より理想に近い結果を得ることが可能です。特に、特定のタスクに対しては、関連する情報や背景知識を付加したプロンプトが有効です。

さらに、最近では少数ショット学習やゼロショット学習といった技術が注目されており、プロンプトエンジニアリングはこれらの手法と密接に関連しています。これらの方法では、少ない例示や全く例を示さずにモデルに新しいタスクを実行させることが目指されます。これにおいても、如何にプロンプトを設計するかがカギとなります。

最後に、プロンプトエンジニアリングはAI活用の実務においてますます重要性を増しています。ビジネス、教育、研究などの多様な分野でAIの導入が進む中、クリエイティブなプロンプトを構築する能力は、ユーザーがAIから最大限の価値を引き出すために欠かせないスキルとなっています。したがって、プロンプトエンジニアリングの技術を高めることは、AIを効果的に活用するための重要なステップと言えるでしょう。
(1065文字)
----------
```

結構ズレてるな、と思われるかもしれませんが、これはすごく良くなっています。一昔前のGPT-4の時はひどかったのです。

ということで、以下、`model="gpt-4"`に変えた時の結果です。

```text:GPT-4
「100文字程度」と指定した結果:
プロンプトエンジニアリングは、問題解決のためのアイデアやソリューションを迅速に提供するためのエンジニアリングの手法です。Iterativeデザインプロセスとクイックプロトタイピングの手法を使用します。
(100文字)
----------
「200文字程度」と指定した結果:
プロンプトエンジニアリングは、特定の問題の解決策を迅速に見つけ出すためのエンジニアリング手法の一つで、通常、時間とリソースが限られた状況で使用されます。具体的な問題解決のための新しいアプローチや、既存のものの改良を目指す工程です。この手法は、既存の製品設計を迅速に改良し、効率的な製造プロセスを確立することで、短期間で個別のプロジェクトを達成するために多く使用されます。
(185文字)
----------
「300文字程度」と指定した結果:
プロンプトエンジニアリングは、カスタムエンジニアリングソリューションを設計し提供する専門的なエンジニアリング会社のことを指すことが多いです。これらの会社は、クライアントのニーズや要件に基づいて特定の設計、製造、テスト、実装など全体のエンジニアリングプロセスを行います。彼らの主な目的は、顧客のビジネスニーズに適した高品質で効率的なエンジニアリングソリューションを提供することです。一部のプロンプトエンジニアリング会社は、特定のセクターや技術に焦点をあて、その他は広範な業界で作業を行います。
(245文字)
----------
「400文字程度」と指定した結果:
プロンプトエンジニアリングとは、産業プラントの設計・施工・保守・運用等に関する技術サービスを提供する企業の一つです。主に化学、製薬、食品、精密機器などの産業プラントに関する各種エンジニアリングを承っています。特にプロセス設計、装置設計、電気・計装設計などの分野で高い評価を受けており、最先端技術・製品の適用提案から運用後のアフターフォローまで、トータルに対応できる能力が特徴です。また、エネルギー削減、省資源化、コスト削減等の観点から、最適かつ効率的な設備提案を行っています。エンジニアリング会社としてのプロンプトの役割は、クライアント企業の生産施設が滞りなく機能するよう与えられた課題の解決に取り組むことです。
(306文字)
----------
「500文字程度」と指定した結果:
プロンプトエンジニアリングとは、主にIT分野において、短期間で具体的な成果を出すためのエンジニアリング手法のことを指します。『プロンプト』とは「即座に、迅速に」を意味し、以下の3つの特徴があります。

1. 素早く適用できるテクノロジーを用いる: 使用する技術は新しいものである必要はありません。適切なテクノロジーを選び、既存のものを組み合わせて利用することで迅速に成果を出すことが重視されます。

2. 手間や時間を割くよりも短期間で結果を出すことを優先する: 本来ならば時間をかけて改善や最適化を行う部分も、スピードを重視し、一定の品質を確保できれば手間を掛けずに先に進むことを選びます。

3. 必要性が明確であること: 無理に新しい技術を導入するのではなく、目の前の課題を解決するために何が必要かを考え、それが成果に直結する技術選択を行います。

これらの特徴から、スタートアップ企業等でよく取り入れられ、商品のプロトタイプを早期に作成したり、新規事業を迅速に立ち上げる際に活用されます。
(448文字)
----------
「600文字程度」と指定した結果:
プロンプトエンジニアリングは、人間の発話を理解し、適切な応答を生成するための技術や手法のことを指します。特に、この用語はAIやマシンラーニングの分野で使われ、AIが人間と自然に会話するための技術やメソッドを意味します。

AIが人間の言葉を理解し応答するためには、大量のデータからパターンを学習し、人間の意図を解析し、それに対する適切な返答を生成する能力が求められます。このプロセス全体がプロンプトエンジニアリングの領域に該当すると言えます。

具体的には、AIトレーニングの初期段階で、人間が問いを投げかけ（これをプロンプトと呼びます）、AIがそれに応答する形を取ります。学習を進めると、AIは新たなプロンプトに対しても適切なレスポンスを生成するようになります。

近年、AIの自然言語処理能力の向上に伴い、異なるコンテクストや要求に対する精度高い応答を生成できるようになりつつあります。プロンプトエンジニアリングは、このようなAIの進化とともに重要性を増している領域です。
(438文字)
----------
「700文字程度」と指定した結果:
プロンプトエンジニアリングとは、人間の会話を自然な形でAIに伝達、理解させるための技術や手法を研究・開発する工学の一分野です。具体的には、人間がAIに対して指示や要求を伝えるときに使う文言（プロンプト）をどのように設計するかを主に研究します。AIの理解力や反応精度は、このプロンプトの設計に大きく影響されます。

例えば、OpenAIの多様なモデル（GPT-3など）は多量のテキストデータを学習しますが、その異なる振る舞いや反応はユーザーからのプロンプト指示による部分が多いです。プロンプトエンジニアリングでは、このようなAIモデルへの指示を与える際に使われる表現や文脈を工夫し、AIの性能を最大限に引き出そうとします。

プロンプトエンジニアリングはまだ発展途上の分野であり、一部の専門家や研究者がその可能性を探っています。その結果、AIの応答を更に自然で人間らしい形にするための新しい手法やテクニックが絶えず開発されています。この分野の発展により、AIは言葉だけでなく意味や意図までも理解し、より自然な対話を実現することが期待されています。
(472文字)
----------
「800文字程度」と指定した結果:
プロンプトエンジニアリングは、最初から最後まで顧客のニーズに合わせてエンジニアリングサービスを提供することです。これには、アイデアの検討、設計、プロトタイピング、製造、テスト、最終的な実装までが含まれます。この用語は日本の製造業やビジネスでは一般的ではありませんが、顧客中心のソリューションを提供するエンジニアリングの形態を示しています。

プロンプトエンジニアリングは、プロジェクトがうまく進むようにするために、期待される結果と顧客の要求に基づいてプロジェクトの各段階を計画する責任があります。これは、設計フェーズから最終的な製造とテストに至るまで、一貫性と効率を確保するために重要です。

このアプローチには、問題の理解と定義、解決策の議論と作成、その解決策のプロトタイピングとテスト、およびその解決策の最終的な実装とテストというステップが含まれます。プロンプトエンジニアリングでは、これらすべてのプロセスを通じて徹底的な品質管理や検証を行い、顧客が求める規格や基準を満たす製品を提供します。

最終的にプロンプトエンジニアリングは、技術的な専門知識と経験を活用して、顧客の特定の要件に対応する高品質な製品やサービスを提供することを目指します。以上の理由から、プロンプトエンジニアリングは、製造業やビジネスで積極的な採用を見ています。
(569文字)
----------
「900文字程度」と指定した結果:
プロンプトエンジニアリングとは、主にIT業界におけるソフトウェアの設計や開発を行うエンジニアリング手法の一つです。この概念自体は一般的に広く知られているわけではなく、一部の企業や団体が自社の開発フローを形容する際に用いている用語でもあります。

プロンプトエンジニアリングは、ユーザーニーズに即時に、迅速に対応する事を重視します。すなわち、顧客の要望や市場の動向などを敏感に察知し、それに素早く反応してソフトウェアの開発や改良を行うことを重んじています。

プロンプトエンジニアリングでは、新製品の開発だけでなく、既存のソフトウェアの改良やアップデートも重要なタスクとなるため、これには適切な技術的スキルや深い業界知識、そして顧客の要望を正確に理解する能力が求められます。また、スピーディな開発が求められる一方で、品質を確保するためのテストやレビュープロセスなども十分に行われるべきです。

このように、プロンプトエンジニアリングはソフトウェア開発のスピードと品質の調和を図るものであり、開発チームの効率性と生産性を高める一方で、顧客満足度の向上にも寄与します。しかし、このような開発手法を実践するためには、適切な人材を確保し、一貫したトレーニングを提供し、開発プロセスを常に見直して改善することが不可欠です。
(555文字)
----------
「1000文字程度」と指定した結果:
プロンプトエンジニアリングは、AIが自然言語の理解や生成を行う際にプロンプトと呼ばれる入力指示を用いて訓練や制御を行う手法を指す一般的な名前です。プロンプトとは、AIに対する具体的な命令や質問のことを指し、AIがそのプロンプトを基に適切な回答を生成します。このプロンプトは、AIの性能を最大限引き出すために非常に重要な役割を果たします。

プロンプトエンジニアリングは、非常に広範なタスクに対応すると同時に、限られたデータセットに依存せずにAIを操作する能力を提供します。これは、適切なプロンプトがあれば、AIが必要とする情報を具現化したり、新しいタスクに適応したり、あるいは新しい所見を得ることを可能にするからです。

具体的なプロンプトエンジニアリングの例として、GPT-3などの大規模な言語モデルの訓練が挙げられます。ここでは、モデルが自然言語の理解、翻訳、文章の作成などのタスクを達成するために、様々なプロンプトの形式が試し、最適化されています。

プロンプトエンジニアリングは、AIテクノロジーの進歩に伴い、その重要性が増してきています。というのも、技術が進化し、AIモデルが大規模になるにつれて、その操作と制御の複雑さも増してきているからです。これに対抗するため、AIの行動をより細かくガイドし、特定の目標に向けて最適化する方法として、プロンプトエンジニアリングが重視されています。
(597文字)
----------
```

ちょっと表にしてみました。

|「n文字程度」の指定|GPT-4の結果の文字数|GPT-4o miniの結果の文字数|
|-:|-:|-:|
|100|100|97|
|200|185|192|
|300|245|263|
|400|306|517|
|500|448|669|
|600|438|834|
|700|472|819|
|800|569|746|
|900|555|889|
|1,000|597|1,065|

1回しか計測していないのでかなりいい加減な比較ですが、GPT-4では「1,000文字程度」と指示しても600文字程度しか生成しないのに対して、GPT-4o miniはそれなりの文字数にまとめていることがわかります。

こうやって、過去に編み出した工夫やそれにかけた時間が技術の進歩により無になっていくわけですね。進化はうれしいのですがなんか複雑な心境です……

## 3.3 プロンプトの構成要素の基本

本の内容とは「カレー」しか接点がないホントの余談ですが、Qiitaには「カレー」タグがあったりします:grin:

https://qiita.com/tags/%e3%82%ab%e3%83%ac%e3%83%bc

ここには、@Tadataka_Takahashi さんの知識グラフの興味深い記事が多く投稿されています。RAGに興味のある方は、きっとこの先、知識グラフを学ぼう！と思う日がくるかと思いますのでぜひ。

## 3.4 プロンプトエンジニアリングの定番の手法

定番のテクニックの紹介です。

なお、本の注9に書いてあるように、新しいo1やo1 miniではCoTプロンプティングが推奨されないそうです。これも、先ほどの文字数指定と同様に、技術の進歩によって使えなくなるテクニックなのかもしれません。

また、「[From Medprompt to o1: Exploration of Run-Time Strategies for Medical Challenge Problems and Beyond](https://arxiv.org/abs/2411.03590)」という論文によると、Few-shotプロンプティングもo1では精度低下につながってしまうそうです。

> We found that few-shot prompting hinders o1's performance, suggesting that in-context learning may no longer be an effective steering approach for reasoning-native models.
> （google翻訳）私たちは、少数のショットのプロンプトが o1 のパフォーマンスを妨げることを発見しました。これは、コンテキスト内学習が推論ネイティブ モデルにとって効果的なステアリング アプローチではなくなっている可能性を示唆しています。

o1のような内部で深く思考するようになっているモデルは、外部から思考方法についての情報を渡すと邪魔になってしまうみたいですね。

定番を学ぶ時は使い方を丸暗記するのではなく、中の仕組みを想像しつつを学んで臨機応変に使い分けないと、そのテクニックが対象のLLMによってはアダになってしまうこともありそうです。

## 3.5 まとめ

> プロンプトエンジニアリングは、人間相手に丁寧に指示を出すのと似ているといわれることもあります。

まさにその通りです。私も仕事でLLMと一年半ほど格闘してきましたが、おかげで自分の日本語力が鍛えられてきた感じがしています:grin:

いよいよ次章からはLangChainのお話です。

（このメモのほかの章へ：[1章](https://qiita.com/segavvy/items/b31efa98a2d4c20e9ec8) / [2章](https://qiita.com/segavvy/items/2801a079c686c906e582) / 3章 / [4章](https://qiita.com/segavvy/items/41225198677cf4f498b5) / [5章](https://qiita.com/segavvy/items/7751b41db1e9c672b6f1) / [6章](https://qiita.com/segavvy/items/3185ca18afe28c96e6bd) / [7章](https://qiita.com/segavvy/items/ac0ce03f9b3cd83ee5ed) / [8章](https://qiita.com/segavvy/items/8109b3a1ed3a4efe1140) / [9章](https://qiita.com/segavvy/items/a4f9d80fe6a3f541d4b5) / [10章](https://qiita.com/segavvy/items/0cbd272e280cfaf6ee28) / [11章](https://qiita.com/segavvy/items/7e4c1af72b2280665be3) / [12章](https://qiita.com/segavvy/items/3833525ebace5ff24a4e) / [まとめ](https://qiita.com/segavvy/items/265b101a6ebb82284e4b)）