AWS 기술 블로그

Strands Agents 및 AgentCore와 함께하는 바이오-제약 연구 어시스턴트 구현하기

서론

이전 블로그 [Strands Agents와 MCP를 사용한 신약 개발 연구 어시스턴트 개발]에서는 Strands Agents와 Amazon Bedrock을 사용하여 ArXiv, PubMed, ChEMBL, ClinicalTrials.gov와 같은 외부 데이터베이스를 검색하는 신약 개발 연구 어시스턴트를 소개했습니다. 이 AI 어시스턴트는 여러 과학 데이터베이스를 동시에 검색하고, 발견한 내용을 종합하여 약물 타겟, 질병 메커니즘, 치료법에 대한 포괄적인 보고서를 생성할 수 있었습니다.

하지만 실제 제약 및 생명과학 연구 환경에서는 외부 공개 데이터베이스뿐만 아니라, 조직 내부의 임상 데이터, 환자 데이터, 유전체 데이터와 같이 내부 데이터를 함께 분석해야 하며, 내부 문서 및 규제 가이드라인을 검색하고, 나아가 신규 치료 단백질의 설계 및 최적화와 같은 전문화된 도구를 활용한 작업도 수행해야 합니다. 또한 이러한 시스템을 프로덕션 환경에 안정적으로 배포하고 확장 가능한 형태로 운영할 수 있어야 합니다.

이번 포스트에서는 이전 솔루션을 확장하여 다음 다섯 가지 핵심 기능을 통합한 프로덕션 배포 가능한 엔드-투-엔드 생명과학 연구 플랫폼을 구축하는 방법을 소개합니다:

  1. 외부 데이터베이스 검색 – ArXiv, PubMed, ChEMBL, ClinicalTrials.gov
  2. 내부 데이터베이스 분석 – Text-to-SQL을 통한 임상 및 유전체 데이터 쿼리
  3. 지식 베이스 통합 – Amazon Bedrock KnowledgeBases를 활용한 RAG 패턴 구현
  4. 단백질 설계 – AWS HealthOmics를 활용한 단백질 서열 최적화
  5. 프로덕션 배포 – Amazon Bedrock AgentCore를 통한 서버리스 배포

이 다섯 가지 기능은 단일 Orchestrator 에이전트에 의해 통합되어, 연구자가 자연어로 질문하면 AI가 자동으로 적절한 도구와 데이터베이스를 선택하여 답변을 제공하며, Amazon Bedrock AgentCore를 통해 프로덕션 환경에서 안정적으로 운영할 수 있습니다.

솔루션 개요

이 통합 플랫폼은 다음과 같은 아키텍처로 구성됩니다:

생명과학 연구 AI 어시스턴트 - 개발 환경 (Streamlit)
│
├── Streamlit UI (app.py)
│   └── 사용자 인터페이스
│
├── Orchestrator Agent (chat.py)
│   ├── 외부 DB 에이전트
│   │   ├── ArXiv MCP Client
│   │   ├── PubMed MCP Client
│   │   ├── ChEMBL MCP Client
│   │   └── ClinicalTrials MCP Client
│   │
│   ├── 내부 DB 에이전트
│   │   └── PostgreSQL MCP Client (Text2SQL)
│   │
│   ├── 지식 베이스 에이전트
│   │   └── Bedrock KnowledgeBases (RAG)
│   │
│   └── 단백질 설계 에이전트
│       └── AWS HealthOmics Tools (AWS Service)
│
└── MCP Servers
    ├── mcp_server_arxiv.py
    ├── mcp_server_pubmed.py
    ├── mcp_server_chembl.py
    ├── mcp_server_clinicaltrial.py
    └── mcp_server_internal_db.py

                    ↓↓↓

생명과학 연구 AI 어시스턴트 - 프로덕션 환경 실습 (AgentCore)
│
├── Amazon Bedrock AgentCore Runtime
│   ├── ECR (Container Registry)
│   ├── Auto-created Execution Role
│   └── Serverless Endpoint
│
└── Integrated Production Agent
    ├── All External Database Tools
    ├── Internal Database Tools
    ├── KnowledgeBase Tools
    └── Protein Design Tools

단일 Orchestrator 에이전트가 사용자의 질문을 분석하여, 필요에 따라 외부 데이터베이스 검색, 내부 데이터베이스 분석, 지식 베이스 검색, 단백질 설계 워크플로우 실행을 자동으로 조율하며, Amazon Bedrock AgentCore Runtime을 통해 프로덕션 환경에 배포할 수 있습니다.

주요 개선사항 및 신규 기능

1. 내부 데이터베이스 통합 (Text-to-SQL)

문제 정의

제약 회사와 연구 기관은 임상시험 데이터, 환자 데이터, 유전체 데이터 등 방대한 내부 데이터를 보유하고 있지만, 이러한 데이터를 분석하려면 SQL 쿼리 작성 능력이 필요합니다. 연구자들이 자연어로 질문하고 AI가 자동으로 SQL을 생성하여 답변을 제공할 수 있다면, 데이터 접근성이 크게 향상됩니다.

솔루션

Amazon RDS PostgreSQL 데이터베이스를 연결하고, Text-to-SQL 기능을 구현했습니다. 이를 통해 연구자는 다음과 같이 자연어로 질문을 할 수 있습니다:

"50세 이상 흡연자 중 EGFR 돌연변이가 있는 환자 수는?"
"화학요법 후 생존한 환자와 사망한 환자의 LRIG1 유전자 발현량을 비교해주세요"
"선암 환자의 평균 연령을 알려주세요"

구현

mcp_server_internal_db.py 파일에서 두 가지 핵심 도구를 제공합니다:

@mcp.tool()
async def fetch_table_schema() -> dict:
    """Postgres public 스키마의 테이블과 컬럼 정보를 조회하는 도구입니다."""
    # 테이블 스키마를 동적으로 가져와 LLM이 SQL 생성 시 참조
    cursor.execute("""
        SELECT c.relname AS table_name,
               a.attname AS column_name,
               pg_catalog.format_type(a.atttypid, a.atttypmod) AS data_type,
               d.description AS column_comment
        FROM pg_catalog.pg_attribute a
        JOIN pg_catalog.pg_class c ON a.attrelid = c.oid
        ...
    """)

@mcp.tool()
async def execute_postgres_query(query: str) -> dict:
    """사용자가 요청한 SQL 쿼리를 실행하는 도구입니다."""
    conn = psycopg2.connect(**DB_CONFIG)
    cur.execute(query)
    result = cur.fetchall()
    return {"message": result, "status": "success"}

Text-to-SQL 워크플로우:

  1. 사용자가 자연어로 질문
  2. Orchestrator 에이전트가 fetch_table_schema를 호출하여 데이터베이스 스키마 확인
  3. LLM이 스키마를 참조하여 SQL 쿼리 생성
  4. execute_postgres_query로 쿼리 실행
  5. 결과를 자연어로 해석하여 답변

이 방식은 데이터베이스 구조가 변경되어도 코드 수정 없이 자동으로 적용할 수 있다는 장점이 있습니다.

데이터베이스 스키마

이 데모에서는 두 가지 테이블을 사용합니다:

  • chemotherapy_survival: 화학요법 후 환자 생존 데이터
  • clinical_genomic: 폐암 환자의 임상 및 유전체 통합 데이터 (50+ 컬럼: 연령, 흡연 이력, EGFR 돌연변이 상태, 유전자 발현량 등)

2. 지식 베이스 통합 (Amazon Bedrock KnowledgeBases로 엔드 투 엔드 RAG 워크플로에 대한 완전관리형 지원)

문제 정의

제약 회사는 내부 연구 보고서, 규제 문서, 임상시험 프로토콜, 실험 노트 등 방대한 양의 비정형 문서를 보유하고 있습니다. 이러한 조직 내부 지식을 외부 공개 데이터베이스와 통합하여 검색하고, 근거를 명확히 제시할 수 있어야 합니다.

주요 과제:

  • 수천 개의 PDF, Word 문서에서 관련 정보를 빠르게 찾기 어려움
  • 내부 연구 결과와 외부 공개 연구의 연관성 파악 복잡
  • 연구 결과의 출처와 신뢰성 추적 필요
  • 다양한 형태의 문서(텍스트, 표, 그래프)에서 정보 추출

솔루션

Amazon Bedrock KnowledgeBases를 사용하여 RAG (Retrieval-Augmented Generation)를 구축했습니다. 이를 통해 다음과 같은 기능을 제공할 수 있습니다

  • 내부 문서를 시맨틱 검색으로 조회
  • 외부 데이터베이스(PubMed 등)와 하이브리드 검색
  • 인용 추적을 통한 출처 명확화

구현

Strands의 내장 retrieve() 도구를 사용하여 Amazon Bedrock KnowledgeBases와 통합:

from strands_tools import retrieve
import os

# KnowledgeBases 설정
os.environ["KNOWLEDGE_BASE_ID"] = ncbi_kb_id

# 에이전트 도구 목록에 retrieve 추가
clinical_research_agent_tools = [
    query_pubmed,  # 외부 PubMed 검색
    retrieve       # 내부 KnowledgeBase 검색
]

clinical_evidence_agent = Agent(
    model=model,
    tools=clinical_research_agent_tools,
    system_prompt="""당신은 HER2 바이오마커와 관련된 내부 및 외부 증거를 요약하는
    의료 연구 보조 AI입니다.
    1. retreive 도구 사용시: 
        a. 내부 증거의 경우 지식 기반을 활용하여 관련 정보를 검색하십시오. 
        b. 응답 시 항상 특정 콘텐츠 조각에 대한 인용(예. s3://bucket_name/test.pdf)을 포함하십시오. retreive 도구의 응답에서 location 정보를 활용하세요.
    2. PubMed 쿼리 시:
        a. 각 관련 연구의 결과를 요약하고 해당 연구의 특정 PubMed 웹 링크를 인용하십시오.
        b. JSON 출력에는 '링크', '제목', '요약'이 포함됩니다. 
        c. 응답 시 항상 각 연구의 제목과 링크(예: 'https://pubmed.ncbi.nlm.nih.gov/')를 포함하십시오.  
    3. 응답 제공 시: 
        a. 사용자의 질의에 대한 이해를 간략히 요약하여 시작하십시오.  
        b. 질의 해결을 위해 취하는 단계를 설명하십시오. 필요한 경우 사용자에게 추가 설명을 요청하십시오.  
        c. 내부 증거(지식 기반)와 외부 증거(PubMed API)에서 생성된 응답을 구분하십시오.  
        d. 발견 사항과 의학 연구에 대한 잠재적 함의를 간결히 요약하여 결론지으십시오.
    """
)

