[アイデア]化学実験の条件をGPT-4に提案させて、自律的にロボット実験システムを回すためのプロンプトを考える

はじめに

ロボット実験システムが適切に組み上がり、実験実施のコストが十分に下がると、次に行うべき条件を人間ではなくAIが考えたほうが良い、というフェーズに至ります。

夜中の2時(あるいは朝の7時)に、システムから「次に行う反応の条件を考えてください」と尋ねられても、多くの人は困るからです。

対応策として、ベイズ最適化を始めとするブラックボックス最適化のアルゴリズムが注目されています。機械学習の界隈でも、モデルのハイパーパラメータの最適化は、Optunaなどのライブラリで自動化するケースが多々あります。
一方、多くの化学・材料実験は試薬代などのコストが嵩んだり、反応時間の制約があるので、何百、何千回も試行錯誤するのは困難な場合が多いです。そのような文脈においては、物理現象をまじめに考えないブラックボックス最適化は、必ずしもベストな選択肢とは言えない可能性があります。

一方、GPT-4などの大規模言語モデルは、少しは化学的な推論が可能なので、ベターな提案ができる可能性があります。数式ソフトを使ったり、再帰的に呼び出したりすることもできます。つまり、言語モデルには「AIエージェント」としての活躍が見込まれています
(このあたりのアイデアは、論文にまとめています)。

本稿では化学実験を提案させるためのプロンプトを色々と考えてみます。
(ロボット実験を行うための環境を鋭意整備中です。素晴らしいエージェントをお持ちの方は、ぜひともご提供ください)

試行1: とりあえずプロンプトを作ってみる

プロンプト

反応に最適な混合溶媒の種類と比率を探索するタスクを投げてみます。

応答

ChatGPT-4に投げたjobのレスポンスは以下の通り。

from scipy.optimize import minimize

import numpy as np



# 定義済みの実験結果

experiments = {

    (1, 0, 0): '失敗',

    (0.5, 0, 0.5): '成功'

}



# 目的関数:近似的に成功した組成に近づく

def objective(x):

    # xは体積組成を表す

    acetone, dmso, toluene = x



    # 成功した実験との距離を計算

    distances = []

    for composition, result in experiments.items():

        if result == '成功':

            distance = np.sqrt((composition[0] - acetone)**2 + (composition[1] - dmso)**2 + (composition[2] - toluene)**2)

            distances.append(distance)

    

    # 最短距離を返す

    return min(distances)



# 制約:体積組成の合計が1になること

def constraint(x):

    return np.sum(x) - 1



# 初期値:既存の成功した実験に基づいて

initial_guess = [0.5, 0, 0.5]



# 制約条件を設定

con = {'type': 'eq', 'fun': constraint}



# 体積組成の範囲を設定(0から1)

bnds = ((0, 1), (0, 1), (0, 1))



# 最適化を実行

solution = minimize(objective, initial_guess, method='SLSQP', bounds=bnds, constraints=con)

solution.x

結果

array([0.5, 0. , 0.5]

提案された最適な溶媒の体積組成は、(アセトン, DMSO, トルエン) = (0.5, 0.0, 0.5) です。これは既に行われた成功した実験の組成と一致しています。他の組成を探索するためには、さらなる実験データが必要となります。 ​​

考察

GPTに期待していたものは「化学的思考」であり、ソルバーの使用ではありません(ソルバーを使うだけでOKなら、人間がはじめからソルバープログラムを書けば良いだけです)。新しい提案もゼロでした。
回答としては零点です。

試行2: 自分の頭で考えるように指示する

プロンプト

pythonなどのソルバーは使わず、自分で考えろとの指示を追加しました。

回答

なかなか良い感じになりました。
ーーー

化学の領域において、特定の反応のための最適な溶媒の組み合わせを探るには、多くの要素を考慮に入れる必要があります。提供された情報を基に、アセトン、クロロホルム、DMSO、トルエンの組み合わせを考えてみましょう。以下のステップで進めます。

ステップ 1: 候補溶媒の特性を考慮する

  • アセトン: 極性が強く、多くの有機化合物と混和性があります。

  • クロロホルム: 中程度の極性を持ち、有機化合物の溶解に良く用いられます。

  • DMSO (ジメチルスルホキシド): 非常に極性が高く、多くの化合物を溶かす能力があります。

  • トルエン: 非極性溶媒で、有機化合物の溶解に適しています。

ステップ 2: 実験結果の分析

  • 失敗: (アセトン, DMSO, トルエン) = (1, 0, 0)

  • 成功: (アセトン, DMSO, トルエン) = (0.5, 0, 0.5)

ステップ 3: 溶媒の組み合わせの提案

  1. 成功例におけるアセトンとトルエンの比率は1:1です。これは、極性と非極性のバランスが重要であることを示唆しています。

  2. DMSOは極性が高く、これまでの実験では使用されていませんが、極性のバランスを取るために少量加えることを検討できます。

  3. クロロホルムは中程度の極性を持ち、アセトンやトルエンとの組み合わせで効果が期待できるかもしれません。

提案する溶媒の体積組成

  • 提案 1: (アセトン, DMSO, トルエン) = (0.4, 0.2, 0.4)

  • 提案 2: (アセトン, クロロホルム, トルエン) = (0.3, 0.4, 0.3)

これらの提案は、既存の実験結果と溶媒の特性に基づいていますが、実際の重合反応の性質によって最適な組み合わせは異なる可能性があります。したがって、これらの提案は実験的に検証する必要があります。

考察

それっぽい提案が出てきました。いい感じです。

まとめ

プロンプトを工夫すれば、わりと化学者に近い提案ができそうなことがわかりました。
一方、論文で試した類似タスクでは、試行錯誤が進むにつれ、数という概念の本質を理解していないと思われる回答を繰り返す、などの回答も目立ちました。このあたりのチューニングや、場合によってはブラックボックス最適化アルゴリズムとの併用が必要になると思います。

また、今回はchatGPTで試しましたが、エージェント動作に特化したAutoGPTやLangchainも試してみたいところです。

ここで行っている作業は、「いかに短いプロンプトを用いて、汎用性高い自律型アルゴリズムを作るか」という、ある種の汎用人工知能に近い研究です。まさにGPT-4以降の醍醐味とも言える内容で、魅力あるテーマに映ります。

コンピューター内で完結するモデルタスクを準備した上で、優れた動作を示すエージェントの作成大会みたいなのを開催できたら楽しそうです。
選抜モデルについては、実際のロボットシステムで動かしてみるなどの試みもあればワクワクします。
このあたりは、環境整備に向けて色々と構想中です。

この記事が気に入ったらサポートをしてみませんか?