AI/Machine Learning」カテゴリーアーカイブ

MCPとはなにか

ここ数ヶ月、MCPがアチラコチラで話題になっています。
ほんと、LLMに関する技術の日進月歩はすごいものですね。

なんとなくざっくりは理解しているものの、一度このあたりでまとめて見ようと思った個人的まとめとなります。

MCPとは何なのか

MCP(Messaging Channel Protocol)は、Anthropicが開発した大規模言語モデル(LLM)とツールを接続するためのプロトコルです。MCPは、Claudeなどのモデルが外部ツールと連携する際の通信フレームワークを提供し、これによりLLMの機能を大幅に拡張することができます。

MCPの主な特徴:

  • LLMとツールの間で構造化されたメッセージをやり取りする標準プロトコル
  • ツールの使用を通じてLLMの能力を拡張(計算、情報検索、外部システムとの連携など)
  • エージェントがユーザーの意図を理解し、適切なツールを選択・実行できるようにする
  • 複雑なタスクを段階的に処理するためのフレームワークを提供

MCPは、LLMを単なるテキスト生成システムから、実際のタスクを実行できる強力なエージェントへと進化させる重要な技術です。

以前、ローカルにあるシステムの情報をLLMと接続させることで、自然言語を用いたシステムの操作というモノができないかな?と考えたものの、ピンときていなかった答えが少し見えてきた気がします。

MCPの概念・構成要素

MCPに関してはAnthropicのドキュメントに構成要素が描かれている

https://modelcontextprotocol.io/introduction#general-architecture

MCP Client としてはVSCodeやClineなどのツールが存在し、MCP Serverと連携。
MCP Server はLLMに対して MCP Protocolを用いて連携し、必要に応じてデータソース等から情報を提供する、、、と。
上記図の”Local Data Source”としては「Your computer’s files, databases, and services that MCP servers can securely access」とあるので、ファイルであるかもしれないし、システムであるかもしれないという位置づけ。

MCP Server が提供するもの

LLMに対して情報を提供する入口となる MCP Server ですが、これが何を提供するのかというと、下記3点となるそうです

  1. Resources: File-like data that can be read by clients (like API responses or file contents)
  2. Tools: Functions that can be called by the LLM (with user approval)
  3. Prompts: Pre-written templates that help users accomplish specific tasks

https://modelcontextprotocol.io/quickstart/server#core-mcp-concepts

主にはToolsが重要な一度を占めることになりそう。
公式では、天気予報に関してのToolを提供するMCP Serverをサンプルとして提示されていた

For Server Developers
https://modelcontextprotocol.io/quickstart/server

実際のLLMとMCPサーバーとのやり取り、それらに関してはすでにリファレンス実装などもあるようなのでそのあたりを見ながら理解を深めていくことができればと考えている

Generative AI Use Case を試す

先日、クラスメソッドさんが開催した「Amazon Bedrock GenUハンズオン(東京開催) #2:GenU環境でRAGを体験」に参加してきました

Amazon Bedrock GenUハンズオン(東京開催) #2:GenU環境でRAGを体験
https://classmethod.connpass.com/event/346443/

手順に従ってハンズオンを進めていたのですが、、、最終的にエラーが発生して時間内に予定していた内容を完了させることができませんでした。
原因としては、ユースケースがOSSで作られており、直前のコミットで不具合が埋め込まれてしまったとのこと。。。
なんとも、、なところです。

というわけで、手順は公開されているので手元でやってみました

Generative AI Use Cases JP (GenU)を使ってRAGを体験してみよう(KnowledgeBases編)
https://dev.classmethod.jp/articles/generative-ai-use-cases-jp-handson-kb-rag/

リージョンを変えることによる影響

ハンズオンで一度やっている内容ではあるので、進めていきます。
ただ、ハンズオンでは us-east-1リージョンを使っていたんですよね。手元では、ap-northeas-1(東京)でSageMakerStudioを起動してみました。

流れとしては、

  1. SageMakerStudioの構築(開発環境準備)
  2. モデルの有効化
  3. ユースケースの構築

というようなものがざっくりとした内容。
1のSageMakerStudioをap-northeast-1で構築したからと言って、3によるユースケースのデプロイ先やモデルの参照先がap-northeast-1になるわけではないようです。

そのため、最初やってみるとナレッジベースで同期する予定だったファイルはus-east-1にできており、更に動かしてみるとエラーとなりました

対応としては、今回はus-east-1で必要となるモデルを有効化。
その後、us-east-1でBedrockのナレッジベースを同期させ実行することでエラーは解消されました

ちなみに、上のキャプチャで1回目はナレッジベースの同期を行う前。
そして同期を行ったあとでは正しく返答が返ってくることが確認できました。

1回目、なんで英語で返ってきたのかがいまいちよくわかりませんが。。。。

モデルの参照先自体は、cdk.json内の”modelRegion”を適切な値にすれば大丈夫だと思います。

気になったのは、ナレッジベースへの登録先リージョンですね。。。
SageMakerStudio自体はap-northeast-1で起動しているので、パラメータが特に存在していないのであれば自動的に現在のリージョンで作って欲しいところですが。。

おそらくCDKの中にあるのだとは思うので、後でちょっと調べてみよう。。

GensparkでDeep Research

先日紹介したGensparkですが、Deep Researchが1日1回無料で利用が可能です。
より正確に言うと、通常の検索以外の画像生成など、プラスアルファの機能が時限的な回数制限となっていて、Deep Researchもその一つということですね。

まず、Deep Researchをするにはホーム画面でディープリサーチアイコンを押します

その後、調査したい内容をプロンプトに記述します。

そうすることで、複数のLLMでまずリサーチプランを作成し、それらをマージしたプランを提示してくれます。
現時点ではGPT-4o、Claude3.5Sonnet、gemini-1.5proが使われるようです。

提示してくれたプランをそのまま実行してもいいですし、編集を押して追加の指示を与えることも出来ます

”リサーチを開始”を押下すると、20~30分程度調査に時間を要します。

この間、ブラウザは落としてしまっても問題ありません。作業が完了したらログイン時に参照することも出来ますし、完了時にメールでお知らせもしてくれます。

面白い

調査結果に関しては、鵜呑みにすることはまだ怖いですが、非常に面白いと思いました。
Gensparkの場合、通常の検索の時点でSparkpageなどを作ったりして一つの調査結果かと思うような出来栄えではありますが、Deep Researchという名前をつけているだけのことはありそうです。

検索として、単純にざっくりと調べたいときは通常検索。
もう少しより深いところまで調査した結果を見たいときにはDeep Researchという形でしょうか。

一方で、プロンプトの作り方次第では、なんだかすごく浅い調査一覧みたいな形になってしまう可能性もあります。
このあたりはDeep Researchを使うときのプロンプトの出し方をもう少し工夫したりして、そもそも自分がほしいアウトプットとはなんだったっけ?を明確化しないといけませんね。
もう少しトライ・アンド・エラーしたいところですが、無料では1日1回なのが歯がゆいところです

正直言って、そんなに調査することってあるんだっけ?という話はなくはないのですが、検索してみた結果から更に似たような話や、疑問が湧いてきます。
いい具合に好奇心を刺激してくれそうです。

招待リンク

https://www.genspark.ai/invite?invite_code=NzA4OGE2MTlMMjRlNkw4NzA0TDc0YWFMNTAwZmY0NjA4OGE1

この招待リンクから会員登録をして電話番号認証を行うことで、Deep Researchをはじめとした有料プランが一ヶ月無料になります。気が向いたら登録してもらえると嬉しいです。

Gensparkを試す

生成AI自体を触っている頻度は段々と上がってきている毎日ですが、まだDeep Researchのような、重厚な調査タスクを行うエージェントは試したことがありません。

OpenAIだとProプラン、つまり月額200ドル必要なんですよね、、、

なにかいい方法はないかな?と調べてみたら、Gensparkという、現時点ではベータ版が提供されているサービスがあり、Deep Researchも限定的ではあるものの利用が可能なようです

通常の検索

先日の焼き肉屋さんの業界動向も、実はGensparkで聞いてみたのでした

検索結果は、なんとなくPerplexityに似ている気がします。
複数のソースから検索結果がまとめられ、それぞれ言及している事柄に対してのソースを確認することが出来ます。

そして、生成した結果にはなぜか毎回マインドマップがついてきます。

マインドマップがあることで、AIのマインド(?)がわかるかな?
何度か試してみましたが、そこまで複雑なマインドマップが出るようなことはなかったです。これは検索したキーワードによるところでしょう。

エージェントの組み合わせを試す

検索結果がお気に召さない、そのときに「エージェントの組み合わせを試す」ボタンがあり、これを押すと、各AIそれぞれが導き出した問いに対する回答を確認することが出来ます。

Sparkpage

もう一つ特徴的なのが、Sparkpageというページを生成します。検索結果自体が複数のエージェントやソースからの検索家かをまとめているわけですが、このSparkpageはリアルタイムにカスタムページを作成します。

検索結果に上記のようにSparkpageがついているのですが、これを選択すると

一つのまとまったページとして各情報ソースから抽出してきた情報をグラフなどを交えながら組み合わせて表示してくれます。
なんというか、レポートが出来上がった感覚であります。

招待リンク

これらの検索は現在Gensparkがベータ版ということもあり、無制限に使える状態なのが今です。Perplexityと異なり、スマホアプリがないのが悔やまれます。

一方で、Deep Researchや画像生成などは無料ユーザには制限(おそらく1日1回?)がかかっています。
OpenRouterと同様にこういった複数のAIプロバイダーにまたがって提供されているサービスに課金するのか、それとも個別に課金するのか。悩ましいところです。

ただ、Gensparkでは招待リンクの仕組みが用意されています。

https://www.genspark.ai/invite?invite_code=NzA4OGE2MTlMMjRlNkw4NzA0TDc0YWFMNTAwZmY0NjA4OGE1

この招待リンクから会員登録をして電話番号認証を行うことで、有料プランが一ヶ月無料になります。気が向いたら登録してもらえると嬉しいです。

いやー、生成AI、面白いですね

OpenRouterに登録した

随分と前からClineをはじめとするコーディングエージェントに興味はあったのだが、どうにも手がつかない。

このあたりの知識や経験は、早晩必要になるかあまりにもパラダイムが変わりすぎて使い物にならなくなるかという振れ幅の大きいものではあるが、触った事で損するということはないはず。
だがしかし、手がつかない。

Nikeのように「Just do it」と触ってしまえばいいだけじゃないかと言われればそれまでなのだが、”興味はある”と言いながらここまで触らないのも珍しいな、といい加減重い腰を上げた。

OpenRouterってなんだ

公式サイト
https://openrouter.ai/

VSCodeにRoo Code拡張をインストールすると、API Keyを入れることになるのだが選択肢のデフォルトはOpenRouterとなっている。
OpenRouterという生成AIは聞いたことがないぞ?と思い調べてみると、単一のAPIKeyで複数のモデルを使い分けしてくれるようなサービスのようだ。

生成AIにはそれぞれ得手不得手があるので、複数に課金するよりも確かにOpenRouterに課金することで効率が良さそうである。

アカウント作成

まずはSingUpということで公式でアカウントを作る必要がある。

SingUpでMetaMaskの選択肢が出てくるのは初めて見る。
ということは、仮想通貨での支払いができるということなのだろう。これまた珍しいものだ。

あえてMetaMaskで進めてもいいのだが、大人しくGoogleアカウントと紐づけることにする。

$支払いとなるので、カードかAmazonPayかな?
私はUSAmazonのアカウント持っているのですんなり行ったけれど、もしかしたら通常は難しいのかもしれない。

クレジットの追加は$5からとなる。
Deepseekが最小が$2だったことを考えると、Deepseek限定で使うのであればやはりDeepseekに課金するというのが一番なのだろう。

まぁ、ここは勉強代とする

API Key自体はCreditを追加していなくても作ることはできる。
ただし、Roo CodeなどでAPIを呼び出す際に

Creditが足らんと怒られてしまうので注意が必要。

VSCodeに Roo Codeも入れたことだし、あとは色々と動かしてみることかな。

余談

