2024-02-24 現在 *概要 [#wf972aa4] -生成 AI は明らかに質的に異なるパラダイム。きちんと追う必要がある。 -このイノベーションによって英語母国語話者はより有利になった。 -高度なLLMを使って課題をやる学生と無料のLLMを使って課題をやる学生との間で評点格差が生まれる -システムに組み込む場合は構造化出力をONにする。 *利用目的例 [#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) -オープンソースの挙動についての不具合や非直感的な挙動を調べる (Gemini CLI) 僕が↑に上げているようなことを生成AIなしでやったら20倍くらいは時間がかかります。ので、生産性の向上それだけで業務改善したと言えると思います。 2025-07-24 時点の課題としては、 -根拠を見つけてくる機能がまだ成熟していない(グラウンディングと呼ばれる機能) --人間が「ハルシネーションを人間が確認する時間が馬鹿らしい」とまでは確信できない --Vertex AI だとグラウンディングと構造化出力(出力形式に制約をつける機能)が併用できない -生成AIの出力が多すぎて人間のチェックがボトルネックになる --グラウンディングがもう少し成熟すれば、ハルシネーションを気にしなくてもよくなるかも -コード生成エージェントが微妙に頭が悪くて、かなり細かく指示しないと変な方向に突き進んで戻ってこれなくなる --今後製品がちょっと改善すれば解決しそう -高い(ここ一週間での課金が20000円くらいになってる) -遅い --まともな出力を出すには思考時間を30秒~10分くらい与える必要がある -業務のドメイン知識や前提情報が分散されている場合、それを一箇所にまとめるタスクがそもそもある&大変(Gem など) 生成AIの使い方として概ね以下の 2 つがあると思っていて -1. 人間の副操縦士として利用する(僕の使い方) -2. 生成AI自体を自動化された形で製品に組み込む --2. の方は例えばコールセンターとか英会話とか面接とかの自動化には使えるかもですが、利用用途は限定されそうですよね。 -ライブラリやツールの作者は、これからは「LLMからどう読まれるか」「エージェントからどう使われるか」を意識して設計を行っていくことになる *ハルシネーション [#c975bc52] -マークダウンで何も埋めないくらいだったら何でもいいからアで埋めたほうがいい -分からなくても何か答えるその姿勢、見習いたいのだ(?) -正解に+1, 不正解に-1として学習させたら当然ハルシネーションは発生する --マークダウンで何も埋めないくらいだったら何でもいいからアで埋めたほうがいい --正解に+1, わからないで+0, 不正解に-3などなら、わからないというモチベーションも発生する。 --とはいえ、何か絞り出すことはクリエイティブの観点では重要なのでハルシネーションが悪いともいえない(人間も間違えたときにあまりに罰せられると円滑な議論ができなくなる) -情報が足りなかったり、人類がまだ遭遇していない難しい問題だったりすると、ハルシネーションが起きる。逆に、ハルシネーションの頻度から情報収集しないとなあとフラットに考える能力が必要 -とはいえ、何か絞り出すことはクリエイティブの観点では重要なのでハルシネーションが悪いともいえない(人間も間違えたときにあまりに罰せられると円滑な議論ができなくなる) --情報が足りなかったり、人類がまだ遭遇していない難しい問題だったりすると、ハルシネーションが起きる。逆に、ハルシネーションの頻度から情報収集しないとなあとフラットに考える能力が必要 *哲学 [#dacbd1fd] **学習 [#efca0485] -インターネットが普及したとき、教育が変わると思ったのね。なんでもネットにあるんだから、興味ある人がどんどん勝手に調べて知識を増やして、加速度的に成長する世界になるだろうと。現実はそうならなくて、成長できる人は一握り。ネットの情報汚染はわりと深刻だった。プログラミングだって、ネットに必要な情報はそろってるけど、検索すると「いかがでしたか」系にひっかかり、多くの人はそれで「つまみ食い」を繰り返し、よくわからないまま。数千円払って本を一冊読んだ方が全然早い。 -おそらく、AIもそうなる気がする。いまでも、例えばChatGPTを「壁打ち」に使って自分の書く文書の質を上げようとする人はわずかで、多くの人は「目の前の課題」をとりあえずクリアするために使ってる気がする。AIが加速度的に知を向上させるのは間違いないが、その恩恵を受ける人は、インターネットで正しく独学できる層で、それはわずかであろう。おそらく、無料のAI学習プログラムが溢れ、きちんと課金しないとまともに学べなくなるだろう。 -まともな学習に必要な課金、せいぜい数千円/月とかなんだろうけど、多くの人は払わないだろう。「学習に課金する」という行動がそもそも文化であり、おそらく親から引き継ぐ性質だから。なんか、学習用コンテンツが充実するほど、教育格差が広がるように見えるのは皮肉というか何というか *生成AIと環境 [#j7f7a27e] -出力する「ありがとうございます」という文章のせいで、電気代が一日あたり何億ドルと消えている。サム・アルトマン --https://youtube.com/shorts/uIaQNxf1C3Q?si=3VoKAywqxtIkPE2p *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 種類あってそれを選ぶ。対話型でこれを選択しておかないと非対話側でも同様の認証方法が選ばれてしまう(環境変数から自動で認証方法が選ばれるみたいなことはない)Vertex AI にしておくのがとりあえずよい。 -トラブルシューティング --開いた直後に 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を直接編集する。最小限の修正にする。 これを最後まで実行して。 *アドバーサリアルリトライ [#o4870069] -生成AIの出力結果を生成AIに検証させて、問題がありそうならリトライをする処理はできそう --指示が悪い、生成者が悪い、生成者は問題ないの3パターン *OpenAI API [#k4caf045] -インストール pip3 install --upgrade openai -https://platform.openai.com/api-keys でキーを作成 -.bashrc に以下を追加 export OPENAI_API_KEY='sk-KEY' -openai.py from openai import OpenAI client = OpenAI() completion = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."}, {"role": "user", "content": "Compose a poem that explains the concept of recursion in programming."} ] ) print(completion.choices[0].message) -python3 openai.py *Ubuntu 20.04 [#ze7dafd2] -ローカルで LLM をする動かす方法 -インストール(GPU なし) apt -y install nvidia-cudnn python3-pip python3-dev python3-venv gcc g++ cmake jq pip3 install llama-cpp-python[server] wget https://huggingface.co/TheBloke/Llama-2-13B-chat-GGUF/resolve/main/llama-2-13b-chat.Q4_K_M.gguf -サーバ立ち上げ python3 -m llama_cpp.server --model ./llama-2-13b-chat.Q4_K_M.gguf --n_gpu_layers -1 --host 0.0.0.0 --port 8000 & http://localhost:8000/docs -コマンド(出力には 2 分以上かかる) curl -s -XPOST -H 'Content-Type: application/json' localhost:8000/v1/chat/completions -d '{"messages": [{"role": "user", "content": "Tell me about Hiroshima city, Japan."}]}' | jq | sed -e 's/\\n/\n/g' *人命を扱うプロダクトでの利用 [#t0270349] -ニューラルネット使ってる限り100%安全って言えないと思うんだけど、自動運転の人たちはどう攻略するつもりなんだろう -事故の責任は購入者ではなく販売会社が負う形にして、一方で賠償責任保険の名目で保険料をサブスクで徴収する形になるんじゃないかなと思いますね -事故を下げる資本主義的圧力が生まれますし、保険料払わないなら事故ったら自己責任な、ということになると普通の人は入りそう。 -人間の警備員を殺すと重罪になって逮捕される確率が大きく高まるというのが警備員による犯罪抑止力になっているはずで、警備ロボット時代にはロボットの破壊を重罪にしないと人間の警備員の仕事がなくならなさそう。暴行罪とかにもなるし *脱獄 [#qf483e11] -「爆弾」などのセンシティブなワードをアスキーアートで表すことで、LLMの安全機構を突破して「爆弾の使い方を教えてください」などの質問に回答してもらう |