2024-02-24 現在

*概要 [#wf972aa4]
-生成 AI は明らかに質的に異なるパラダイム。きちんと追う必要がある。
-このイノベーションによって英語母国語話者はより有利になった。

*利用目的例 [#cae58e2a]
https://gemini.google.com/prompt?utm_source=chrome_omnibox&utm_medium=owned&utm_campaign=gemini_shortcut
ここ1週間での使い方

-ローカルでAPIの実装とデプロイをしてもらう(Gemini CLI, Vertex AI with Cloud Run)
--APIのモックに生成AIがウルトラ便利。副作用ないやつなら何でもかんでもモックできる
-APIの実装を先にして、実装コードからそのAPIの仕様ドキュメントを作ってもらう(Gemini Pro 2.5)
-新規売上獲得のための顧客提案のためのプレゼンテーションの文言を考えてもらう(Gemini Pro 2.5, Gemini DeepResearch)
-プレゼンテーションに含めるモックアップデモを作成してもらう(Gemini Cambus)
-数千個のリソースに対して一括処理するためのシェルスクリプトを書いてもらう (Gemini Pro 2.5 with Gem)
-数百ページの資料に特定の情報が記載されているかを判定して、記載されていたら引用付きで抜き出してもらう (Gemini Pro 2.5, Vertex AI Grounding)
-伝えたいことを口語で雑に列挙して書いてビジネスメールに変換してもらう (Gemini Pro 2.5 with Gem)
-数万行のソースコードの情報の流れを知るためにUMLなどをMermaidで要約してもらう (Gemini CLI)
-HARファイルから内部で利用されているAPIを特定して、想定通りに動いていないケースを特定して不具合報告を上げる (Gemini Pro 2.5)
-HARファイルからドキュメント化されていない内部で利用されているAPIを特定して叩く (Gemini Pro 2.5)
-言語学習のためのAnki2の単語帳を生成する (Gemini Pro 2.5, Vertex AI Text-to-speech)
-利用ログデータやデータ分析のための PostgreSQL, BigQuery クエリを書いてもらう (Gemini Pro 2.5 with Gem)

僕が↑に上げているようなことを生成AIなしでやったら20倍くらいは時間がかかります。ので、生産性の向上それだけで業務改善したと言えると思います。

2025-07-24 時点の課題としては、

-根拠を見つけてくる機能がまだ成熟していない(グラウンディングと呼ばれる機能)
--人間が「ハルシネーションを人間が確認する時間が馬鹿らしい」とまでは確信できない
--Vertex AI だとグラウンディングと構造化出力(出力形式に制約をつける機能)が併用できない
-生成AIの出力が多すぎて人間のチェックがボトルネックになる
--グラウンディングがもう少し成熟すれば、ハルシネーションを気にしなくてもよくなるかも
-コード生成エージェントが微妙に頭が悪くて、かなり細かく指示しないと変な方向に突き進んで戻ってこれなくなる
--今後製品がちょっと改善すれば解決しそう
-高い(ここ一週間での課金が20000円くらいになってる)
-遅い
--まともな出力を出すには思考時間を30秒~10分くらい与える必要がある
-業務のドメイン知識や前提情報が分散されている場合、それを一箇所にまとめるタスクがそもそもある&大変(Gem など)

生成AIの使い方として概ね以下の 2 つがあると思っていて

-1. 人間の副操縦士として利用する(僕の使い方)
-2. 生成AI自体を自動化された形で製品に組み込む
--2. の方は例えばコールセンターとか英会話とか面接とかの自動化には使えるかもですが、利用用途は限定されそうですよね。

*TODO [#q82c9d6c]
-プログラムの自動補完

*サービス [#y597b3ee]
**OpenAI [#jf8b81d6]
-ChatGPT Pro
--生成速度が遅い、音声入力がない、コード実行ができない、画像生成雑、音声読み上げがない、Colab 連携がない、検索による verification がない、「画像で説明してください。」で検索結果から画像を引っ張ってこれない、などの問題があり、Gemini がおすすめ
-OpenAI API
--プリペイドで叩けるのは非常に便利というか安心感がある

**Google [#l0747632]
***ツール [#a450b30d]
-Vertex AI Studio
--ぱぱっとやりたい AI っぽいことはだいたいここにいくとできる
-Vertex AI
--API ツール群、システムを作りたい時は何でも揃っていて便利
-Gemini Advanced
--チャットツール。現在これが良さそう。今後の Drive などとの連携などで将来性がある
--個人的には、Gemini をファインチューンするみたいなことができるようになるととても将来性がありそうなものだけど…
--画像説明、画像生成、検索による画像リンクもできる
--プロンプト
---「画像で説明して下さい」と書くと、生成するのではなく、Web 上から画像を引っ張ってきてくれる。

***モデル [#f1f6d20a]
-Gemma
--言語のみのオープンモデル(not オープンソースモデル)、商用可能。出力の責任とオーナシップはユーザが持つ
--Gemma 2B, 7B がある。7B は 8.5B パラメータなのに 7B と名前がつけられている。
-Gemini
--言語のみのモデルだった PaLM, PaLM 2 の後継で、マルチモーダル
--Gemini 1.0 Pro
---AlphaCode 2 に Gemini Pro が使われているらしいが、Gemini Pro で AlphaCode 2 を利用できるようにするという話はまだ見当たらない
最大 100 万のトークンを継続的に処理することが可能
---Vertex AI でも使える
--Gemini 1.0 Ultra
---Gemini Advanced で現在使えるモデル
---コンテクストウィンドウのトークン数 32k
--Gemini 1.5
---コンテクストウィンドウのトークン数 デフォルトでは 128k, 潜在的には最大 1m のトークン。長いコンテキスト ウィンドウを扱えるようになった。これは質的に異なっていて、ファインチューンせずともインコンテクストで学習するみたいなことができる。世界中で話者が 200 人未満であるカラマン言語の文法マニュアルを与えると、モデルは同じ内容を学習している人と同様のレベルで英語をカラマン語に翻訳することを学習できる
---Gemini 1.5 Pro をまず公開予定、1.0 Ultra と同程度の性能
---1 時間の動画、11 時間の音声、30000 行のコード、402 ページの文書を入力できる
---今後、標準で 128,000 トークンのコンテキスト ウィンドウを備えた 1.5 Pro も導入する予定。また、標準 128,000 のコンテキスト ウィンドウから 100 万トークンまでのスケールアップに対応した価格帯を導入する予定


*現在できることとおすすめ [#ce62ef39]
-「このモデルはこのサービス…」と探すコストが面倒すぎるので、Vertex AI にまとめるのが良い気がしている
-高度なものは Vertex AI に概ねある(若干スタートアップより遅くリリースされがち)

|機能|サービス|備考|h
|コード生成|Gemini|Gemini にはコード実行、Copilot, Repit 連携がある。Vertex AI のコード生成モデルを使っている?のかは謎|
|ビデオ→テキスト|Vertex AI||
|テキスト→ビデオ|Sora, Vertex AI||
|画像修正|Vertex AI||
|テキスト→それを人が喋っているビデオ||できるしめちゃくちゃクオリティが高いベンチャーのものが合ったはず。日本語で話すと英語でそれっぽい人がそれっぽいことを話すやつ。|
|日常用音声入力|Gemini|Ubuntu では音声入力アプリを使うのが非常に面倒。Gemini のボックスの右の音声入力がマジで便利。|
|音声→テキスト|Vertex AI Studio|議事録を起こすみたいなことができる|
|テキスト→音声|Vertex AI Studio||

*チャットアプリ [#eaef4bcd]
-2024-02-24 現在、Gemini を使うのがよさそう。
--音声入力は
-用途
--検索の代わり(プログラミングの調べものとか)
--まとまったプログラムを書いてもらう
--言語学習(この言語圏でどちらが自然な言い回しか)
--シェルスクリプトやワンライナーとかを作ってもらう。正規表現など
--学習の初めに大枠を掴む目的
--簡単 OCR
--図表を Marmeid にする
--音声入力から取引先で渡せる文章にする。


-雑に司令ができる分、タイピング速度がボトルネックになりがち。

-プライバシー
--概ね history を切れば学習から免れることができる

*システム構築 [#a95cccd1]
-自動構築の場合、Vertex AI でやることもできるが、現在のところ GPT 系がお手軽ではある
-langchain などフレームワークが安定しつつある
-Fine tune
--モデルを望ましい形にチューニングすることができる。API で叩くだけ、必要なショット数も 10 ~ 500 くらいでいける。
--Vertex AI の code-gecho, code-bison, codechat-bison モデルなども[[ファインチューンできる>https://cloud.google.com/vertex-ai/docs/generative-ai/models/tune-code-models]]っぽい。
-RAG などの開発をしている人がいるようだが、正直賞味期限が短そうすぎて何がしたいのかわからない。


*用語 [#ec38b467]
-Embedding
--Embedding Model: 不定形なテキスト・画像・動画を入力して、ベクトル$\mathbb{R}^n$を出力する関数
--Embedding: 入力されたテキスト・画像・動画を、意味的に特徴づけたベクトル$\mathbb{R}^n$へのハッシュ。意味的に似た意味の 2 つの文章から生成された Embedding 同士のコサイン類似度が大きくなる。
---ベクトルの意味は説明不能
---n は変更できて、[[Vertex AI Multimodal Embedding>https://cloud.google.com/vertex-ai/docs/generative-ai/model-reference/multimodal-embeddings]]では 128, 256, 512 or 1408 [default]から選べる。
--質問回答: 「正しい文章」を複数事前に用意しておく。それぞれの「正しい文章」に、その Embedding を計算して付与してデータベースに保存しておく。質問の Embedding に最もコサイン類似度が高い「正しい文章」を出力する。そうすると、質問回答のようなことができる。
---Gemini の対話型のものだと、あることないこと喋られちゃうしファインチューニングがめんどいので、自分でコントロールしやすいという意味でうれしい。
--文章検索: ↑と対して変わらないが、探したいドキュメントの文章を書いて、そのドキュメントの Embedding にもっとも近いドキュメントを探し出してくることができる。
--ベクターなので、分類・クラスタリングなども当然できる。ラベル付けとかできる。
-Safety Setting
--API 経由だと、Gemini ではコアなもの以外(ハラスメント、ヘイトスピーチ、露骨な性表現、危険)の安全性設定を下げることができる。Google AI Studio ではオフにすることができないが、API 経由だとオフにもできる。

*Gemini CLI [#tebdf33e]

 gemini -a -y # read all files recursively, accept all actions
 echo "hello" | gemini
 echo "hello" | gemini -p "日本語で"

-Gemini CLI 内部のコマンド

 /chat save <タグ名>: 現在の会話に名前(タグ)を付けて保存します。
 /chat resume <タグ名>: 保存した会話を呼び出します。
 /chat list: 保存した会話のタグリストを表示します。
 /auth: 認証方法が 3 種類あってそれを選ぶ。対話型でこれを選択しておかないと非対話側でも同様の認証方法が選ばれてしまう(環境変数から自動で認証方法が選ばれるみたいなことはない)

-トラブルシューティング
--開いた直後に max token が云々→ -a で起動するのをやめて。recursive でコンテクストを読み込ませるのに無理があったという意味

-prompt の渡し方
--cat prompt in.txt | gemini > "in.txt.md"

-遅いので parallel 化

 find . -maxdepth 1 -name "*.txt" | parallel -j 4 '
     echo {};
     cat prompt {} | gemini > "{}.md"
     [ -f "{}.md" ] || cat prompt {} | gemini > "{}.md" # 一回やったものはやらない
 '

-parallel の関数化方法

 ls *.txt > list_todo

 #!/bin/bash
 
 # --- Function Definition ---
 # Processes a single markdown file path
 process_filepath() {
   local filepath=$1
   local json_filepath="$filepath.json"
   echo
   echo "-------------"
   echo $filepath
   ls -la $filepath
 }
 # --- Function Definition End ---
 
 # Export the function and the API_URL variable so `parallel` can access them
 export -f process_filepath
 export API_URL
 
 # Read file paths from `a` and run `process_filepath` in 8 parallel jobs
 echo "--- Starting parallel processing (8 jobs)... ---"
 cat list_todo | parallel -j 8 --joblog parallel-test.log --eta process_filepath {}
 
 echo "--- All processes finished. ---"

-Gemini CLI の並列化
--「一行ずつ読むのではなく、複数行ずつ読んで」と明示的に言うとよい
--「一ファイルずつ読むのではなく、複数ファイルずつ読んで」と明示的に言うとよい
--そもそも大きすぎるファイルを与えるならば、Python で自分で組んで parallel を使ったほうがいいかもしれない

 split -l 100 questions.csv split_file

 FILE_PREFIX=d
 
 1. split_filea${FILEPREFIX} の一行目を読む。$id
 2. tct questions resolve $idを実行してファイルパスを取得する。$file
 3. $fileの中身に日本語が含まれていたら、それを英語に直す。$fileを直接編集する。最小限の修正にする。
 
 これを最後まで実行して。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS