1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

大規模言語モデル時代で知った方がいい知識

Posted at

CODE アプリではTCA移行が順調に進んでいる中、AIも大活躍してます!

今回のテーマはAI関連です、最近 github copilot for xcode のおかけで仕事がもっとスムーズになりました。今回使うだけじゃ足りないと思って色々調査しました、少し整理しようと思います。

github copilot for xcodeについて

定番のAskモード以外でAgentモードも用意されています、底部のスライドボタンで切り替えます

スクリーンショット 2025-12-10 16.27.11.png

モード切り替え後、Xcodeが出してるエラーの隣にアイコンが追加されます:

スクリーンショット 2025-12-10 16.35.06.png

このアイコンをタップするとエラーの分析と修正をLLMに投げます、そして分析と修正をやってくれます:

スクリーンショット 2025-12-10 16.42.24.png

これは素晴らしいです、ワンクリックでエラー修正されて、しかも分析とエラーの原因もしっかり生成されます!

今回、基礎の概念をシンプルに説明しようと思います

LLM と Prompt

LLMはLarge Language Models(大規模言語モデル)の略称、「大量のテキストデータを学習し、人間のように自然な文章を生成・理解することに特化したAIモデル」

プロンプト(Prompt)とは、AIとの対話やコマンドラインインタフェース(CLI)などの対話形式のシステムにおいて、ユーザが入力する指示や質問のことです。AIがユーザの要求や問いに対して適切な応答や結果を生成するためには、明確で具体的なプロンプトが必要です。不適切なプロンプトを使用すると、AIが望ましくない結果や誤った情報を生成する可能性があります。(以下↓の記事内一部説明引用しました)

user prompt

ChatGPTが発表されましたが、見た目は普通のSNSアプリとほぼ同じです。我々は問題もしくは話したいメッセージを送って、AIがメッセージを生成して返信します。そこで我々が送信したのはuser promptですね:

IMG_0105.jpg

system prompt

一方で我々がリアルで他の人に質問した時、全く同じ質問でも相手によって答えはバラバラになりますよね。例えば 腰が痛い、どうすればいい を友たちに聞くと 貼り薬使ったら で返答しますが、両親に聞くと お医者さんに見てもらう? :laughing:

けれどAIは自分の友達でもないし、親でもない。質問を投げると 腰痛緩和の方法XX みたいな返答を生成されます。悪くないですが、もっと生き生きとした答えが欲しいですね。

そこでAIにも一定の設定を最初から持たせると、生成された答えはもっと正確になると思われます:

IMG_0109.jpg

AIに投げるuser prompt内 君が僕の両親設定を入れて、君が僕の両親で、私は今腰が痛いのuser promptをAIに投げると、より生き生きとした答えをもらえます。

ですが、毎回質問した際 この設定を書くのはイマイチですね、そこで設定だけはuser promptから分離した物system promptとなります。

system promptは主にAIのキャラクター設定、性格、言葉使いなどのデータを保存してます。AIに質問するたびAIツールはsystem promptとuser promptをまとめてLLMに投げます。
system promptはAIツールで事前設定されます、通常我々は変更できません:

スクリーンショット 2025-12-11 18.23.49.png

AI Agent・Tool

AIとのやり取りは問答の形式でできるですが、このやりとりですと自分達でAIの答えを見てコードを書く必要あります。具体的な任務を完成までできると最高じゃないですか?

そこでAutoGPTが出ました:

日本語のチュートリアルもあります!

AutoGPTはローカルで走らせられます。具体的に何ができるか一つの例を説明します。
AutoGPTにやることを投げます:パソコン内のXcodeのpathを教えてください:

IMG_0113.jpg

list_filesとread_filesは事前書いた関数です、そしてこの関数たちの具体の説明と使用方法をAutoGPTに登録しています。

AutoGPTが登録された関数のもとに:どのような関数(list_files, read_files)が用意されたか、どうやって使う(call_toolname)のか、system promptを生成されます。

①AutoGPTは我々が出した指令(user prompt)と事前生成されたsystem prompt一緒にまとめてLLMに投げます。

②LLMが賢いのであれば、その要求に対し適切な関数を呼ぶメッセージを生成して、AutoGPTに投げます(ここAutoGPTに投げたメッセージはAutoGPTがsystem prompt内定義された形式になります、例:call_toolname)

③AutoGPTがメッセージを受け取って解析成功したら、関数list_files()を呼ぶ事ができます。そして関数実行し、結果をAutoGPTに返却します。

④最後関数実行した結果をLLMに投げます、LLMはそれを分析しAutoGPTに新しいメッセージを返却します。

やることを完成させるまで、①から④の過程を循環します。

この様なuser、関数、LLMの間通信するプログラムをAI Agentと呼びます。
そして関数の部分はAgent Toolと呼びます

function calling

AI AgentのおかけでAIが自力で問題解決する事ができました!しかし少し問題があります。

system prompt内では具体的なfuncの使い方や使うため返すべきフォーマットを自然言語で説明しましたが、一定の確率で違う答えを生成します。AIは確率分布ですので。

