夜雨聆风学习资料网

ARTICLE · 1116962

PyTorch深度学习基础(五十五):AI科研助手实战——接入 Davis/KIBA + ESM-2 + GNN + Transformer

PyTorch深度学习基础(五十五):AI科研助手实战——接入 Davis/KIBA + ESM-2 + GNN + Transformer

从“会聊天的科研助手”,进一步升级为“能够真正做实验的 AI 科研助手”。

上一篇我们完成了:

Vue3 + FastAPI + RAG + Agent + MCP

构建了一个 AI 科研助手 Web 平台。

但是,一个真正面向生物信息学研究的科研助手,仅仅能够:

  • 搜索论文
  • 阅读 PDF
  • 总结文献
  • 查询知识库
  • 生成实验方案

还远远不够。

对于 DTI/DTA(Drug-Target Interaction / Drug-Target Affinity) 研究来说,我们真正希望 AI 助手能够进一步完成:

读取 Davis / KIBA        ↓药物分子预处理        ↓蛋白质序列预处理        ↓ESM-2 提取蛋白质表示        ↓GNN 提取药物图表示        ↓Transformer 建模药物-蛋白交互        ↓训练 DTA 模型        ↓预测 Binding Affinity        ↓计算 CI / RMSE / MSE        ↓绘制训练曲线        ↓保存实验结果        ↓AI 自动分析实验结果        ↓生成科研报告

这意味着:

AI Agent 不再只是“告诉你怎么做”,而是可以调用真正的科研工具完成实验。

这就是本篇的核心。


一、从普通 AI 助手到 AI 科研实验助手

传统 ChatGPT 类科研助手:

用户 ↓LLM ↓回答问题

RAG 科研助手:

用户 ↓LLM ↓检索论文 ↓生成答案

Agent 科研助手:

用户 ↓Agent ↓选择 Tool ↓调用工具 ↓获得结果 ↓LLM分析

而我们现在进一步构建:

                    ┌──────────────┐                    │   用户问题    │                    └──────┬───────┘                           ↓                    ┌──────────────┐                    │ Research     │                    │ Agent        │                    └──────┬───────┘                           ↓                ┌──────────┴──────────┐                ↓                     ↓          MCP科研工具             RAG知识库                ↓                     ↓       ┌────────┼────────┐            │       ↓        ↓        ↓            ↓    Davis     ESM-2     GNN       论文/文献    KIBA      Protein   Drug                ↓           Transformer                ↓             DTA模型                ↓        ┌───────┴────────┐        ↓                ↓      Prediction       Evaluation        ↓                ↓     Affinity       CI/RMSE/MSE        └────────┬───────┘                 ↓           AI实验分析                 ↓             科研报告

这已经接近一个真正的:

AI Bioinformatics Research Assistant


二、为什么选择 Davis 和 KIBA?

在 DTA 研究中,Davis 和 KIBA 是非常经典的数据集。

我们可以把它们理解成两个核心实验环境。

2.1 Davis

Davis 数据集主要用于研究:

药物与蛋白质之间的结合亲和力。

数据可以抽象成:

DrugProteinAffinity

例如:

Drug AProtein XAffinity = 7.52

模型需要学习:

Drug + Protein → Binding Affinity

三、KIBA 数据集

KIBA 同样用于药物-靶标亲和力预测。

与 Davis 类似,可以表示为:

DrugProteinAffinity

因此我们可以建立统一的数据接口:

classDTADataset:defload(self):passdefpreprocess_drug(self):passdefpreprocess_protein(self):passdefget_pair(self):pass

最终无论使用 Davis:

dataset = DTADataset("Davis")

还是 KIBA:

dataset = DTADataset("KIBA")

模型接口都保持一致。


四、整个 AI 科研助手项目架构

我们把上一篇 Web 系统进一步扩展。

推荐目录:

