Toilを無くして徒然なるままに日暮し硯に向かひたい

生成AIアプリケーション開発などを行うエンジニアのブログです。

プロンプトエンジニアリング プログラミング ハンズオン

genai-users.connpass.com

この記事は上記勉強会の資料です。

shu-kob.hateblo.jp

↑上記記事を参考にサービスアカウントの設定をしてください。

Google Cloudの無料期間が終了していると、課金されますが、ハンズオンの内容だけだと数百円もいかないと考えています。

料金は確実には言えないので、Google Cloudはご自身の責任でご使用ください。

github.com

↑今回のサンプルコード

git clone https://github.com/shu-kob/prompt_engineering
cd prompt_engineering
pip install vertexai

LangChainを使わずVertex AIのライブラリを使用

シンプルなVertex AIでGeminiを実行

project_id = "PROJECT_ID" # 書き換える

実行

python3 generate_content.py
response = model.generate_content(
  "プロンプトエンジニアリングとは"
)

プロンプトを変更して実行してみましょう。

Zero Shot プロンプティング

project_id = "PROJECT_ID" # 書き換える

実行

python3 zero_shot_prompting.py
prompt = """
以下はニュース記事のタイトルです。「政治」「経済」「芸能」「スポーツ」「科学」「その他」のうち1つに分類してください。
回答だけ一言で出力してください
===========================
紅白出場歌手の選考基準 NHK公開
"""

プロンプトを変更して実行してみましょう。

Few Shot プロンプティング

project_id = "PROJECT_ID" # 書き換える

実行

python3 few_shot_prompting.py
prompt = """
以下はニュース記事のタイトルです。「政治」「経済」「芸能」「スポーツ」「科学」「その他」のうち1つに分類してください。
回答だけ一言で出力してください
===========================
「紅白出場歌手の選考基準 NHK公開」
===========================
以下は例です
「G20 バイデン氏不在で集合写真」:政治
「岡田将生&高畑充希結婚 SNS反応」:芸能
"""

プロンプトを変更して実行してみましょう。

LangChainを使用

langchain_google_vertexai を使用

pip install langchain_google_vertexai
python3 invoke.py
messages = [
  ("human", "ネコの鳴き真似をしてください。"),
]

プロンプトを変更して実行してみましょう。

PromptTemplateを使用

pip install langchain_core
pip install pydantic==2.9.0

実行

python3 prompt_template.py
template = """質問: {question}

ステップバイステップで考えてください。"""

question = """
10 + 2 * 3 - 4 * 2
"""

プロンプトテンプレートやQuestionを変更して実行してみましょう。

ChatPromptTemplateを使用

実行

python3 chat_prompt_template.py
prompt_template = ChatPromptTemplate.from_messages([
    ("system", "ステップバイステップで考えてください。"),
    ("human", "{question}"),
])

question = """
10 + 2 * 3 - 4 * 2
"""

システムプロンプトやQuestionを変更して実行してみましょう。

参考資料

python.langchain.com

python.langchain.com

参考文献

LangChainとLangGraphによるRAG・AIエージェント[実践]入門

Google Gemini 1.5/LlamaIndex/LangChain 人工知能プログラミング実践入門

LLMのモデル更新や廃止による影響を考える

この記事は、MLOps(LLMOps、生成AIOps) Advent Calendar 2024 4日目の記事です。

生成AIの普及により、アプリケーションに組み込んで実運用を始めた方も増えてきたと思います。

LLMOpsをする中で気をつけたいことを考えてみました。

モデルの更新

まず、思い浮かぶのがモデルの更新よる影響です。

モデルの更新によって性能が上がるなどのメリットを享受できる反面、

挙動変更によって、困ることもあります。

私の場合、システムの実運用では無いですが、LLM技術書のサンプルコードが動かなくなる事態がありました。

06_agent/agent_5.py で2回目の実行結果が正しく表示されません · Issue #3 · harukaxq/langchain-book · GitHub

gpt-3.5-turboをAgentとして使用したときの挙動が変わったという内容です。

アプリに組み込んでいたら、機能が使えなくなる可能性があり、 使えなくなった場合の代替案も用意しておく必要があると考えました。

