[00:00]
여러분, 에이전트 개발 키트에 대한 또 다른 영상에 오신 것을 환영합니다.
[00:03]
지난 영상에서 보셨듯이, 에이전트 개발 키트를 사용하면 에이전트를 매우 쉽게 만들 수 있습니다.
[00:07]
이번 영상에서는 MCP(Model Context Protocol)와
[00:10]
통합하여 에이전트 개발을 한층 더 강화하는 방법을 보여드리겠습니다.
[00:15]
MCP라고도 알려진 이 프로토콜을 통해서 말이죠.
[00:17]
많은 분들의 요청에 따라, 멀티 에이전트 시스템을 만드는 방법을 보여드리겠습니다.
[00:21]
서로 다른 에이전트들이 각각의 MCP 서버에 연결되어
[00:24]
다양한 기능을 수행하고, 하나의 조정 에이전트가
[00:27]
이러한 모든 서브 에이전트들에 접근할 수 있어서
[00:30]
각각을 수동으로 전환할 필요가 없습니다.
[00:32]
말은 이정도로 하고,
[00:33]
오늘 무엇을 만들지 보여드리겠습니다.
[00:35]
안녕하세요?
[00:35]
어떤 작업을 수행할 수 있나요?
[00:37]
보시다시피 인기 있는 레딧 게시물을 검색하고, 요약한 뒤
[00:40]
음성으로 변환할 수 있다고 합니다.
[00:43]
/r/cursor와 windsurf에서 인기 게시물을 찾아보세요.
[00:47]
ADK의 웹 인터페이스가 정말 마음에 드는 이유는, 이 명령어를
[00:51]
에이전트에 전달한 후, 내부에서 정확히 어떤 일이
[00:54]
일어나는지 단계별로 볼 수 있기 때문입니다.
[00:56]
이 명령어를 받아서 Reddit Scout라는 두 번째 서브 에이전트에
[01:01]
전달하고 있습니다.
[01:02]
이것은 레딧 MCP 서버를 사용하여 서브레딧을 스캔하고
[01:06]
인기 주제들을 식별합니다.
[01:08]
cursor와 windsurf에 대해 이 작업을 수행하고, 그 다음
[01:12]
MCP 서버가 서브 에이전트에 반환한 인기 게시물들을
[01:15]
우리의 AI 시스템으로 다시 전달합니다.
[01:17]
꽤 많은 일을 하고 있죠.
[01:19]
이것이 우리의 두 번째 서브 에이전트가 할 수 있는 일입니다.
[01:22]
자, 시작해볼까요.
[01:23]
위의 내용을 요약해보겠습니다. 이제 두 번째 에이전트 전환은
[01:28]
뉴스캐스터 요약 에이전트에 전달되어 위의 모든
[01:33]
정보를 요약합니다. 마치 뉴스캐스터처럼 시작하죠.
[01:37]
오늘의 cursor와 windsurf 서브레딧의 주요 소식입니다.
[01:40]
이제 실제로 요약된 것을 볼 수 있습니다.
[01:42]
위에서 확인된 모든 주제들이
[01:45]
제가 이것을 직접 읽지 않을 것입니다. 대신
[01:48]
이것을 음성으로 변환할 수 있는 또 다른 에이전트에 전달할 것입니다. 이 에이전트는
[01:53]
ElevenLabs MCP를 사용하여 이 작업을 수행합니다.
[01:56]
어떻게 하는지 보여드리죠.
[01:57]
위의 내용을 음성으로 변환합니다.
[02:00]
보시다시피 TTS(Text to Speech)로 전달되고 있습니다.
[02:04]
그리고 텍스트 음성 변환 MCP 서버로부터
[02:07]
응답을 받을 것입니다. 파일 위치를 보여주면 내 데스크톱에 저장되어 있습니다.
[02:13]
오늘의 cursor와 windsurf 서브레딧의 주요 소식입니다.
[02:16]
cursor 사용자들은 무제한 할당량 그룹에
[02:19]
새로운 모델이 필요하다고 논의하며, 현재 옵션에 대한 불만을 표출하고 있습니다.
[02:23]
인기 게시물에서는 cursor를 주니어 개발자처럼 대하라고 조언하며,
[02:26]
최적의 성능을 위한 단계별 가이드를 제공합니다.
[02:28]
무료 티어 이용 가능성도 주요 화제이며, 일부 사용자들은
[02:31]
접근에 어려움을 겪고 있다고 보고합니다.
[02:34]
AI가 텍스트를 음성으로 변환해주기 때문에
[02:37]
직접 읽을 필요가 없습니다.
[02:38]
실제로 각각의 서브레딧을 방문해보시면
[02:42]
주제들이 매우 잘 요약되어 있음을 알 수 있습니다.
[02:44]
지금까지 이 AI 시스템이 무엇을 할 수 있는지 보여드렸습니다.
[02:47]
이제 이와 같은 MCP 통합 멀티 에이전트 AI 시스템을 단계별로 구축하는 방법을 알려드리겠습니다.
[02:50]
이런 시스템을 직접 만드는 방법을 배우게 될 것입니다.
[02:54]
시스템 구축의 개념을 이해하고, 원하는 MCP 서버와 통합하여
[02:58]
Reddit 게시물 요약 외에도 다양한 작업이 가능한
[03:01]
멀티 에이전트 시스템을 만들 수 있게 됩니다.
[03:05]
시작할 준비가 되셨나요?
[03:06]
시작해보겠습니다.
[03:07]
먼저 가독성을 위해 폰트 크기를 키우도록 하겠습니다.
[03:10]
보다 명확하게 보이도록 하기 위해서입니다.
[03:12]
저장소를 복제했다면, lesson one을 체크아웃하시면 됩니다.
[03:18]
향후 이 저장소가 업데이트되더라도
[03:21]
지난주 lesson one의 끝 부분으로 언제든 돌아갈 수 있습니다.
[03:24]
이전 튜토리얼을 보지 않으셨다면, 처음에 제가 했던 것을 살펴보시면 좋을 것 같습니다.
[03:28]
가상 환경 설정과 의존성 패키지 설치로
[03:31]
에이전트 구축에 필요한 모든 것을 준비했었죠.
[03:33]
지금 빠르게 진행해보겠습니다.
[03:34]
첫 번째로 가상 환경을 만들어야 합니다.
[03:37]
그 다음 'source bin activate'를 실행하고
[03:42]
which python으로 실행 중인 파이썬을 확인한 후, pip install -r
[03:46]
requirements.txt를 실행하여 필요한 모든 의존성 패키지를 설치합니다.
[03:51]
이것으로 오늘 에이전트 구축에 필요한 모든 것이 준비됩니다.
[03:53]
지난주에 어디까지 했는지 기억하시나요? 우리는
[03:56]
Reddit에서 최신 뉴스를 가져올 수 있는 간단한 에이전트를 만들었습니다.
[03:59]
지금 바로 시연해보도록 하겠습니다.
[04:02]
adk run agents/reddit_scout를 실행하고 작동하는 것을 확인해보겠습니다.
[04:09]
hello라고 입력해보겠습니다.
[04:09]
작동하는지 확인하기 위해서입니다.
[04:11]
에이전트가 '오늘 어떻게 도와드릴까요?'라고 응답합니다.
[04:13]
'게임 개발 관련 오늘의 인기 게시물을 보여줘'라고 요청하면
[04:19]
Reddit API를 통해 가져와서 오늘의 뉴스를 보여줄 것입니다. 이는 PRAW라는 파이썬 라이브러리를 사용합니다.
[04:26]
그리고 이 코드는 여러 서브레딧에서 뉴스를 가져옵니다.
[04:32]
이 전체 코드를 MCP 서버로 대체할 수 있습니다.
[04:35]
그냥 'Reddit MCP, 오늘의 인기 뉴스를 보여줘'라고 하면 됩니다.
[04:40]
'Reddit MCP, 오늘의 인기 뉴스 좀 보여줄래?'
[04:43]
API와 통합하기 위해 이 모든 코드를
[04:46]
작성할 필요가 없어지는 것이죠.
[04:48]
이것이 바로 MCP의 힘입니다.
[04:49]
사람들은 'MCP가 왜 필요한지 모르겠다'고 합니다.
[04:52]
'그냥 API를 사용하면 되지 않나?'라고요.
[04:54]
네, 가능하지만 그러려면 API 사용법을 이해해야 합니다.
[04:59]
AI를 사용하더라도 API의 컨텍스트를 제공해야 하고
[05:03]
이 모든 코드를 생성해야 합니다.
[05:04]
그래서 우리는 이것을 교체할 것입니다.
[05:06]
API 기반 Reddit 스카우트를 MCP를 사용하는 새로운 Reddit 스카우트로 교체하겠습니다.
[05:11]
어떻게 할까요?
[05:12]
자, 어떻게 하는지 보여드리겠습니다.
[05:13]
여기서 나가도록 하겠습니다.
[05:15]
새로운 에이전트를 만들어보겠습니다. async_reddit_scout라고 부르겠습니다.
[05:19]
MCP 서버와 작업할 때는 대부분
[05:22]
비동기 호출을 사용합니다.
[05:23]
외부 MCP 서버를 사용하여 명령을 보내고
[05:26]
응답이 돌아올 때까지 기다리기 때문입니다.
[05:29]
다음으로 넘어가기 전에요.
[05:29]
__init__.py와 agent.py를 생성하겠습니다. 자, 이제 오늘의 에이전트를 작성할 준비가 되었네요.
[05:38]
이제 에이전트를 작성해 보겠습니다.
[05:39]
def create_agent() 앞에 async 키워드를 추가할 겁니다.
[05:43]
async를 앞에 붙여주세요.
[05:44]
여기에 주석을 추가하겠습니다. MCP 서버에서
[05:47]
도구들을 가져온 후 에이전트 인스턴스를 생성한다는 내용입니다.
[05:49]
await get_tools_async()를 실행합니다.
[05:52]
사용 가능한 도구들을 찾기 위해서죠.
[05:53]
도구를 가져오지 못할 경우를 대비해
[05:55]
기본 도구를 사용하도록 안전장치를 넣고, 여기서
[05:58]
agent 인스턴스를 생성합니다.
[06:01]
제공해야 할 것들이 여기 있습니다.
[06:03]
Async Reddit Scout Agent라고 이름 붙이겠습니다.
[06:06]
외부 MCP Reddit 도구를 사용해 특정 서브레딧의 인기 게시물을 검색합니다.
[06:11]
Gemini 1.5 Flash를 사용할 건데, 이것으로 충분하고 수행할 작업에 대한 지시사항을 제공할 겁니다.
[06:15]
해야 할 일에 대한 지시사항을 제공합니다.
[06:17]
이건 지난주에 했던 것과 매우 비슷합니다.
[06:19]
마지막으로 할 일은 위에서 가져온 도구들을
[06:22]
실제로 전달하는 것입니다.
[06:24]
에이전트 인스턴스와 exit stack을 반환합니다.
[06:27]
이것으로 create_agent() 함수는 거의 완성되었고
[06:31]
ADK에서 사용되는 관례에 따라 root_agent를 create_agent로 설정합니다.
[06:36]
그리고 ADK가 이것을 인식할 수 있도록 'from agent import root_agent'를 추가해야 합니다.
[06:42]
ADK가 이를 인식할 수 있도록 말이죠.
[06:44]
아직 get_tools_async()를 정의하지 않았네요.
[06:46]
코드를 제공해드리겠습니다.
[06:48]
이 코드는 거의 보일러플레이트입니다.
[06:50]
여기서 mcp-reddit 서버를 사용하는 것을 볼 수 있는데,
[06:54]
이 보일러플레이트는 실제로 다른 어떤 MCP 서버에도 사용할 수 있습니다.
[06:58]
여기 이 부분만 교체하면 되고, 이 보일러플레이트는 자동으로
[07:02]
해당 MCP 서버에서 도구들을 가져올 것입니다. 나중에 ElevenLabs MCP 서버를 사용할 때
[07:06]
제가 정확히 이렇게 하는 것을 보게 될 겁니다.
[07:08]
자, 이제 마지막으로 해야 할 일은 모든 환경 변수를
[07:12]
가져올 수 있도록 모든 임포트를 추가하는 것입니다.
[07:15]
이제 MCP 서버를 사용하는 것이 API를 사용하는 것보다
[07:17]
훨씬 더 강력한 이유를 보여드리겠습니다.
[07:19]
agents로 가서 ADK web을 실행합니다.
[07:23]
웹 뷰에서 Async Reddit Scout를 선택하고
[07:27]
테스트해보겠습니다.
[07:29]
'hello'라고 입력하면 'Reddit 뉴스를 가져올 준비가 되었습니다.'라고 응답합니다.
[07:32]
어떤 서브레딧에 관심이 있으신가요?
[07:34]
Cursor와 Windsurf의 인기 토픽을 가져와달라고 해보겠습니다.
[07:39]
보시다시피 'Fetch Reddit Hot Threats'라는 MCP 도구를 사용해
[07:43]
정보를 가져오고 있습니다.
[07:45]
지금은 Cursor에서 정보를 가져오는 중이네요.
[07:48]
이제 windsurf 차례입니다.
[07:49]
MCP 서버에서 비슷한 도구 호출을 수행하는 것을 볼 수 있습니다.
[07:54]
이번에는 Windsurf에서 정보를 가져올 거예요.
[07:57]
앞서 MCP 사용이 더 강력하다고 말씀드렸죠.
[08:00]
왜일까요?
[08:01]
실제로 알 필요가 없었기 때문입니다.
[08:02]
API의 세부사항이나 도구들의 세부사항을 알 필요가 없었습니다.
[08:08]
이 모든 도구들은 MCP 서버가 에이전트에 노출시켜 준 것이기 때문입니다.
[08:13]
API 문서를 찾아보고 사용법을 파악한 다음
[08:17]
파라미터를 올바른 형식으로 전달하는지 확인할 필요가 없었습니다.
[08:21]
MCP 서버를 사용하면 텍스트 프롬프트만 사용하면 됩니다.
[08:24]
서버가 이미 사용 가능한 도구들을 알고 있기 때문이죠.
[08:26]
작업에 가장 적합하다고 판단되는 도구를 선택할 수 있으며
[08:30]
전체 코드 덩어리를 제거하고
[08:32]
모든 MCP 에이전트에 사용할 수 있는 간단한 보일러플레이트로 대체할 수 있습니다.
[08:36]
ElevenLabs의 텍스트 음성 변환으로 이것이 어떻게 작동하는지 보여드리겠습니다.
[08:40]
MCP 서버로요.
[08:41]
좋습니다, IDE로 돌아왔네요.
[08:43]
speaker라는 새 폴더를 만들어보겠습니다. 이전과 동일하게
[08:47]
__init__.py 파일과 agent.py 파일을 생성합니다.
[08:53]
Reddit MCP 서버 에이전트와 거의 동일한 것을 보실 수 있을 겁니다.
[08:58]
이것이 제가 앞서 강조했던 점인데,
[09:00]
MCP 서버 작업을 위한 템플릿이 있으면 외부 서드파티 API를
[09:03]
사용할 필요가 없습니다.
[09:05]
문서를 찾아볼 필요도 없죠. 왜냐하면
[09:08]
모두 같은 방식으로 작동하기 때문입니다.
[09:09]
이것이 바로 MCP의 힘입니다.
[09:10]
자,
[09:11]
에이전트를 만들어보겠습니다.
[09:12]
async definition create_agent, 이것은 텍스트 음성 변환
[09:16]
스피커 에이전트를 UVX를 통해 ElevenLabs MCP 서버에 연결하여 생성합니다.
[09:21]
디버깅을 위해 프린트 로그를 추가하고 있습니다만
[09:24]
원하지 않으시면 생략하셔도 됩니다.
[09:26]
이전과 동일하게 tools exit stack을 사용할 겁니다.
[09:29]
그리고 사실 제가 가장 먼저 할 일은
[09:33]
파일 상단에 모든 임포트를 추가하는 것입니다.
[09:34]
자동 완성이 작동하도록 말이죠.
[09:36]
서버에서 MCP 도구 세트를 인라인으로 가져올 건데,
[09:40]
Reddit에서처럼 별도의 get_tools를 만들지 않고,
[09:44]
Reddit 에이전트에서도 동일한 방식을 사용한 것을 보실 수 있습니다.
[09:48]
MCP_toolset_from_server를 await하고 UVX from 명령을 전달합니다.
[09:53]
하지만 이 경우에는 ElevenLabs MCP 서버가 이미
[09:56]
UVX에 게시되어 있기 때문에 GitHub 저장소를 제공할 필요가 없습니다.
[10:01]
ElevenLabs MCP만 전달하면 어디서 가져올지 알 수 있습니다.
[10:04]
이제 필요한 것은 ElevenLabs API 키뿐입니다.
[10:07]
이것은 ElevenLabs 웹사이트에 가서
[10:10]
계정을 만들어 얻을 수 있습니다.
[10:12]
그들은 무료 크레딧을 꽤 넉넉하게 제공합니다.
[10:14]
이 튜토리얼을 위해서는 충분할 것입니다.
[10:16]
로그인하고 API 키를 받으신 다음에는
[10:20]
ENV 파일로 가셔서
[10:22]
지금은 예제 파일을 열어두었습니다.
[10:23]
새로운 ElevenLabs API 키를 추가합니다.
[10:26]
실제 ENV 파일에 실제 ElevenLabs
[10:29]
API 키를 넣으시면 됩니다.
[10:30]
여기서는 ElevenLabs MCP 서버에 연결되었다고 표시하겠습니다.
[10:33]
그리고 디버깅을 위해 사용 가능한 모든 도구를 나열하겠습니다.
[10:37]
여기서는 Reddit MCP와는 조금 다르게 할 건데
[10:39]
Reddit에서는 단순히 모델을 Gemini 1.5 flash latest로
[10:43]
지정했다는 것을 보실 수 있죠.
[10:47]
하지만 ADK의 좋은 점은
[10:49]
원하는 모델을 사용할 수 있다는 것입니다.
[10:50]
LiteLLM 덕분에 OpenAI 모델이나 Anthropic의
[10:55]
Claude같은 모델을 사용할 수 있어요. Gemini 모델에만 국한되지 않죠.
[10:59]
ADK가 구글 제품이지만, 오픈소스이고 개방형 표준을 지원하기 때문에
[11:03]
작업에 활용할 수 있는 다양한 지원 모델 목록을
[11:05]
실제로 확인할 수 있습니다.
[11:07]
하지만 이번에는 제가 잘 사용하고 있는 Gemini 1.5 flash latest를
[11:10]
사용하도록 하겠습니다.
[11:12]
이전 튜토리얼에서 다뤘듯이 무료로 받을 수 있는
[11:14]
구글 API 키가 필요하고, 여기서
[11:17]
OpenAI의 GPT-4나 다른 모델들을 지정할 수 있습니다.
[11:22]
Claude 3.5를 사용하거나 다른 모델로 교체할 수 있지만
[11:26]
지금은 Gemini를 계속 사용하겠습니다.
[11:27]
마지막으로 해야 할 일은 다시 한 번 에이전트 인스턴스를 생성하는 것입니다.
[11:31]
이번에는 전체를 복사해서 붙여넣기만 하면 됩니다.
[11:33]
에이전트 인스턴스의 이름은 TTS Speaker입니다.
[11:35]
에이전트는 ElevenLabs의 텍스트 음성 변환 MCP를 사용하여 제공된 텍스트를 음성으로 변환합니다.
[11:40]
사용자가 제공한 텍스트를 받아서
[11:43]
오디오로 변환하고, 사용하고 싶은 음성 이름과 같은
[11:46]
다른 매개변수를 설정하고 결과를 반환하는 방식을 지정할 수 있습니다.
[11:49]
마지막에 Agent instance와 exit stack을 반환하는 것을 잊지 마세요.
[11:53]
Reddit MCP와 매우 비슷하지만
[11:55]
실제로는 더 짧습니다.
[11:56]
마지막에 root_agent = create_agent()를 해야 한다는 것을 잊지 마세요.
[12:01]
__init__.py에서 'from agent import root_agent'를 해주세요.
[12:06]
이제 테스트해 보겠습니다.
[12:07]
여기서 핵심은 MCP 도구 세트를 서버에서 사용하는 이 패턴이
[12:11]
MCP 서버와 통합하는 데 필요한 전부라는 것을 보여주는 것입니다.
[12:15]
공개된 패키지라면 여기에 바로 지정할 수 있고
[12:17]
GitHub 저장소에서 가져오고 싶다면
[12:20]
from을 사용하고 여기에 GitHub 저장소를 입력하면 됩니다.
[12:24]
잊기 전에 requirements.txt에
[12:27]
LiteLLM 의존성을 추가해야 합니다.
[12:30]
이를 통해 모델을 전환할 수 있는 기능이 확보되고
[12:32]
그 다음에는 항상 pip install -r requirements.txt를 실행해야 합니다
[12:35]
보시다시피 대부분의 요구사항이 이미
[12:36]
충족되었고 새로 추가된 것은 LiteLLM뿐입니다.
[12:41]
이제 agents 폴더로 돌아가서 ADK web을 입력하면
[12:45]
좋습니다.
[12:45]
이제 브라우저 뷰로 전환할 수 있습니다.
[12:47]
ADK 웹 UI로 돌아오면 이제
[12:50]
스피커를 선택하고 테스트해 볼 수 있습니다.
[12:53]
안녕하세요?
[12:54]
무엇을 할 수 있나요?
[12:55]
작업을 시작하기 전에 어떤 기능이 있는지
[12:58]
항상 확인하는 것이 유용합니다.
[12:59]
텍스트 음성 변환 에이전트라고 합니다.
[13:01]
ElevenLabs 텍스트 음성 변환 MCP를 사용해서 텍스트를 음성으로 변환할 수 있습니다.
[13:05]
우리가 지정한 대로 'will' 음성을 사용할 거라고 하네요.
[13:08]
자, 이제 해보겠습니다.
[13:10]
다음 텍스트를 음성으로 변환해주세요: '이 튜토리얼 영상이 마음에 드신다면'
[13:15]
제 채널 구독과 좋아요 부탁드립니다.
[13:19]
AI oriented 채널이고, 알림 설정도 켜주세요.
[13:24]
이제 실행해 보겠습니다.
[13:25]
MCP 서버의 텍스트 음성 변환 도구를 사용할 거예요.
[13:29]
변환이 완료되었고 오디오가 저장되었다고 하네요.
[13:32]
보통 여기서 '파일 경로를 보여주세요'라고 요청할 수 있습니다.
[13:37]
기본적으로 데스크톱에 저장되는 것 같네요.
[13:39]
네, 그렇네요. 지금 바로 들려드리겠습니다.
[13:42]
이 튜토리얼 영상이 도움이 되셨다면, AI Oriented 유튜브 채널의
[13:46]
좋아요와 구독 버튼 눌러주시는 것 잊지 마세요.
[13:49]
알림 설정도 꼭 해주시구요.
[13:52]
좋습니다.
[13:53]
이제 MCP 서버에 연결하여 텍스트를 음성으로
[13:55]
변환할 수 있는 에이전트가 생겼습니다.
[13:57]
여기 다른 도구들도 보이시죠?
[13:59]
목소리 복제, 오디오 분리,
[14:01]
에이전트에 지식 베이스 추가도 가능하고,
[14:03]
미리보기로 음성 생성도 할 수 있습니다.
[14:05]
정말 많은 기능들이 있는데, 가장 좋은 점은 각 도구에
[14:08]
전달해야 할 매개변수나 어떤 API를 호출해야 하는지 살펴볼 필요가 없다는 거죠.
[14:12]
이 모든 것이 MCP 덕분에 자동으로 제공됩니다.
[14:16]
이제 ADK의 에이전트들을 MCP와 결합하는 것의 힘을 보셨을 겁니다.
[14:21]
우리는 레딧에서 뉴스를 스캔할 수 있는 에이전트를 만들었고,
[14:24]
이제 텍스트를 음성으로 변환할 수 있는
[14:27]
또 다른 에이전트도 있습니다.
[14:29]
자, 오늘 우리는 MCP 서버에 연결되는 두 개의 새로운 에이전트를 만들었습니다.
[14:34]
이제 만들 마지막 두 에이전트는 매우 간단한데,
[14:37]
레딧 에이전트의 출력을 받아서 처리할 에이전트가 필요합니다.
[14:41]
레딧에서 많은 정보를 제공하기 때문에,
[14:43]
뉴스 앵커 스타일로 요약해주는 에이전트가 필요합니다.
[14:46]
그리고 마지막 에이전트는 이 모든 개별 에이전트들을
[14:51]
순차적으로 호출하는 코디네이터가 될 거예요.
[14:53]
자, 이제 빠르게 진행해보겠습니다.
[14:55]
패턴은 동일합니다.
[14:56]
폴더를 생성하고
[14:57]
summarizer라고 이름 붙이겠습니다.
[14:59]
다시 한 번 __init__.py와 agent.py를 만들어야 하는데, 이제 익숙하시죠.
[15:04]
ADK는 정말 단순하고 저는 이게 너무 마음에 듭니다.
[15:06]
요약 에이전트의 경우,
[15:08]
이번에는 복잡한 것을 할 필요가 없습니다.
[15:10]
Gemini를 다시 사용할 건데, LiteLLM을 활용하고,
[15:14]
레딧 헤드라인을 요약하는 뉴스 앵커 역할만 하면 됩니다.
[15:18]
게시물 제목 목록을 뉴스캐스터 스타일로 명확하고 흥미롭게 요약해줍니다.
[15:23]
주요 테마나 흥미로운 포인트를 강조하고, 앵커 인트로로 시작하게 됩니다.
[15:27]
이게 요약 에이전트입니다.
[15:28]
매우 단순한 에이전트라 테스트할 필요는 없지만,
[15:30]
agent에서 root agent를 임포트하는 것은 잊지 말아야 합니다.
[15:36]
좋습니다.
[15:36]
그리고 마지막으로 만들 것은 코디네이터 에이전트입니다.
[15:41]
__init__.py를 만들고,
[15:43]
Agent.py도 만듭니다.
[15:45]
코디네이터 에이전트도 비슷한 구조입니다.
[15:47]
여러 임포트문을 추가할 건데, 핵심은
[15:49]
Reddit scout 에이전트, summarizer 에이전트, speaker 에이전트를 임포트하는 겁니다.
[15:53]
async def create_coordinator_agent()를 만들고 exit stack을 생성합니다.
[15:58]
이건 표준적인 방식이라
[15:58]
너무 걱정하지 않으셔도 됩니다.
[16:00]
Reddit 에이전트, summarizer 에이전트, speaker 에이전트를 생성합니다.
[16:04]
summarizer 에이전트는 동기식이라 스택이 필요 없습니다.
[16:08]
LLM을 생성할 건데,
[16:10]
다시 Gemini를 사용하겠습니다.
[16:11]
말씀드렸듯이, LiteLLM을 사용하면
[16:14]
원하는 다른 모델로 교체할 수 있습니다.
[16:17]
그리고 여기에 코디네이터 에이전트를 만듭니다.
[16:20]
아주 간단하죠.
[16:20]
이것은 Reddit 게시물을 찾고 제목을 요약하며
[16:23]
텍스트를 음성으로 변환하는 것을 조정합니다.
[16:24]
그리고 에이전트가 사용할 수 있는 세 가지 다른 에이전트가
[16:28]
있다는 것을 알 수 있도록 지침에 명시합니다.
[16:30]
그리고 사용자의 프롬프트를 처리하는 방법에 대한 구체적인 지침도 있습니다.
[16:34]
하위 에이전트인 Reddit 에이전트를 넣는 것을 잊지 마세요.
[16:37]
요약 에이전트와 음성 에이전트를 추가하면
[16:41]
조정에 필요한 모든 것이 준비됩니다.
[16:42]
이제 개별 하위 에이전트에 접근할 필요가 없습니다.
[16:45]
하나의 AI 에이전트를 사용하여 세 개의 하위 에이전트에 모두 접근할 수 있습니다.
[16:49]
root_agent를 coordinator_agent로 생성하는 것을 잊지 마시고
[16:52]
여기서 'from agent import root_agent'를 해주세요.
[16:56]
이제 최종 테스트를 할 준비가 되었습니다.
[16:58]
콘솔을 정리하고 agents 폴더에 있는지 확인하세요.
[17:01]
ADK web을 실행하세요.
[17:02]
그리고 다시 한 번 브라우저를 실행하겠습니다.
[17:06]
이번에는 코디네이터를 선택하고 무엇인지 물어봅니다.
[17:10]
그러면 '나는 인기 있는 Reddit 게시물을 찾고, 제목을 요약하고 텍스트를 음성으로 변환하는 조정 에이전트입니다'라고 답합니다.
[17:15]
이번에는 하나의 서브레딧에만 집중하겠습니다.
[17:18]
'Cursor에서 인기 게시물을 가져와'라고 하면, 에이전트로 전달되고
[17:24]
Fetch Reddit Hot Threats 도구를 호출한 다음
[17:27]
여기 에이전트로 응답을 다시 보냅니다.
[17:30]
혹시 놓치셨다면, 이 화살표들은 데이터가
[17:34]
나가고 들어오는 것을 나타냅니다.
[17:35]
여기 보시면 그 안에 매우 긴 게시물들이 있는 것을 볼 수 있습니다.
[17:40]
이제 '뉴스캐스터처럼 요약해주세요'라고 말할 수 있습니다.
[17:45]
그러면 두 번째 에이전트인
[17:49]
여기 있는 뉴스캐스터 에이전트로 전달됩니다.
[17:52]
그러면 요약을 시작할 것입니다.
[17:54]
여기서 Cursor 서브레딧의 오늘의 주요 소식이라고 하면서
[17:56]
GPT 4.1과 O4 mini에 대해 이야기하고 있습니다.
[17:59]
그리고 마지막으로 할 에이전트는
[18:02]
텍스트를 음성으로 변환해달라고 할 것입니다.
[18:05]
이제 텍스트 음성 변환 에이전트로 가야 합니다.
[18:09]
전송하고 텍스트 음성 변환 도구를 호출하면
[18:15]
생성된 오디오 URL이 여기 있고, 한번 들어보겠습니다.
[18:20]
"Cursor 서브레딧의 오늘의 주요 뉴스입니다.
[18:24]
GPT-4.1과 O4-mini가 내일부터 프리미엄으로 전환됩니다.
[18:28]
사용자들 사이에서 비용 우려가 제기되고 있습니다.
[18:31]
한 사용자는 '무제한 티어에 새로운 모델을 추가할 때가 되지 않았나요?'라고 질문했습니다.
[18:36]
한편, 다른 레딧 사용자는 Cursor를 효과적으로 사용하는 방법에 대해 조언하며
[18:40]
주니어 개발자처럼 대하고 단계별로 안내하라고 제안했습니다.
[18:45]
또한 주간 프로젝트 쇼케이스 스레드가 인기를 끌고 있으며,
[18:49]
사용자들의 Cursor 작품을 공유하고 있습니다.
[18:52]
마지막으로, 일부 사용자들이 무료 버전 접속에 어려움을 겪고 있다고 보고했습니다."
[18:57]
자, 이렇게 됐습니다.
[18:58]
MCP가 통합된 멀티 에이전트 AI 시스템이 작동하고 있습니다.
[19:03]
대부분의 에이전트는 기본 코드였습니다.
[19:05]
사실, MCP 부분은 서로 다른 에이전트에서 거의 동일했죠.
[19:08]
이 튜토리얼이 ADK와 MCP의 강력함을
[19:11]
잘 보여줬기를 바랍니다.
[19:13]
자, 마지막 보너스로
[19:15]
제가 Midjourney에 가서 뉴스룸에서 뉴스를 전달하는
[19:19]
덕스러운 뉴스캐스터의 3D 아바타를 생성해달라고 요청했습니다.
[19:23]
KlingAI로 가서
[19:25]
이미지를 넣고 뉴스캐스터가 말하는 영상을 생성해달라고 요청했습니다.
[19:30]
여기서 립싱크를 할 수 있는데
[19:33]
방금 받은 파일을 업로드하고
[19:36]
이것을 사용해서 실제로 뉴스캐스터가 말하는 영상을 생성할 겁니다.
[19:40]
좋습니다.
[19:41]
트리밍을 확인하겠습니다.
[19:42]
이제 생성을 클릭하면 12분 정도 걸리는데,
[19:47]
완료되면 최종 결과를 볼 수 있습니다.
[19:50]
"Cursor 서브레딧의 오늘의 주요 뉴스입니다. GPT-4.1과
[19:56]
O4 mini가 내일부터 프리미엄으로 전환됩니다.
[19:58]
사용자들 사이에서 비용 우려가 제기되고 있습니다."
[20:00]
사실 이미지 생성을 하는 MCP 서버들이 있다는 것을 알고 있고,
[20:04]
아마도 비디오 생성을 하는 것도 있을 것입니다.
[20:07]
아직 살펴볼 시간이 없었는데, 만약 이미지 생성을 하는
[20:11]
MCP 서버를 찾으면, 새 에이전트를 만들어서 코디네이터에게
[20:14]
이미지 생성을 요청할 수 있습니다.
[20:15]
이미지를 비디오로 변환하는 다른 MCP 서버를 찾으면
[20:19]
그것을 전달하여 더빙까지 할 수 있습니다.
[20:22]
이것이 바로 ADK를 통해 에이전트와 MCP를 결합하는 것이
[20:25]
그토록 흥미진진한 이유입니다.
[20:26]
이 튜토리얼이 여러분께 도움이 되었기를 바랍니다.
[20:29]
모든 코드가 제공되어 있으며, 이 튜토리얼이 유용했다면
[20:32]
좋아요를 누르고 이런 콘텐츠를 더 보시려면
[20:35]
구독과 알림 설정을 해서 새로운 영상이
[20:38]
업로드될 때 가장 먼저 보실 수 있습니다.
[20:40]
다음에 또 만나요.
[20:41]
안녕히 계세요.