ai-research-assistant/│├── backend/│   ├── main.py│   ││   ├── agent/│   │   ├── research_agent.py│   │   └── prompts.py│   ││   ├── mcp/│   │   ├── server.py│   │   ├── dataset_tools.py│   │   ├── esm_tools.py│   │   ├── gnn_tools.py│   │   ├── train_tools.py│   │   └── report_tools.py│   ││   ├── rag/│   │   ├── retriever.py│   │   └── vector_store.py│   ││   └── api/│       ├── chat.py│       ├── dataset.py│       └── experiment.py│├── research/│   ││   ├── datasets/│   │   ├── davis/│   │   └── kiba/│   ││   ├── preprocessing/│   │   ├── drug.py│   │   └── protein.py│   ││   ├── esm/│   │   └── esm2_encoder.py│   ││   ├── gnn/│   │   └── drug_gnn.py│   ││   ├── transformer/│   │   └── interaction_transformer.py│   ││   ├── models/│   │   └── dta_model.py│   ││   ├── train.py│   ├── evaluate.py│   └── predict.py│├── experiments/│   ├── logs/│   ├── checkpoints/│   ├── figures/│   └── reports/│├── frontend/│   └── Vue3│└── README.md

整个项目实际上可以分成三层:

┌──────────────────────────────┐│       AI科研助手 Web层        ││       Vue3 + FastAPI         │└──────────────┬───────────────┘               ↓┌──────────────────────────────┐│          Agent层              ││     LLM + RAG + MCP          │└──────────────┬───────────────┘               ↓┌──────────────────────────────┐│        Research Engine       ││                              ││ Davis/KIBA                   ││ ESM-2                        ││ GNN                          ││ Transformer                  ││ DTA                          │└──────────────────────────────┘

五、第一步:Davis/KIBA 数据模块

首先建立统一的数据接口。

classDTADataset:def__init__(self, name):        self.name = namedefload(self):if self.name.lower() == "davis":return self.load_davis()if self.name.lower() == "kiba":return self.load_kiba()raise ValueError(f"Unknown dataset: {self.name}"        )

然后分别实现:

defload_davis(self):    data = ...return data

以及:

defload_kiba(self):    data = ...return data

这样 Agent 就可以统一调用:

dataset = DTADataset("Davis")data = dataset.load()

六、DTA 数据的基本形式

可以将每一个样本抽象成:

{"drug": drug,"protein": protein,"affinity": affinity}

例如:

sample = {"drug": "CCOc1ccc2nc(S(N)(=O)=O)sc2c1","protein": "MSTNPKPQRKTKRNTNRRPQDVKFPGGG...","affinity": 7.42}

因此:

Drug ↓SMILES ↓Molecular GraphProtein ↓Amino Acid Sequence ↓ESM-2 Embedding

最终:

Drug Graph      ↓     GNN      ↓Drug RepresentationProtein Sequence      ↓    ESM-2      ↓Protein Representation

七、第二步:药物分子图

药物可以使用 SMILES 表示:

SMILES

但是神经网络无法直接理解:

CCO

因此需要将药物转换为图:

G = (V, E)

其中:

  • V:Atom
  • E:Bond

例如:

      O      |C ─── C

可以表示:

Node:Atom featuresEdge:Bond information

八、使用 RDKit 构建药物图

典型代码:

from rdkit import Chemdefsmiles_to_graph(smiles):    mol = Chem.MolFromSmiles(smiles)    atoms = []for atom in mol.GetAtoms():        atoms.append([            atom.GetAtomicNum(),            atom.GetDegree(),            atom.GetFormalCharge(),            atom.GetIsAromatic()        ])    edges = []for bond in mol.GetBonds():        i = bond.GetBeginAtomIdx()        j = bond.GetEndAtomIdx()        edges.append((i, j))        edges.append((j, i))return atoms, edges

于是:

SMILES ↓RDKit ↓Molecular Graph ↓GNN

九、第三步:使用 ESM-2 表示蛋白质

这是整个系统的重要升级。

传统方法可能使用:

One-hot

或者:

Embedding

但是现代蛋白质建模中,我们可以利用蛋白质语言模型:

ESM-2

其核心思想与自然语言模型非常类似。

自然语言:

The cat is sitting on the ...

蛋白质:

M K L A V L G A ...

模型通过大量蛋白质序列学习:

Amino Acid ↓Context ↓Protein Representation

十、ESM-2 的输入

例如蛋白质:

MKTLLLTLVVVTIVCLDLGY

经过 tokenizer:

[M, K, T, L, L, L, T, L, V, ...]

然后输入 ESM-2:

Protein Sequence       ↓Tokenizer       ↓ESM-2       ↓Hidden States

假设:

hidden_states.shape

得到:

[batch_size, sequence_length, hidden_dim]

这就是:

残基级 Protein Representation


十一、ESM-2 Encoder

可以封装:

classESM2Encoder:def__init__(        self,        model,        tokenizer    ):        self.model = model        self.tokenizer = tokenizerdefencode(self, sequence):        inputs = self.tokenizer(            sequence,            return_tensors="pt"        )        outputs = self.model(            **inputs        )return outputs.last_hidden_state

得到:

Protein ↓ESM-2 ↓Residue Embeddings

例如:

Protein length = 350Embedding:350 × 1280

具体维度取决于所使用的 ESM-2 模型配置。


十二、为什么使用残基级表示?

这是 DTA 研究非常重要的一点。

如果我们直接:

Protein ↓ESM-2 ↓一个向量

虽然简单,但是会丢失大量局部信息。

例如:

Protein ↓Residue 1Residue 2Residue 3...Residue N

每个 residue 都具有自己的表示。

因此:

Protein ↓ESM-2 ↓R1 R2 R3 ... RN

后面可以进一步让药物原子与蛋白质残基发生交互。

这就为:

Atom–Residue Cross Attention / Graph Cross Attention

奠定基础。


十三、第四步:GNN 提取药物表示

药物图:

G = (V, E)

输入:

Node FeaturesEdge Index

经过 GNN:

Drug Graph    ↓GCN / GAT / GIN    ↓Atom Embeddings

例如:

classDrugGNN(nn.Module):def__init__(        self,        input_dim,        hidden_dim    ):        super().__init__()        self.conv1 = GCNConv(            input_dim,            hidden_dim        )        self.conv2 = GCNConv(            hidden_dim,            hidden_dim        )defforward(        self,        x,        edge_index    ):        x = self.conv1(            x,            edge_index        )        x = F.relu(x)        x = self.conv2(            x,            edge_index        )return x

输出:

Atom Embeddings

十四、Drug Graph + Protein ESM-2

现在我们已经得到:

DrugSMILES ↓RDKit ↓Molecular Graph ↓GNN ↓Atom Embeddings

以及:

ProteinSequence ↓ESM-2 ↓Residue Embeddings

因此:

Drug:A1 A2 A3 ... ANProtein:R1 R2 R3 ... RM

下一步就是:

让 Atom 与 Residue 发生交互。


十五、第五步:Transformer 建模 Drug-Protein Interaction

这是整个模型最核心的地方。

假设:

Drug representation:A ∈ R^(N × d)Protein representation:P ∈ R^(M × d)

我们可以构造:

Q = AK = PV = P

然后进行 Cross Attention:

Attention(Q,K,V)=softmax(QKᵀ / √d)V

也就是:

Drug Atoms     ↓     QProtein Residues     ↓    K,V        ↓Cross Attention        ↓Drug-conditioned Protein Representation

十六、Atom–Residue Attention

例如:

classCrossAttention(nn.Module):def__init__(        self,        dim,        heads=8    ):        super().__init__()        self.attention = nn.MultiheadAttention(            embed_dim=dim,            num_heads=heads,            batch_first=True        )defforward(        self,        drug,        protein    ):        output, weights = self.attention(            query=drug,            key=protein,            value=protein        )return output, weights

输入:

drug:[B, N_atom, D]protein:[B, N_residue, D]

输出:

interaction:[B, N_atom, D]

同时得到:

attention weights

可以进一步用于:

解释药物原子与蛋白质残基之间的潜在交互关系。


十七、为什么 Transformer 很适合 DTA?

传统 CNN:

局部窗口

RNN:

序列依赖

Transformer:

全局依赖

在 DTA 中,我们需要考虑:

Drug Atom 1      ↓Protein Residue 25Drug Atom 5      ↓Protein Residue 83Drug Atom 12      ↓Protein Residue 210

因此 Transformer 可以直接建立:

Atom ↔ Residue

之间的关联。


十八、完整 DTA 模型

现在可以把整个模型连接起来:

              Drug               │             SMILES               │             RDKit               │        Molecular Graph               │              GNN               │        Atom Embeddings               │               ├─────────────┐               │             │               ↓             │        Cross Attention      │               ↑             │               │             │       Protein Sequence      │               │             │             ESM-2           │               │             │       Residue Embeddings    │               │             │               └─────────────┘                       ↓                  Transformer                       ↓              Interaction Feature                       ↓                 MLP / Head                       ↓               Binding Affinity

十九、DTA Model

可以设计成:

classDTAModel(nn.Module):def__init__(        self,        drug_dim,        protein_dim,        hidden_dim    ):        super().__init__()        self.drug_proj = nn.Linear(            drug_dim,            hidden_dim        )        self.protein_proj = nn.Linear(            protein_dim,            hidden_dim        )        self.cross_attention = CrossAttention(            hidden_dim        )        self.regressor = nn.Sequential(            nn.Linear(                hidden_dim,                hidden_dim            ),            nn.ReLU(),            nn.Dropout(0.2),            nn.Linear(                hidden_dim,1            )        )defforward(        self,        drug,        protein    ):        drug = self.drug_proj(drug)        protein = self.protein_proj(            protein        )        interaction, attention = \            self.cross_attention(                drug,                protein            )        interaction = interaction.mean(            dim=1        )        affinity = self.regressor(            interaction        )return affinity, attention

二十、为什么最后要 Pooling?

Cross Attention 得到:

N_atom × hidden_dim

但是最终我们需要:

一个 Drug-Protein Pair

对应:

一个 Affinity

因此需要:

Atom-level representation        ↓Pooling        ↓Pair representation        ↓Regression

例如:

interaction.mean(dim=1)

也可以进一步尝试:

Mean PoolingMax PoolingAttention PoolingCLS TokenWeighted Pooling

这些都可以作为后续实验变量。


二十一、第六步:训练 DTA 模型

定义损失:

criterion = nn.MSELoss()

训练:

for epoch in range(epochs):    model.train()for batch in train_loader:        optimizer.zero_grad()        pred, attention = model(            batch["drug"],            batch["protein"]        )        loss = criterion(            pred,            batch["affinity"]        )        loss.backward()        optimizer.step()

核心流程:

Dataset ↓DataLoader ↓Drug GNN ↓Protein ESM-2 ↓Cross Attention ↓Prediction ↓Loss ↓Backward ↓Optimizer

二十二、第七步:模型评估

DTA 不能只看 Loss。

通常需要多个指标。

例如:

MSERMSECI

二十三、MSE

Mean Squared Error:

MSE =1/N Σ(y - ŷ)²

PyTorch:

mse = torch.mean(    (y_true - y_pred) ** 2)

二十四、RMSE

RMSE = √MSE

代码:

rmse = torch.sqrt(mse)

RMSE 越小,说明预测误差通常越小。


二十五、Concordance Index

在 DTA 研究中,CI 是一个非常重要的评价指标。

它关注的是:

模型是否能够正确判断两个样本之间的亲和力排序关系。

简单理解:

真实:A > B预测:A > B

属于一致。

如果:

真实:A > B预测:A < B

则排序不一致。


二十六、训练曲线

科研实验不能只保存:

best_model.pt

还应该保存:

train_lossval_losstest_metricslearning_rate

例如:

history = {"train_loss": [],"val_loss": []}

每一个 epoch:

history["train_loss"].append(    train_loss)history["val_loss"].append(    val_loss)

然后绘图:

Loss │ │\ │ \ │  \ │   \____ │ └──────────── Epoch

二十七、让 Agent 自动分析训练曲线

这时候 Agent 开始真正发挥作用。

例如用户输入:

分析一下刚才的训练结果。

Agent 可以调用:

get_training_history()

获得:

{"best_epoch": 72,"train_loss": 0.31,"val_loss": 0.46,"test_rmse": 0.52,"test_ci": 0.86}

然后 LLM 分析:

训练损失持续下降,但验证集损失在后期出现一定程度的波动,需要进一步检查过拟合问题。

注意:

AI 给出的内容应该基于真实实验数据,而不是凭空生成。


二十八、第八步:把科研功能封装成 MCP Tools

现在进入整个系统最重要的部分。

Agent 本身并不应该直接:

import torchimport rdkitimport esm

而应该通过工具调用。

例如:

Agent ↓MCP Tool ↓Research Engine

二十九、Davis 数据工具

可以设计:

@mcp.tool()defload_davis():"""    加载 Davis 数据集    """    dataset = DTADataset("Davis"    )    data = dataset.load()return {"dataset": "Davis","samples": len(data)    }

Agent 就可以调用:

load_davis()

获得:

{"dataset": "Davis","samples": 25772}

这里的具体样本数量应以实际数据文件和当前预处理结果为准,而不是在 Agent 中写死。


三十、KIBA Tool

同样:

@mcp.tool()defload_kiba():    dataset = DTADataset("KIBA"    )    data = dataset.load()return {"dataset": "KIBA","samples": len(data)    }

三十一、ESM-2 Tool

封装:

@mcp.tool()defencode_protein(    sequence: str):    embedding = esm_encoder.encode(        sequence    )return {"length": len(sequence),"shape": list(            embedding.shape        )    }

Agent 可以理解:

用户:帮我提取这个蛋白质的 ESM-2 表示。        ↓Agent        ↓encode_protein()        ↓ESM-2        ↓Embedding        ↓Agent

三十二、模型训练 Tool

最关键的是:

@mcp.tool()deftrain_dta_model(    dataset: str,    epochs: int = 50):    result = train(        dataset=dataset,        epochs=epochs    )return result

例如:

{"dataset": "Davis","epochs": 50,"best_epoch": 42,"rmse": 0.61,"ci": 0.84}

Agent 就可以根据真实实验结果生成解释。


三十三、预测 Tool

继续:

@mcp.tool()defpredict_affinity(    drug: str,    protein: str):    prediction = model.predict(        drug,        protein    )return {"affinity": prediction    }

于是用户可以直接输入:

预测这个药物和蛋白质之间的结合亲和力。

Agent:

解析用户问题      ↓predict_affinity      ↓DTA模型      ↓返回预测结果      ↓自然语言解释

三十四、实验报告 Tool

科研助手最终不能只告诉你:

RMSE = 0.52CI = 0.86

更重要的是自动形成:

实验报告

例如:

@mcp.tool()defgenerate_report(    experiment_id: str):    report = build_report(        experiment_id    )return {"report_path": report    }

最终:

训练 ↓评估 ↓绘图 ↓报告

全部自动化。


三十五、完整 MCP Tool 列表

我们可以设计:

Dataset Tools├── load_davis├── load_kiba├── dataset_statistics└── preprocess_datasetProtein Tools├── encode_protein├── batch_encode_proteins└── protein_statisticsDrug Tools├── smiles_to_graph├── molecular_statistics└── encode_drugModel Tools├── train_dta_model├── evaluate_model├── predict_affinity└── load_checkpointExperiment Tools├── get_training_history├── plot_training_curve├── plot_attention└── compare_experimentsReport Tools├── generate_report├── export_csv├── export_excel└── export_markdown