また、LLMのリリース情報もウォッチしておく必要があるでしょう。

Geminiはリリースの最新情報を日本語で提供しています。

gemini.google.com

ChatGPTはリリースノートを英語のみですが提供しています。

ChatGPT — Release Notes | OpenAI Help Center

Anthropic製品(Claude)のリリースノートは日本語で提供されています。

docs.anthropic.com

モデルの廃止

モデルの廃止もウォッチする必要があるでしょう。

GPT-3.5 Turbo終了はニュースになりました。

xtech.nikkei.com

↑日経クロステックの有料会員記事ですが、会員でなくても1ページ目で内容は把握できます。

learn.microsoft.com

Azure OpenAIでは、GPTの各種マイナーバージョンが提供されていますが、適宜廃止になるので注意が必要です。

廃止になる場合、モデルのVersion UPが必要なので、早めに開発環境でVersion UPしたモデルの挙動確認をする必要があるでしょう。

Version UPしたモデルだと、LLMの利用料が高くなることも念頭に置いて、コスト試算しましょう。

まとめ

モデル更新や廃止を早く知るために、LLM公式サイトのリリースノートなどのウォッチをして、早めに対策をしましょう。

Transformer論文を生成AIで要約してみた

この記事は生成AI Advent Calendar 2024の3日目の記事です。

AIの歴史は60年ほどで、「冬の時代」と呼ばれる停滞期もありましたが、昨今の生成AIの発展は「Transformer」と呼ばれる論文から始まりました。

この「Transformer」論文をわかりやすいように生成AIに要約させてみました。

arxiv.org

「Transformer」論文は上記サイトで見ることができます。

論文の正式名称は「Attention Is All You Need」で、現在 v7。

右側のAccess Paper:から閲覧することができます。

なお、PDFの直リンクはこちら

Google CloudのVertex AIでGeminiに要約させた結果は以下です。

プロンプト「この論文を日本語で高校3年生レベルにもわかるように要約してください。」


この論文は、「Transformer」という、機械翻訳などのシーケンス変換タスクに革新をもたらした新しいニューラルネットワークアーキテクチャを提案しています。高校3年生にもわかるように要約すると、以下のようになります。

従来の機械翻訳の問題点:

従来の機械翻訳は、RNN(再帰ニューラルネットワーク)という技術を主に使っていました。RNNは文章を単語ごとに順番に処理していくため、長い文章だと処理に時間がかかります。また、並列処理が難しいため、計算速度を上げるのが困難でした。

Transformerの革新的な点:

Transformerは、「Attention(注意機構)」という仕組みに完全に基づいており、RNNのような順番に処理する仕組みを完全に排除しました。Attention機構は、翻訳したい単語を生成する際に、入力文全体の中でどの単語に注目すべきかを判断する仕組みです。人間の翻訳作業で例えると、翻訳する際に原文の関連する部分に注目するのと同じような働きをします。

この仕組みにより、以下の利点が生まれました。

  • 並列処理が可能: 単語を順番に処理する必要がないため、並列処理が可能になり、計算速度が大幅に向上しました。
  • 長い文章への対応力向上: RNNでは、文章が長くなるほど精度が落ちやすいという問題がありましたが、Attention機構は入力文全体を一度に見ることができるため、長い文章でも高い精度を維持できます。

Transformerの成果:

Transformerは、従来のモデルよりも高い精度を達成し、さらに学習時間も大幅に短縮しました。具体的には、英語からドイツ語への翻訳と英語からフランス語への翻訳タスクで、当時の最高精度を更新しました。

Transformerの仕組みを簡単に説明すると:

Transformerは、エンコーダとデコーダという2つの部分から構成されています。

  • エンコーダ: 入力文を解析し、各単語の意味をベクトル表現に変換します。
  • デコーダ: エンコーダの出力とAttention機構を利用して、翻訳文を生成します。

エンコーダとデコーダは、それぞれ複数の層が積み重なった構造になっています。各層は、Attention機構と全結合層という2つのサブ層から構成されています。

Transformerの今後の展望:

Transformerは、テキスト以外のデータ(画像、音声、動画など)にも応用できる可能性があり、様々な分野での活用が期待されています。また、文章生成をより効率的に行うための研究も進められています。

