はじめに
七尾百合子さん、お誕生日 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リクエストまで無料のプランで試しています
エラトステネスの篩、書けます! #yapcjapan #yapcjapanB
— nikkie(にっきー) / にっP (@ftnext) 2025年11月14日
OpenAIのChat completionsと同じエンドポイントだ〜 https://t.co/yOttOZc4vl pic.twitter.com/ykl3ZyzuhK
書いた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_stdoutがANSIエスケープシーケンス付きの出力を拾ってしまうので、名前を変えて対応しています。
劇的だったのはTHOUGHTの出力で、これを入れる前と後とでだいぶ変わるのを体感しました。
Chain-of-thoughtってすげ〜
(「この形式の応答に従わない場合は、あなたの応答は拒否されます。」が確実にPythonコードを書くのに寄与しているかも)
動いたの先へ(次への私的TODOリスト)
手を動かして分かったのは、プロンプトはmacopyさんがガッツリ工夫していそうということ。
- mini-swe-agentから来ているのは
- システムプロンプト
- ユーザプロンプトでのタスクの示し方
- 終了方法(ただし、
COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUTという文字列を出力) - ref: https://github.com/SWE-agent/mini-swe-agent/blob/v1.14.4/src/minisweagent/agents/default.py#L16-L20
- mini-swe-agentから来ていない点
- プロンプトの他の部分はCodeAct論文?
作れたらいいなと思うのは、macopyさんの実装の再現から進んで、Claude Codeたちのようなコーディングエージェントです。
そこに向けて、トークで出会った一次情報からあるべきを確認したいなあと思っています。
終わりに
YAPC::Fukuoka 2025「Agentに至る道」に沿って、なんでもPythonで解決してしまうコーディングエージェントを動かせました。
さくらのAI Engineは無料枠があり、openaiライブラリで叩けて今回重宝しました。
mini-swe-agentはじめ、発表で教えていただいた元情報に当たって理解を深めていくのが、このコーディングエージェントを育てるのにつながりそうという感触です。
macopyさん、コーディングエージェントの実装を一気に身近なものにする発表、ありがとうございました!