1. 인트로 및 세션 개요

  • 진행자 소개
    "안녕하세요 여러분, 저는 Nico이고 Vercel에서 AI SDK를 개발하고 있습니다."
  • 세션 목표
    "오늘 이 세션에서는 AI SDK로 에이전트를 만드는 방법을 살펴볼 거예요."
  • 구성
    • 기초 파트: AI SDK의 핵심 빌딩 블록 소개
    • 실전 파트: Node.js로 딥 리서치(Deep Research) 클론 만들기

2. 프로젝트 준비 및 실행 방법

  • 레포지토리 클론, 의존성 설치, 환경 변수 복사
    "먼저 레포지토리를 클론하고, 의존성을 설치한 뒤, 환경 변수를 복사해 주세요."
  • 실행 방법
    • index.ts 파일 하나로 구성
    • pnpm rundev로 실행 (별칭 pd 사용)

3. 기초 빌딩 블록: 텍스트 생성 함수

3.1 generateText 함수

  • 기본 사용법

    • 비동기 함수 main에서 generateText 호출
    • 모델: OpenAI의 GPT-4.0 mini
    • 프롬프트: "hello world"
    • 결과 출력

      "Hello, how can I assist you today?"

  • 메시지 배열 지원

    • 프롬프트 대신 메시지 배열도 입력 가능
    • 메시지는 rolecontent로 구성
  • 통합 인터페이스의 장점

    • "AI SDK의 핵심 기능 중 하나는 통합 인터페이스입니다. 한 줄만 바꿔서 다양한 모델을 쓸 수 있어요!"

3.2 모델 전환의 유연성

  • 웹 검색이 필요한 경우

    • GPT-4.0 mini는 2024년까지만 학습, 2025년 정보는 모름

      "죄송하지만 2025년에 예정된 AI 엔지니어 서밋에 대한 정보는 없습니다."

    • Perplexity 모델로 전환
      • "모델만 바꿔주면 됩니다."
      • Perplexity Sonar Pro 사용

        "AI 엔지니어 서밋 2025는 2월 19일부터 22일까지 뉴욕에서 열렸습니다."

      • sources 속성으로 출처 확인 가능
  • 다양한 프로바이더 지원

    • "SDK 문서에서 다양한 프로바이더를 확인할 수 있습니다."
    • 예: Google Gemini Flash 1.5 + 검색 그라운딩

4. 도구(툴) 및 함수 호출: 외부 세계와 상호작용

4.1 툴의 개념

  • "툴은 언뜻 복잡해 보이지만, 본질은 간단합니다."

  • 툴 제공 방식

    • 모델에 프롬프트와 함께 사용 가능한 툴 목록 전달
    • 각 툴: 이름, 설명, 필요 데이터 포함
  • 툴 호출 흐름

    • 모델이 툴이 필요하다고 판단하면 툴 콜(tool call) 생성
    • 개발자가 해당 툴 콜을 파싱, 실행, 결과를 처리

4.2 간단한 예시: 두 수 더하기

  • 코드 구조

    • generateTexttools 객체 전달
    • 툴 이름: addNumbers
    • 설명, 파라미터, 실행 함수 포함
    • 타입 세이프티를 위한 tool 유틸리티 사용
  • 실행 결과

    "툴 결과: addNumbers, 인자: 10, 5, 결과: 15"

  • 툴 콜만 생성, 텍스트는 없음

    • "이제 모델은 텍스트가 아니라 툴 콜만 생성합니다."

4.3 툴 결과를 텍스트로 합성하기

  • maxSteps 옵션
    • "maxSteps는 모델이 툴 콜을 생성하면, 그 결과를 다시 대화 컨텍스트에 넣고, 다음 스텝을 반복합니다."
    • "텍스트가 생성될 때까지, 또는 최대 스텝에 도달할 때까지 반복합니다."
    • 멀티스텝 에이전트 구현 가능