簡単に言うと、Transformerは、人間の「注意」の仕組みに似た仕組みを使って、従来よりも高速で高精度な機械翻訳を実現した画期的な技術です。

2025年の崖から考える我々のパーパス(序章)

はじめに

この記事は3-shake Advent Calendar 2024 シリーズ1の2日目の記事です。

1日目はシリーズ1がYutaro ShirayamaさんのポストCloud9?クラウドIDE CoderでPlatform Engineeringを実践する

2日目はシリーズ2がYoshinori Teraokaさんのvector で kubernetes の container log を CloudWatch Logs に転送するでした。

なお、シリーズ2の2日目はshingo919さんの 九州旅行記(ドライブでの九州一週旅行は大変だった!)です。

2025年の崖

今回は「2025年の崖」について軽くご紹介したいと思います。

いよいよ2025年になりますが、ITでは「2025年の崖」という言葉が存在します。

2025年の崖がある中で、スリーシェイクSreake事業部が果たす役割を考えていきたいと思います。

「2025年の崖」をググったら色々出てきますが、経済産業省のレポートが1次情報源的かつわかりやすいでしょう。

www.meti.go.jp

なお、DXレポート ~ITシステム「2025年の崖」の克服とDXの本格的な展開~(サマリー)はスライド5枚にまとまっており、さっと読みやすいです。

「2025年の崖」は要するに何なのかというと、IT人材が不足しており、レガシーシステムを保守するのに限界が来ている。DXも推進しないといけない。何とかしないともう後が無い。という状況。

2015年時点で、IT人材の不足が約17万人とされていたところ、2025年には約43万人にまで上ります。

  • 既存のレガシーシステムの保守がブラックボックス、属人的になっており、DX化の足枷に → デジタル競争の敗者に

  • 技術的負債が溜まる一方

  • 保守運用の担い手不足で、サイバーセキュリティ事故が起きやすく

こんな厳しい状況を打破するには、ユーザとベンダーそれぞれで対策していく必要があります。

  • ユーザは人材・資金を保守からDXにシフト

  • ベンダーも同様に人材・資金を保守からDXにシフト

  • ベンダーはAI、アジャイル、マイクロサービス等最新技術を用いたビジネスにシフト

やることはわかっていても、そう簡単にはいきません。

ただし、スリーシェイクのSreake事業では、内製化支援も行っており、これまで数々の企業様の支援を行ってまいりました。

Sreakeという商材は難しく、入社して1年が経った私もストンと腹落ちできる説明ができないままでしたが、

「2025年の崖」をどう克服するかが我々のパーパスだと感じました。

私は生成AIアプリケーション開発支援というDXを担当しておりますが、案件の推進を通して、

「DX推進」を語れるようになっていきたいと思います。

今回は、序章のような形で今後も2025年の崖について書いていければと思います。

次の3-shake Advent Calendar 2024

シリーズ1がkechigonさんの「Google Cloud monitoringのアラートをGitHub issueに通知する」

シリーズ2がtryu___さんの「kubebuilder使ってpodの監視してみた」

です。

Geminiのビジネス利用でのメリットを語る

この記事はGCP(Google Cloud Platform) Advent Calendar 2024 1日目の記事です。

2024年はIT業界にとって、最も話題に上がったトピックは生成AIだったのではないでしょうか?

2023年までは生成AIと家は、ChatGPTでしたが、

2024年はGoogleがBardをリブランディングして、Gemini(ジェミニ)とし、しのぎを削っています。

私はGoogle Cloudのパートナー企業である株式会社スリーシェイク Sreake事業部にて、Geminiを用いた生成AIアプリケーション開発に携わっており、

Geminiのビジネス利用でのメリットを語りたいと思います。

Gemini-1.5-Proは最大200万トークンの読み込みが可能

Geminiの強みの中で、最も他の生成AIモデルと差別化できているのが、トークン数の長さです。

これにより、動画解析などへの利用もしやすくなりました。

Geminiはマルチモーダルなので、音声、画像、動画なども処理可能です。

量の目安としては以下になります。

  • 書籍15〜20冊程度の分量
  • 動画約2時間
  • 音声約22時間

