Goal을 workflow로 변환하고 조건부 분기를 선택한다.
첫 연구개발의 목표는 모든 신약개발 단계를 자동화하는 것이 아니라, known target + small molecule에 범위를 고정하고 자연어 목표 → 근거 → 구조 → 화합물 → docking → ADMET → 후보결정을 재현 가능한 하나의 최소 폐루프로 완성하는 것이다.
범위를 줄이는 것이 첫 번째 기술결정이다
Phase 1은 target-known small-molecule hit discovery/selection에 집중한다. 나머지는 의도적으로 뒤로 미룬다.
무엇을 하고, 무엇을 하지 않을 것인가
| 항목 | Phase 1 결정 | 이유 |
|---|---|---|
| Therapeutic modality | Small molecule | 공개 chemistry·docking·ADMET 생태계가 충분하며 평가가 명확하다. |
| Target | 사용자가 알고 있음 | Novel target discovery의 불확실성을 제거한다. |
| Disease | 선택 입력 | Therapeutic context와 ADMET 우선순위에 활용한다. |
| Protein structure | 사용자 제공 또는 공개 DB 검색 | 실험구조를 우선하고 예측은 fallback으로 둔다. |
| Compound source | 공개 compound/bioactivity DB | 재현 가능한 candidate pool을 만든다. |
| Hit discovery / similarity / screening | 포함 | Phase 1의 핵심 과학 workflow다. |
| Docking | 포함 | 구조 기반 evidence를 만든다. |
| ADMET | 포함 | binding score만으로 후보를 고르는 오류를 막는다. |
| De novo generation | 제외 | 초기 검증성을 떨어뜨리고 실패 원인을 복잡하게 만든다. |
| MD / FEP | 제외 | 고비용 계산은 Phase 1 가설 검증에 필수적이지 않다. |
| Retrosynthesis | 제외 | 초기 end-to-end control plane 검증 이후에 확장한다. |
| Wet-lab automation | 제외 | 실험 연계는 Human Go/No-Go 이후 단계로 둔다. |
| Agentic planning | 핵심 | 고정 script와 Agentic system을 구분한다. |
| Scientific RAG | 핵심 | 모든 결정을 evidence에 grounding한다. |
| Provenance | 핵심 | 나중에 붙이는 것이 아니라 처음부터 100% 기록한다. |
| Counter-evidence | 초기 형태 포함 | 좋은 근거뿐 아니라 실패 가능성을 찾는다. |
| Human approval | 포함 | 불확실한 구조·근거·후보 선택을 통제한다. |
첫 MVP의 서비스 제공 흐름
이 경로는 단순한 Python script chain이 아니다. 각 단계가 성공했는지, 근거가 충분한지, 어떤 fallback을 사용할지, 언제 사람의 승인을 요구할지를 Agent가 조건부로 판단해야 한다.
입력과 출력은 연구자의 질문과 의사결정을 그대로 반영한다
예를 들어 사용자가 “KRAS G12C switch-II pocket을 표적으로 하는 small-molecule hit 후보를 찾아줘. 기존 compound와 너무 유사하지 않으면서 hERG 위험이 낮은 후보를 상위 20개 추천해줘”라고 입력한다고 하자.
최종 결과는 후보 목록 하나가 아니다. 어떤 target/pocket을 사용했는지, 어떤 논문·DB를 참고했는지, 어떤 receptor structure와 compound pool을 선택했는지, 어떤 filter와 docking parameter를 사용했는지, 어떤 ADMET 위험이 있는지, 그리고 왜 후보를 추천하는지까지 추적 가능해야 한다.
Phase 1에서 의도적으로 미루는 것
신규 target 자동발굴, multi-omics 대규모 reasoning, de novo generation, protein/peptide binder design, MD/MM-GBSA/FEP, retrosynthesis, reagent procurement, robotic wet-lab, 자동 active learning, 복잡한 multi-agent social simulation, 수백 개 scientific tool 통합은 모두 이후 단계로 미룬다.
자연어 목표를 근거가 있는 Scientific Project로 컴파일한다
첫 단계의 독자기술은 LLM 자체보다 Goal Schema, Entity Resolution, Evidence-oriented RAG에 있다.
코드보다 먼저 Drug Discovery Project Schema를 만든다
Project ├─ disease_context ├─ target ├─ target_variant ├─ mechanism ├─ modality ├─ binding_site ├─ desired_activity ├─ known_reference_compounds ├─ novelty_constraint ├─ physicochemical_constraints ├─ ADMET_constraints ├─ compound_source ├─ compute_budget ├─ requested_validation_level └─ output_requirements
각 필드는 Explicit / Inferred / Unknown 상태를 가져야 한다. 사용자가 말하지 않은 값을 LLM이 임의로 채우는 순간 scientific intent가 훼손된다.
LLM은 계산기가 아니라 자연어와 schema 사이의 번역기다
TxGemma 같은 therapeutic LLM을 사용할 수 있지만 역할은 명확히 제한한다. LLM은 자연어를 structured intent로 변환하고, JSON Schema/Pydantic validator가 형식과 필수 필드를 검사한다. 이후 실제 과학 계산은 전문 tool이 수행한다.
User Prompt ↓ LLM Intent Parser ↓ ScientificGoal JSON ↓ Schema Validator ↓ Entity Resolver
이 단계의 KPI는 Target extraction, Constraint extraction, Entity resolution, Missing-value hallucination, Schema-valid output rate다. 중요한 것은 “얼마나 똑똑한 문장을 쓰는가”가 아니라 Goal Parsing Robustness다.
같은 생물학적 대상을 하나의 canonical entity로 묶는다
Gene → HGNC / Ensembl Protein → UniProt Structure → PDB ID Compound → ChEMBL ID / PubChem CID / InChIKey Disease → EFO / MONDO Publication→ PMID / DOI
KRAS G12C, KRAS(G12C), G12C KRAS가 서로 다른 entity로 남으면 evidence와 structure, assay가 분리된다. Canonical ID mapping은 나중의 KG/HRKG로 확장할 때도 그대로 사용된다.
Docking 전에 “이미 무엇을 알고 있는가”를 조사한다
초기 연결은 PubMed/PMC, Open Targets, ChEMBL 세 축으로 충분하다. PubMed/PMC는 문헌 근거, Open Targets는 target–disease·known drug·tractability evidence, ChEMBL은 known compounds와 assay/bioactivity를 제공한다.
문서 chunk만 저장하는 일반 RAG보다 claim 중심으로 구조화한다.
EvidenceClaim ├─ subject / predicate / object ├─ source / source_id ├─ publication_date ├─ evidence_type ├─ assay_type / condition ├─ supporting_or_conflicting ├─ confidence └─ retrieved_at
이 구조가 Document RAG를 Decision-grade Evidence RAG로 바꾸는 핵심이다.
첫 MVP는 PostgreSQL + pgvector로 충분하다
처음부터 Neo4j, Elasticsearch, 별도 vector DB를 모두 운영할 필요는 없다. PostgreSQL에 projects, targets, compounds, documents, evidence_claims, structures, pockets, assays, tool_runs, candidates, candidate_scores, citations를 두고, embedding column에 pgvector를 사용한다.
그러면 vector similarity와 Target ID, date, evidence type filter를 하나의 SQL/transaction boundary에서 처리할 수 있다. 다만 schema는 assay qualifier를 잃지 않도록 설계해 향후 HRKG로 옮길 수 있게 한다.
Novel target discovery가 아니라 “이 target으로 계산할 근거가 충분한가”를 정리한다
Target Card Target identity / UniProt Disease context Known drugs / known binders Known binding site Known mutations / resistance Bioactivity evidence Relevant publications Available structures Conflicting evidence Sources
Target Card는 이후 Structure Agent와 Screening Agent가 공유하는 context가 된다. Target을 이미 아는 문제로 범위를 제한했기 때문에 여기서의 핵심은 discovery가 아니라 evidence consolidation이다.
구조와 화합물 공간을 재현 가능한 입력으로 만든다
어떤 receptor, pocket, molecule을 사용했는지 설명할 수 있어야 docking 결과도 과학적 의미를 가진다.
구조 선택은 규칙과 근거가 있는 ranking 문제다
우선순위는 사용자 제공 structure → RCSB PDB experimental structure → 공개 predicted structure → new prediction이다. PDB 검색 시 target sequence match, mutation, ligand-bound/apo, resolution, experimental method, chain, missing residues, pocket completeness, co-crystal ligand, biological assembly를 비교한다.
예를 들어 KRAS G12C라면 wild-type 구조보다 G12C variant와 실제 switch-II pocket을 잘 보존한 구조를 우선해야 한다.
Prediction은 첫 단계의 주연이 아니라 fallback interface다
실험구조가 없을 때 Boltz-2 같은 공개 구조 모델을 연결할 수 있다. 중요한 것은 특정 모델 이름보다 StructureProvider interface를 두는 것이다.
StructureProvider get_structure(target) ├─ UserProvidedStructureProvider ├─ RCSBStructureProvider ├─ AlphaFoldDBProvider └─ BoltzStructureProvider
이렇게 해야 향후 OpenFold3 또는 다른 backend를 추가해도 상위 Agent 로직은 바뀌지 않는다.
Pocket 좌표도 evidence가 있어야 한다
선택 순서는 user-specified residues → co-crystal ligand pocket → known literature binding site → pocket detection algorithm이다.
Pocket structure_id source = user | co-crystal | literature | detector residues center_xyz box_size confidence preparation_protocol
Agent가 좌표를 언어적으로 상상해서는 안 된다. 좌표는 구조와 source, residue set, confidence를 가진 object로 생성한다.
RDKit으로 molecule identity를 결정적으로 표준화한다
raw_smiles, canonical_smiles, InChIKey, standardization_version을 함께 저장한다. 표준화 때문에 원본 구조를 잃어서는 안 된다.
작고 검증 가능한 chemical library에서 시작한다
첫 MVP에서는 known actives, known inactives, related-target compounds, similarity-neighborhood compounds, small diverse background library를 조합한다. 이 구성은 “known active를 다시 찾는가”와 “새로운 scaffold를 제안하는가”를 동시에 평가하기 좋다.
Docking 전에는 MW, logP, TPSA, HBD/HBA, rotatable bonds, formal charge, PAINS, reactive alerts, similarity, diversity 등을 계산한다. 각 rule을 hard constraint / soft constraint / warning으로 분리한다. 일반적인 drug-likeness rule을 무조건 탈락 규칙으로 쓰지 않는다.
과학 도구를 실행하고 후보를 결정한다
Vina와 ADMET-AI는 계산을 담당하고 Agent는 그 결과의 의미와 다음 행동을 판단한다.
첫 번째 Scientific Execution Tool은 단순하고 검증 가능한 것이 좋다
DockingRequest receptor / ligand / pocket seed / exhaustiveness / num_poses DockingResult poses / scores / runtime tool_version / parameters / logs
이 contract를 유지하면 나중에 GNINA 등으로 backend를 교체할 수 있다. Docking score뿐 아니라 pose file, interacting residues, clashes, receptor version, pocket definition, seed, runtime을 저장한다.
“-9.2 kcal/mol이라 좋은 후보”라는 문장은 금지한다. Docking score는 여러 evidence 중 하나일 뿐이다.
두 번째 실행도구는 Developability 위험을 조기에 보여준다
초기 endpoint는 Caco-2/HIA, BBB/PPBR, CYP inhibition, hERG/Ames/ClinTox, solubility/lipophilicity 정도로 제한할 수 있다. TDC benchmark를 이용해 task별 성능과 data split을 검증한다.
ADMET 결과를 평균 점수 하나로 만들지 않는다
TherapeuticProfile ├─ desired_route ├─ CNS_required ├─ permeability_priority ├─ solubility_priority ├─ hERG_risk_tolerance ├─ CYP_risk_tolerance └─ toxicity_constraints
CNS drug와 peripheral oncology drug의 우선순위가 다른 것처럼, candidate ranking은 therapeutic context를 사용해야 한다.
후보마다 Evidence Card를 만든다
Candidate C17 Target relevance Strong Known analog evidence Moderate Chemical novelty High Docking -8.7 kcal/mol Pose key residues ... Solubility acceptable hERG low predicted risk CYP moderate risk Counter-evidence ... Uncertainty ...
문헌 relevance, target evidence, similarity/novelty, docking, pose quality, ADMET, risk alerts를 하나의 evidence bundle로 모은 뒤 ranking한다.
복잡한 learned ranker보다 투명한 다목적 결정을 먼저 구현한다
예를 들어 hERG high risk를 hard exclusion으로 두고, docking quality·novelty·permeability를 높이며 toxicity를 낮추는 Pareto objective를 구성한다. “novelty보다 potency를 우선하라” 같은 사용자 steering이 weighting에 반영되어야 한다.
“왜 좋은가?”와 함께 “왜 실패할 수 있는가?”를 묻는다
Candidate C17 Supporting - good docking pose - acceptable ADMET - target-related scaffold Counter evidence - similar analog previously inactive - possible CYP inhibition - pose depends on uncertain loop - assay evidence contradictory
상위 후보에 대해서만 Critic을 실행해 비용을 제한한다. 반증 가능성을 구조화하는 것만으로도 일반 RAG+docking demo와 다른 과학 시스템이 된다.
최종 LLM은 계산을 만드는 것이 아니라 근거를 설명한다
최종 화면은 Research Goal, Interpreted Constraints, Scientific Evidence, Structure, Pocket, Compound Search, Filtering, Docking, ADMET, Candidate Ranking, Counter-Evidence, Recommendation 순으로 구성한다.
각 후보에는 Why selected?, What evidence?, What uncertainty?, What could fail?, What experiment next?가 있어야 한다.
Agentic이라는 말은 자유대화가 아니라 올바른 분기를 뜻한다
Agent와 Tool, Database, Validator, Provenance를 분리하고 불확실할 때 중단할 수 있게 한다.
마지막에 붙이지 말고 첫 run부터 기록한다
run_id / parent_run_id / project_id input_hash / input_source tool_name / tool_version / container_version model_name / model_version dataset_name / dataset_version parameters / random_seed start_time / end_time / hardware output_hash / status / error_log
3개월 뒤 Candidate 17을 정확히 다시 생성할 수 있어야 한다. 그래서 Phase 1 내부 목표 중 하나는 Provenance coverage = 100%다.
처음에는 네 역할이면 충분하다
PubMed, Open Targets, ChEMBL evidence를 검색·정리한다.
Structure, RDKit, Vina, ADMET tool을 schema에 맞게 호출한다.
Counter-evidence를 찾고 evidence-based final explanation을 만든다.
네 개의 별도 LLM이 필요한 것도 아니다. 동일 모델을 role, tool permission, structured output schema로 분리해도 된다.
판단, 계산, 근거, 검증, 기록을 분리한다
Agent → decides Tool → computes Database → provides evidence Validator → checks Provenance → records
Agent는 “상위 후보에 ADMET이 필요하다”고 판단하고, ADMET-AI는 수치를 계산하며, Agent는 그 결과를 다시 therapeutic context에서 해석한다.
Tool 이름이 아니라 capability를 등록한다
tool_id / capability / version input_schema / output_schema cost_class / latency_class cpu_required / gpu_required deterministic / valid_domain license / failure_modes
예를 들어 capability=docking인 Vina backend를 등록한다. 향후 GNINA나 다른 docking engine을 추가해도 Planner는 scientific capability를 선택한다.
Phase 1에서도 최소한의 자율 분기는 있어야 한다
IF PDB provided → use PDB ELSE → search RCSB IF suitable experimental structure exists → use it ELSE → predicted structure IF user pocket exists → validate it ELSE IF co-crystal ligand exists → derive pocket ELSE → detect pocket IF candidate_count > threshold → prefilter IF hERG is hard constraint → exclude high-risk candidates IF docking fails → retry / record failure IF evidence insufficient → abstain or human review
자율성보다 올바른 분기가 먼저다.
실패도 first-class output으로 만든다
SUCCESS FAILED PARTIAL INSUFFICIENT_EVIDENCE CONFLICTING_EVIDENCE TOOL_UNAVAILABLE INVALID_INPUT HUMAN_REVIEW_REQUIRED
신뢰할 수 있는 experimental structure가 없을 때 임의 구조로 조용히 계속하지 않고 HUMAN_REVIEW_REQUIRED를 반환해야 한다.
첫 UI는 Chat/Goal, Workflow, Evidence, Candidate Board 네 영역이면 충분하다. Candidate를 클릭하면 2D molecule, 3D pose, ADMET, Evidence, Counter-evidence를 동시에 보여준다. 후보 옆의 Why? 버튼이 이 서비스의 핵심 UX다.
평가할 수 있어야 연구가 된다
Agent 성능, 과학 모듈 성능, end-to-end 의사결정을 분리해 평가하고 내부 acceptance gate를 둔다.
첫 단계는 공개 자원만으로 충분하다
| 목적 | 공개 자원 |
|---|---|
| Therapeutic reasoning | TxGemma |
| Literature | PubMed / PMC |
| Target evidence | Open Targets |
| Bioactivity | ChEMBL |
| Chemical data | PubChem (선택적) |
| Structure | RCSB PDB |
| Chemical processing | RDKit |
| Docking | AutoDock Vina |
| ADMET | ADMET-AI |
| Benchmark | Therapeutics Data Commons |
| Relational / Vector DB | PostgreSQL + pgvector |
Phase 1만으로도 충분한 연구문제가 나온다
- RQ1 Intent-to-Workflow: 자연어 요구를 안정적으로 scientific workflow로 변환할 수 있는가?
- RQ2 Evidence-Grounded Planning: RAG evidence가 tool 선택과 workflow validity를 높이는가?
- RQ3 Capability Routing: capability 기반 planning이 tool 교체와 failure recovery에 유리한가?
- RQ4 Provenance-Aware Reasoning: provenance를 명시하면 unsupported claim이 감소하는가?
- RQ5 Counter-Evidence: Critic Agent가 false-positive prioritization을 줄이는가?
- RQ6 Cost-Aware Screening: adaptive funnel이 hit enrichment를 유지하면서 계산비를 줄이는가?
- RQ7 Reproducibility: 동일 input, snapshot, version, seed에서 ranking을 재현할 수 있는가?
Agent 자체를 평가한다
Goal parsing accuracy, tool-selection accuracy, workflow validity, invalid tool call rate, recovery rate, unnecessary-call rate, abstention accuracy를 측정한다.
각 모듈의 실패를 분리한다
RAG는 Recall@K, evidence precision, citation faithfulness를 본다. Docking은 redocking pose RMSD와 enrichment를 본다. ADMET은 AUROC/AUPRC 또는 MAE/RMSE와 calibration을 본다. TDC의 standardized data split/metric을 활용하면 평가 조건을 고정하기 쉽다.
가장 중요한 것은 전체 의사결정이 좋아지는가이다
Known-active recovery, enrichment, evidence faithfulness, reproducibility, compute cost를 평가한다. Agent 성능이 좋아도 known active를 찾지 못하거나 evidence가 잘못 인용되면 시스템은 실패다.
내부 합격기준을 미리 선언한다
| 항목 | 예시 내부 목표 |
|---|---|
| JSON schema valid | 100% |
| Critical entity resolution | ≥ 98% |
| Tool-run provenance coverage | 100% |
| Candidate provenance coverage | 100% |
| Citation support precision | ≥ 95% |
| Tool-call execution success | ≥ 95% |
| Identical-run reproducibility | ≥ 95% |
| Unsupported scientific claim | 가능한 한 0에 근접 |
| End-to-end workflow completion | ≥ 90% |
Agent와 scientific tool을 코드 구조에서도 분리한다
agentic_drug_discovery/ ├── api/ ├── agents/ │ ├── planner │ ├── evidence │ ├── executor │ └── critic ├── schemas/ ├── connectors/ │ ├── pubmed │ ├── opentargets │ ├── chembl │ └── rcsb ├── chemistry/ ├── tools/ │ ├── vina │ └── admet_ai ├── retrieval/ ├── ranking/ ├── provenance/ ├── evaluation/ └── ui/
언제 Phase 1이 끝났다고 말할 수 있는가
화려한 데모가 아니라 재현 가능한 후보 의사결정과 명확한 다음 단계가 Phase 1의 완료조건이다.
연구자가 실제로 보는 흐름
시스템은 먼저 target, pocket, modality, novelty, hERG, top-k 요구를 보여주고 사용자가 확인하게 한다. Evidence 단계에서는 관련 papers, known compounds, assays, available structures를 보여준다. Structure 단계에서는 선택 PDB와 선택 이유를 설명한다.
Candidate Pool 단계에서는 initial → standardized → constraints → similarity/diversity의 개수 변화를 보여주고, Docking과 ADMET 후 후보가 어떻게 줄었는지 funnel로 제시한다. 마지막에는 High Priority / Medium Priority / Exploratory로 나누고 각 후보의 Why selected, Evidence, Uncertainty, Failure Risk, Next Experiment를 제공한다.
이 연구의 본질은 Vina나 TxGemma가 아니다
각 변환 단계에서 Evidence + Provenance + Uncertainty가 손실되지 않아야 한다. 이 Scientific Control Plane이 Phase 1의 핵심 연구산출물이다.
다음 열 가지 질문에 모두 Yes여야 한다
- 자연어 목표를 잘못 추측하지 않고 구조화할 수 있는가?
- Target과 compound를 canonical entity로 resolution할 수 있는가?
- 모든 scientific claim이 PubMed/Open Targets/ChEMBL 근거로 추적 가능한가?
- 어떤 receptor와 pocket을 왜 선택했는지 설명할 수 있는가?
- Compound standardization이 결정적이고 재현 가능한가?
- Docking tool을 자동 실행하고 모든 parameter를 기록하는가?
- ADMET 결과를 therapeutic context와 함께 해석하는가?
- Candidate rank가 단일 LLM 판단이 아니라 structured evidence에서 계산되는가?
- 좋은 근거뿐 아니라 실패 가능성도 제시하는가?
- 동일 input·snapshot·tool version에서 다시 실행 가능한가?
기반이 안정된 뒤에야 capability를 늘린다
이 열 가지를 충족한 뒤 Phase 2로 넘어가 STRING/Reactome, omics, GNINA, Boltz-2 affinity, generative design, OpenMM, retrosynthesis 등을 추가한다. 그때부터는 “새로운 시스템을 다시 만드는 일”이 아니라 기존 scientific operating layer에 새로운 capability를 장착하는 일이 된다.
첫 연구개발에서 만들어야 하는 것은 범용 AI Co-Scientist가 아니다
이를 기술적으로 압축하면 Scientific Goal Compiler → Evidence-aware Agentic RAG → Capability-based Tool Router → Provenance-aware Scientific Execution → Multi-objective Candidate Decision → Counter-Evidence Critic의 여섯 축이다. 이 여섯 축이 견고하면 이후 최신 모델과 고비용 physics, synthesis, omics, active learning, wet-lab closed loop는 확장의 문제가 된다.
References & Public Resources
Agentic workflow와 scientific tool orchestration의 산업형 목표상을 참고한다. vecura.com/en
Therapeutic prediction/chat 모델과 agentic integration 맥락. TxGemma
PubMed, PMC, Gene, Protein programmatic access. NCBI API
Target–disease evidence, GraphQL API, bulk datasets. Open Targets
Molecule, assay, activity, target 데이터 접근. ChEMBL Web Services
Vector retrieval과 relational joins를 PostgreSQL에서 통합한다. pgvector
Experimental structure search와 metadata, coordinate access. RCSB APIs
Structure and affinity prediction backend 후보. Boltz GitHub
Chemical standardization, descriptors, fingerprints, structure handling. RDKit docs
Programmatic receptor/ligand docking과 pose output. Vina docs
ADMET endpoint prediction을 위한 공개 도구. ADMET-AI GitHub
ADMET를 포함한 therapeutic ML datasets, splits, metrics, benchmarks. TDC Benchmark