데일리 뉴스 캐스터 스킬
이 스킬을 통해 에이전트는 실시간 뉴스를 가져오고, 대화형 팟캐스트 대본으로 정리한 후, 대본을 소리 내어 읽는 오디오 파일을 생성할 수 있습니다.
워크플로우 지침
사용자가 최신 뉴스를 가져와 팟캐스트로 만들어 달라고 요청하면 다음 단계를 엄격히 따르세요:
1단계: 필요한 스킬이 있는지 확인
news-aggregator-skill과 tts가 워크스페이스(skills/ 또는 .cursor/skills/ 아래)에 존재하는지 확인하세요. 둘 중 하나라도 없으면, 어떤 스킬이 없는지 사용자에게 알리고 수동으로 설치하도록 요청하세요. 자동으로 스킬을 설치하려고 시도하지 마세요.
2단계: 최신 뉴스 가져오기
news-aggregator-skill 스킬 디렉토리(예: skills/news-aggregator-skill/scripts/fetch_news.py)에서 fetch_news.py를 찾으세요. 필요하다면 해당 스킬의 SKILL.md를 읽어 사용법을 확인하세요.
스크립트를 실행하여 실시간 뉴스를 가져옵니다. 사용자의 요청에 따라 소스(예: hackernews, github, all) 또는 키워드를 지정할 수 있습니다.
예시 명령어:
python3 skills/news-aggregator-skill/scripts/fetch_news.py --source all --limit 10 --deep
3단계: 팟캐스트 대본 작성 (내부 단계)
가져온 뉴스 데이터를 읽고 정보를 마크다운 팟캐스트 대본으로 다시 작성하세요. 가장 중요한 것은, 두 명의 호스트(2인 진행) 대화 형식을 동적인 Q&A 스타일로 우선시하는 것입니다. 대본은 다음과 같아야 합니다:
- 두 호스트의 대화형이면서 간결: 두 호스트 사이의 흥미로운 문답 형식으로 작성하세요. 호스트 A는 통찰력 있고 가치 있는 질문을 던져 대화를 이끌고, 호스트 B는 유익하고 간결한 답변을 제공해야 합니다. 스마트하고 빠른 Q&A 대화처럼 느껴져야 합니다.
- 불필요한 내용 없음: 불필요한 장식이나 지나치게 긴 전환문을 포함하지 마세요. 중요한 정보와 사실을 모두 유지하면서 간결하게 작성하세요.
- 발언자 명확히 표시: 각 줄이나 문단은 발언자 이름으로 시작하세요(예:
호스트 A:또는호스트 B:). - 음성에 적합한 텍스트: 말하는 텍스트에는 복잡한 URL, 원시 마크다운 링크 또는 발음하기 어려운 문자를 피하세요.
이 대본을 podcast_script.md 파일로 로컬에 저장하세요.
podcast_script.md 예시 내용:
**호스트 A:** 오늘의 뉴스 요약 시간에 오신 것을 환영합니다. 오늘은 흥미로운 기술 소식이 몇 가지 있습니다. 먼저 [회사 이름]의 대규모 업데이트 소식이 있는데요. 일반 사용자에게 이번 신규 출시의 핵심적인 의미는 무엇인가요?
**호스트 B:** 핵심은... [뉴스 항목 1의 간결한 답변 및 요약]입니다. 이는 [주제]에 대한 접근 방식을 완전히 바꿉니다.
**호스트 A:** 흥미롭네요. 하지만 최근 데이터 유출 사고를 고려할 때, 이러한 접근 방식이 새로운 보안 문제를 제기하지 않을까요?
**호스트 B:** 바로 그 점입니다. 전문가들은... [분석 또는 맥락 삽입]을 지적하고 있습니다.
**호스트 A:** 오픈소스 세계로 넘어가서, 오늘 GitHub에서 개발자들이 주목해야 할 트렌드는 무엇인가요?
**호스트 B:** 눈에 띄는 프로젝트는... [뉴스 항목 2의 간결한 요약]입니다.
**호스트 A:** 좋은 인사이트네요. 이상으로 오늘의 간단한 업데이트를 마치겠습니다. 들어주셔서 감사합니다!
4단계: 팟캐스트 오디오를 한 줄씩 생성하기
전체 대본을 한 번에 API로 보내지 않으려면, 문장 단위로(一人一句) 오디오를 생성한 후 연결하세요.
로컬 tts 스킬(skills/tts/scripts/tts.py)의 tts.py를 사용하세요. 전체 사용법과 백엔드 옵션을 보려면 tts 스킬의 SKILL.md를 읽으세요.
1. 각 대사에 대한 오디오 생성:
대본의 각 대화 줄에 대해 speak 명령을 실행하세요. 해당 호스트에 맞는 음성 또는 참조 오디오를 사용하세요. 사용자가 두 역할에 대한 참조 오디오 파일을 제공한 경우 --ref-audio 플래그와 함께 사용하세요(noiz 백엔드와 NOIZ_API_KEY 필요). API 키가 없으면 게스트 모드 음성을 사용할 수 있습니다(자세한 내용은 tts SKILL.md 참조).
python3 skills/tts/scripts/tts.py -t "오늘의 뉴스 요약 시간에 오신 것을 환영합니다..." --ref-audio host_A.wav -o line_01.wav
python3 skills/tts/scripts/tts.py -t "핵심은..." --ref-audio host_B.wav -o line_02.wav
2. 오디오 파일 연결:
생성된 모든 오디오 파일을 순서대로 나열한 텍스트 파일(예: list.txt)을 만드세요:
file 'line_01.wav'
file 'line_02.wav'
그런 다음 ffmpeg를 사용하여 하나의 팟캐스트 오디오 파일로 병합하세요:
ffmpeg -f concat -safe 0 -i list.txt -c copy podcast_output.wav
5단계: 최종 결과 제시
전체 오디오가 생성 및 병합된 후, 결과를 사용자에게 제시하세요. 다음 두 가지 콘텐츠를 모두 제공해야 합니다:
- 작성된 마크다운 팟캐스트 대본 전체를 채팅에 출력하여 사용자가 읽을 수 있도록 하세요.
- 최종
podcast_output.wav파일의 경로를 제공하여 사용자가 오디오를 들을 수 있도록 하세요. - 팟캐스트에 포함된 헤드라인을 간략히 요약하세요.
보안 및 데이터 공개
이 스킬은 지침 전용입니다. 자체적으로 실행 가능한 코드를 포함하지 않습니다. 런타임 시 두 종속 스킬의 스크립트를 조정합니다:
- 실행되는 스크립트:
news-aggregator-skill/scripts/fetch_news.py(공개 소스에서 뉴스를 가져옴) 및tts/scripts/tts.py(음성 오디오 생성). 이 스킬이 실행되기 전에 두 스크립트가 로컬에 있어야 합니다. 네트워크 동작 및 자격 증명 요구 사항에 대한 자세한 내용은 해당 코드와 SKILL.md를 검토하세요. - 자격 증명: 이 스킬은 직접 API 키나 환경 변수가 필요하지 않습니다.
tts종속성은 음성 복제 기능(noiz 백엔드)을 위해NOIZ_API_KEY가 필요할 수 있습니다. 키가 없으면 게스트 모드 음성이 기본적으로 작동합니다. 자세한 내용은 tts 스킬의 SKILL.md를 참조하세요. - 네트워크 액세스: 모든 네트워크 호출은 이 스킬의 지침이 아닌 종속 스킬에 의해 이루어집니다. news-aggregator는 공개 뉴스 소스에서 가져오며, tts 스킬은 noiz 백엔드가 사용될 때만
noiz.ai에 접속합니다. - 작성되는 파일:
podcast_script.md,line_*.wav(임시 문장별 오디오),list.txt(ffmpeg 연결 목록),podcast_output.wav(최종 출력). 모두 현재 작업 디렉토리에 작성됩니다. - 영구 상태 없음: 이 스킬은 구성 파일을 작성하거나, 자격 증명을 저장하거나, 다른 스킬을 수정하지 않습니다.