BigQueryで容易にデータ分析基盤を構築可能

他のクラウドには同様のサービスがなく、同じ機能を実現するためには複数のサービスを組み合わせる必要があります。

AzureやAWS、オンプレのデータはそのままで読み込みだけ行う機能もあります。今お使いのシステム構成はほぼ変えず、追加構築可能となります。

Geminiは他のモデルと比較してトークンあたりの利用料が安い

Google Cloud上で稼働させるのに最適化しているためです。

他社のクラウドで使える生成AIモデルは別会社のものなので、クラウドも生成AIもGoogleのGeminiによって、この点も強みです!

もしもGeminiの出力結果が著作権侵害で係争が発生してもGoogle Cloudがサポート

クラウドにはないサービスです。こちらも、クラウドも生成AIも会社が揃っている強みと言えるでしょう。

真実性1位!

Gemini 1.5 ProがNIKKEI Digital Governanceが調査した真実性のスコアで1位となりました!

以下の記事は最初日経で見れていたと思うのですが、今はNIKKEI Digital Governanceに登録しないと見れないようです。 博識のGoogle、主観強いMeta 生成AIの「真実性」を検証

上記画像は下記記事から引用させていただきました。 note.com

2024年もあと少し。2025年もGeminiとともに生成AIを盛り上げていきたいと思います!

GCP(Google Cloud Platform) Advent Calendar 2024 次の記事はknak72さんによる企業のセキュリティ強化に! Chrome Enterprise Premium のURLフィルタリングとマルウェアスキャン機能です。

プロンプトエンジニアリングハンズオン

genai-users.connpass.com

↑上記勉強会の資料です。

shu-kob.hateblo.jp

↑こちらの記事の「プロンプトエンジニアリング」もご覧ください。(上記記事はChatGPT)

先ずは復習してみましょう

Geminiにアクセス

gemini.google.com

お好みで、ChatGPTやClaudeを使用しても構いません。

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

JSON形式で出力

カレーのレシピを教えてください。
出力は以下のJSON形式にしてください。
===============
{
  "材料": ["材料1", "材料2"],
  "手順": ["手順1", "手順2"]
}
===============
{
  "材料": [
    "玉ねぎ 1個",
    "にんじん 1本",
    "じゃがいも 2個",
    "牛肉 300g",
    "カレールー 2箱",
    "サラダ油 大さじ2",
    "水 800ml",
    "塩 少々",
    "こしょう 少々"
  ],
  "手順": [
    "玉ねぎ、にんじん、じゃがいもは食べやすい大きさに切る。",
    "鍋にサラダ油を熱し、牛肉を炒め、色が変わったら玉ねぎを加えて炒める。",
    "にんじん、じゃがいもを加えてさらに炒める。",
    "水を加え、アクを取りながら煮込む。",
    "野菜が柔らかくなったらカレールーを加えて溶かす。",
    "塩こしょうで味を調え、5分ほど煮込む。"
  ]
}

出力結果をJSON Formatterで確認

JSON Formatter & Validator

Zero-shotプロンプティング

Zero-Shotプロンプティングとは、大規模言語モデル(LLM)に対して、事前に具体的な例を示すことなく、一度の指示でタスクを実行させるプロンプトエンジニアリング手法です。

以下はニュース記事のタイトルです。「政治」「経済」「芸能」「スポーツ」「科学」「その他」のうち1つに分類してください。
回答だけ一言で出力してください
===========================
紅白出場歌手の選考基準 NHK公開
芸能

Few-shotプロンプティング

Few-Shotプロンプティングは、大規模言語モデル(LLM)に対して、タスクを実行するための具体的な例をいくつか示すことで、モデルの性能を向上させるプロンプトエンジニアリングの手法です。

Zero-Shotプロンプティングとの違い Zero-Shotプロンプティングが、一切の例を示さずにタスクを実行させるのに対し、Few-Shotプロンプティングでは、少数の例を提示することで、モデルがより効率的にタスクを学習できるようにします。