Amazon Bedrock KnowledgeBases 구성

  1. 문서 업로드: S3 버킷에 내부 문서 저장
  2. 자동 벡터화: Bedrock KnowledgeBases 가 자동으로 문서를 벡터 임베딩으로 변환
  3. 시맨틱 검색: 자연어 질문으로 관련 문서 조각 검색
  4. 인용 추적: 검색된 내용의 출처(S3 URI) 자동 제공
# S3에 문서 업로드
bucket_name = f'clinical-kb-{environment_name}-{account_id}-{region}'
documents_dir = Path('./documents')

for file_path in documents_dir.rglob('*'):
    if file_path.is_file():
        s3_key = str(file_path.relative_to('.'))
        s3_client.upload_file(str(file_path), bucket_name, s3_key)

# KnowledgeBases ID 조회
response = bedrock_agent_client.list_knowledge_bases()
for kb in response['knowledgeBaseSummaries']:
    if 'ncbiKnowledgebase' in kb['name']:
        ncbi_kb_id = kb['knowledgeBaseId']

하이브리드 검색 예시

test_query = """HER2 양성 유방암에서 HER2 표적 치료제의 효과에 관한 증거를
내부 지식베이스와 PubMed에서 검색해 주실 수 있나요?"""

response = clinical_evidence_agent(test_query)
# AI가 자동으로 내부 문서와 PubMed를 모두 검색하여 종합 답변 생성

3. 단백질 설계 (AWS HealthOmics)

문제 정의

신약 개발 과정에서 치료용 단백질(항체, 효소 등)을 설계하고 최적화하는 것은 매우 중요한 작업입니다. 이 과정은 복잡한 계산이 필요하고 다양한 도구들을 활용해야 합니다. 연구자들의 목표는 단백질 서열을 수정하여 안정성과 결합 친화력 같은 특성을 향상시키는 것입니다.

솔루션

AWS HealthOmics는 생물학 데이터를 쉽게 관리하고 분석할 수 있는 완전 관리형 서비스입니다. 이 서비스를 통해 복잡한 인프라 관리 없이도 신약 개발과 유전체 연구를 효율적으로 수행할 수 있습니다. 특히 EvoProtGrad라는 방향성 진화 알고리즘을 활용하여 다음과 같은 작업이 가능합니다:

  • 단백질 서열의 안정성과 결합 친화력 최적화
  • 다중 병렬 처리를 통한 효율적인 단백질 설계
"이 항체 서열을 최적화해주세요: EVQLVETGGGLVQPGGSLRLSCAASGFTLN... - 안정성과 결합 친화력을 향상시키는 방향으로"
"20개의 병렬 체인과 200단계로 단백질 최적화를 실행해주세요"

주요 기능

단백질 최적화 시작 (trigger_protein_optimization)

  • 입력된 단백질 서열의 유효성 검증
  • 최적화 파라미터 설정 (병렬 체인 수, 단계 수 등)
  • AWS HealthOmics 워크플로우 실행

작업 모니터링 (monitor_protein_workflow)

  • 최적화 진행 상황 추적
  • 완료 시 최적화된 서열과 성능 지표 제공

구현

utils/protein_design_tools.py 파일에서 두 가지 핵심 도구를 제공합니다:

@tool
def trigger_protein_optimization(
    seed_sequence: str,
    parallel_chains: Optional[str] = None,
    n_steps: Optional[str] = None,
    max_mutations: Optional[str] = None
) -> str:
    """AWS HealthOmics 워크플로우를 시작하여 단백질 서열 최적화"""

    # 서열 검증
    valid_amino_acids = set('ACDEFGHIKLMNPQRSTVWY')
    if not all(aa in valid_amino_acids for aa in seed_sequence.upper()):
        return {"error": "Invalid amino acid sequence"}

    # 워크플로우 파라미터 설정
    workflow_parameters = {
        "container_image": container_image,
        "seed_sequence": seed_sequence.upper(),
        "esm_model_files": esm_files,
        "output_type": out_type,
        "parallel_chains": p_chains,
        "n_steps": steps,
        "max_mutations": mutations
    }

    # HealthOmics 워크플로우 시작
    response = omics_client.start_run(
        workflowId=workflow_id,
        name=run_name,
        parameters=workflow_parameters,
        outputUri=output_uri,
        roleArn=role_arn
    )

    return f"""Successfully started protein optimization workflow.
    Run ID: {response['id']}
    You can check the status by asking me to 'monitor workflow run {response['id']}'"""

@tool
def monitor_protein_workflow(runId: str) -> str:
    """실행 중인 워크플로우의 상태 확인 및 결과 조회"""
    run_response = omics_client.get_run(id=runId)
    status = run_response.get('status')

    if status == 'COMPLETED':
        # S3에서 결과 파일 조회
        # 최적화된 서열과 성능 메트릭 반환
        output_uri = run_response.get('outputUri')
        # Parse S3 results and return optimized sequences

