Communitygithub.com

與任何人聊天

透過自動尋找真人或虛構角色在網路上的語音、提取乾淨的參考樣本並生成音訊回覆,來與他們聊天。也支援從上傳的圖片生成匹配的聲音。

與任何人聊天 是什麼?

「與任何人聊天」技能可讓 AI 代理克隆真人或虛構角色的聲音,實現語音角色扮演。它支援兩種工作流程:基於姓名(工作流程 A)和基於圖片(工作流程 B)。工作流程 A 會搜尋 YouTube 或 Bilibili 等平台上的公開採訪或演講影片,下載音訊和字幕,然後使用「extract_ref_segment.py」腳本提取最清晰的 3-12 秒語音片段。工作流程 B 則分析上傳的人物圖片,若該人物是可辨識的公眾人物,則建議切換至工作流程 A;若無法辨識,則使用「voice_design.py」腳本來設計語音,並生成預覽音檔。兩種工作流程最終都透過相依的「tts」技能和 NOIZ_API_KEY 來產生最終的語音回覆。此技能強制執行嚴格的道德準則:禁止冒充、詐騙或騷擾;僅能使用公開媒體;並必須告知使用者音訊為合成內容。若偵測到有害意圖,代理必須拒絕請求。它依賴 ffmpeg、yt-dlp、tts 技能以及有效的 NOIZ API 金鑰。

相容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/noizai/skills/tree/main/skills/chat-with-anyone

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

與任何人聊天 是做什麼的?

從線上影片克隆真人的聲音,或從照片設計聲音,然後使用 TTS 以該角色進行角色扮演。

重要:倫理使用與版權

此技能會合成模仿真實聲音的語音。在繼續之前,代理必須:

  1. 切勿冒充他人進行欺騙、詐騙或騷擾。
  2. 僅使用公開可用的媒體(公開演講、採訪、記者會)作為參考音訊。
  3. 告知使用者生成的音訊是合成的,不應將其呈現為真實錄音。
  4. 拒絕針對未經同意的私人個體,或明顯意圖欺騙、騷擾或誹謗的請求。

如果使用者的意圖看似有害,請禮貌拒絕並解釋原因。

先決條件

依賴項類型如何驗證
ffmpeg系統二進位檔ffmpeg -version
yt-dlp系統二進位檔yt-dlp --version
tts 技能Cursor 技能ls skills/tts/scripts/tts.py
NOIZ_API_KEY環境變數或檔案python3 skills/tts/scripts/tts.py config --show

在首次執行前,請驗證所有依賴項是否存在:

ffmpeg -version && yt-dlp --version && ls skills/tts/scripts/tts.py

如果缺少 yt-dlp,請安裝它:

uv pip install yt-dlp

如果未設定 Noiz API 金鑰:

python3 skills/tts/scripts/tts.py config --set-api-key YOUR_KEY

模式選擇

  • 使用者指定人名(真實或虛構)--> 工作流程 A
  • 使用者提供圖片,人物無法辨識 --> 工作流程 B
  • 使用者提供圖片,人物是可辨識的公眾人物 --> 工作流程 A(真實聲音更真實)
  • 圖片中有多人 --> 先詢問是哪個人

工作流程 A:基於姓名(從線上影片取得聲音)

使用此核對清單追蹤進度:

- [ ] A1. 釐清角色
- [ ] A2. 尋找參考影片
- [ ] A3. 下載音訊與字幕
- [ ] A4. 提取最佳參考片段
- [ ] A5. 生成語音

A1. 釐清角色

如果有歧義(例如「美國總統」、「蜘蛛人演員」),在繼續之前,請要求使用者指定確切的人物。

A2. 尋找參考影片

使用網路搜尋,尋找該人物清晰說話的 YouTube(或 Bilibili)影片。最佳候選:採訪、演講、記者會。避免有大量背景音樂的影片。

可嘗試的搜尋查詢:

  • {CHARACTER_NAME} interview / {CHARACTER_NAME} 採訪
  • {CHARACTER_NAME} speech / {CHARACTER_NAME} 演講
  • {CHARACTER_NAME} press conference

A3. 下載音訊與字幕

mkdir -p "tmp/chat_with_anyone/{CHARACTER_NAME}"
yt-dlp -x --audio-format mp3 \
  --write-subs --write-auto-subs --sub-langs "en,zh-Hans" \
  --convert-subs srt \
  -o "tmp/chat_with_anyone/{CHARACTER_NAME}/%(title)s.%(ext)s" \
  "{VIDEO_URL}"

下載後,列出輸出目錄以識別音訊檔案和 SRT 字幕檔案:

ls tmp/chat_with_anyone/{CHARACTER_NAME}/

預期輸出:一個 .mp3 音訊檔案和一個或多個 .srt 字幕檔案。

如果沒有出現字幕檔案:嘗試其他有自動產生的隱藏式字幕的影片,或為目標語言調整 --sub-langs。

A4. 提取最佳參考片段

使用自動提取腳本——它會解析 SRT,找到最密集的 3-12 秒語音區間,並將其提取為 WAV:

python3 skills/chat-with-anyone/scripts/extract_ref_segment.py \
  --srt "tmp/chat_with_anyone/{CHARACTER_NAME}/{SRT_FILE}" \
  --audio "tmp/chat_with_anyone/{CHARACTER_NAME}/{AUDIO_FILE}" \
  -o "tmp/chat_with_anyone/{CHARACTER_NAME}/ref.wav"