この問題を解決する為一部のAI Agentは間違えたフォーマット受けた際問題をAIにもう一度投げ、正確のフォーマット受けるまで再試行します。

この方法は問題を解決できますが、デメリットも大きいですね、不安定かつtokenを大量に消費します。

そこで、LLM側で解決すればいいじゃない?という声が出て、LLM提供する企業がLLM内に新しい機能実装しました、それがfunction callingです:

IMG_0115.jpg

function callingが何をやってるのかを一言で言うと: フォーマットを統一し、AIにもルールを分からせる

function callingを使えば、元々system prompt内に自然言語で書かれた どのような関数(list_files, read_files)が用意されたか、どうやって使う(call_toolname)のかの記述は標準化され、system promptから分離されます。

上の例ですと一個のAgent ToolはJSONで定義されて、tool nameはname keyのvalueに指定、tool descriptionはdesc keyのvalueに指定、必要なparamsはparams keyに指定します。

最後はLLM側生成される物のフォーマットも決めます(例はJSONですね)

これで全てのAgent toolの説明、AIに投げる時のフォーマット、LLM側生成された物のフォーマットこれら全部function calling内管理されます。

フォーマットが統一された事でLLMの特定のトレーニングがもっと簡単になります、トレーニングの最後ではLLMは自分がやった事をより理解し、同じ質問を投げると: あぁ、この問題やった覚えがある の様に素早く回答を生成します。

もう一点素晴らしい事は、function callingはLLMが生成された内容のフォーマットを決めたので、もしAI生成された内容が決めたフォーマットと違う場合、AIサーバー内でその間違えを自動検知して、自ら再度答えを生成します。これでAI Agentの開発難易度も下がり、プラスでclient側のToken消費も抑えられます。

これらのメリットによって多くのAI Agentはsystem promptからfunction callingに切り替えができますね。

実はfunction callingも抱える問題があります、LLMによって提供されたAPIもそれぞれ違うので(LLM開発された会社がAPI決めるので、仕方ないですね)複数のLLMがサポートするAI Agentを開発するのも簡単ではないです。

なのでまだsystem prompt使用して開発されたAI Agentもある程度あります。

mcp

AI AgentとLLM間の通信問題ほぼ解決の後、まだAI AgentとAgent tool間通信の問題が残ってます。

一番シンプルなやり方はAI AgentとAgent toolを同じプロジェクト内に書くことです、そうするとただfunctionを叩けば問題ないです。

しかし汎用的なAgent tool(例えばweb browserのAgent toolとか)をAI Agent作るたびにコピーして入れるのも良くないですね。

そこで解決策が出されました、それがmcp(Model Context Protocol)です:

mcpは通信protocolの一種です:(http(Hypertext Transfer Protocol)、ftp(File Transfer Protocol)、みんなprotocol同士)

IMG_0119.jpg

mcp server内共通で使用したいtoolsを入れてます、そしてmcp server内のtool使用するAI Agentはmcp clientと呼びます。

mcpはprotocolなのでAgentとTool間の通信はこのprotocolのルール(フォーマット、APIとか)に従う必要があります。

mcp serverも色んなAPI提供しています、例えばmcp内のtool listのAPIとか、各toolの説明とか、リクエスト時必要のパラメーターとか。

tool以外他にresourcer(ファイルのread・write機能)とprompts(promptのテンプレート機能)も提供してます。

mcp serverはAI Agentと同じサーバーに置くことができますが、AI Agentと分離し他のサーバーに置くのも出来ます、その時はhttp(Streamable HTTP)を使用してデータ交換をします。

mcpは基本LLMと関連しない、AgentがどのLLMモデル使用したのかmcpは気にしないです。

最後

最後少し整理しましょう:

①:ちょっと腰が痛いので、AI Agent(mcp client)に腰が痛い、どうすればいい?の問題を投げます。

②:Agentは問題を処理してuser promptを生成する

③:Agentはmcp serverと通信しtoolsのデータを取得してsystem promptに処理する(もしくはfunction callingリクエストのフォーマットに変換)

④:Agentはsystem prompt(もしくはfunction callingリクエスト)とuser prompt結合してLLMに投げる

⑤:LLMはデータを処理して分析した後、web_browserのtoolsの使用を決めて、AI Agentにweb_browser tool使用するリクエスト(system prompt内決めたフォーマットもしくはfunction calling)をAI Agentに投げる

⑥:AI Agentはリクエストを処理し、url指定して、mcp server内のweb_browser toolでの使用リクエストする

⑦:mcp serverがweb_browser tool使って指定したurlを解析し、データをAgentに返す

⑧:Agentはmcp serverから貰ったデータをLLMに渡す

⑨:LLMはデータのもとに思考を始め、そして答えを生成してAgentに渡す

⑩:最後Agentは答えを我々に見せる(テキストフィールドに展示)

system prompt、user prompt、AI Agent、Agent tool、function calling、mcpたちが連携してようやく問題解決にたどり着きました!

今回のまとめは以上となります、ありがとうございました!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?