1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SPReAD-1000 応募者向け】ChatGPT では代替できない科学AI「NatureLM」入門 ― なぜ研究に専用モデルが必要なのか

1
Last updated at Posted at 2026-04-20

はじめに ― この記事の目的

文部科学省が2026年4月に公募を開始した AI for Science 萌芽的挑戦研究創出事業(SPReAD-1000) は、あらゆる分野の研究者がAIを研究プロセスに取り入れることを支援する大規模プログラムです(年間約1,000課題、最大500万円/課題)。

「AIを研究に使いたいけれど、ChatGPT に論文の要約をさせるくらいしか思いつかない…」

そんな研究者の方に向けて、この記事では Microsoft Research が2025年に発表した科学特化AI 「NatureLM」 を紹介します。特に、なぜ ChatGPT や Claude といった汎用AIではなく、科学専用モデルが必要なのかを、AI に詳しくない方にもわかるように解説します。

この記事のポイント

  • ChatGPT/Claude と NatureLM は「そもそも解いている問題が違う」
  • NatureLM は分子・タンパク質・材料・RNA を「生成」できる
  • SPReAD-1000 で AI 活用を考える際の新しい選択肢になる

1. まず知っておきたい ― ChatGPT と科学AIは「別の道具」

1.1 翻訳者 vs. 設計者

ChatGPT や Claude は、いわば 「ものすごく賢い翻訳者・要約者」 です。人間の言葉(自然言語)を理解し、文章を書くことに特化しています。

一方、NatureLM は 「科学の設計者」 です。分子やタンパク質を実際に「生成」し、「設計」できます。

この違いを日常の道具に例えると、次のようになります。

ChatGPT / Claude NatureLM
例えるなら 百科事典+翻訳者 研究室の設計ツール
得意なこと 論文要約、質問応答、文章作成 分子設計、タンパク質生成、材料提案
入力 人間の言葉(テキスト) テキスト + 分子式(SMILES) + アミノ酸配列 等
出力 人間の言葉(テキスト) テキスト + 新しい分子新しいタンパク質配列

1.2 具体例:「この酵素に結合する薬を探して」

ChatGPT に聞いた場合:

「○○酵素の阻害剤としては、文献によると△△や□□が知られています。」

既存の知識を検索・要約 してくれます。新しい分子は作れません。

NatureLM に聞いた場合:

指示: タンパク質 <protein>LALSLTADQ...LDAH</protein> に結合する化合物を生成せよ
応答: <mol>CC1=C(c2cccc(O)c2)C(c2ccc(I)cc2)Oc2ccc(O)cc21</mol>

まだ存在しない新しい分子構造を生成 してくれます。しかもドッキングシミュレーションで結合が確認できるレベルのものです。

ここが決定的な違い
ChatGPT は「知っていることを教える」。NatureLM は「まだ存在しないものを作る」。
研究の最前線で必要なのは、多くの場合、後者です。


2. なぜ ChatGPT/Claude では「科学の設計」ができないのか

2.1 言葉が違う

ChatGPT は「人間の言葉」で訓練されています。日本語、英語、プログラミング言語などです。

しかし、自然科学には 「自然の言語」 とも呼べる独自の表記法があります。

分野 表記法 意味
化学 SMILES CC(=O)OC1=CC=CC=C1C(=O)O アスピリンの分子構造
生物学 FASTA MKTLLILAVL... タンパク質のアミノ酸配列
遺伝学 塩基配列 ATCGATCG... DNA 配列
材料科学 組成+空間群 Sr Sr Nd Bi O <sg14> 結晶材料の組成と対称性

ChatGPT はこれらの表記を 「文字列」としては読める ものの、その 化学的・物理学的な意味を深く理解しているわけではありません。SMILES の C(=O)O が「カルボキシ基」であること、それが分子の溶解性や反応性にどう影響するかまでは、十分に学習していません。

2.2 学習データが違う

ここが最も本質的な違いです。

ChatGPT / Claude NatureLM
主な学習データ Webテキスト、書籍、コード 科学論文 + 分子データベースタンパク質データベース + 材料データベース
分子データ ほぼなし PubChem, ChEMBL 等から数百億トークン
タンパク質データ ほぼなし UniProt 等から数百億トークン
学習の目的 人間の言葉の次の単語を予測 分子の次の原子タンパク質の次のアミノ酸 も予測