今回はOpenRouterを使ったのだけれど、せっかく複数のモデルにアクセスできるのであればコード生成以外にも使いたくなる。

Roo CodeでOpenRouterを使うチャットを作ってしまうというなんともシュールなことをしてもらいいのだけれど、、、と思っていたらよく見たらOpenRouter自体にその選択肢が用意されていた

これで、OpenAI系やその他のモデルも試して遊ぶことができるのでは。
楽しみである

Deepseekをローカルで

少し前からDeepseekの名前は見かけていましたが、先日の発表から一気に広がりましたね。
というわけで、早速試してみようと思います。

参考にさせていただいたのはこちら

DeepSeek R1をほぼ準備なしからローカルGPUで動かす
https://note.com/cppp_cpchan/n/n3c1039c80dd0

CUDAの確認

私の環境では、CUDAは12.3だった

llama.cppをダウンロードしてくる。
https://github.com/ggerganov/llama.cpp/releases

見る限り、この2つなのだが、ローカルがCUDA 12.3で行けるものなのか。
試してみてから考える

試してみた

common_init_from_params: setting dry_penalty_last_n to ctx_size = 4096
common_init_from_params: warming up the model with an empty run - please wait ... (--no-warmup to disable)
ggml_cuda_compute_forward: ADD failed
CUDA error: the provided PTX was compiled with an unsupported toolchain.
  current device: 0, in function ggml_cuda_compute_forward at D:\a\llama.cpp\llama.cpp\ggml\src\ggml-cuda\ggml-cuda.cu:2230
  err
D:\a\llama.cpp\llama.cpp\ggml\src\ggml-cuda\ggml-cuda.cu:71: CUDA error
sh: ./llama-server.exe: このアプリケーションで、スタック ベースのバッファーのオーバーランが検出されました。このオーバーラン により、悪質なユーザーがこのアプリケーションを制御できるようになる可能性があります。 Error 0xc0000409

実行してみると、エラーとなってしまった。
エラーメッセージからは、「unsupported toolchain」ということで、12.3環境で12.4を動かしたことによるエラーではないかと推察する。

そこでCUDA 12.8(最新)を入れようとするもエラー・・・。

しょうがないので、llamaとバージョンを合わせた12.4を拾ってくる

CUDA Toolkit 12.4 Update 1 Downloads
https://developer.nvidia.com/cuda-12-4-1-download-archive?target_os=Windows&target_arch=x86_64&target_version=11&target_type=exe_local

同じエラーになった。。。

Nsight Coputeというものが原因のようだが、これは使わないっぽいのでカスタムインストールで設定を外してみる

とりあえずインストール出来たっぽい

smiで確認してみると、ちゃんとバージョンが上がっている

さて、実行です。
実行パラメータとしては以下を行っています

./llama-server.exe -m ../DeepSeek-R1-Distill-Qwen-14B-Q6_K.gguf -ngl 26 -b 2048 --temp 0.6

最初、nglの値を49にして実施してみたが、メモリが足りないというエラーとなってしまい、26でやるとエラーにならずに出来た。

このあたりのパラメータの加減は環境ごとに見極める必要がありそう。
言われているURLへアクセスすると

それっぽい画面が出来ている!

早速問い合わせてみたのだが、「Thinking」からかなりの長時間が経過しているが変化ない

GPUのパフォーマンスをタスクマネージャで確認して見ると、「専有GPUメモリ使用量」は張り付いていて、「3D」となっているところはギザギザの波形が出ている。

かなりの時間が経過した後に応答があった。

とりあえず、動くには動いたが、パフォーマンスはというとひどいものである。
パラメータを見直してなんとかなるものかはちょっとわからないが、試してみるだけ試してみようとは思う

Copilot が使えるようになっていた!

朝、メールを見ると。。。

おぉおぉ?
どゆこと?

メールにも書かれているけれど、いくつか制限があるようです

  • 2,000 code suggestions a month: Get context-aware suggestions tailored to your VS Code workspace and GitHub projects.
  • 50 Copilot Chat messages a month: Use Copilot Chat in VS Code and on GitHub to ask questions and refactor, debug, document, and explain code.
  • Choose your AI model: You can select between Anthropic’s Claude 3.5 Sonnet or OpenAI’s GPT 4o.
  • Render edits across multiple files: Use Copilot Edits to make changes to multiple files you’re working with.
  • Access the Copilot Extensions ecosystem: Use third-party agents to conduct web searches via Perplexity, access information from Stack Overflow, and more.

