ARTICLE · 1116962
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 ↓训练 ↓评估 ↓比较结果 ↓生成表格 ↓分析差异最终返回:
这里必须强调:
表格中的指标来自真实实验,不应该由 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 自动生成消融实验表
例如:
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 = BAgent 可以保存:
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 深度学习基础系列 从“学习模型”走向“构建科研系统”的一个重要节点。