ChatGPT は「The cat sat on the ___」の次の単語を予測するように訓練されました。
NatureLM は「CC(=O)O___」の次の原子構造を予測するようにも訓練されています。

この違いが、「生成」できるかどうかを決定的に分けます。

2.3 図解:汎用AI vs. 科学特化AI

ChatGPT / Claude(汎用AI)

項目 内容
入力例 「アスピリンとは何ですか?」
出力例 「アスピリンは解熱鎮痛剤で…」
制約 ⚠️ 新しい分子は生成できない

NatureLM(科学特化AI)

項目 内容
入力例 「この酵素に結合する分子を設計せよ」
出力例 CC1=C(c2cccc(O)c2)...(新規分子を生成!)
強み ✅ 分野を横断して科学的エンティティを生成

3. NatureLM とは何か ― 5分でわかる概要

3.1 一言でいうと

NatureLM は、「自然の言語」(分子・タンパク質・材料・DNA・RNA)を統一的に読み書きできる AI です。

Microsoft Research AI for Science チームが46名体制で開発し、2025年2月に論文(95ページ)を公開しました。

3.2 何ができるのか

あなたの研究分野 NatureLM でできること 具体例
化学・創薬 新しい薬物候補分子の生成 標的タンパク質に結合する分子をゼロから設計
化学・創薬 既存分子の最適化 「この分子の結合親和性を改善して」→ 改良版を提案
化学・創薬 合成経路の予測 目的の分子をどう合成するかを逆算
生命科学 新しいタンパク質の設計 「安定なタンパク質を生成して」→ 新規配列を出力
生命科学 抗体の設計 抗原情報から CDR3 領域を設計
生命科学 ガイドRNA設計 CRISPR-Cas9 用の gRNA を自動設計(精度 95.7%)
材料科学 新材料の組成提案 「体積弾性率400GPaの材料を」→ 新規材料を生成
分野横断 タンパク質→分子 標的タンパク質から薬物候補を直接生成

3.3 モデルのサイズ

NatureLM は用途と計算資源に応じて3つのサイズが用意されています。

モデル パラメータ数 イメージ 用途
NatureLM-1B 10億 ノートPC でも動かせる程度 試験的な利用、教育
NatureLM-8B 80億 GPU 1〜2枚 本格的な研究利用
NatureLM-46.7B 467億 GPU クラスタ 最高精度の設計・生成

46.7B モデルは Mixture of Experts (MoE) という技術を使い、8つの専門家モデル(各70億パラメータ)を組み合わせています。これにより、全パラメータを常時使わなくても高い性能を発揮できます。

「パラメータ」とは?
AIモデルが学習の結果として獲得した「知識の量」を示す数値と考えてください。パラメータが多いほど、より複雑なパターンを学習できます。参考:ChatGPT-3 は1,750億、ChatGPT-4 は推定約1.8兆パラメータと言われています。


4. NatureLM の技術的な仕組み ― もう少し詳しく

4.1 「自然の言語」の統一

NatureLM の最大の革新は、異なる科学分野のデータを「ひとつの言語」として統一した ことです。

従来は、分子用のAI、タンパク質用のAI、材料用のAI… とバラバラに作っていました。

【従来】分野ごとに別々のAI

❌ それぞれのAIは他の分野を理解できない
❌ 「タンパク質に結合する分子を設計」のような分野横断タスクは不可能

【NatureLM】ひとつのAIで全分野をカバー

✅ ひとつのモデルで全分野をカバーし、分野横断も可能!

4.2 学習の3ステップ

NatureLM は以下の3段階で「科学の言語」を習得しています。

ステップ1:大量の科学データを読む(事前学習)

約1,440億トークンの科学データを読み込みます(論文 Table S1)。

データの種類 量の目安 割合
テキスト(論文・一般知識) 約144億トークン 10.0%
タンパク質配列 約652億トークン 45.3%
RNA配列 約275億トークン 19.1%
DNA配列 約198億トークン 13.8%
分野横断データ 約127億トークン 8.8%
小分子(SMILES) 約42億トークン 2.9%
材料データ 約0.2億トークン 0.01%
合計 約1,438億トークン 100%

ステップ2:指示に従う練習(指示チューニング)

「〇〇を生成して」「△△を最適化して」といった指示と、正しい回答のペアを数百万セット学習します。これにより、研究者のテキスト指示を理解して適切な科学的回答を生成できるようになります。

