📚

The AI Scientist v2へのOllama実装記録

に公開

概要

近年、研究プロセスの自動化にAIを用いる試みが注目を集めている。2024年9月に発表された The AI Scientist は、研究のアイデア生成から論文執筆までを自律的に行う「AI研究者」の概念を実証した画期的なモデルである。しかし、その設計はテンプレート構造に依存しており、柔軟な拡張やローカル環境への適用が難しいという制約があった。

その発展版として登場した The AI Scientist v2 は、研究アイディアの創出・実験・論文作成の各フェーズを統合的に扱うことが可能となり、真の意味での「AIによる科学研究自動化」に近づいた。しかし、公開レポジトリ においては、ローカル大規模言語モデル(LLM)を活用する実装が未整備であり、機密性の高い研究データを扱う環境では実用が難しい。

本稿では、この問題を解決するために Ollama を用いたローカルLLM実行環境を The AI Scientist v2 に統合する実装を紹介し、その構成・モデル選定・テストケースを詳細に解説する。これにより、インターネット接続を必要としないローカル環境での研究プロセス自動化が可能となり、産業・学術の両面で安全かつ柔軟なAI研究支援の実現が期待される。


The AI Scientist v2 の概要

The AI Scientist v2 は大きく以下の2つのアプリケーションで構成される。

  • 研究アイディア創出アプリ
    Markdown形式で記述された研究ノートを入力とし、Semantic Scholar API を用いて関連研究を検索・要約する。その上で既存研究との差分を解析し、新たな研究アイディアを生成する。

  • 実験・論文執筆アプリ
    生成された研究アイディアをもとに実験設計、コード生成、結果解析、論文草稿作成までを自動で行う。
    実験は以下の4つのフェーズを通じて進行し、各フェーズ内の候補(ノード)をAIが評価しながら木構造的に展開していく。


実験フロー

1. 最小プロトタイプ作成フェーズ

実験の基本構造を形成する段階であり、最小限のコードを生成・実行し、エラーなく動作することを確認する。
生成された複数のノードのうち、エラーがなく性能が安定しているものを「親ノード」として次のフェーズに引き継ぐ。

2. ハイパーパラメータチューニングフェーズ

前フェーズのプロトタイプを基に、ハイパーパラメータを自動探索し、性能指標(例:精度、R²、RMSE)を最大化する設定を探索する。
AIは試行ごとに改善されたノードを記録し、最適なパラメータセットを抽出する。

3. アイディア実装フェーズ

モデル構造やアルゴリズムの改良を中心に、実験の中核部分を拡張・改善する。
生成モデル(LLM)がコード・実験設計・可視化スクリプトを統合的に生成し、最も有望なバリエーションを探索する。

4. 不要要素削除フェーズ

過学習を防ぐため、不要なハイパーパラメータ・補助関数・ログ処理を削除し、実験の再現性と効率性を高める最終段階である。
この段階で得られた最適ノードが最終実験結果および論文作成プロセスに引き継がれる。

本解説では簡単のため細かい実装やプロンプト等の解説を省略した。
詳しい解説を望む場合はash氏の以下の記事を参照されたい。

https://zenn.dev/ash_vhatch/articles/9528020702bfca


Ollama 実装

本研究では、The AI Scientist v2 の全フェーズを Ollama 経由で動作させるように再設計した。
現行バージョンでは後述のsummaryとselect_nodeの部分においてモデルを選択することができず、常にgpt4oが呼ばれていた。
そのためconfigファイルに対応するモデルを設定できるように変更した。
Ollama はローカル環境で軽量にLLM/VLMを実行可能とする仕組みを提供し、以下の利点がある。

  • オフライン環境での実験実行が可能
  • APIコストが不要で、学術・企業内環境で安全に運用できる
  • モデル切り替えが容易で、コード変更なしに多様なLLMを試せる

具体的には launch_scientist_bfts.py および perform_ideation_temp_free.py 内の openai モジュール呼び出しをOllama APIに置換し、
--model, --model_writeup, --model_citation 等の引数で ollama/<model_name> を指定可能にした。


モデル選定指針

Ollama対応モデルのベストケースを以下に示す
以下のテーブルはbtfs_config.yamlに定義された設定変数とai_scientist/perform_ideation_temp_free.py, launch_scientist_bfts.pyのフラグである。
ベストケースを探すうえで発生したエラーや問題手は後述する。