該腳本會列印所選時間範圍並儲存參考 WAV。在繼續之前,請驗證輸出是否存在且非空。

如果腳本報告沒有合適的片段:嘗試對較短的片段使用 --min-duration 2,或下載不同的影片。

A5. 生成語音與角色扮演

以角色風格撰寫回覆,然後進行合成:

python3 skills/tts/scripts/tts.py \
  -t "{RESPONSE_TEXT}" \
  --ref-audio "tmp/chat_with_anyone/{CHARACTER_NAME}/ref.wav" \
  -o "tmp/chat_with_anyone/{CHARACTER_NAME}/reply.wav"

將生成的音訊檔案連同文字一起呈現給使用者。對於後續訊息,請重複使用相同的 --ref-audio 路徑。


工作流程 B:基於圖片(從照片取得聲音)

使用此核對清單追蹤進度:

- [ ] B1. 分析圖片
- [ ] B2. 設計聲音
- [ ] B3. 預覽(可選)
- [ ] B4. 生成語音

B1. 分析圖片

使用您的視覺能力檢查圖片:

  1. 如果該人物是可辨識的公眾人物 --> 切換到工作流程 A 以獲得真實聲音。
  2. 如果無法辨識,請產出聲音描述,涵蓋:
    • 性別(男 / 女)
    • 大概年齡(例如「約30歲」)
    • 明顯氣質(例如開朗、權威、溫柔)
    • 背景線索(例如西裝 --> 專業語氣;運動服 --> 充滿活力)

B2. 設計聲音

將圖片和描述一同傳遞給聲音設計腳本:

python3 skills/chat-with-anyone/scripts/voice_design.py \
  --picture "{IMAGE_PATH}" \
  --voice-description "{VOICE_DESCRIPTION}" \
  -o "tmp/chat_with_anyone/voice_design"

該腳本會輸出:

  • 偵測到的聲音特徵(印到標準輸出)
  • 輸出目錄中的預覽音訊檔案
  • 包含最佳聲音 ID 的 voice_id.txt

讀取聲音 ID:

cat tmp/chat_with_anyone/voice_design/voice_id.txt

B3. 預覽(可選)

呈現來自輸出目錄的預覽音訊檔案,讓使用者可以聽到聲音。如果不滿意,請使用調整後的 --voice-description 或 --guidance-scale 重新執行 B2。

B4. 生成語音與角色扮演

python3 skills/tts/scripts/tts.py \
  -t "{RESPONSE_TEXT}" \
  --voice-id "{VOICE_ID}" \
  -o "tmp/chat_with_anyone/voice_design/reply.wav"

對於後續訊息,請持續使用相同的 --voice-id 以保持一致。


範例:基於姓名

使用者:我想跟特朗普聊天,讓他給我講個睡前故事。

代理步驟:

  1. 角色:唐納·川普。無需釐清。
  2. 搜尋 Donald Trump speech youtube,找到一個清晰的演講影片。
  3. 下載: yt-dlp -x --audio-format mp3 --write-subs --write-auto-subs --sub-langs "en" --convert-subs srt -o "tmp/chat_with_anyone/trump/%(title)s.%(ext)s" "https://youtube.com/watch?v=..."
  4. 提取參考: python3 skills/chat-with-anyone/scripts/extract_ref_segment.py --srt "tmp/chat_with_anyone/trump/....srt" --audio "tmp/chat_with_anyone/trump/....mp3" -o "tmp/chat_with_anyone/trump/ref.wav"
  5. 以川普風格生成 TTS: python3 skills/tts/scripts/tts.py -t "Let me tell you a tremendous bedtime story..." --ref-audio "tmp/chat_with_anyone/trump/ref.wav" -o "tmp/chat_with_anyone/trump/reply.wav"
  6. 將 reply.wav 和故事文字呈現給使用者。

範例:基於圖片

使用者:[上傳 photo.jpg] 我想跟這張圖片裡的人聊天

代理步驟:

  1. 視覺分析:無法辨識的年輕女性,約25歲,穿著休閒毛衣,溫暖的微笑。
  2. 設計聲音: python3 skills/chat-with-anyone/scripts/voice_design.py --picture "photo.jpg" --voice-description "A young Chinese woman around 25, gentle and warm voice, friendly tone" -o "tmp/chat_with_anyone/voice_design"
  3. 從 tmp/chat_with_anyone/voice_design/voice_id.txt 讀取聲音 ID。
  4. 生成 TTS: python3 skills/tts/scripts/tts.py -t "你好呀!很高興認識你!" --voice-id "{VOICE_ID}" -o "tmp/chat_with_anyone/voice_design/reply.wav"
  5. 呈現音訊並使用相同的 --voice-id 繼續角色扮演。

故障排除

問題解決方案
yt-dlp 下載失敗或影片不可用嘗試不同的影片網址;某些地區/影片受到限制。執行 yt-dlp -U 進行更新
沒有 SRT 字幕檔案使用 --sub-lang en,zh-Hans 重新下載;如果仍然沒有,嘗試其他具有自動隱藏式字幕的影片
extract_ref_segment.py 找不到合適的區間對較短片段使用 --min-duration 2,或嘗試不同的影片
聲音設計回傳錯誤檢查 Noiz API 金鑰;確保圖片是清晰的人物照片
TTS 輸出聽起來不對對於工作流程 A,嘗試不同的參考影片;對於工作流程 B,調整 --voice-description

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

相關技能