4.4 복수 툴로 에이전트 행동 시연

  • 날씨 정보 툴 추가

    • getWeather 툴: 위도, 경도, 도시명 필요
    • "도시명만 프롬프트에 있으면, 모델이 나머지 파라미터를 추론할 수 있습니다."
  • 복합 프롬프트 예시

    "샌프란시스코와 뉴욕의 날씨를 가져오고, 두 값을 더해줘."

  • 실행 결과

    "샌프란시스코의 현재 온도는 12.3°C, 뉴욕은 15.2°C입니다. 두 온도를 더하면 27.5°C입니다."

  • 스텝 구조

    • 1단계: 두 도시의 날씨 툴 콜
    • 2단계: 두 값을 더하는 툴 콜
    • 3단계: 최종 텍스트 생성

5. 구조화된 데이터 생성 (Structured Output)

5.1 generateText의 experimental output 옵션

  • Zod로 스키마 정의
    • "Zod는 타입스크립트 검증 라이브러리로, AI SDK와 찰떡궁합입니다."
    • 예:
      output: object({
        sum: z.number(),
      });
      
  • 실행 결과

    "experimental output: sum = 27.5"

5.2 generateObject 함수

  • 정의

    • "generateObject는 구조화된 출력에 특화된 함수로, 제가 가장 좋아하는 함수입니다."
  • 예시

    • 프롬프트: "AI 에이전트의 정의 10개를 만들어줘."
    • 스키마: definitions: string[]
    • 결과:

      "AI 에이전트는 인공지능 기술을 활용해 자율적 또는 반자율적으로 작업을 수행하는 소프트웨어 엔티티입니다." (외 9개)

  • Zod의 describe 기능

    • 각 정의에 "가능한 한 많은 전문 용어를 사용하고, 완전히 이해할 수 없게 작성하라" 등 세부 지시 가능
    • 결과:

      "자율적 엔티티가 알고리즘적 휴리스틱을 활용해 동적 환경에서 의사결정 프로세스를 최적화한다." (등등)


6. 실전: Deep Research 클론 만들기

6.1 Deep Research란?

  • "Deep Research는 주제를 입력하면, 웹을 탐색하고, 자료를 모으고, 생각의 가지를 따라가며, 최종적으로 리포트를 만들어주는 서비스입니다."

  • 핵심 워크플로우

    1. 입력 쿼리
    2. 서브 쿼리 생성
    3. 각 쿼리로 웹 검색
    4. 검색 결과 분석 및 추가 질문 생성
    5. 필요시 재귀적으로 반복
    6. 최종적으로 모든 정보를 종합해 리포트 생성
  • 깊이(depth)와 너비(breadth) 개념

    • "깊이: 몇 단계까지 파고들지, 너비: 각 단계에서 몇 개의 쿼리를 생성할지"

6.2 구현 단계별 상세 설명

1) 서브 쿼리 생성 함수

  • generateSearchQueries
    • 입력: 쿼리, 생성할 쿼리 개수
    • 출력: 검색에 적합한 쿼리 배열
    • 예시:

      "D1 샷풋 선수가 되려면 필요한 것은?"

      • "D1 샷풋 선수 자격 요건"
      • "D1 샷풋 선수 훈련 방법"
      • "NCAA 디비전 1 샷풋 자격"

2) 웹 검색 함수

  • Exa API 사용
    • "Exa는 빠르고 저렴한 웹 검색 API입니다."
    • 결과에서 불필요한 정보(파비콘 등)는 제거
    • "토큰 수를 줄이면 비용도 줄고, 모델의 효율도 올라갑니다."

3) 검색 결과 평가 및 에이전트 루프

  • searchAndProcess 함수
    • 두 개의 툴 사용:
      1. 웹 검색 툴
      2. 검색 결과 평가 툴 (relevant/irrelevant)
    • maxSteps로 반복
    • "평가 결과가 irrelevant면, '더 구체적인 쿼리로 다시 검색해 주세요'라는 피드백을 남깁니다."
    • "이렇게 하면, 모델이 계속해서 더 나은 결과를 찾으려고 시도합니다."

4) 학습 내용 및 추가 질문 생성

  • generateLearnings 함수
    • 입력: 쿼리, 검색 결과
    • 출력:
      • learning(인사이트)
      • followUpQuestions(추가 질문 배열)
    • 예시:

      "D1 샷풋 선수가 되려면, 고등학교 4년간의 선수 경험, 주/전국 대회 입상, 60피트 이상의 기록이 필요합니다."
      "추가 질문: 샷풋 선수의 훈련법은? D1과 D2, D3의 차이는?"

