OpenClawに分子シミュレーションをやらせる実験 Part.2

生成AI

Part.1の続きをやります。

スポンサーリンク

計算ジョブ管理の工夫

前回、トークン節約のためにバックグラウンド実行を徹底させた結果、AIがプロセスの終了を認識できず、プロセス終了後の次のアクションに移れませんでした。これを何とかしないといけません。
そこで、計算のシェルスクリプト内でOpenClawへの通知を行うことにします。

(私)今後の計算タスクは基本的にシェルスクリプトに実行内容を書いて実行することにします。シェルスクリプト内では、計算コマンドの後に
openclaw system event --text "<タスク名> が完了しました" --mode now
を実行し、エージェントが計算完了を検知して次の行動を開始できるようにしてください。この計算実行方法をルール化してください。

(AI)承知いたしました。その計算タスクの実行フローをルールとして採用し 、今後はその形式で運用します。
ご指示いただいた計算タスクのルールを AGENTS.md に追記し、今後の指針としました。
### 実行ルール: 計算タスクの自動検知フロー
1. 計算タスクはシェルスクリプト(.sh)として作成する。
2. スクリプトの最終行に以下を記述する。
openclaw system event –text “<タスク名> が完了しました” –mode now
3. これにより、エージェント側でイベントを検知し、自動的に次のステッ プへ移行する。

これで進めてよろしいでしょうか?何か特定の計算タスクを今から実行 したい場合は、スクリプトの作成をお手伝いします。

「それでOKです」みたいに送信すればルール化が完了します。

注意点

このsystem event方式ですが、内部ではイベントの通知を処理できているようなのですが、TUIは表示の同期が上手くいっていないようで、TUIチャット画面に通知が出てきませんでした。/quitしてopenclaw tuiを開き直すとsystem event通知が表示されるのですが、この使い方は不便かもしれません。SlackやDiscordチャンネルで動かす場合は、ちゃんとリアルタイムで通知が表示されるはずです。

スポンサーリンク

本格的な計算タスクを与えてみる

事前にカーボンナノチューブのモデル作成プログラムとLAMMPS inファイルを用意しておいたので、それを与えて計算をやらせてみます。(用意しないで始めてもいいのですが、ちゃんと動くものやたたき台をユーザ側で用意しておくことでAIがスムーズに仕事を開始できます)

(私)カーボンナノチューブのカイラリティ(10, 0)と(10, 10)で引張強度特性を比較してレポートをまとめてください。
モデリングにはPythonのASEを使用し、計算にはLAMMPSを使用してください。
PythonコードとLAMMPS inファイルは次のものを参考にしてください。

import os
from ase.build import nanotube
from ase.io.lammpsdata import write_lammps_data
from ase.io import write
import matplotlib.pyplot as plt

def generate_cnt(n, m, length_units=20, vacuum=10.0):
    cnt = nanotube(n, m, length=length_units)
    cnt.center(vacuum=vacuum, axis=(0, 1))
    data_filename = f"cnt_{n}_{m}.data"
    write_lammps_data(data_filename, cnt, atom_style='atomic', masses=True)
    print(f"Generated {data_filename} (length_units={length_units})")

if name == "main":
    generate_cnt(10, 0, length_units=20)
    generate_cnt(10, 10, length_units=20)
units metal
atom_style atomic
boundary p p p

read_data cnt_10_10.data

pair_style airebo 3.0 1 1
pair_coeff * * CH.airebo C

mass 1 12.011

velocity all create 300.0 12345

thermo 10
run 100

計算条件はお任せします。
計算ステップ数、時間刻み幅、ひずみ速度など、試行錯誤をしながら最適な計算条件を見つけてください。
まずは進め方の計画を立ててください。

これでそれっぽい計画を立ててくれるので、チャットを通してその計画をブラッシュアップしていきます。計画が良くなったら「それで進めてください」と言った感じでメッセージを送ります。

これで動いてくれたらいいんですが、
「実行ファイルが見つからない」
「pipを動かしたい」
「この方針で進めていいか?」
とか言ってくるので、「昨日インストールしただろPATH通しておけよ」とか「いいよ」とか適当に返してあげてください。

これでユーザの手を離れて自律的に動いてくれたらいいんですが、思い通りに動いていないことも多いです。別ターミナルでtopを見たり作業ディレクトリのログをtailしたりして見守りましょう。

AIにアドバイスしておくといいこと

いろいろ試しましたが、完全自動で最後まで完走させるのは難しそうです。次のようなメッセージを送ってあげるとある程度は改善できました。

  • 計算結果をフィードバックして自律的に計算を進めてください。
  • 計算ごとにフォルダを分けて、失敗したデータも残しておいてください。
  • CPUコアが〇コア使えるので、同時実行するジョブの数や並列計算効率を考えて進めてください。
  • 一定間隔でロードアベレージや計算プロセスを確認し、動いているべき計算が止まっていたら、条件を修正して再計算を実行してください。
  • 定期的にDiscord(Slackなどでもいい)で状況を報告してください。
スポンサーリンク

結果

途中でいろいろチャットで指示を出したり雑談を始めたりしながら、最終的に次のように結果が表示されました。

というわけで、一応それらしい結果が出たので成功です。

結果の精度はあまりよくないようですが、そこはチャットで

(私)結果の精度が悪いので、もっと良くなるような対策を考えて再計算して。

のようにメッセージを送信すれば計算をやり直してくれるはずです。

スポンサーリンク

まとめ

OpenClawで自律的にMD計算をやらせる実験は、まあまあ成功したと言えるのではないでしょうか。
openclaw system event –text “<タスク名> が完了しました” –mode now
をシェルスクリプトに書かせることで、計算タスクの終了をエージェントに通知して、次のアクションを実行させることができる、結構いい方法だと思います。

コメント

タイトルとURLをコピーしました