ステップ3:さらに精度を磨く(タスク特化)

特定のタスク(例:薬物の結合親和性最適化)に絞って、さらに精度を高めます。DPO(Direct Preference Optimization)という手法で、良い出力を強化し、悪い出力を抑制します。


5. 実際にどれくらい使えるのか ― ベンチマーク結果

「すごそうだけど、本当に使えるの?」という疑問に答えるため、論文で報告されている性能をいくつか紹介します。

5.1 創薬:タンパク質に結合する分子の生成

AutoDock Vina というドッキングシミュレーションで評価(スコアが低いほど結合が強い):

手法 ドッキングスコア
TargetDiff(従来手法) -6.08
TamGen(従来手法) -6.66
NatureLM (10億パラメータ) -6.80
NatureLM (80億パラメータ) -6.92
NatureLM (467億パラメータ) -6.95

従来手法より良いスコアを達成。大きいモデルほど良い結果になっています。

5.2 材料設計:ダイヤモンド級の硬さの新材料

「体積弾性率400GPa(≒ダイヤモンドの硬さ)の材料を設計せよ」という指示に対して:

NatureLM が提案した材料 DFT計算による実測値 目標値との差
Os₃Re 390 GPa -2.5%
Re₃C 394 GPa -1.5%

→ 目標にきわめて近い値を達成。しかも両方とも 既存のデータベースにない新規材料 でした。

5.3 RNA設計:CRISPR用ガイドRNA

  • CRISPR-Cas9 用ガイドRNA の設計精度:95.7%
  • 生成されたRNAは長さ、ターゲット一致、PAM配列の全基準をクリア

6. 「ChatGPT ではダメなのか?」 ― よくある疑問への回答

Q1. ChatGPT-4 でも SMILES を扱えると聞いたのですが?

A. ChatGPT は SMILES を「文字列として」認識できますが、その化学的意味を深く理解しているわけではありません。例えば:

  • ChatGPT:「CC(=O)O はカルボキシ基です」と説明はできる(知識の検索)
  • NatureLM:「CC(=O)O を含み、かつ標的タンパク質に結合する新しい分子を生成せよ」に対して、化学的に妥当な新規分子を出力できる(生成・設計)

説明できることと、設計できることは別の能力です。

Q2. ChatGPT に「新しい分子を考えて」と頼んだら?

A. ChatGPT は文字列のパターンとしてそれらしい SMILES を出力するかもしれませんが、化学的に妥当であるかどうかは保証されません。NatureLM は分子データベースで徹底的に訓練されているため、合成可能性や薬物らしさ(drug-likeness)まで考慮 した分子を生成します。

Q3. 論文の要約には ChatGPT のほうがいいですよね?

A. はい。論文の要約、文章校正、アイデアのブレインストーミングなど、テキストベースの作業では ChatGPT/Claude が適切 です。NatureLM は「科学的エンティティの生成・設計」に特化しています。使い分けが重要です。

タスク おすすめのAI
論文の要約・翻訳 ChatGPT / Claude
研究計画の壁打ち ChatGPT / Claude
コードの作成 ChatGPT / Claude / Copilot
新しい分子の設計 NatureLM
タンパク質の生成 NatureLM
材料の組成提案 NatureLM
ガイドRNAの設計 NatureLM

Q4. 要するにどう使い分ければいいの?


7. SPReAD-1000 での活用を考えるヒント

文科省 SPReAD-1000 は「AIを研究プロセスに組み込む萌芽的研究」を支援するプログラムです(2026年4月17日〜5月18日公募中、直接経費 最大500万円)。

NatureLM のような科学特化AIは、以下のような研究提案に関連し得ます。

  • 🧪 創薬研究: AI による薬物候補分子の探索・最適化
  • 🧬 タンパク質工学: 機能性タンパク質の計算設計と実験検証
  • 🔩 材料探索: AI による新材料候補の高速スクリーニング
  • 🧬 ゲノム編集: gRNA 設計の自動化・最適化
  • 🔀 分野横断研究: タンパク質→分子など、従来困難だった分野間の橋渡し

SPReAD-1000 の詳細は 文部科学省公式サイト をご確認ください。AI利活用ビギナーも歓迎されています。


8. NatureLM を使ってみよう ― 環境構築ガイド

