Managed Deep Agents의 새로운 기능: 스케줄링, 실행별 설정 및 Slack 반응
요약
Managed Deep Agents v0.9가 출시되어 에이전트 기능이 대폭 강화되었습니다. 주요 업데이트로는 자체적인 후속 작업 예약(Schedules SDK), 실행별 동적 구성, 그리고 Slack 메시지 반응 기능 등이 추가되었습니다. 이를 통해 내부 협업 채널에 상주하며 복잡한 업무를 처리하는 지능형 에이전트 구축이 용이해졌습니다.
핵심 포인트
- Schedules SDK로 대화 중 알림 및 반복 작업 예약 가능
- 실행별로 모델, 스킬 등을 동적으로 구성하여 유연성 확보
- Slack 메시지 확인 기능을 통해 사용자 반응에 능동적 대응
주요 요약 사항
에이전트 생성 스케줄: 에이전트는 대화 중 알림 및 반복 작업을 설정할 수 있습니다.
실행별 구성: 하나의 배포(deployment)가 실행마다 자체 모델, 기술(skills), 도구(tools)를 선택할 수 있습니다.
Slack 반응: 에이전트가 답장하기 전에 메시지를 확인합니다.
오늘 저희는 Managed Deep Agents v0.9를 출시하며, 이 버전에서는 에이전트가 자체적으로 후속 작업을 예약하고, 매 실행마다 자신을 재구성하며, Slack 메시지에 반응하는 새로운 기능들을 제공합니다.
이러한 업데이트들은 슬랙이나 사용자가 직접 운영하는 채널에 상주하며 동료처럼 작동하는 내부 에이전트를 구축하기 쉽게 만듭니다.
에이전트가 자체적으로 작업을 예약하도록 하기
새로운 Schedules SDK를 통해 에이전트는 대화 중간에 알림, 후속 작업(follow-ups), 그리고 반복 작업을 생성할 수 있어 "내일 이것에 대해 알려줘"와 같은 요청을 처리할 수 있습니다.
에이전트는 대화 중에 스케줄을 자체적으로 생성하고, 이 스케줄은 요청한 사용자의 권한과 연결 설정을 사용하여 실행되며, 결과는 동일한 채널로 반환됩니다.
실행 내부에서 스케줄 생성하기:
await schedules.create(owner={"type": "user"}, cron="0 9 * * 1-5", timezone="America/Los_Angeles", prompt="Write the daily digest.")
이 기능은 도구 뒤에 배치될 때 가장 유용합니다. 이를 통해 에이전트 사용자는 채팅만으로 스케줄을 생성, 목록화, 업데이트 및 삭제할 수 있습니다. 여기 알림 도구가 있습니다:
from langchain.tools import tool
from managed_deepagents import schedules
@tool
...
에이전트는 프롬프트와 cron 표현식을 전달하며, 크론(cron)이 실행될 때마다 LangSmith는 해당 프롬프트로 새로운 실행을 시작합니다. 스케줄은 생성된 채널을 상속받기 때문에 결과가 요청이 온 곳으로 게시됩니다: 슬랙에서 요청한 평일 알림은 매번 해당 대화에 새 메시지를 게시합니다. 일회성 스케줄(at 대신 cron)은 원래 스레드에 답장하므로, "1시간 후에 이 배포 상태를 확인해 줘"와 같은 후속 작업에 적합합니다.
실행별 에이전트 구성
에이전트는 이제 실행별로 동적으로 구성될 수 있습니다. 에이전트를 호출 가능한 함수로 설정하면, 해당 함수는 각 실행 시작 시 런타임(runtime)을 받아 그 실행을 위한 define_deep_agent 정의를 반환합니다. 여기서 모델, 지침(instructions), 스킬(skills), MCP 서버, 그리고 샌드박스 등을 선택할 수 있습니다.
팀이나 저장소마다 거의 동일한 에이전트의 복사본을 유지하는 대신, 단일 배포(deployment)를 실행합니다. 이를 통해 해당 배포가 더 유연하게 작동할 수 있으며, 단일 에이전트 배포가 요청을 발생시킨 채널이나 사용자 같은 컨텍스트에 따라 여러 팀 또는 사용 사례에 맞게 커스터마이징될 수 있습니다.