작동 방식

  1. 사용자가 최적화하고자 하는 단백질 서열과 목표 입력
  2. 시스템이 최적화 워크플로우 시작
  3. ESM2 단백질 언어 모델과 방향성 진화 알고리즘을 활용하여 최적의 변이체 탐색
  4. 실시간으로 진행 상황 모니터링 가능
  5. 최종적으로 개선된 단백질 서열과 성능 데이터 제공

이 방식은 인공지능 기반 단백질 언어 모델 (ESM2)과 진화 알고리즘(EvoProtGrad)을 결합하여, 생물학적으로 실현 가능하면서도 원하는 특성이 향상된 단백질을 효율적으로 설계할 수 있게 해줍니다.

4. 통합 Orchestrator 에이전트 (개발 환경)

이전 아키텍처의 한계

이전 블로그에서는 Planning Agent와 Synthesis Agent를 별도로 두고, 각 데이터베이스별로 전문화된 에이전트를 운영했습니다. 이는 외부 데이터 검색에는 적합했지만, 내부 데이터 분석, 지식 베이스 검색, 계산 워크플로우를 추가할 때마다 복잡도가 증가하는 문제가 있었습니다.

개선된 아키텍처

단일 Orchestrator Agent가 모든 도구와 데이터 소스를 통합 관리합니다. 이 에이전트는:

  1. 자동 도구 선택: 사용자 질문을 분석하여 외부 DB, 내부 DB, 지식 베이스, 단백질 설계 중 필요한 기능을 자동 선택
  2. 대화 이력 관리: SlidingWindowConversationManager로 최근 10개 대화 유지
  3. 멀티모달 작업: 하나의 질문에서 여러 데이터 소스를 동시에 활용
def create_orchestrator_agent(
    history_mode,
    arxiv_client=None,
    pubmed_client=None,
    chembl_client=None,
    clinicaltrials_client=None,
    internal_db_client=None
):
    system = """
    당신은 생명과학 연구를 위한 통합 AI 어시스턴트입니다. 다음과 같은 기능을 제공합니다:

    ## 1. 외부 데이터베이스 검색
    - ArXiv, PubMed, ChEMBL, ClinicalTrials.gov

    ## 2. 내부 데이터베이스 분석 (Text2SQL)
    - PostgreSQL 데이터베이스의 임상 및 유전체 데이터 분석

    ## 3. 지식 베이스 검색 (RAG)
    - 내부 문서 및 규제 가이드라인 검색

    ## 4. 단백질 설계 (Protein Design)
    - AWS HealthOmics 워크플로우를 통한 단백질 서열 최적화

    ## 사용 지침:
    1. 질문 내용에 따라 적절한 도구를 선택하여 사용하세요
    2. 데이터베이스 관련 질문의 경우 먼저 스키마를 확인한 후 SQL을 생성하세요
    3. 여러 데이터 소스를 통합하여 종합적인 답변을 제공하세요
    4. 항상 출처와 근거를 명확히 제시하세요
    """

    # 모든 도구 통합
    tools = []
    if arxiv_client:
        tools.extend(arxiv_client.list_tools_sync())
    if pubmed_client:
        tools.extend(pubmed_client.list_tools_sync())
    if chembl_client:
        tools.extend(chembl_client.list_tools_sync())
    if clinicaltrials_client:
        tools.extend(clinicaltrials_client.list_tools_sync())
    if internal_db_client:
        tools.extend(internal_db_client.list_tools_sync())
    if PROTEIN_TOOLS_AVAILABLE:
        tools.extend([trigger_protein_optimization, monitor_protein_workflow])

    orchestrator = Agent(
        model=get_model(),
        system_prompt=system,
        tools=tools,
        conversation_manager=conversation_manager
    )
    return orchestrator

5. 프로덕션 배포 (Amazon Bedrock AgentCore)

문제 정의

개발 환경에서 잘 작동하는 AI 에이전트를 프로덕션 환경에 배포하려면 다음과 같은 과제가 있습니다:

  • 인프라 관리: 컨테이너 이미지 빌드, ECR 등록, IAM 역할 설정
  • 확장성: 사용자 증가에 따른 자동 스케일링
  • 모니터링: 에이전트 상태 및 성능 추적
  • 보안: 안전한 자격 증명 관리 및 권한 설정

솔루션

Amazon Bedrock AgentCore를 사용하여 이러한 과제를 자동화하고, 서버리스 방식으로 프로덕션 배포를 구현합니다.

Amazon Bedrock AgentCore란?

Amazon Bedrock AgentCore는 AI 에이전트를 프로덕션 환경에 배포하기 위한 완전 관리형 서버리스 런타임입니다:

  • 자동 인프라 프로비저닝: Amazon ECR, IAM 역할, 실행 환경 자동 생성
  • 서버리스 확장: 트래픽에 따라 자동 스케일링
  • 통합 모니터링: Amazon CloudWatch를 통한 로그 및 메트릭
  • 간편한 배포: Python 코드만으로 배포 완료

통합 프로덕션 에이전트 구성

프로덕션 환경에서는 모든 도구를 하나의 통합 에이전트로 배포합니다:

# 통합 에이전트 도구 목록
integrated_research_agent_tools = [
    # 1. 외부 데이터베이스 도구
    search_arxiv,
    search_compound,
    search_pubmed,
    search_clinicaltrials,

    # 2. 내부 데이터베이스 도구 (PostgreSQL)
    query_clinical_database,
    get_database_schema,

    # 3. 지식 베이스 도구
    query_knowledge_base,

    # 4. 단백질 설계 도구 (AWS HealthOmics)
    trigger_protein_optimization,
    monitor_protein_workflow
]

# 통합 에이전트 생성
model = BedrockModel(model_id="global.anthropic.claude-sonnet-4-5-20250929-v1:0")

integrated_agent = Agent(
    model=model,
    tools=integrated_research_agent_tools,
    system_prompt="""당신은 종합적인 생명과학 연구 AI 어시스턴트입니다.
    외부 데이터베이스, 내부 데이터베이스, 지식 베이스, 단백질 설계 도구를
    활용하여 연구자의 질문에 답변합니다."""
)

AgentCore 배포 프로세스

from bedrock_agentcore import Runtime

# 1. Runtime 인스턴스 생성
agentcore_runtime = Runtime()
agent_name = "integrated_lifescience_research_agent"

# 2. Runtime 설정 (자동으로 ECR, IAM 역할 생성)
response = agentcore_runtime.configure(
    entrypoint="integrated_research_agent.py",
    auto_create_execution_role=True,  # IAM 역할 자동 생성
    auto_create_ecr=True,              # ECR 자동 생성
    requirements_file="requirements.txt",
    region=region,
    agent_name=agent_name
)

# 3. 배포 (Launch)
launch_result = agentcore_runtime.launch()
print(f"Agent ARN: {launch_result.agent_arn}")
print(f"ECR URI: {launch_result.ecr_uri}")

# 4. 상태 확인
status_response = agentcore_runtime.status()
status = status_response.endpoint['status']
# 가능한 상태: READY, CREATE_FAILED, DELETE_FAILED, UPDATE_FAILED

AgentCore Entrypoint 구현

from bedrock_agentcore import app

@app.entrypoint
def integrated_research_agent(payload: Dict[str, Any]) -> str:
    """AgentCore 엔트리포인트 - 모든 요청 처리"""
    user_input = payload.get("prompt", "")
    logger.info(f"Processing request: {user_input}")

    try:
        # 통합 에이전트 실행
        response = integrated_agent(user_input)
        return response.message['content'][0]['text']
    except Exception as e:
        logger.error(f"Error: {str(e)}")
        return f"오류가 발생했습니다: {str(e)}"

프로덕션 에이전트 호출

# 배포된 에이전트 호출
query = """알츠하이머병 치료를 위한 새로운 접근법에 대해 종합적으로 조사해주세요:
1. 최신 연구 논문 (Arxiv, PubMed)
2. 현재 개발 중인 약물 (ChEMBL)
3. 우리 데이터베이스의 관련 환자 데이터
4. 내부 문서에서 관련 규제 가이드라인
5. 타우 단백질 응집 억제를 위한 펩타이드 설계 가능성"""

response = agentcore_runtime.invoke({"prompt": query})
print(response)

기술 스택 및 파운데이션 모델

Amazon Bedrock 파운데이션 모델 선택

이 플랫폼은 Amazon Bedrock에서 제공하는 Anthropic Claude 4.5 Sonnet을 기본 모델로 사용하며 Claude 4.0 Sonnet과 Claude 4.5 Haiku 등의 다른 버전의 모델도 선택 가능하여, 작업 복잡도와 응답 속도에 따라 최적의 모델을 선택할 수 있습니다.

def get_model():
    if reasoning_mode == 'Enable':
        model = BedrockModel(
            model_id="global.anthropic.claude-sonnet-4-5-20250929-v1:0",
            max_tokens=64000,
            temperature=1,
            additional_request_fields={
                "thinking": {
                    "type": "enabled",
                    "budget_tokens": thinking_budget,
                }
            },
        )
    else:
        model = BedrockModel(
            model_id=model_id,
            max_tokens=maxOutputTokens,
            temperature=0.1,
            top_p=0.9,
            additional_request_fields={
                "thinking": {
                    "type": "disabled"
                }
            }
        )
    return model

기술 스택

  • Strands Agents: 오픈소스 AI 에이전트 프레임워크
  • Amazon Bedrock: Claude 4.5 Sonnet 등 Foundation 모델 제공
  • Amazon Bedrock KnowledgeBases: RAG 기반 지식 검색
  • Amazon Bedrock AgentCore: 서버리스 에이전트 배포 플랫폼
  • Amazon RDS (PostgreSQL): 임상 및 유전체 데이터 저장
  • AWS HealthOmics: 단백질 최적화 워크플로우 실행
  • Amazon S3: 문서 저장 및 워크플로우 결과 저장
  • Streamlit: 웹 UI 프레임워크 (개발 환경)
  • MCP (Model Context Protocol): 도구 통합 프로토콜

전제조건 및 설치

전제조건

  1. Python 3.10 이상
  2. AWS 계정 및 자격 증명
  3. Amazon Bedrock 모델 액세스:
    • Anthropic Claude 4.5 Sonnet
    • Anthropic Claude 4.0 Sonnet
    • Anthropic Claude 4.5 Haiku
  4. AWS 리소스 (선택 사항):
    • Amazon RDS PostgreSQL (내부 DB 기능 사용 시)
    • Amazon Bedrock KnowledgeBases (지식 베이스 기능 사용 시)
    • AWS HealthOmics 워크플로우 (단백질 설계 기능 사용 시)