flagまたはconfig名 タスク 採用理由 推奨モデル
--model アイディア創出 論文検索APIと出力フォーマットの順守能力 qwen3:8b
code 実験方針作製及びコーディング 実験方針にあったコードの生成とバグの少ないコーディング qwen2.5vl:32b
feedback 実行コード結果のフィードバック 適切なフォーマットでの出力能力 qwen3:8b
vlm_feedback 実験で生成された画像の評価 画像処理とツール利用の両方が可能なモデルの内もっともメジャーだったため z-uo/qwen2.5vl_tools:32b
summary 各実験ノードの要約 適切なフォーマットでの出力能力 qwen3:8b
select_node 次の実験の親ノードの選択 適切なフォーマットでの出力能力 qwen3:8b
--model_writeup 論文用texの生成 texの出力の途中で出力を停止しない能力 deepseek-r1:32b
--model_citation 論文用の引用文献調査 優れた推論能力 gpt-oss:120b
--model_review 論文用画像のキャプション生成 優れた画像処理能力 qwen2.5vl:32b
--model_agg_plots 実験データから論文用画像の生成 実験データのパスを正しく特定する能力 deepseek-r1:70b

エラーケース

以下モデルを選択するうえで発生したエラーケースとそこから得られるモデル毎の特性について述べる。
以下のテーブルはbtfs_config.yamlに定義された設定変数とai_scientist/perform_ideation_temp_free.py, launch_scientist_bfts.pyのフラグである。

flagまたはconfig名 試行したモデル 拒否事由
--model gpt-oss:120b, gpt-oss:20b, qwen3:32b, deepseek-r1:70b 論文検索API並びに生成終了用のJSON応答に細かなミスが発生しプロセスが中断。本プログラムでは、LLMの出力を適切にJSONに変換できない場合は試行プロセスを打ち切って次の試行を最初から開始するため、LLMにエラーの原因を伝えることができない。結果アイディアの生成を成功させることができなかった。
code gpt-oss:120b, deepseek-r1:70b コード自体は生成できたものの、複雑なアイディア実装においてしばしばアイディアとは関係のないコードを実装した。codeモデルは実験計画の策定及び実行を行うが、エラーが頻発するようなノードは途中で破棄してしまう。そのため実装が難しい実験よりも間違っているが実装が簡単な実験が採択されやすい。結果間違った方針の研究コードのみ残りそれが最終成果物となってしまった。
feedback gpt-oss:120b 出力プロセスにおけるJSON応答に細かなミスが発生しプロセスが中断。 実験ノードの失敗事由を不明にさせることにより実験の進行を不安定にした
summary gpt-oss:120b 出力プロセスにおける指定フォーマット出力に細かなミスが発生し実験が失敗として記録される。 実験ノードの結果を出力しないことにより正常なノードが見つけられずプログラムが停止
select_node gpt-oss:120b 出力プロセスにおけるJSON応答に細かなミスが発生しプロセスが中断。 所定の回数同じプロンプトでJSON応答が受け取れるかプログラムが検証するが、受け取れないことがわかると機械的に評価指標が最も良いものを選択する。最悪ケースでは実行可能な最終実験ノードを選択できずプログラムが停止した。
--model_writeup gpt-oss:120b, qwen3:32b, qwen2.5vl:32b 論文用のtexの生成途中でモデルが最後まで書ききらずに中断。本プログラム内では、texのコンパイルに失敗した場合論文用の引用文献を探すフェーズから再試行するため、途中まで書かれたtexファイルは破棄されてもう一度途中までのtexを生成するのを繰り返した。結果論文が生成されずプログラムが停止
--model_agg_plots gpt-oss:120b, qwen3:32b, qwen2.5vl:32b 実験データファイルのパスを特定できず画像生成に失敗、もしくは空の画像を生成。所定回数内にバグの改善ができずにプログラムが停止した。本プログラムでは実験とその実験のデータが入っているパスがルールによって決まっており、モデルはそのルールに従ってパスを類推するがその類推が前述したモデルでは間違ったものを生成し失敗してしまった。

