커스텀 검색 도구, 메모리, 스케줄 추가하기

커스텀 검색 도구, 메모리, 스케줄 추가하기

빌트인 프로바이더 검색을 Tavily 도구로 바꾸고, 연구 어시스턴트에 영구 메모리와 일일 스케줄을 추가하는 방법을 알려드릴게요.

이 튜토리얼은 퀵스타트에서 이어집니다. 거기서 만든 research-assistant 프로젝트를 모델, 지침, 동작하는 mda dev 설정과 함께 사용하세요.

mda initidentity, sandbox/ 같은 파일을 생성할 수도 있습니다. 그대로 두세요. 이 튜토리얼은 변경하지 않습니다.

이 가이드는 퀵스타트의 빌트인 프로바이더 검색을 작성한 Tavily 검색 도구로 바꾸고, 영구 메모리를 활성화하며, 일일 스케줄을 추가한 뒤 배포합니다.

참고: Managed Deep Agents는 공개 베타 상태이며 LangSmith Cloud의 미국 리전에서만 사용할 수 있어요.

출처: 문서

본문

에이전트 확장하기

1. 커스텀 검색 도구 추가하기

빌트인 프로바이더 검색은 첫 실행에 편리합니다. 작성한 도구는 더 많은 제어를 제공합니다: 검색 API를 선택하고, 파라미터를 조정하며, 도구 코드를 프로젝트에 유지할 수 있습니다.

참고: 퀵스타트에서 Tavily 사용 단계를 따랐다면 다음 단계로 건너뛰세요.

.envTavily API 키를 추가합니다:

TAVILY_API_KEY=<TAVILY_API_KEY>

Tavily 클라이언트를 설치합니다:

npm install @langchain/tavily
pnpm add @langchain/tavily
bun add @langchain/tavily

커스텀 internet_search 도구를 만듭니다:

import { TavilySearch } from "@langchain/tavily";
import { tool } from "langchain";
import { z } from "zod";

export const internetSearch = tool(
  async ({ query, maxResults = 5, topic = "general" }) => {
    const tavilySearch = new TavilySearch({
      maxResults,
      tavilyApiKey: proces...KEY,
      topic,
    });
    return tavilySearch._call({ query });
  },
  {
    name: "internet_search",
    description: "Search the internet for relevant sources.",
    schema: z.object({
      query: z.string().describe("The search query."),
      maxResults: z.number().optional().default(5),
      topic: z.enum(["general", "news", "finance"]).optional().default("general"),
    }),
  },
);

프로바이더 검색 도구 dict를 작성한 도구로 바꿉니다. 퀵스타트의 model 값은 유지하세요:

import { defineDeepAgent } from "managed-deepagents";

import { internetSearch } from "./tools/search";

export const agent = defineDeepAgent({
  name: "research-assistant",
  model: "openai:gpt-5.5",
  tools: [internetSearch],
});

이미 실행 중이라면 mda dev를 다시 시작합니다. Studio에서 물어보세요:

What were the main announcements from the latest LangChain release?

에이전트가 internet_search를 호출하고 인용이 포함된 답변을 반환하는지 확인하세요. 작성한 도구에 대한 자세한 내용은 커스텀 도구를 참고하세요.

2. 메모리용 지침 업데이트하기

에이전트가 어떤 공유 지식을 유지할지 알도록 instructions.md를 확장합니다. 연구 동작은 유지하고 메모리 정책을 추가하세요:

# Research assistant

You are a careful research assistant. Use internet search to find sources,
keep notes, and return concise answers with citations.

## Memory

- Record reusable research procedures and project knowledge that can improve future work.
- For release research, check the project's official changelog before secondary sources.
- Never store personal data or secrets in memory.

3. 영구 메모리 활성화 및 사용하기

영구 메모리는 선택(opt-in)입니다. 에이전트에게 무엇이든 기억하도록 요청하기 전에 프로젝트 루트에 메모리 선언을 추가하세요:

import { defineMemory } from "managed-deepagents";

export const memory = defineMemory({ scope: "agent" });

메모리는 배포 전체에서 공유되고 모든 호출자에게 보이므로 개인 데이터나 시크릿을 저장하지 마세요.

새 파일을 발견하도록 mda dev를 다시 시작합니다. 한 스레드에서 에이전트에게 릴리스를 조사하고 "For release research, check the official changelog before secondary sources." 같은 재사용 가능한 프로젝트 규칙을 기록하도록 요청하세요. 그런 다음 Studio에서 새 스레드를 만들고 다음 릴리스를 어떻게 조사할지 물어보세요. 새 스레드에 대화 기록이 없어도 공유 규칙을 적용하는지 확인하세요.

자세한 내용은 메모리를 참고하세요.

4. 일일 다이제스트 스케줄 추가하기

사용자 메시지 없이 에이전트가 cron 주기로 실행되도록 schedules/ 모듈을 추가합니다. 이 스케줄은 태평양 시간 매주 평일 오전 8시에 실행됩니다:

import { defineSchedule } from "managed-deepagents";

export const schedule = defineSchedule({
  cron: "0 8 * * 1-5",
  timezone: "America/Los_Angeles",
  prompt:
    "Review durable memory for reusable research rules. " +
    "Summarize anything useful, then list open questions for today.",
});

첫 발화 시 메모리가 비어 있으면 에이전트는 여전히 열린 질문을 반환합니다.

mda deploy는 배포가 완료된 후 이 스케줄을 LangSmith cron 작업으로 조정합니다. 다음 단계에서 배포한 뒤 다음을 확인해야 합니다:

  • mda deploy가 스케줄 오류 없이 끝나는지(--no-wait를 전달하면 스케줄이 조정되지 않음).
  • 이 파일에 대한 관리형 cron이 배포에 있는지. 스케줄 이름은 모듈 스템과 일치합니다: daily_digest(Python) 또는 daily-digest(TypeScript).
  • 이 cron의 즉각적인 다이제스트 실행이 없는지. 첫 발화는 평일 America/Los_Angeles 오전 8:00까지 기다립니다.

스레드 동작과 제약은 스케줄을 참고하세요.

5. 배포 및 검사하기

프로젝트를 LangSmith에 배포합니다:

npx mda deploy
pnpm exec mda deploy
bunx mda deploy

성공하면 CLI가 배포 대시보드 URL을 출력합니다. 배포는 지침을 Context Hub에 동기화하고, 컴파일된 프로젝트를 업로드하며, 일일 스케줄을 조정합니다.

해당 URL을 열고 확인하세요:

  • 배포가 준비되었는지.
  • daily_digest 또는 daily-digest cron이 존재하는지.
  • 테스트 채팅 실행이 추적에서 모델 호출, internet_search 도구 호출, 메모리 읽기/쓰기를 보여주는지.

배포 플래그와 문제 해결은 에이전트 배포CLI 레퍼런스를 참고하세요.

더 알아보기

  • 커스텀 미들웨어 — 모델·도구 호출 주변에 로깅, 재시도, 제한, 가드레일 추가.
  • Identity — 호출자 인증 및 도구·미들웨어에서 검증된 신원 사용.
  • Evals — 코딩 에이전트와 eval-engineering 스킬로 Harbor evals 개발.