Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AIエージェントでのJava開発がはかどるMCPをAIを使って開発してみた / java mc...

AIエージェントでのJava開発がはかどるMCPをAIを使って開発してみた / java mcp for jjug

2025-11-15に開催された「JJUG CCC 2025 Fall」での登壇資料です
https://ccc2025fall.java-users.jp/

Avatar for Naoki Kishida

Naoki Kishida

November 15, 2025
Tweet

More Decks by Naoki Kishida

Other Decks in Programming

Transcript

  1. 2025/11/15 2 自己紹介 • きしだ なおき • LINEヤフー • X(twitter):

    @kis • blog: きしだのHatena • (nowokay.hatenablog.com) • 「プロになるJava」というJavaの本を書いてます
  2. Pros & Cons • Function Calling • チャットまで作る必要がある • 対象のLLMを限定できる

    • MCP • 機能だけでいい • どのAIサービスから使われるかわからない
  3. Spring BootでのMCPサーバー • プロジェクト作成 • ツールサービスの作成 • ツールの登録 • 起動

    • 実際にチャットから使う • Function Callingとして使う • テスト
  4. プロジェクト作成 • プロジェクト作成時にModel Context Protocol Serverを選ぶ • HTTP呼び出しの場合はSpring WebかReactive Webを選ぶ

    <dependency> <groupId>org.springframework.ai</groupId> <artifactId> spring-ai-starter-mcp-server-webmvc </artifactId> </dependency>
  5. LM Studio • LLM統合環境 • 便利 • しかしSpring AIから接続できない •

    HTTP2で最初に接続しようとして静止 • LM StudioがHTTP2 upgradeに対応してない • Spring AIがプロトコル(HTTP 1.1)を指定できない • プロキシを立てればいけるけどおおげさ
  6. llama.cpp • LLM実行エンジン • LM StudioもOllamaも内部で使う • サーバー機能を持っている • Spring

    AIから接続できる • 軽量でプログラムから使いやすい • 30MBくらい(+モデルが3GBくらい) • しかしFunction Callingがうまく動かない
  7. Ollamaの起動 • OLLAMA_HOSTでポートなどの指定 • “inference compute”が来たら起動完了ということにする var builder = new

    ProcessBuilder(OLLAMA_CMD, "serve"); builder.environment().put("OLLAMA_HOST", "http://localhost:11432"); builder.redirectErrorStream(true); var proc = builder.start(); var reader = new BufferedReader(new InputStreamReader(proc.getInputStream())); var ret = reader.lines() .dropWhile(s -> !(s.contains("inference compute"))) .limit(1) .findAny();
  8. どのLLM? • Qwen3 4Bが性能が高い • Gemma 3 4BはFunction Callingに対応してない •

    Llama 3.2 3Bは性能が低い • Qwen3が使えないなら候補 • Phi4-miniは性能が悪い • 「関数あるの知ってるけど呼び出せませんね」みたいな対応する
  9. ファイル操作 • フォルダ作成 • ファイル一覧 • ファイル検索 • ファイル作成 •

    ファイル取得 • Apache tikaを使ってPDFなどなんでも読めるようにした • diffの適用
  10. 開発でのAI利用 • Qwen Codeでほぼ完了 • ファイル操作 • 難しいAPIなし • ChatGPTに聞いてコピペ

    • Maven / Spring Boot • APIの使い方に迷いが • ChatGPT / Claude Codeに聞いたあとほぼ手書き • LSP • うまくAPIを制御してくれない
  11. そうだ、ファインチューニングしよう • ファインチューニングの分類 • CPT(継続事前学習) • 知識を教える • SFT(教師ありファインチューニング) •

    よいやりとりを教える • RLHF(人間の評価による強化学習) • 出力結果に点をつける • DPO(直接的な選考最適化) • 質問に対してよい応答とよくない応答を教える • プロジェクト知識を与えてみる → CPT
  12. プロジェクト知識を与えてみる • Tomcatのソースコードで継続事前学習(CPT)してみる • Gemma 3 12Bで試してみる • Google Colabで試す

    • Unslothフレームワークを使う • ノートブックがたくさんあるのでツギハギする • 1000円課金して試す • 無料で使えるT4で4Bのファインチューンが終わったら量子化の準備で 落ちた • ちょっと大きいL4で2時間半くらい、50円くらいで学習 • 60 epoch
  13. 自作AIエージェントを作りたい • 小さいモデルで動くエージェント • Function Callingでよさそう • MCP(Function Calling)を多く使うとコンテキストを圧迫する •

    自力解析でもよさそう • コンテキストがより少ない • MiniMax M2やDevstralのように Function Callingが下手なモデルでも 動かせる • リアルタイムにコード出力を表示できる