개발 환경 설치 및 애플리케이션 데모 실행

# 1. 저장소 클론
git clone https://github.com/aws-samples/aws-ai-ml-workshop-kr.git
cd aws-ai-ml-workshop-kr/genai/aws-gen-ai-kr/20_applications/30_strands-agents-for-life-science

# 2. 가상 환경 구성
uv venv
source .venv/bin/activate
uv pip install -r requirements.txt

# 3. AWS 자격 증명 설정
aws configure --profile my-project
export AWS_PROFILE=my-project

# 4. 실행
streamlit run app.py

프로덕션 배포 실습

# 1. AgentCore 종속성 설치
pip install bedrock-agentcore-starter-toolkit
pip install -r requirements.txt

# 2. AgentCore 배포 실습
워크샵 환경 생성해서 순차적으로 노트북 실행 후 `notebook/05_production_agentcore.ipynb`로 AgentCore에 배포 실습

환경 변수 설정

내부 데이터베이스 기능을 사용하려면 다음 환경 변수를 설정하세요:

export DB_HOST="your-rds-endpoint"
export DB_PORT="5432"
export DB_NAME="agentdb"
export DB_USER="dbadmin"
export DB_PASSWORD="your-password"

KnowledgeBases 사용 시:

export KNOWLEDGE_BASE_ID="your-kb-id"

단백질 설계 기능을 사용하려면 utils/protein_design_tools.py에서 워크플로우 정보를 설정하세요:

workflow_id = 'your-workflow-id'
role_arn = "your-role-arn"
s3_bucket = "your-s3-bucket"

데모: 통합 플랫폼의 실제 활용

시나리오 1: 종합 연구 – 외부 + 내부 + 지식 베이스 통합

연구자가 HER2 양성 유방암에 대한 종합 분석을 요청하는 경우:

질문: "HER2 양성 유방암에 대한 종합 분석을 해주세요.
1. 최신 연구 동향 (ArXiv, PubMed)
2. 관련 화합물 및 임상시험 (ChEMBL, ClinicalTrials.gov)
3. 우리 내부 데이터베이스의 HER2 관련 환자 데이터
4. 내부 문서의 HER2 치료 가이드라인"

AI 어시스턴트의 작업 흐름:

  1. 외부 데이터 검색:
    • ArXiv에서 HER2 관련 최신 연구 논문 검색
    • PubMed에서 생의학 문헌 검색
    • ChEMBL에서 HER2 타겟 화합물 데이터 검색
    • ClinicalTrials.gov에서 진행 중인 임상시험 검색
  2. 내부 데이터 분석:
    • fetch_table_schema로 데이터베이스 스키마 확인
    • HER2 관련 환자 데이터를 쿼리하는 SQL 자동 생성
    • execute_postgres_query로 쿼리 실행
    • 환자 생존율, 치료 반응률 등 분석
  3. 지식 베이스 검색:
    • retrieve 도구로 내부 문서에서 HER2 치료 가이드라인 검색
    • 관련 규제 문서 및 프로토콜 조회
    • 출처 정보(S3 URI) 포함
  4. 통합 보고서 생성:
    • 외부 연구 동향, 내부 환자 데이터, 지식 베이스 문서를 종합
    • 치료 효과, 부작용, 바이오마커 등에 대한 인사이트 제공
    • 출처와 근거를 명확히 제시

시나리오 2: Text-to-SQL 단독 사용

데이터 분석가가 특정 환자 코호트를 조회하는 경우:

질문: "50세 이상 흡연자 중 EGFR 돌연변이가 있는 환자 수를 알려주세요.
그리고 이들의 평균 생존 기간도 계산해주세요."

AI 어시스턴트의 작업 흐름:

  1. fetch_table_schema 호출 → clinical_genomic 테이블 구조 확인
  2. SQL 쿼리 자동 생성:
    SELECT COUNT(*) as patient_count, AVG(survival_months) as avg_survival
       FROM clinical_genomic
       WHERE Age_at_Histological_Diagnosis >= 50
         AND Smoking_status LIKE '%smoker%'
         AND EGFR_mutation_status LIKE '%Mutant%'
  3. execute_postgres_query 로 쿼리 실행
  4. 결과를 자연어로 해석:
    "50세 이상 흡연자 중 EGFR 돌연변이가 있는 환자는 총 45명입니다.
       이들의 평균 생존 기간은 24.3개월입니다."

시나리오 3: 하이브리드 지식 검색 (내부 문서 + 외부 문헌)

연구자가 HER2 바이오마커에 대한 증거를 수집하는 경우:

질문: "HER2 양성 유방암에서 HER2 표적 치료제의 효과에 관한 증거를
내부 지식베이스와 PubMed에서 검색해주세요."

AI 어시스턴트의 작업 흐름:

  1. 내부 지식 베이스 검색 (retrieve 도구):
    • S3에 저장된 내부 연구 보고서 검색
    • 관련 문서 조각 추출
    • 출처 정보 포함: s3://clinical-kb-bucket/research/HER2_treatment_guidelines.pdf
  2. 외부 문헌 검색 (query_pubmed 도구):
    • PubMed에서 최신 논문 검색
    • PMID, 제목, 초록, 웹 링크 추출
  3. 통합 답변 생성:
## HER2 표적 치료제 효과에 관한 증거
### 내부 지식베이스 (출처: s3://.../HER2_treatment_guidelines.pdf):
    HER2 양성 유방암 환자에서 트라스투주맙 치료 시 무병생존율 30% 향상
    내부 임상시험 결과: 트라스투주맙+화학요법 병용 시 객관적 반응률 65%
### PubMed 최신 문헌:
    "Trastuzumab deruxtecan in HER2-positive breast cancer" (PMID: 12345678)
    T-DXd 치료군에서 중앙 무진행 생존기간 16.8개월 [PubMed 링크]
    "Dual HER2 blockade in metastatic breast cancer" (PMID: 87654321)
    트라스투주맙+퍼투주맙 병용요법의 우수한 효과 입증 [PubMed 링크]

시나리오 4: 단백질 설계 및 모니터링

연구자가 항체 서열을 최적화하는 경우:

질문: "다음 항체 서열을 최적화해주세요:
EVQLVETGGGLVQPGGSLRLSCAASGFTLNSYGISWVRQAPGKGPEWVS
안정성과 결합 친화력을 향상시키는 방향으로 최적화해주세요."

AI 어시스턴트의 작업 흐름:

  1. `trigger_protein_optimization` 호출
  2. AWS HealthOmics 워크플로우 시작:
    • 입력 서열: EVQLVETGGGLVQPGGSLRLSCAASGFTLNSYGISWVRQAPGKGPEWVS
    • 병렬 체인: 10개
    • MCMC 스텝: 100단계
    • 최대 변이: 15개
  3. 워크플로우 ID 반환 및 모니터링 안내

이후 사용자가 진행 상황을 확인하려면:

질문: "워크플로우 실행 상태를 확인해주세요"

AI 어시스턴트의 작업 흐름:

  1. monitor_protein_workflow 호출
  2. 워크플로우 상태 확인:
    • 실행 중: 진행률 및 예상 완료 시간 안내
    • 완료: 최적화된 서열과 성능 메트릭 반환
  3. S3에서 결과 파일 다운로드 및 분석

최적화 결과 예시:

워크플로우가 성공적으로 완료되었습니다.

최적화된 상위 3개 변이체:

1. EVQLVETGGGLVQPGGSLRLSCAASGFTLNSYGVSWVRQAPGKGPEWVS
   - 안정성 스코어: +2.3 (개선)
   - 예측 결합 친화력: +1.8 (개선)
   - 변이: I15V

2. EVQLVETGGGLVQPGGSLRLSCAASGFTLNSYGISWVRQAPKGPEWVS
   - 안정성 스코어: +2.1 (개선)
   - 예측 결합 친화력: +1.5 (개선)
   - 변이: G34K

3. EVQLVETGGGLVQPGGSLRLSCAASGFTLNSYGISWVRQAPPPKGPEWVS
   - 안정성 스코어: +1.9 (개선)
   - 예측 결합 친화력: +1.7 (개선)
   - 변이: G35P, G36K

시나리오 5: 프로덕션 환경에서 복합 연구 수행

AgentCore로 배포된 에이전트에 복합 질문을 요청:

query = """알츠하이머병 치료를 위한 새로운 접근법에 대해 종합적으로 조사해주세요:
1. 최신 연구 논문 (Arxiv, PubMed)
2. 현재 개발 중인 약물 (ChEMBL)
3. 우리 데이터베이스의 관련 환자 데이터
4. 내부 문서에서 관련 규제 가이드라인
5. 타우 단백질 응집 억제를 위한 펩타이드 설계 가능성"""

response = agentcore_runtime.invoke({"prompt": query})

AI 어시스턴트의 작업 흐름:

  1. ArXiv/PubMed에서 알츠하이머 최신 연구 검색
  2. ChEMBL에서 타우 단백질 관련 화합물 검색
  3. PostgreSQL에서 알츠하이머 환자 데이터 쿼리
  4. KnowledgeBase에서 규제 가이드라인 검색
  5. 타우 단백질 펩타이드 설계 가능성 평가 및 필요 시 HealthOmics 워크플로우 제안
  6. 모든 정보를 통합한 종합 보고서 생성

주요 성과 및 이점

1. 단일 대화 인터페이스로 다양한 작업 수행

연구자는 더 이상 ArXiv, PubMed, 내부 데이터베이스, 지식 베이스, 단백질 설계 도구를 따로 사용할 필요가 없습니다. 자연어로 질문하면 AI가 자동으로 필요한 도구를 선택하여 답변을 제공합니다.

2. SQL 지식 없이도 내부 데이터 분석

Text-to-SQL 기능으로 연구자는 SQL을 작성하지 않고도 복잡한 데이터 분석을 수행할 수 있습니다. 또한 데이터베이스 스키마가 변경되어도 자동으로 적응합니다.

3. 내부 지식과 외부 지식의 통합

Amazon Bedrock KnowledgeBases를 통해 조직 내부 문서를 검색하고, 외부 공개 데이터베이스(PubMed 등)와 통합하여 종합적인 증거 기반 답변을 제공합니다. 인용 추적 기능으로 출처를 명확히 확인할 수 있습니다.