8.1 NatureLM の利用形態

2026年4月時点で、NatureLM のモデル重みは一般公開されていません。利用するには以下のいずれかのアプローチをとります。

方法 難易度 費用 適したケース
A. Microsoft Foundry でカスタムデプロイ ⭐⭐⭐ 有料(Azure従量課金) 本格的な研究利用
B. 論文の公開コードで再現 ⭐⭐⭐⭐ GPU計算資源が必要 モデルを自前で訓練・改変したい場合
C. API 経由で利用(将来) 未定 Microsoft が API を公開した場合

NatureLM は2026年4月時点で Microsoft Foundry のモデルカタログに公式掲載されていません。今後の公開状況は NatureLM Project Page および Microsoft Research をご確認ください。以下は、モデルが利用可能になった場合の手順を説明しています。

8.2 前提条件

# 必要なもの
- Azure サブスクリプション(無料試用可)
- Azure CLI(az コマンド)
- Node.js 20 以上(MCP サーバー用)
- Python 3.10 以上(モデル推論用)
- GPU 搭載マシンまたは Azure GPU インスタンス

8.3 Azure CLI の初期設定

# 1. Azure CLI インストール(未導入の場合)
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

# 2. Azure にログイン
az login

# 3. ML 拡張機能をインストール
az extension add --name ml

# 4. リソースグループとワークスペースの作成
az group create --name rg-naturelm --location japaneast
az ml workspace create --name ws-naturelm --resource-group rg-naturelm

9. Microsoft Foundry でのデプロイ方法

9.1 全体の流れ

9.2 Step 1:モデルの準備と登録

NatureLM のモデルファイル(重み・トークナイザ・設定ファイル)を Azure ML ワークスペースに登録します。

# モデルディレクトリの構造例
naturelm-8b/
├── config.json            # モデル設定
├── tokenizer.json         # トークナイザ
├── tokenizer_config.json
├── model-00001-of-00004.safetensors  # モデル重み
├── model-00002-of-00004.safetensors
├── model-00003-of-00004.safetensors
└── model-00004-of-00004.safetensors
# Azure ML にモデルを登録
az ml model create \
  --name naturelm-8b \
  --version 1 \
  --path ./naturelm-8b \
  --resource-group rg-naturelm \
  --workspace-name ws-naturelm

9.3 Step 2:推論エンドポイントの作成

# endpoint.yml - エンドポイント定義
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: naturelm-endpoint
auth_mode: key
# deployment.yml - デプロイメント定義
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: naturelm-8b-deploy
endpoint_name: naturelm-endpoint
model: azureml:naturelm-8b:1
instance_type: Standard_NC24ads_A100_v4   # A100 GPU
instance_count: 1
environment:
  image: mcr.microsoft.com/azureml/curated/acpt-pytorch-2.4-cuda12.4:latest
  conda_file: conda.yml
code_configuration:
  code: ./inference
  scoring_script: score.py
request_settings:
  request_timeout_ms: 90000
  max_concurrent_requests_per_instance: 4
# エンドポイントとデプロイメントを作成
az ml online-endpoint create --file endpoint.yml \
  --resource-group rg-naturelm --workspace-name ws-naturelm

az ml online-deployment create --file deployment.yml \
  --resource-group rg-naturelm --workspace-name ws-naturelm

9.4 Step 3:推論スクリプト(score.py)

# inference/score.py
import json
import os
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model = None
tokenizer = None

def init():
    """モデルとトークナイザを読み込む"""
    global model, tokenizer
    model_path = os.environ.get("AZUREML_MODEL_DIR", "./naturelm-8b")
    
    tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
    model = AutoModelForCausalLM.from_pretrained(
        model_path,
        torch_dtype=torch.bfloat16,
        device_map="auto",
        trust_remote_code=True
    )

def run(raw_data):
    """推論リクエストを処理する"""
    data = json.loads(raw_data)
    instruction = data.get("instruction", "")
    max_tokens = data.get("max_tokens", 512)
    temperature = data.get("temperature", 0.7)
    
    # プロンプト構築
    prompt = f"Instruction: {instruction}\nResponse:"
    
    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
    outputs = model.generate(
        **inputs,
        max_new_tokens=max_tokens,
        temperature=temperature,
        do_sample=True,
        top_p=0.95,
    )
    
    response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
    return {"response": response, "model": "naturelm-8b"}

