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

Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜

Avatar for mackee mackee
November 13, 2025

Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜

YAPC::Fukuoka 2025

Avatar for mackee

mackee

November 13, 2025
Tweet

More Decks by mackee

Other Decks in Programming

Transcript

  1. 自己紹介: macopy • 面白法人カヤック ◦ グループ情報部,バックエンドエンジニア • X: @mackee_w, GitHub:

    mackee • Kamakura.go 主催 • YAPC参加歴14年 ◦ これまでのトーク内容 ▪ ハードウェア, IoT ▪ テストの高速化 ▪ 静的解析
  2. 最近好きなもの • LLM, AI Agent, AI Coding ◦ 元々SFが好き ◦

    現実世界にSF的なものが実装されるのがワクワクする ▪ mRNAワクチンもワクワクしながら打ちに行った ◦ AIによって社会がどう変わるのかみたいなのが興味がある • 3Dプリンティング ◦ 自己複製機械としての3Dプリンタ面白くないですか?? • WebAssembly ◦ Compile Once, Run Anywhere
  3. 年表 • Attention is All You Need (Vaswani et al.,

    2017) ◦ Transformerの提案 • GPT (Radford et al., 2018), GPT-2 (Radford et al., 2019), GPT-3 (Brown et al., 2020) ◦ 大規模言語モデルの登場 • InstructGPT (Ouyang et al., 2022) ◦ 指示に従うモデルの登場 => ChatGPT ◦ LLMが多くの人にとっての実用になる
  4. この頃のLLMでコードを書かせる論文 • Evaluating Large Language Models Trained on Code (Chen

    et al., 2021) ◦ 初期のGitHub Copilotのベースになった論文 ◦ docstringに書かれている仕様をもとに続きのコードを生成 • ここで挙げられている課題 ◦ 仕様がが長いと性能が落ちる ◦ 操作のステップが多い問題でミスる
  5. 一方RAGの世界でも似たようなことが • Retrieval-Augmented Generation (Lewis et al., 2020) ◦ 外部知識ベースから情報を取得して応答を生成

    ◦ このときも実は一発勝負 ◦ でも我々がググる時も一発勝負じゃないよね? • HotpotQA (Yang et al., 2018) のようなマルチホップ推論タスクが課題 ◦ 複数の情報源から情報を集めて答えを出す ◦ 一発勝負では難しい
  6. ReActのプロンプト Solve a question answering task with interleaving Thought, Action,

    Observation steps. Thought can reason about the current situation, and Action can be three types:<Actionの説明> Here are some examples. <例を示す> Chain of Thought(Wei et al., 2022) と Few-Shot(Brown et al., 2020)を組み合わせたプロン プト
  7. ReActの考え方をコード生成タスクに導入する • Reflexion(Shinn et al., 2023) ◦ シンタックスエラーなどをフィードバックする, 自己反省を入れる •

    InterCode(Yang et al., 2023) ◦ 1ループごとに実行を行い、エラーなどをそのままフィードバックする
  8. AIにコードを書かせるベンチマーク • HumanEval (Chen et al., 2021) ◦ 関数仕様からコードを生成し,ユニットテストで評価 •

    APPS (Hendrycks et al., 2021) ◦ より大規模なコーディング問題集 • SWE-Bench (Jimenez et al., 2023) ◦ 実際のGitHubリポジトリから抽出されたコーディング課題 ◦ リポジトリ全体から必要なファイルを読む必要がある
  9. SWE-Agent (Yang et al., 2024) • リポジトリ探索, ファイル読み込み, ファイル編集をツール化 •

    ReActのフレームワークを用いてエージェントを構築 • GPT-4 Turboを用いてSWE-Benchで12.47%解決を達成
  10. それ以降はみなさんが知る通りです • SWE-Bench Verifiedの解決率は70%まで到達 ◦ SWE-Bench Verified はSWE-Benchの中でも特に信頼性の高い テストスイートを持つタスク群 •

    汎用LLMがコード生成タスクも得意になった • ツールの種類・使い方が洗練された • コード生成ツールがお金になることにみんな気がついた
  11. • さくらのAI Engineを使用 ◦ https://www.sakura.ad.jp/aipf/ai-engine/ • Qwen3-Coder-480B-A35B-Instruct-FP8 ◦ アリババ社のQwen3シリーズのコード生成特化モデル ◦

    SWE-Bench Verified Bash Onlyで55.40%の解決率 ▪ 2025年8月時点 ▪ 上はOpenAI o3, GPT-5 mini, Claude 4 Sonnetなど ▪ 下はGemini 2.5 Pro, Claude 3.7 Sonnetなど モデル
  12. • [ ] APIクライアントを作成 • [ ] メッセージを受け取ってLLMに投げて応答を表示 • [

    ] Perlコードの生成 • [ ] Perlコードの実行 • [ ] Perlコードの出力をフィードバック • [ ] タスクの終了方法の定義 実装の手順
  13. • さくらのAI EngineのAPIを呼び出すクライアントを作成 ◦ といってもOpenAI API互換なので簡単です • HTTPクライアントはHTTP::Tinyishを使用 ◦ HTTP::Tiny(標準モジュール)と同じインターフェイスで、curlや

    LWP::UserAgentがあればそれを使う • JSONのエンコード・デコードはJSON::PPを使用 ◦ 標準モジュール • 後述する理由でperl v5.34がターゲット まずAPIクライアントを作ろう
  14. • [x] APIクライアントを作成 • [x] メッセージを受け取って LLMに投げて応答を表示 • [ ]

    Perlコードの生成 • [ ] Perlコードの実行 • [ ] Perlコードの出力をフィードバック • [ ] タスクの終了方法の定義 途中経過
  15. • LLMの応答からコードブロックを抽出してevalで実行 ◦ 危険なのでみなさんはDockerなどのサンドックス内で動かそうね! • 正規表現でperl ... を抽出 ◦ perlがついていないことも想定

    • Capture::Tinyで標準出力をトラップ • Term::ANSIColorを使って色つけしてわかりやすいようにコードの出力を 表示 Perlコードの実行
  16. • [x] APIクライアントを作成 • [x] メッセージを受け取ってLLMに投げて応答を表示 • [x] Perlコードの生成 •

    [x] Perlコードの実行 • [ ] Perlコードの出力をフィードバック • [ ] タスクの終了方法の定義 途中経過
  17. • [x] APIクライアントを作成 • [x] メッセージを受け取ってLLMに投げて応答を表示 • [x] Perlコードの生成 •

    [x] Perlコードの実行 • [x] Perlコードの出力をフィードバック • [x] タスクの終了方法の定義 これで完成?
  18. • [x] APIクライアントを作成 • [x] メッセージを受け取ってLLMに投げて応答を表示 • [x] Perlコードの生成 •

    [x] Perlコードの実行 • [x] Perlコードの出力をフィードバック • [x] タスクの終了方法の定義 • [x] THOUGHTセクションの追加 完成!
  19. • SWE-Bench Verifiedをやらせてみよう ◦ 使用する課題 django_django-11299
 ◦ コンテナイメージに入っているシステムPerlがv5.34 • 実はこのままだとfew

    shotが足りないのでPull Request description とともにPerlコードの例を与えています ◦ mini-swe-agentのSWE-Bench向けプロンプトを参考にしています これちゃんとコード書けるの?
  20. 参考文献 • 菊田遥平. 原論文から解き明かす生成AI. 技術評論社, 2025. • Hajime Morita, Jun

    Mukai. Misreading Chat: #143 Can Language Models Resolve Real-World GitHub Issues?. ポッドキャ スト, 2024 • Vaswani, A. et al. 2017. Attention is All You Need. • Radford, A. et al. 2018. Improving Language Understanding by Generative Pre-Training.(GPT)
  21. 参考文献 • Nakano, R. et al. 2021. WebGPT: Browser-assisted question-answering

    with human feedback. • Chen, M. et al. 2021. Evaluating Large Language Models Trained on Code.(HumanEval / Codex) • Hendrycks, D. et al. 2021. Measuring Coding Challenge Competence with APPS. • Ouyang, L. et al. 2022. Training language models to follow instructions with human feedback.(InstructGPT)
  22. 参考文献 • Wei, J. et al. 2022. Chain-of-Thought Prompting Elicits

    Reasoning in Large Language Models. • Yao, S. et al. 2022. ReAct: Synergizing Reasoning and Acting in Language Models. • Liu, H. et al. 2023. Lost in the Middle: How Language Models Use Long Context. • Shinn, N. et al. 2023. Reflexion: Language Agents with Verbal Reinforcement Learning.
  23. 参考文献 • Yang, K. et al. 2023. InterCode: Standardizing and

    Benchmarking Interactive Coding with Execution Feedback. • Jimenez, C. et al. 2023. SWE-bench: Can Language Models Resolve Real-World GitHub Issues? • Yang, K. et al. 2024. SWE-Agent: Agent-Computer Interfaces Enable Automated Software Engineering. • Wang, Y. et al. 2024. Executable Code Actions Elicit Better LLM Agents.