ぼくもAIコーディングエージェントを作ったほうがいいんじゃないか、ということで、かろうじてコーディングエージェントと呼べるものを作りました。
指示したJavaファイルを作って保存して実行してエラー出なくなるまでやりなおすというものです。
ただまあ、このレベルだと、コーディングエージェントといっても、ファイル読み書きとコード実行ができればいいと思います。
なので、とりあえずこんな感じでsaveCodeとexecuteCodeのTool Callingを用意。見易さのためにUI関係の処理は削ってます。
@Tool(""" save the code into the file with givin name. \ parameter: filename - file name to save; code - generated Java source code""") void saveCode(String filename, String code) { Files.writeString(Path.of("temp", filename), code); } @Tool(""" run the java code saved in the file named the filename. \ parameter: filenmae - file name that code is saved to execute; \ return: result""") String executeCode(String filename) { var str = compileAndRun(Path.of("temp", filename)); return str; }
あとはシステムプロンプト次第。ということでこんな感じ。
static String systemPrompt = """ あなたはJavaコードの生成を行うコーディングエージェントです。 ユーザーの指示に従った完全なコードを生成して、適切なファイル名でsaveCodeで保存を行い、 executeCodeでファイル名を指定して実行してください。 実行がうまくいかなかったらエラーや実行失敗が返ります。コードを修正してやりなおしてください。 """;
で、UI関係を作ってLLMにプロンプトを投げる処理を書けばできあがり。
今回は日本語データを使った重要度行列でGemma 3 12Bを量子化したモデルを使ってみました。
https://huggingface.co/dahara1/gemma-3-12b-it-qat-japanese-imatrix
で、まあ動くんだろうと思ったけど、実行してなんかJTable使ったコードが勝手に実行されると、「おぉぉ~」と声が出てしまいました。たのしい。

一応リトライやれとプロンプトに書いてるので、失敗したらやりなおすはず。ここではファイル保存の前に実行してエラーになってるのでリトライした形跡があります。

ということでコーディングエージェント楽しい。みんな作ろう。
コードはこちら。
compileAndRunはChatGPTが書いたほぼそのまま。
https://gist.github.com/kishida/ee3949c412cfd60fe7c6493af2254562
追記: コンパイルエラーも直してました!

追記2: LangChain4J 1.0.0-beta3だとうまくTool Callingができず、beta2だとうまくいってます。