4. 계산 집약적 작업의 자동화

단백질 최적화 워크플로우를 자연어 명령으로 실행하고, 진행 상황을 모니터링하며, 결과를 자동으로 해석할 수 있습니다.

5. 프로덕션 배포의 간소화

Amazon Bedrock AgentCore를 통해 복잡한 인프라 설정 없이 AI 에이전트를 프로덕션 환경에 배포할 수 있습니다. ECR, IAM 역할, 컨테이너 이미지가 자동으로 생성되고, 서버리스 방식으로 확장됩니다.

6. 확장성

MCP 프로토콜을 사용하므로, 새로운 데이터베이스나 도구를 추가하는 것이 매우 간단합니다. MCP 서버를 작성하고 Orchestrator에 등록하면 됩니다.

결론

이 포스트에서는 이전 블로그의 외부 데이터베이스 검색 기능을 확장하여, 내부 데이터베이스 분석(Text-to-SQL), 지식 베이스 통합(Amazon Bedrock KnowledgeBases 기반 RAG), 단백질 설계(AWS HealthOmics), 그리고 프로덕션 배포(Amazon Bedrock AgentCore)를 통합한 엔드-투-엔드 생명과학 연구 플랫폼을 구축하는 방법을 소개했습니다.

Strands Agents의 유연한 아키텍처와 Amazon Bedrock의 강력한 언어 모델, Amazon Bedrock KnowledgeBases의 RAG 기능, AWS HealthOmics의 생명과학 전용 컴퓨팅 인프라, 그리고 Amazon Bedrock AgentCore의 서버리스 배포 플랫폼을 결합하면, 신약 개발 프로세스 전반에 걸쳐 AI를 효과적으로 활용하고, 프로덕션 환경에서 안정적으로 운영할 수 있습니다.

이 플랫폼은 다음과 같은 실제 사용 사례에 적용될 수 있습니다:

실제 활용 사례

1. 타겟 발굴 (Target Discovery)

외부 문헌 검색 (ArXiv, PubMed) → 내부 유전체 데이터 분석 → 지식 베이스에서 이전 연구 검토 → 신규 약물 타겟 식별

2. 리드 최적화 (Lead Optimization)

ChEMBL에서 초기 화합물 검색 → 내부 스크리닝 데이터 분석 → 단백질 설계로 최적화 → 결과를 KnowledgeBase에 저장

3. 임상시험 설계 (Clinical Trial Design)

ClinicalTrials.gov에서 경쟁사 시험 분석 → 내부 환자 데이터로 코호트 설계 → KnowledgeBase에서 프로토콜 템플릿 검색

4. 규제 문서 작성 (Regulatory Documentation)

외부 규제 가이드라인 검색 → 내부 실험 데이터 분석 → KnowledgeBase에서 이전 승인 문서 참조 → 자동 보고서 생성

5. 정밀 의료 (Precision Medicine)

환자의 유전체 데이터 분석 → PubMed에서 관련 연구 검색 → KnowledgeBase에서 치료 가이드라인 조회 → 맞춤형 치료 추천

생명과학 데이터의 양과 복잡도가 계속해서 증가함에 따라, Strands Agents와 같은 AI 에이전트 프레임워크와 Amazon Bedrock AgentCore와 같은 프로덕션 배포 플랫폼은 신약 개발에 필수적인 도구가 될 것입니다.

더 알아보기

AWS 지원

AWS에서 신약 개발을 위한 AI 기반 솔루션 구현에 대한 자세한 정보는 AWS for Life Sciences에서 확인하세요.

Hasun Yu, Ph.D.

Hasun Yu, Ph.D.

류하선 AIML 스페셜리스트 솔루션즈 아키텍트는 바이오·제약 분야에서 AIML 모델 연구 개발과 활용에 풍부한 경험을 보유한 전문가로, 현재는 AWS에서 GenAI를 포함한 첨단 AWS AI/ML 서비스를 도입을 지원하고 있습니다.

Hyunmin Kim

Hyunmin Kim

김현민 솔루션즈 아키텍트는 헬스케어 솔루션즈 아키텍트로, 13년 이상 생명정보학 분야의 전문 경험을 보유하고 있으며 제약 및 헬스케어 분야 고객을 주로 지원하고 있습니다.

Jikang Jeong

Jikang Jeong

다양한 서비스 개발 경험을 바탕으로 공공부문 고객들의 디지털 혁신과 AWS 클라우드 활용을 위한 아키텍처 설계 및 구축을 지원하고 있습니다.

Jisun Choi

Jisun Choi

최지선 솔루션즈 아키텍트는 소프트웨어 개발 경험을 바탕으로 엔터프라이즈 고객의 클라우드 여정을 돕는 역할을 하고 있습니다.

Kyungshik Shin

Kyungshik Shin

신경식 솔루션즈 아키텍트는 다년간의 클라우드 인프라 구축 및 엔터프라이즈 애플리케이션 운영 경험을 보유하고 있습니다. 현재 생명과학 분야 고객들이 AWS 생성형 AI와 HPC 솔루션을 안전하고 효율적으로 활용할 수 있도록 아키텍처 설계와 구축을 지원하고 있습니다.