制限として大きいのは2000コード提案と50チャットの部分。
なんかあっという間に制限に引っかかりそうな気がしますね・・・。
それも利用仕方の問題なのかな

最近、WebでCaludeのほうを使う機会のほうが多くなっている気もしますが、まだまだ生成AIを使ったスタイルに馴染みがないので手を動かせるようにしていきたいものです。

開発環境の構築は開発よりも難しい

購読しているSoftware Designの12月号

連載のLLMが前号に引き続きのHIL(Human In the Loop)をお題にしたもので、読んでいて面白そうだったので試してみることに。

リポジトリはこちらです
https://github.com/mahm/softwaredesign-llm-application/tree/main/14

やってみる

ReadMeにしたがって、ポチポチしていきます。
poetryというのは初めて使います。正直言って、業務でPythonを使っているわけじゃない身としては、試しに触るたびに新しいパッケージマネージャーを使わされている気がします。
なんでPython使いはパッケージマネージャーをどんどん作るのでしょう。
どれだけパッケージ使いづらいんでしょうかね。。。
それとも、「俺が作る最強のパッケージマネージャーを見せてやる」ってイキってる人が多いということなのかもしれません。

さて、最終的に実行を行ってみるのですが。。。

ModuleNotFoundError: No module named 'pydantic_core._pydantic_core'
Traceback:
File "C:\Dev\llm\softwaredesigne\softwaredesign-llm-application\14\.venv\Lib\site-packages\streamlit\runtime\scriptrunner\exec_code.py", line 88, in exec_func_with_error_handling
    result = func()
             ^^^^^^
File "C:\Dev\llm\softwaredesigne\softwaredesign-llm-application\14\.venv\Lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 590, in code_to_exec
    exec(code, module.__dict__)
File "C:\Dev\llm\softwaredesigne\softwaredesign-llm-application\14\app.py", line 5, in <module>
    from agent import HumanInTheLoopAgent
...

知ってる。チュートリアルってエラーになるんだぜ。

この “pydantic_core.pydantic_core”が見つからないってのはOpenAI関連のLambdaレイヤーを構築する際に起こるエラーとググったら出てくる。
Lambdaレイヤーなんて作っちゃいないんだけど、どうやらWindows環境では確実にこうなるようだ。
Software Designにそんな環境依存の話書いてあっただろうか?と思わずひとりごちた。
ちくしょう。

正直、なぜLambdaレイヤーと言われているのかは定かではないけれど、対応にはFastAPIの0.99.0を入れるとある

Lambda Layers で No module named ‘pydantic_core._pydantic_core’
https://qiita.com/ganessa/items/bb67517a095f2c510926

試して見る

C:\Dev\llm\softwaredesigne\softwaredesign-llm-application\14> pip install fastapi==0.99.0
...
Using cached starlette-0.27.0-py3-none-any.whl (66 kB)
Installing collected packages: pydantic, starlette, fastapi
  Attempting uninstall: pydantic
    Found existing installation: pydantic 2.9.2
    Uninstalling pydantic-2.9.2:
      Successfully uninstalled pydantic-2.9.2
  Attempting uninstall: starlette
    Found existing installation: starlette 0.41.2
    Uninstalling starlette-0.41.2:
      Successfully uninstalled starlette-0.41.2
  Attempting uninstall: fastapi
    Found existing installation: fastapi 0.115.4
    Uninstalling fastapi-0.115.4:
      Successfully uninstalled fastapi-0.115.4
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
composio-core 0.5.40 requires pydantic<3,>=2.6.4, but you have pydantic 1.10.19 which is incompatible.
Successfully installed fastapi-0.99.0 pydantic-1.10.19 starlette-0.27.0

なんかERRORは出るものの、最終的にはpydantic-1.10.19がインストールされた。
さて試してみる

変わらず・・・