5) 재귀적 딥 리서치 함수

  • deepResearch 함수

    • 재귀적으로 followUpQuestions를 새로운 쿼리로 삼아 반복
    • 누적 연구 상태(accumulated research)를 전역에서 관리
    • depth, breadth로 반복 제한
  • 중복 소스 방지

    • "이미 사용한 소스는 irrelevant로 처리해 중복을 막습니다."

6) 최종 리포트 생성

  • generateReport 함수

    • 누적된 연구 데이터를 기반으로 리포트 생성
    • "03 mini" 모델 사용
    • 결과를 마크다운 파일로 저장
  • 시스템 프롬프트 추가

    • "당신은 전문 연구원입니다. 오늘 날짜는 XX입니다. 마크다운 포맷을 사용하세요. 추측이나 예측은 명확히 표시하세요."
    • "모델이 추론에 의존하지 않도록, 원하는 구조와 포맷을 명확히 지시하세요."
  • 실행 결과

    "아래는 D1 샷풋 선수가 되기 위한 요건, 기술, 훈련, 초보자 실수 등에 대한 통합 리포트입니다."

    • "최상위 수준의 경쟁력, 4년간의 선수 경험, 55피트 이상의 기록, 남녀별 차이 등..."

7. 마무리 및 안내

  • "이렇게 단 218줄의 코드로 딥 리서치 에이전트를 만들 수 있습니다!"
  • "질문이 있으면 X(트위터) @nikoalbanese10으로 DM 주세요."
  • "SDK.purcell.ai에서 문서와 쿡북 가이드도 확인해 보세요."
  • "Swix에게 이 세션을 제안해줘서 감사하고, 다음에 또 만나요!"

핵심 키워드 요약

  • AI SDK
  • generateText / generateObject
  • 툴(도구) / 함수 호출
  • 멀티스텝 에이전트
  • 구조화된 출력 (Structured Output)
  • Zod 스키마
  • Deep Research 워크플로우
  • 재귀적 에이전트
  • 웹 검색 API (Exa)
  • 마크다운 리포트 생성
  • 시스템 프롬프트 설계

"이 세션을 통해 여러분이 AI SDK로 멋진 에이전트와 리서치 시스템을 직접 만들어볼 수 있길 바랍니다!" 😊


Related writing

Related writing

HarvestAIKorean

에이전트가 ‘코딩’하고, 연구가 ‘루프’를 돌기 시작한 시대: 안드레이 카파시 대담 요약

안드레이 카파시는 최근 몇 달 사이 코딩 에이전트의 도약으로 인해, 사람이 직접 코드를 치기보다 “에이전트에게 의도를 전달하는 일”이 핵심이 됐다고 말합니다. 그는 이 흐름이 오토리서치(AutoResearch)처럼 “실험–학습–최적화”를 사람이 거의 개입하지 않고 굴리는 자율 연구 루프로...

Mar 21, 2026Read more
HarvestEngineering Leadership · AIKorean

Software 3.0 시대, 조직의 생산성을 끌어올리는 AI 하네스 구축하기

이 글은 개발팀 내에서 개인의 역량에 크게 의존하고 있는 AI(LLM) 활용 방식을 조직 전체의 체계적인 시스템으로 발전시켜야 한다는 핵심적인 메시지를 담고 있습니다. 특히 Claude Code의 플러그인과 마켓플레이스 생태계를 단순한 확장 도구가 아닌, 팀의 업무 방식과 지식을 코드로 만...

Mar 8, 2026Read more
HarvestAIKorean

ChatGPT에서 1위가 되는 법 (레딧을 활용해서!)

이 글은 2026년 현재, 인공지능(AI) 시대에 맞춰 검색 엔진 최적화(SEO) 전략을 어떻게 바꿔야 하는지에 대한 중요한 통찰을 제공합니다. 특히, AI 추천 시스템에서 상위 랭킹을 차지하기 위한 레딧(Reddit) 활용법에 초점을 맞추고 있으며, 이를 통해 브랜드 인지도와 신뢰도를 높...

Feb 27, 2026Read more