9.5 Step 4:動作確認

# エンドポイントのキーを取得
ENDPOINT_KEY=$(az ml online-endpoint get-credentials \
  --name naturelm-endpoint \
  --resource-group rg-naturelm \
  --workspace-name ws-naturelm \
  --query primaryKey -o tsv)

ENDPOINT_URL=$(az ml online-endpoint show \
  --name naturelm-endpoint \
  --resource-group rg-naturelm \
  --workspace-name ws-naturelm \
  --query scoring_uri -o tsv)

# テストリクエスト:分子生成
curl -X POST "$ENDPOINT_URL" \
  -H "Authorization: Bearer $ENDPOINT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instruction": "Generate a molecule with three hydrogen bond donors",
    "max_tokens": 256,
    "temperature": 0.7
  }'

費用の目安(2026年4月時点)
Standard_NC24ads_A100_v4 インスタンスの場合、1時間あたり約 $3.7〜5.3(リージョンにより異なる。Japan East は約 $5.3)。SPReAD-1000 の直接経費(最大500万円)で十分な計算時間を確保できます。


10. NatureLM MCP サーバーの構築 ― AI コーディングツールから利用する

10.1 なぜ MCP サーバーが必要なのか

MCP(Model Context Protocol)は、AIツールが外部サーバーの機能を呼び出すための標準プロトコルです。NatureLM を MCP サーバーとして公開すると、以下のツールから直接分子設計やタンパク質生成ができるようになります:

ツール MCP 対応 利用シーン
GitHub Copilot(VS Code) .vscode/mcp.json エディタ内で分子設計を対話的に実行
GitHub Copilot CLI ✅ エージェント経由 ターミナルから分子生成をバッチ実行
Claude Code ~/.claude/settings.json Claude との対話中に NatureLM を呼び出し

10.2 アーキテクチャ概要

10.3 MCP サーバーの実装

以下は NatureLM MCP サーバーの実装例です。

プロジェクト構造

naturelm-mcp-server/
├── package.json
├── tsconfig.json
└── src/
    └── index.ts

package.json

{
  "name": "naturelm-mcp-server",
  "version": "1.0.0",
  "type": "module",
  "main": "dist/index.js",
  "bin": { "naturelm-mcp": "./dist/index.js" },
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js"
  },
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.0.0",
    "node-fetch": "^3.3.2"
  },
  "devDependencies": {
    "@types/node": "^20.10.0",
    "typescript": "^5.3.2"
  }
}

src/index.ts(MCP サーバー本体)

#!/usr/bin/env node
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
} from '@modelcontextprotocol/sdk/types.js';

// ---- 設定 ----
const NATURELM_ENDPOINT = process.env.NATURELM_ENDPOINT_URL || '';
const NATURELM_API_KEY = process.env.NATURELM_API_KEY || '';

// ---- NatureLM API 呼び出し ----
async function callNatureLM(
  instruction: string,
  maxTokens = 512,
  temperature = 0.7
): Promise<string> {
  const response = await fetch(NATURELM_ENDPOINT, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${NATURELM_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ instruction, max_tokens: maxTokens, temperature }),
  });

  if (!response.ok) {
    throw new Error(`NatureLM API error: ${response.status}`);
  }
  const data = await response.json() as { response: string };
  return data.response;
}

// ---- MCP サーバー定義 ----
const server = new Server(
  { name: 'naturelm-mcp-server', version: '1.0.0' },
  { capabilities: { tools: {} } }
);