試してみる(2)

問題の根本としては、Windows環境で試していることが原因っぽい。
というわけで、Dockerも検討したけれど手元にMacもあったので試してみる

あっさり動いたーーーー。

すごい釈然としない。。2024年においてもまだ環境依存は簡単にはこえられない壁として我々の前には立ち塞がっていると言うことなんだろう・・・。

そして、本当はそんなことをしたいのではなくここから仕組みの理解や改変を通した学びを得たいところだったのだけれど、すでに徒労感がある。

悲しい。

動かしてみると

そりゃ、LLMアプリを勉強するくらいであったら課金くらいしろよってのは、まぁ、そうなのかもしれないけれど、試すことすら出来ないのは悲しいところです。

ChatGPTにしろAnthropicにしろ、開発中もひたすらに料金がかかり続けるモデルだと、お勉強エンジニアには厳しいお財布事情になりそうです。

これ、複数のLLMで試したいと思ったら全部課金するって話になるんですよね。。。

her/世界でひとつの彼女

Amazon Prime Video で「her/世界でひとつの彼女」を見た

her/世界でひとつの彼女
https://amzn.to/3CFChRG

人工知能が搭載されたOSというか、OSそのものが人工知能というか。
近未来ではそんなOSが来ることはそれほど斬新なアイディアではない、現実的な世界線の話。

いわゆるAIが自我に目覚めるという内容だけれど、ターミネーターのような結末には向かわない形で終りを迎えた。
ちょっと最後、「それってどうなっちゃってるんだろう?」という疑問がわかなくはないんだけど、それなりに楽しむことができた。

というか、映画自体を見たのがすごい久しぶりに感じる

同じ自我に目覚めるAIであっても、そもそもどういう命題を与えられたのかによって、迎える帰結が異なっているということなのかもしれない。
そもそも、herの世界線であったとしてもサマンサと他のAI-OSとの違いはどこにあって、開発者はどういう意図があってそういう機能を盛り込んだのだろうか。
疑問は尽きない

物理世界に干渉するために、ロボットなどを使うのではなく現実世界の人間を懐柔するというのも、面白いと思ったけれど、随分とまどろっこしい感じもする。

結局、人間っぽすぎるといえばそうなのかもしれない。

将来的に、どういうAIが我々の周りをひしめくことになるのだろう。
その時に自分はそれらAIに対してどういう感情を抱いているんだろう

5年もすればどうなっているか想像もできない事態が起きている可能性も高いわけで、楽しみでもあり怖くもあると感じた

LLMがさっぱりわからん

ここのところ平日は、それなりに仕事が忙しかったりなんだりでうまく勉強の時間が取れませんでした。

そんなわけで、申し込んだはいいものの全く取り組めていなかったGoogle提供の5日間のレッスンを見直しています

5-Day Gen AI Intensive Course with Google

初っ端からLLMの基礎講義が始まるわけなんですけど、理解できているかと言われるとほぼ理解できていない気がする。
今のLLMというのは、次に来る言葉をこれまでの文脈から予測をして、それを繰り返しているというのはなんか聞いたことがある。

しかし、トランスフォーマーという言葉は知っていても、説明できるかと言われるとできない。

そんなこんなで、ちゃんと勉強しなきゃねって思って色々と見ることはあっても、途中で挫折してしまうことが圧倒的に多い。
なんというか、独特の表現だったり単語が色々と出てくるので、いわゆるIT系にあまり関わりのない人がエンジニアの会話を聞くと何語が会話されているのかがよくわからないと言われるかのような気分を味わうことができる。

今、まさにそれ

LLMに代表される機械学習を取り扱うにおいて、モデルそのものを作るという方向性に動くよりは、できているモデルを使ってどんなアプリケーションを作るのか?という方向に重点を置くほうが機会としては圧倒的に多いし役に立つように感じる。

ただ、それはこの辺の知識を知らなくてもいいのか?ということに本当に”知らなくて良い”と結論付けてしまっていいのだろうか?は漠然とした不安がある。

このあたりは修行だと思って、とりあえず最後まで読み切ってみないと行けないんだろうけれど・・・
正直つらいなぁ