BioPlayground

🧬
목록으로

AI 에이전트가 바이오인포매틱스를 대신 돌리는 시대 — scBaseCount와 Evo Designer

단일 추론이 아니라 계획-실행-관찰을 반복하는 AI 에이전트가 단일세포 데이터 큐레이션과 유전자 설계를 어떻게 자동화하는지, LangChain 최소 실습과 함께 다룹니다.

중급
|
20
|
검증 완료 (2026-07-29)
bioinformatics AI agentsingle-cell curationtool callingagentic loop
진행률0/120 (0%)

F32에서 그래프를 짰다면, 이제 그 위에서 움직이는 것을 봅시다

F32에서 참조 서열 자체를 그래프로 바꿨습니다. F33에서는 방향을 바꿔, 이 모든 도구(정렬기·변이 콜러·파운데이션 모델)를 사람 대신 호출하고 판단하는 소프트웨어를 다룹니다. F01~F25에서 다룬 파운데이션 모델은 입력 하나에 출력 하나를 내는 단발 추론이었습니다. AI 에이전트는 다릅니다 — 목표를 받으면 스스로 다음 행동을 계획하고, 도구를 호출하고, 결과를 관찰해 다음 계획을 다시 세우는 반복 루프로 동작합니다.

원리 — 계획·행동·관찰을 반복하는 루프

단발 추론과 에이전트의 차이

F02(AlphaFold2)나 F19(Evo)는 입력 서열을 넣으면 구조나 임베딩을 한 번에 내놓습니다. 반면 에이전트는 "이 유전자의 조직 특이 발현 패턴과 알려진 변이를 조사해서 요약해줘" 같은 목표를 받으면, 이를 달성하기 위해 어떤 도구를 어떤 순서로 호출할지 스스로 정합니다. 이 반복 구조를 흔히 ReAct(Reason + Act) 패턴이라 부릅니다.

text
1. Reason: "먼저 유전자 심볼을 표준 ID로 변환해야 한다"
2. Act: myGene.info API 호출
3. Observe: 반환된 Entrez ID, 발현 조직 목록 확인
4. Reason: "이제 GTEx에서 조직별 발현량을 조회하자"
5. Act: GTEx API 호출
6. Observe: 발현량 데이터 확인 → 목표 달성 여부 판단
7. (목표 미달성 시 2~6 반복, 달성 시 최종 요약 생성)

이 루프가 멈추는 조건(목표 달성 판단)을 에이전트 스스로 내린다는 점이, 사람이 정해진 순서대로 스크립트를 실행하는 Snakemake·Nextflow 파이프라인(F27~F29)과의 결정적 차이입니다.

scBaseCount — 단일세포 데이터 큐레이션을 에이전트에게 맡기기

단일세포 RNA-seq 데이터는 GEO·SRA 같은 공개 저장소에 흩어져 있고, 각 데이터셋마다 메타데이터 표기 방식과 전처리 상태가 제각각입니다. scBaseCount는 AI 에이전트로 SRA의 10x Genomics 데이터셋을 발견하고 메타데이터를 추출한 뒤, 표준화된 처리 절차로 자동 갱신되는 저장소를 구축한 사례입니다. 프리프린트는 27개 생물종·75개 조직에서 5억 200만 개가 넘는 세포를 수집했다고 보고합니다. 다만 개별 데이터셋을 QC 결과에 따라 자율 배제하거나 파라미터를 바꿔 재시도한다는 기능까지 이 사례의 검증된 사실로 확대해 읽어서는 안 됩니다.

Evo Designer — 파운데이션 모델을 설계 루프의 부품으로

F19~F20에서 다룬 Evo 같은 DNA 파운데이션 모델은 서열을 넣으면 기능 점수나 다음 염기 확률을 내놓습니다. 설계(design) 작업은 이 추론을 한 번으로 끝내지 않고, 제안 → 평가 → 개선을 반복합니다.

s0제안s1Evo 평가f(s1)개선s2평가f(s2)    s_0 \xrightarrow{\text{제안}} s_1 \xrightarrow{\text{Evo 평가}} f(s_1) \xrightarrow{\text{개선}} s_2 \xrightarrow{\text{평가}} f(s_2) \;\to\; \cdots

Evo Designer는 Evo 2를 이용한 조건부 서열 생성·설계를 사용자가 다루기 쉽게 만든 인터페이스입니다. 그 자체가 평가 점수를 보고 목표 달성까지 자율 반복하는 폐쇄형 에이전트라는 뜻은 아닙니다. 별도의 평가 함수와 제어 로직을 연결하면 위와 같은 제안 → 평가 → 개선 루프의 생성 부품으로 사용할 수 있다는 것이 정확한 구분입니다.