以下はニュース記事のタイトルです。「政治」「経済」「芸能」「スポーツ」「科学」「その他」のうち1つに分類してください。
回答だけ一言で出力してください
===========================
「紅白出場歌手の選考基準 NHK公開」
===========================
以下は例です
「G20 バイデン氏不在で集合写真」:政治
「岡田将生&高畑充希結婚 SNS反応」:芸能
芸能

Zero-shot Chain-of-Thoughtプロンプティング

Zero-shot Chain-of-Thought(CoT)プロンプティングは、大規模言語モデル(LLM)に対して、具体的な例を示すことなく、段階的な推論プロセスを踏ませるように指示するプロンプトエンジニアリングの手法です。

回答だけ一言で出力してください。
10 + 2 * 3 - 4 * 2
8
ステップバイステップで考えてください。
10 + 2 * 3 - 4 * 2
## ステップバイステップで解いてみましょう!

**与えられた式:** 10 + 2 * 3 - 4 * 2

**解き方:**

数学では、**掛け算と割り算**は、**足し算と引き算**よりも先に計算します。これを**優先順位**と言います。

1.  **掛け算を計算する:**
    * 2 * 3 = 6
    * 4 * 2 = 8

    式は、10 + 6 - 8 に変わります。

2.  **残りの計算を行う:**
    * 10 + 6 = 16
    * 16 - 8 = 8

**答え:** 8

**まとめ:**

与えられた式をステップバイステップで解くと、答えは**8**になります。

**ポイント:**
* **優先順位:** 掛け算と割り算は、足し算と引き算よりも先に計算します。
* **計算順序:** 左から右へ計算していきます。

**補足:**

もし、計算の順番を変えたい場合は、**かっこ**を使います。例えば、(10 + 2) * 3 - 4 * 2 のようにかっこでくくると、最初に10と2を足してから3をかけることになります。

**この説明で理解できましたか?** もし、まだ疑問な点があれば、遠慮なく質問してくださいね。

Few-shot Chain-of-Thoughtプロンプティング

Few-shot CoTプロンプティングは、大規模言語モデル(LLM)に、いくつかの例を示しながら、段階的な推論プロセスを踏ませることで、より複雑な問題を解かせる手法です。

このグループの奇数を合計すると偶数になります。: 4、8、9、15、12、2、1。
A: 奇数を全て加えると(9, 15, 1)25になります。答えはFalseです。
このグループの奇数を合計すると偶数になります。: 17、10、19、4、8、12、24。
A: 奇数を全て加えると(17, 19)36になります。答えはTrueです。
このグループの奇数を合計すると偶数になります。: 16、11、14、4、8、13、24。
A: 奇数を全て加えると(11, 13)24になります。答えはTrueです。
このグループの奇数を合計すると偶数になります。: 17、9、10、12、13、4、2。
A: 奇数を全て加えると(17, 9, 13)39になります。答えはFalseです。
このグループの奇数を合計すると偶数になります。: 15、32、5、13、82、7、1。
A:

参考文献

LangChainとLangGraphによるRAG・AIエージェント[実践]入門

10倍速で成果が出る!ChatGPTスゴ技大全

WebサイトやGitHubソースコードを処理 (ハンズオン)

#7 WebサイトやGitHubソースコードを処理 (ハンズオン)【オンライン】 - connpassgenai-users.connpass.com

勉強会の資料です。

Google Cloudでクレデンシャルを取得

IAMと管理 > サービスアカウント

↓こちらの記事を参考

shu-kob.hateblo.jp

環境変数にセット

以下はMacで、.zprofileの場合

export GOOGLE_APPLICATION_CREDENTIALS="/path/PROJECT_ID-XXXXXXXXXX.json"
source ~/.zprofile

ソースコードを取得

github.com

git clone https://github.com/shu-kob/genai-web-github-loader
cd genai-web-github-loader
npm i

Webページを読んで要約

loadWebPages.tsで、プロジェクトIDの書き換え

const project = 'PROJECT_ID' // 書き換える

実行

npx tsx loadWebPages.ts https://www.raumen.co.jp/rapedia/study_history/

ソースコードの読み込んで仕様書を作成

loadGitHubでプロジェクトIDの書き換え

const project = 'PROJECT_ID' // 書き換える

実行

npx tsx loadGitHub.ts https://github.com/shu-kob/genai-web-github-loader