这样,一个完整的:

DTA Research MCP Server

就形成了。


三十六、Agent 如何自动选择工具?

例如用户:

在 Davis 数据集上训练一个 DTA 模型。

Agent 判断:

需要数据集 ↓load_davis需要训练 ↓train_dta_model

于是:

User ↓Agent ↓load_davis ↓train_dta_model ↓evaluate_model ↓generate_report ↓Agent ↓最终回答

三十七、更复杂的问题

例如:

“比较 Davis 和 KIBA 上模型的表现。”

Agent 可以自动规划:

Davis ↓训练 ↓评估KIBA ↓训练 ↓评估        ↓比较结果        ↓生成表格        ↓分析差异

最终返回:

Dataset
RMSE
CI
Davis
实验结果
实验结果
KIBA
实验结果
实验结果

这里必须强调:

表格中的指标来自真实实验,不应该由 LLM 编造。


三十八、AI 自动完成消融实验

进一步,我们可以设计:

Full Model

然后自动运行:

Experiment 1:Full ModelExperiment 2:No ESM-2Experiment 3:No GNNExperiment 4:No Cross AttentionExperiment 5:No Transformer

形成:

                Full                 │        ┌────────┼────────┐        ↓        ↓        ↓     No ESM    No GNN   No Attn        │        │        │        └────────┼────────┘                 ↓            Performance                 ↓          Experiment Table

这就是科研自动化非常重要的一步。


三十九、AI 自动生成消融实验表

例如:

Model
ESM-2
GNN
Cross Attention
RMSE
CI
Full
✓
✓
✓
实测
实测
w/o ESM-2
✗
✓
✓
实测
实测
w/o GNN
✓
✗
✓
实测
实测
w/o Attention
✓
✓
✗
实测
实测

Agent 可以进一步分析:

请分析哪些模块对模型性能影响最大。

Agent 不需要自己计算实验结果。

而是:

实验数据 ↓统计分析 ↓LLM解释

四十、Attention 可视化

Transformer 最大的优势之一,是我们可以获得:

Attention Matrix

例如:

             Protein Residues          R1 R2 R3 R4 R5 ... RN       ┌─────────────────────────Atom 1 │ ░░██░░Atom 2 │ ░████░Atom 3 │ ░░░███Atom 4 │ ███░░░...

可以进一步绘制 Heatmap。

这对于 DTA 研究非常有价值。

因为它可以帮助研究:

哪些药物原子        ↓关注        ↓哪些蛋白质残基

四十一、从 Attention 到可解释性

最终我们可以形成:

Drug Atom   ↓Attention   ↓Protein Residue   ↓Interaction

例如:

Atom 17   ↓Residue 152   ↓High Attention

但是这里必须注意:

Attention 权重可以用于解释和探索,但不能简单等同于经过实验验证的真实结合位点。

科研报告中应该把它描述为:

模型关注区域

而不是直接声称:

真实结合位点

四十二、RAG + DTA 模型

到这里,我们已经拥有:

RAG+DTA

于是 Agent 可以同时访问:

论文知识库        +实验数据库        +DTA模型

例如用户问:

为什么 ESM-2 可以用于 DTA?

Agent 可以:

RAG ↓检索论文 ↓获得文献依据+ESM-2 Tool ↓实际运行实验        ↓LLM ↓综合解释

这才是:

科研智能体

而不仅仅是:

聊天机器人


四十三、Agentic Research Workflow

整个工作流可以设计为:

                用户                 │                 ↓            Research Agent                 │        ┌────────┼────────┐        ↓        ↓        ↓      RAG      MCP      Memory        │        │        │      文献     实验      历史        │        │        │        └────────┼────────┘                 ↓             Research                 │        ┌────────┼─────────┐        ↓        ↓         ↓      Davis    ESM-2      GNN        │        │         │        └────────┼─────────┘                 ↓            Transformer                 ↓              DTA                 ↓        ┌────────┴────────┐        ↓                 ↓     Evaluation        Explain        ↓                 ↓       CI/RMSE        Attention        └────────┬────────┘                 ↓             Report