손 계산 예제: 도구 호출 비용이 누적되는 구조

에이전트 한 번의 목표 달성에 평균 5회 도구 호출이 필요하고, 각 호출이 평균 3초 걸린다고 합시다. 목표 10개를 배치로 처리하면 단순 합산으로는

10×5×3=15010 \times 5 \times 3\text{초} = 150\text{초}

이지만, 실패한 도구 호출을 재시도하는 경로가 20% 확률로 발생하고 재시도마다 호출 수가 2배로 늘어난다면, 기대 호출 수는 5×(1+0.2×1)=65 \times (1 + 0.2 \times 1) = 6회로 늘어나 실제로는 180초에 가까워집니다. 에이전트 파이프라인을 설계할 때는 이 재시도 경로의 기대 비용을 미리 어림잡아 두는 것이 실무적으로 중요합니다.

실습: 최소 LangChain 에이전트로 유전자 조회 자동화 (Colab)

python
# Colab에서 실행. LangChain 최소 버전으로 도구 호출 에이전트를 구성합니다.
!pip install -q "langchain>=1,<2" "langchain-openai>=1,<2" requests
import requests
from langchain_core.tools import tool
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI # API 키는 각자 환경 변수로 설정
@tool
def gene_lookup(symbol: str) -> str:
"""myGene.info에서 유전자 심볼로 표준 ID와 요약 정보를 조회합니다."""
r = requests.get(
"https://mygene.info/v3/query",
params={"q": f"symbol:{symbol}", "species": "human", "fields": "symbol,entrezgene,summary"},
timeout=20,
)
r.raise_for_status()
hits = r.json().get("hits", [])
if not hits:
return f"'{symbol}'에 대한 결과 없음"
top = hits[0]
return f"Entrez ID: {top.get('entrezgene')}, 요약: {top.get('summary', '요약 없음')[:200]}"
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
agent = create_agent(
model=llm,
tools=[gene_lookup],
system_prompt="도구로 근거를 확인한 뒤 주어진 유전자를 한국어로 간결하게 요약하라.",
)
result = agent.invoke({
"messages": [{"role": "user", "content": "BRCA1 유전자를 조사해줘"}]
})
print(result["messages"][-1].content)

반환된 messages에는 모델 메시지와 도구 호출 결과가 순서대로 남습니다. result["messages"] 전체를 출력해 어떤 도구가 호출됐고 그 결과가 최종 답변에 어떻게 반영됐는지 확인해보세요. LangChain API는 버전별 변화가 크므로 이 예제는 1.x 기준입니다.

CS 매핑

  • 유한 상태 기계(FSM): ReAct 루프의 "추론 → 행동 → 관찰"은 상태 전이가 명시적으로 정의되지 않은, 모델이 스스로 다음 상태를 결정하는 확률적 FSM에 가깝습니다.
  • 함수 디스패치: 에이전트가 여러 도구 중 하나를 선택해 호출하는 과정은 런타임에 함수를 동적으로 선택하는 디스패치 테이블과 동일한 구조입니다.
  • 인터프리터 패턴: 에이전트의 "계획 생성 → 실행 → 재계획" 루프는 프로그램을 한 줄씩 해석하며 실행 상태를 갱신하는 인터프리터의 실행 루프와 닮아 있습니다.

자주 만나는 결함

  • 에이전트가 존재하지 않는 도구 결과를 지어내는 것(hallucinated observation): 도구 호출 실패나 빈 응답을 에이전트가 그럴듯한 값으로 채워 다음 단계로 넘어가는 경우가 있습니다. 도구 응답에 명시적 오류 신호를 포함시키고, 빈 응답과 정상 응답을 코드 수준에서 구분해야 합니다.
  • 루프 종료 조건이 모호해 무한 반복에 가까운 비용 발생: 목표 달성 기준을 느슨하게 두면 에이전트가 같은 도구를 계속 재호출합니다. 최대 반복 횟수와 비용 상한을 코드 수준에서 강제하는 안전장치가 필요합니다.

더 깊게 파고 싶다면

본문은 BPD 연구진이 직접 재구성한 서술입니다. 원 자료로 심화해봅시다.

  • ReAct 원 논문 (Yao et al., 2022): "ReAct: Synergizing Reasoning and Acting in Language Models".
  • LangChain 공식 문서: 도구 정의·에이전트 실행기 레퍼런스.
  • scBaseCount 관련 발표 자료: 단일세포 데이터 자동 큐레이션 에이전트 사례.
  • myGene.info API 문서: 본 실습에서 사용한 유전자 조회 REST API.

다음 편 F34에서는 이 에이전트들이 호출하는 대상 자체, 즉 정렬 알고리즘이 파운데이션 모델로 대체되어 가는 흐름을 다룹니다.