nikkie-ftnextの日記

イベントレポートや読書メモを発信

YAPC::Fukuoka 2025の「Agentに至る道」に沿って、さくらのAI EngineのQwen3-Coderを、thoughtしてPythonを書くコーディングエージェントにする #yapcjapan

はじめに

七尾百合子さん、お誕生日 244日目 おめでとうございます! nikkieです。

YAPCを終え、いくつか手を動かしたくなっています。
今回はコーディングエージェントを実装します!

目次

macopyさんによる「Agentに至る道」

YAPC::Fukuoka 2025 Day1は劇的でした。聞いたトークの感想メモ #yapcjapan - nikkie-ftnextの日記

2025年のコーディングエージェントを成立させる主要な論文紹介 + さくらのAI Engineを使ったライブコーディング。

発表はさくらのAI EngineのQwen3-Coderを、thoughtしてPerlを書くコーディングエージェントにしていました(エージェントの実装もPerl)。
これをPython実装 + エージェントもPythonを書くでやってみます。

うちのエージェントが書いた、エラトステネスの篩を見てくれ!

% uv run agent.py エラトステネスの篩のプログラムを書いて
Primes up to 30: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

思考過程全部:https://gist.github.com/ftnext/5b74f5ed3bae0a2258c5d8e99fc216f7

実装メモ

さくらのAI EngineはOpenAIのChat completions API互換のため、openaiライブラリで叩けます。
https://manual.sakura.ad.jp/api/cloud/ai-engine/inference.html
また、月3000リクエストまで無料のプランで試しています

書いたPythonコードはexecで実行し、返り値または標準出力をChat completions APIに入力します(Tool useですね)。
https://docs.python.org/ja/3/library/functions.html#exec
exec中の標準出力は、contextlib.redirect_stdoutで拾いました。
https://docs.python.org/ja/3/library/contextlib.html#contextlib.redirect_stdout
過程はRichで色付き出力していましたが、from rich import printだとcontextlib.redirect_stdoutANSIエスケープシーケンス付きの出力を拾ってしまうので、名前を変えて対応しています。

劇的だったのはTHOUGHTの出力で、これを入れる前と後とでだいぶ変わるのを体感しました。
Chain-of-thoughtってすげ〜
(「この形式の応答に従わない場合は、あなたの応答は拒否されます。」が確実にPythonコードを書くのに寄与しているかも)

動いたの先へ(次への私的TODOリスト)

手を動かして分かったのは、プロンプトはmacopyさんがガッツリ工夫していそうということ。

作れたらいいなと思うのは、macopyさんの実装の再現から進んで、Claude Codeたちのようなコーディングエージェントです。
そこに向けて、トークで出会った一次情報からあるべきを確認したいなあと思っています。

  • swe-benchを1題確認
    • 「エラトステネスの篩のプログラムを書いて」とのギャップ
  • mini-swe-agentを動かす
    • mini-swe-agentの設定のママでどういう動きをするか掴む

終わりに

YAPC::Fukuoka 2025「Agentに至る道」に沿って、なんでもPythonで解決してしまうコーディングエージェントを動かせました。
さくらのAI Engineは無料枠があり、openaiライブラリで叩けて今回重宝しました。
mini-swe-agentはじめ、発表で教えていただいた元情報に当たって理解を深めていくのが、このコーディングエージェントを育てるのにつながりそうという感触です。

macopyさん、コーディングエージェントの実装を一気に身近なものにする発表、ありがとうございました!