四十四、一个完整科研任务

现在假设用户直接告诉 AI:

“在 Davis 数据集上使用 ESM-2 + GNN + Transformer 训练一个 DTA 模型,并进行评估,最后生成实验报告。”

Agent 可以自动拆解:

Task │ ├── Step 1 │   加载 Davis │ ├── Step 2 │   数据预处理 │ ├── Step 3 │   Drug → Graph │ ├── Step 4 │   Protein → ESM-2 │ ├── Step 5 │   GNN │ ├── Step 6 │   Cross Attention │ ├── Step 7 │   Transformer │ ├── Step 8 │   Train │ ├── Step 9 │   Evaluate │ ├── Step 10 │   Visualization │ └── Step 11     Generate Report

这就是:

Planning + Tool Calling + Experiment Execution


四十五、进一步加入实验记忆

如果用户第一次实验:

DavisESM-2 + GNN + TransformerRMSE = XCI = Y

第二次:

DavisESM-2 + GNNRMSE = ACI = B

Agent 可以保存:

Experiment Memory

形成:

Experiment 001Experiment 002Experiment 003...

然后用户可以问:

“比较我最近做的三个实验。”

Agent:

读取 Experiment Memory        ↓整理指标        ↓绘制比较表        ↓分析

四十六、实验数据库

可以设计:

experiments

字段:

idexperiment_namedatasetmodelesm_modelgnn_modelhidden_dimlearning_ratebatch_sizeepochsrmsemsecicheckpointcreated_at

例如:

Experiment 001dataset:Davismodel:ESM2-GNN-Transformerhidden_dim:256lr:1e-4RMSE:...CI:...

这样整个 AI 科研助手就拥有了:

实验记忆系统。


四十七、从单实验到自动实验

进一步可以设计:

Hyperparameter Search

例如:

hidden_dim:128256512learning_rate:1e-31e-41e-5dropout:0.10.20.3

理论上可以产生:

3 × 3 × 3 = 27

组实验。

Agent 可以负责:

生成实验配置        ↓提交实验        ↓等待结果        ↓读取结果        ↓汇总        ↓生成分析

这里 Agent 的角色已经从:

Assistant

逐渐变成:

Research Operator

四十八、为什么 MCP 特别适合这个系统?

因为 MCP 的核心价值并不是:

“让 LLM 变聪明。”

而是:

让 LLM 可以标准化地访问外部工具和数据。

对于科研场景:

LLM ↓MCP ├── Dataset ├── ESM-2 ├── RDKit ├── GNN ├── PyTorch ├── Experiment ├── GPU └── Report

因此:

LLM = 大脑MCP = 神经接口Research Tools = 实验室设备

这个比喻非常适合理解整个系统。


四十九、整个项目的数据流

最终:

                   User                    │                    ↓              Vue3 Web UI                    │                    ↓                FastAPI                    │                    ↓              Research Agent                    │        ┌───────────┼───────────┐        ↓           ↓           ↓       RAG         MCP        Memory        │           │           │        │     ┌─────┼─────┐     │        │     ↓     ↓     ↓     │        │   Data   ESM   Model   │        │     │     │     │      │        │     └─────┼─────┘      │        │           ↓            │        │      Experiment        │        │           │            │        └───────────┼────────────┘                    ↓              Result Analysis                    ↓             Report Generation                    ↓                 User

五十、一个真正的 AI 科研助手应该具备什么能力?

到这里,我们可以总结。

Level 1:Chat Assistant

回答问题

Level 2:RAG Assistant

搜索论文+回答问题

Level 3:Agent

自主选择工具

Level 4:Research Agent

数据分析模型训练实验执行

Level 5:AI Research Assistant

文献+数据+模型+实验+分析+报告+实验记忆