// ツール一覧
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: 'generate_molecule',
      description:
        'テキスト指示から新しい分子(SMILES)を生成します。' +
        '例: 「水素結合ドナーが3つある分子を生成」',
      inputSchema: {
        type: 'object' as const,
        properties: {
          instruction: {
            type: 'string',
            description: '分子生成の指示(日本語または英語)',
          },
          target_protein: {
            type: 'string',
            description: '標的タンパク質配列(任意)',
          },
        },
        required: ['instruction'],
      },
    },
    {
      name: 'design_protein',
      description:
        'テキスト指示から新しいタンパク質配列(FASTA)を生成します。' +
        '例: 「安定な可溶性タンパク質を設計」',
      inputSchema: {
        type: 'object' as const,
        properties: {
          instruction: {
            type: 'string',
            description: 'タンパク質設計の指示',
          },
          binding_target: {
            type: 'string',
            description: '結合標的(分子のSMILESまたはテキスト、任意)',
          },
        },
        required: ['instruction'],
      },
    },
    {
      name: 'design_material',
      description:
        'テキスト指示から新しい材料組成を生成します。' +
        '例: 「体積弾性率400GPaの材料を提案」',
      inputSchema: {
        type: 'object' as const,
        properties: {
          instruction: {
            type: 'string',
            description: '材料設計の指示',
          },
          target_property: {
            type: 'string',
            description: '目標物性(任意)',
          },
        },
        required: ['instruction'],
      },
    },
    {
      name: 'design_rna',
      description:
        'DNA配列からCRISPR-Cas9用ガイドRNAを設計します。',
      inputSchema: {
        type: 'object' as const,
        properties: {
          dna_sequence: {
            type: 'string',
            description: 'ターゲットDNA配列',
          },
        },
        required: ['dna_sequence'],
      },
    },
    {
      name: 'optimize_molecule',
      description:
        '既存分子の特定の性質を最適化した改良版を生成します。' +
        '例: 「結合親和性を改善」「溶解性を向上」',
      inputSchema: {
        type: 'object' as const,
        properties: {
          smiles: {
            type: 'string',
            description: '最適化対象の分子(SMILES形式)',
          },
          optimization_goal: {
            type: 'string',
            description: '最適化目標(例: 結合親和性改善)',
          },
        },
        required: ['smiles', 'optimization_goal'],
      },
    },
  ],
}));

// ツール実行
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  const { name, arguments: args } = request.params;

  try {
    let instruction = '';

    switch (name) {
      case 'generate_molecule': {
        const a = args as { instruction: string; target_protein?: string };
        instruction = a.target_protein
          ? `Produce a compound guided by the target <protein>${a.target_protein}</protein>. ${a.instruction}`
          : `Generate a molecule: ${a.instruction}`;
        break;
      }
      case 'design_protein': {
        const a = args as { instruction: string; binding_target?: string };
        instruction = a.binding_target
          ? `${a.instruction} that binds to <mol>${a.binding_target}</mol>`
          : a.instruction;
        break;
      }
      case 'design_material': {
        const a = args as { instruction: string; target_property?: string };
        instruction = a.target_property
          ? `${a.instruction} with ${a.target_property}`
          : a.instruction;
        break;
      }
      case 'design_rna': {
        const a = args as { dna_sequence: string };
        instruction =
          `Generate a guide RNA for targeting the DNA sequence <dna>${a.dna_sequence}</dna>`;
        break;
      }
      case 'optimize_molecule': {
        const a = args as { smiles: string; optimization_goal: string };
        instruction =
          `${a.optimization_goal} of <mol>${a.smiles}</mol>`;
        break;
      }
      default:
        return {
          content: [{ type: 'text' as const, text: `Unknown tool: ${name}` }],
          isError: true,
        };
    }

    const result = await callNatureLM(instruction);
    return {
      content: [{ type: 'text' as const, text: result }],
    };
  } catch (error) {
    return {
      content: [{
        type: 'text' as const,
        text: `Error: ${error instanceof Error ? error.message : String(error)}`,
      }],
      isError: true,
    };
  }
});

// ---- 起動 ----
async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error('NatureLM MCP Server running on stdio');
}

main().catch(console.error);

10.4 ビルドと動作確認

cd naturelm-mcp-server
npm install
npm run build

# 環境変数を設定
export NATURELM_ENDPOINT_URL="https://<your-endpoint>.japaneast.inference.ml.azure.com/score"
export NATURELM_API_KEY="your-api-key-here"

# 動作確認(JSON-RPC で initialize を送信)
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | node dist/index.js

11. AI コーディングツールへの接続設定

11.1 GitHub Copilot(VS Code)

プロジェクトの .vscode/mcp.json に以下を追加します:

{
  "servers": {
    "naturelm": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/naturelm-mcp-server/dist/index.js"],
      "env": {
        "NATURELM_ENDPOINT_URL": "https://<your-endpoint>.japaneast.inference.ml.azure.com/score",
        "NATURELM_API_KEY": "your-api-key-here"
      }
    }
  }
}

設定後、VS Code を再起動すると Copilot Chat から NatureLM のツールが利用可能になります。

使用例(Copilot Chat):