예를 들어, 하나의 내부 Slack 에이전트가 여러 팀에 서비스를 제공한다고 가정해 봅시다. 에이전트 함수는 실행이 어느 채널에서 왔는지 확인하고, 재무팀을 위한 청구 스킬(billing skills)이나 플랫폼 팀을 위한 인시던트 대응 MCP 서버를 로드할 수 있습니다. 이는 모델에게 언제 스킬을 사용할지 지침으로 알려주는 것과는 다릅니다. 구성은 모델이 실행되기 전에 설정되므로, 에이전트는 자신의 구성 범위 외의 스킬이나 MCP 도구를 절대 볼 수 없습니다. 이렇게 하면 컨텍스트가 작게 유지되고, 접근 제어 역할도 수행하며, 심지어 모델 자체를 선택할 수 있게 되어(모델은 스스로 할 수 없는 일) 더욱 강력해집니다.
일반적으로 이는 모델이 에이전트에게 제공되어야 하는 도구 세트를 정확히 알고 있음에도 불구하고 툴킷을 선택하도록 임무가 주어졌을 때 발생하는 비결정적 출력(non-deterministic outputs)을 방지합니다.
같은 아이디어는 각 저장소마다 다른 스킬과 더 저렴하거나 더 강력한 모델을 로드하는 코딩 에이전트에도 적용됩니다:
# agent.py: 하나의 코딩 에이전트가 각 실행별로 구성됨
from dataclasses import dataclass
from managed_deepagents import ManagedServerRuntime, define_deep_agent
...
해당 함수는 runtime.execution_runtime.context를 읽고, 채널 실행이나 에이전트 서버가 스키마를 읽기 위해 에이전트를 로드하는 경우처럼 컨텍스트가 없을 때는 기본값으로 폴백(fall back)합니다. 호출자는 실행의 context를 사용하여 구성을 선택할 수 있습니다:
# 동일한 배포, 다른 저장소: 실행 컨텍스트만 변경하면 됨
await client.runs.create(
thread_id,
...
Slack 메시지에 반응하기
Slack 반응 기능은 에이전트가 응답을 생성하는 동안 추론하고 도구를 호출하는 시간이 걸리더라도, 발신자에게 즉시 자신이 메시지를 인식했음을 보여줍니다. 이 기능은 기본적으로 활성화되어 있으며 (👀), 새로운 reactions 옵션을 사용하면 Slack 채널에서 이를 끌 수 있고, 다른 이모지를 선택하거나, 메시지별로 다른 이모지를 지정할 수도 있습니다. 이 예제에서는 메시지에 'broken'이라는 단어가 언급되면 🐛를 사용하고, 그렇지 않으면 👀를 사용합니다:
from managed_deepagents import channels
async def choose_emoji(context: dict) -> str:
return "bug" if "broken" in context["text"].lower() else "eyes"
...
반응은 간단할 수 있습니다. 하지만, 모델을 호출하여 더 정확한 이모지를 선택하는 함수로 반응 응답을 구성하는 것이 가능합니다. Jev와 같은 의사결정 모델은 빠르고 저렴하게 유지하며, Slack 채널 문서를 통해 전체 예제를 확인할 수 있습니다.
시작하기
Managed Deep Agents v0.9가 오늘 Public Beta로 출시되었습니다. Managed Deep Agents 문서를 참고하거나 다음 명령어로 시작할 수 있습니다:
uvx --from managed-deepagents mda init my-agent
cd my-agent
uv run mda deploy
참고: v0.8에서는 사용자별 메모리, 모든 서비스에서 실행을 트리거하기 위한 맞춤형 HTTP 채널, Parallel 기반의 내장 웹 검색 기능 등이 추가되었습니다. v0.8 게시물을 읽어보세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 LangChain Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기