我们的目标就是:

Level 5

五十一、最终项目架构

最终可以形成:

                  AI科研助手                       │        ┌──────────────┼──────────────┐        │              │              │       RAG            Agent          MCP        │              │              │     文献知识库       Planning       Tools        │              │              │        │              │       ┌──────┼──────┐        │              │       │      │      │        │              │     Davis  ESM-2   GNN        │              │       │      │      │        │              │       └──────┼──────┘        │              │              ↓        │              │        Transformer        │              │              ↓        │              │             DTA        │              │              ↓        │              │       Evaluation        │              │              ↓        │              │           Report        │              │        └──────────────┼──────────────┘                       ↓                 Research Memory

五十二、从 PyTorch 到 AI 科研平台

现在回头看前面的整个系列:

PyTorch  ↓Tensor  ↓Autograd  ↓Optimization  ↓CNN  ↓ResNet  ↓Transformer  ↓BERT  ↓GPT  ↓LLM  ↓LoRA  ↓RAG  ↓Agent  ↓MCP  ↓FastAPI  ↓Vue3  ↓AI科研助手  ↓Davis / KIBA  ↓ESM-2  ↓GNN  ↓Transformer  ↓DTA  ↓AI Bioinformatics Research Platform

这时候我们已经不再是在单独学习某一个深度学习模型。

而是在学习:

如何把深度学习、LLM、Agent、MCP与真实科研任务连接起来。


五十三、下一步:真正进入 DTI/DTA 科研自动化

目前的系统已经能够完成:

Davis/KIBA+ESM-2+GNN+Transformer

但是如果真正用于论文研究,还可以继续升级。

下一阶段可以加入:

Drug Cold StartProtein Cold StartRandom Split

形成多种实验划分。

进一步加入:

ESM-2 Residue-level+Atom-Residue Cross Attention+GCA+SHAP+Attention Heatmap

然后自动完成:

训练 ↓消融 ↓参数实验 ↓Cold Start ↓解释性分析 ↓统计检验 ↓Excel ↓CSV ↓Markdown ↓论文实验表格

最终形成:

                AI科研助手                     │                     ↓              DTA Research Agent                     │        ┌────────────┼────────────┐        ↓            ↓            ↓      Dataset       Model       RAG        │            │            │   Davis/KIBA    ESM-2/GNN       论文        │            │        └────────────┼────────────┘                     ↓              Experiment Agent                     │       ┌─────────────┼─────────────┐       ↓             ↓             ↓   Training       Ablation      Cold Start       │             │             │       └─────────────┼─────────────┘                     ↓               Evaluation                     ↓             Visualization                     ↓              SHAP / GCA                     ↓              Auto Report                     ↓               Paper Table

五十四、总结

本篇我们完成了 AI 科研助手最重要的一次升级。

上一篇:

AI科研助手=RAG + Agent + MCP

这一篇:

AI科研助手=RAG+Agent+MCP+Davis/KIBA+ESM-2+GNN+Transformer+DTA

核心思想可以浓缩成一句话:

让 LLM 负责理解和规划,让 MCP 负责工具调用,让 PyTorch 负责真正的深度学习计算,让 RAG 提供科研知识,让实验系统提供真实数据和结果。

最终形成:

             人             ↓          AI Agent             ↓     ┌───────┴────────┐     ↓                ↓   RAG               MCP     ↓                ↓  科研知识       科研计算工具                      ↓        ┌─────────────┼─────────────┐        ↓             ↓             ↓      Davis         ESM-2          GNN        │             │             │        └─────────────┼─────────────┘                      ↓                 Transformer                      ↓                    DTA                      ↓                实验结果                      ↓               AI自动分析                      ↓                 科研报告

这已经从一个:

AI问答系统

真正走向:

AI科研实验系统。

而这也是我们这套 PyTorch 深度学习基础系列 从“学习模型”走向“构建科研系统”的一个重要节点。


相关学习资料