あなた: @naturelm 標的タンパク質 MKTLLILAVL... に結合する薬物候補分子を3つ生成して

Copilot: generate_molecule ツールを使用します...
         生成された分子:
         1. CC1=C(c2cccc(O)c2)C(c2ccc(I)cc2)...
         2. COc1ccc2c(c1)C(=O)N(CC(=O)O)...
         3. CC(C)Cc1ccc(C(C)C(=O)O)cc1...

11.2 GitHub Copilot CLI

Copilot CLI はワークスペースの .vscode/mcp.json を自動検出するため、上記と同じ設定で利用できます。

ターミナルでの使用例:

# Copilot CLI を起動し、NatureLM ツールを活用
$ copilot "体積弾性率300GPa以上の新しいセラミックス材料を設計して"
# → design_material ツールが呼ばれ、材料組成が提案される

11.3 Claude Code

Claude Code では ~/.claude/settings.json に MCP サーバーを登録します:

{
  "mcpServers": {
    "naturelm": {
      "command": "node",
      "args": ["/path/to/naturelm-mcp-server/dist/index.js"],
      "env": {
        "NATURELM_ENDPOINT_URL": "https://<your-endpoint>.japaneast.inference.ml.azure.com/score",
        "NATURELM_API_KEY": "your-api-key-here"
      }
    }
  }
}

Claude Code での使用例:

あなた: この酵素(配列: DTKEQRILR...EKAIYQGP)に結合する
       分子を設計し、ドッキングスコアを見積もって

Claude: NatureLM の generate_molecule ツールを使って分子を生成します。

        生成結果:
        SMILES: CC1=C(c2cccc(O)c2)C(c2ccc(I)cc2)Oc2ccc(O)cc21
        
        この分子は芳香環を持つビフェニル誘導体で、
        水素結合ドナー/アクセプターのバランスが良く...

11.4 接続設定の早見表

ツール 設定ファイル 設定場所
VS Code Copilot .vscode/mcp.json プロジェクトルート
Copilot CLI .vscode/mcp.json(自動検出) プロジェクトルート
Claude Code ~/.claude/settings.json ホームディレクトリ

11.5 利用可能なツール一覧

MCP サーバーが提供する5つのツール:

ツール名 機能 入力例
generate_molecule テキスト指示から新規分子を生成 「水素結合ドナー4つの分子を生成」
design_protein テキスト指示からタンパク質配列を生成 「安定な可溶性タンパク質を設計」
design_material テキスト指示から材料組成を生成 「体積弾性率400GPaの材料」
design_rna DNA配列からガイドRNAを設計 DNA配列を入力
optimize_molecule 既存分子の性質を最適化 SMILES + 最適化目標

12. まとめ

観点 ChatGPT / Claude NatureLM
本質 言語の AI 科学の AI
できること テキスト生成・要約・翻訳 分子・タンパク質・材料・RNA の生成と設計
学習データ Web テキスト中心 科学論文 + 分子DB + タンパク質DB + 材料DB
科学の理解 表面的(知識として知っている) 構造的(分子構造・配列の意味を理解)
新規性 既存知識の再構成 未知の科学的エンティティの創出
研究での役割 研究の「アシスタント」 研究の「設計パートナー」

ChatGPT と NatureLM は競合するものではなく、研究プロセスの異なるフェーズで使い分けるものです。 文献調査や文章作成は ChatGPT/Claude に、分子や材料の設計は NatureLM に。このように適材適所で AI を活用することが、これからの研究加速の鍵になるでしょう。


参考文献

  1. Yingce Xia, Peiran Jin, Shufang Xie, et al. "Nature Language Model: Deciphering the Language of Nature for Scientific Discovery." arXiv:2502.07527v3, 2025. https://arxiv.org/abs/2502.07527
  2. Microsoft Research. "NatureLM:驱动科学发现与创新的跨领域AI大模型." https://www.microsoft.com/en-us/research/articles/naturelm/
  3. NatureLM Project Page. https://naturelm.github.io/
  4. 文部科学省. "AI for Science 萌芽的挑戦研究創出事業(SPReAD-1000)." https://www.mext.go.jp/aifors_spread/

この記事は Microsoft NatureLM の公開論文・公式サイトの情報に基づいて作成しています。モデルの利用可能性や最新情報は公式サイトをご確認ください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?