以上の結果から以下の傾向が読み取れる

  • gpt-ossシリーズは出力フォーマットの遵守や長大なプロンプトの中で重要な概念を保持し続けることに難点がある。
  • 全体的に大きなモデルほどプロンプトが長くなるにつれて出力フォーマットを守ることが難しくなる。
  • texファイルの出力においては\end等tex固有の表現を出力停止と勘違いして止まる傾向があった。この傾向は推論モデルでは弱まった。
  • qwen2.5vlはプロンプトが長くなっても最初に言った内容を覚え続けることが得意であった。
  • deepseek-r1は長大なコンテキストの中でも必要な情報を推論することにたけていた
  • qwen3はプロンプトの指令を忠実に守ることにたけていた

テストケース

実験では以下の条件で動作検証を行った。

研究アイディア創出アプリ

  • 実行コマンド
    OLLAMA_CONTEXT_LENGTH=128000 ollama serve
    python ai_scientist/perform_ideation_temp_free.py \
        --workshop-file "ai_scientist/ideas/i_cant_believe_its_not_better.md" \
        --model ollama/qwen3:8b \
        --max-num-generations 20 \
        --num-reflections 5
    

結果
プロセスが順次実行され、全体フローの中断は発生しなかった
20個のアイディア生成の内、出力のJSONの形を保持できた14個がアイディア集として保存された。

実験・論文執筆アプリ

  • 実行コマンド
    OLLAMA_CONTEXT_LENGTH=128000 ollama serve
    python ai_scientist/perform_ideation_temp_free.py \
      --workshop-file "ai_scientist/ideas/i_cant_believe_its_not_better.md" \
      --writeup-type normal \
      --load_ideas "ai_scientist/ideas/i_cant_believe_its_not_better.json" \
      --model_writeup ollama/deepseek-r1:32b \
      --model_writeup_small ollama/qwen2.5vl:32b \
      --model_citation ollama/gpt-oss:120b \
      --model_review  ollama/qwen2.5vl:32b \
      --model_agg_plots ollama/deepseek-r1:70b \
      --model_agg_plots_ref 20 \
      --num_cite_rounds 20 
    
    

結果
サンプルのアイディアから各フェーズが順次実行され、全体フローの中断は発生しなかった。
生成された論文の質の比較のためOPENAI APIを使用して作成したものもこのブログにて公開する

  • OpenAI APIにて作成





  • Ollamaを使用してローカルモデルのみで作成


全体として同程度の質の論文の作成ができたことが確認できる。

今後の展望

本研究にてollamaをThe AI Scientist v2に実装することができた。
将来的にこのアプリケーションを用いて研究を行うには以下の障壁が考えられる。

モデル改善以外のタスクに対する適応度の低さ

本アプリは特に機械学習モデルの訓練に関する研究に重きを置いている。
そのため機械学習モデルの訓練から少し外れた研究に対して脆弱であり、特にHugging Faceで一般的でないデータセットにアクセスする際に存在しないデータセット名を指名してエラーを起こしてしまう。

また、Hugging Faceにベンチマークが公開されていないタスクには適応できない等の問題も残っている。

今後の展望として、適切なデータセットにアクセスできるよう取り込むコードやアイディアにプロンプトエンジニアリングを行いたい

機密データにアクセスするうえでのプロンプトの問題

本アプリはHugging Faceにてデータを取得して研究を行うことを想定されている。
そのためコードを外部から取り込む機能やHugging Faceの情報源を指定する機能はあるが、ローカルの機密データにアクセスする方法が存在していない。

コードを外部から取り込む機能を使って機密データのパスを指定する試みを何度も試したが途中でCode用AIがHugging Faceのデータにアクセスしようと試みてしまいすべて失敗した。

機密データで研究できるよう取り込むコードやアイディアにプロンプトエンジニアリングしたが、結果は同じであった。

今後の展望として内部プロンプトを変更して機密データにもアクセスできるように変更できるようにすることを考えている。

結語

本稿では、The AI Scientist v2 に対して Ollama を統合し、ローカルLLMによる完全自律研究プロセスを実現する実装を紹介した。本改良により、機密データを含む実験・論文生成をクラウド依存なしで実行できる環境が整備され、AIによる研究自動化の応用範囲は大幅に拡大する。

今後は、Ollama上でモデルを動かせることを生かし、別分野への適応や機密データへの適応等の応用を進めていきたい

データ利用

本研究で実装したプログラムは以下のリンクにて公開している。
https://github.com/kotama7/AI-Scientist-v2/tree/main


Discussion