关于 init
init 是一个引导用户选择 Pipecat 项目配置并运行 `pipecat init` 的技能,用于生成 Bot 项目。它读取 CLI 的当前选项,配置传输方式、AI 服务、功能和部署文件。
主要功能
- 01检查 Pipecat CLI 是否已安装
- 02从 `--list-options` 获取当前选项
- 03收集 Bot 和传输设置
- 04配置流水线服务与功能
- 05运行非交互式项目脚手架
适用场景
- 01启动 Web 或电话 Bot 项目
- 02选择传输方式和 AI 服务
- 03在当前目录生成项目
- 04设置项目时生成部署文件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pipecat-ai/ skills --skill init安装后在 Claude Code 中输入/init确认已加载。
详细介绍
通过收集用户的配置并以非交互模式运行 pipecat init,搭建一个新的 Pipecat 项目。
参数
/init [<target-dir>]
<target-dir>(可选):用于创建项目的目录。默认为以项目名命名的新目录。使用.表示当前目录。
前置条件
通过运行 pipecat --version 检查 pipecat 是否已安装。如果未安装,告知用户使用 uv tool install pipecat-ai-cli 进行安装,然后停止。
发现可用选项
在向用户提出任何问题之前,运行 pipecat init --list-options 以获取所有字段的当前有效值。输出为 JSON:
{
"bot_type": ["web", "telephony"],
"transports": {
"web": ["daily", "smallwebrtc"],
"telephony": ["twilio", "telnyx", ...]
},
"stt": ["deepgram_stt", "openai_stt", ...],
"llm": ["openai_llm", "anthropic_llm", ...],
"tts": ["cartesia_tts", "elevenlabs_tts", ...],
"realtime": ["openai_realtime", "gemini_live_realtime", ...],
"video": ["heygen_video", "tavus_video", "simli_video"]
}
使用此数据填充下面每个问题中的选项。不要硬编码服务列表——始终使用来自 --list-options 的值。
配置流程
按以下问题逐步构建项目配置。收集完所有答案后,显示摘要并运行命令。
选择正确的交互方式:
- AskUserQuestion — 用于选项较少且固定的一组问题(bot 类型、管道模式、客户端框架、是/否问题)。这会提供简洁的可点击 UI。
- 以文本形式显示列表 — 用于选项较多的问题(STT、LLM、TTS、实时、视频、传输)。显示来自
--list-options的完整可用选项列表,格式化为可读列表,然后让用户在聊天中回复其选择。
步骤 1:项目名称
询问用户项目名称。这会作为目标目录(位置参数)传入——项目会就地搭建在以该名称命名的目录中,项目标识符也由此派生。
步骤 2:Bot 类型
让用户选择一种 bot 类型:
- Web/Mobile(
web)- 浏览器或移动应用 - Telephony(
telephony)- 电话通话
步骤 3:客户端框架(仅 web)
如果 bot 类型为 web,让用户选择一种客户端框架:
- React(
react) - Vanilla JS(
vanilla) - None(
none)- 仅服务端,不生成客户端
如果用户选择了 React,询问使用哪个开发服务器:
- Vite(
vite) - Next.js(
nextjs)
Telephony bot 完全跳过此步骤。
步骤 4:传输
向用户显示来自 --list-options 的完整可用传输列表,并按所选 bot 类型过滤。让用户回复其选择。
如果用户选择了 daily_pstn 传输,询问模式:
- 呼入(接听电话)→ 使用
--daily-pstn-mode dial-in - 呼出(拨打电话)→ 使用
--daily-pstn-mode dial-out
如果用户选择了 twilio_daily_sip 传输,询问模式:
- 呼入(接听电话)→ 使用
--twilio-daily-sip-mode dial-in - 呼出(拨打电话)→ 使用
--twilio-daily-sip-mode dial-out
然后询问他们是否要添加用于本地测试的附加传输。这很常见——例如,一个还支持 WebRTC 以用于开发的 telephony bot。
步骤 5:管道模式
让用户选择一种管道架构:
- Cascade(
cascade)- STT → LLM → TTS 管道 - Realtime(
realtime)- 语音到语音模型
步骤 6:AI 服务
如果是 cascade 模式,显示来自 --list-options 的每个服务的完整可用选项列表,并让用户回复其选择:
- 语音转文本(STT) — 显示所有可用的 STT 服务
- 语言模型(LLM) — 显示所有可用的 LLM 服务
- 文本转语音(TTS) — 显示所有可用的 TTS 服务
如果是 realtime 模式,显示所有可用的实时服务,并让用户回复其选择。
对于每个服务问题,将选项显示为编号的垂直列表(每行一个),以便用户轻松浏览并选择一个。
第 7 步:功能
向用户展示默认功能设置,并询问他们是否要自定义:
默认值:
- 音频录制:否
- 转写日志记录:否
- 视频头像服务:无
- 视频输入:否(仅 Web)
- 视频输出:否(仅 Web)
- 可观测性:否
如果他们想自定义,逐一询问每个功能。对于视频头像服务(仅 Web 机器人),使用 --list-options 中的视频选项。
如果选择了视频头像服务,视频输出会自动启用。
第 8 步:部署
询问他们是否要生成 Pipecat Cloud 部署文件(Dockerfile、pcc-deploy.toml)。默认是。
如果要部署到云端,询问他们是否要启用 Krisp 降噪。默认否。
构建命令
收集完所有答案后,使用非交互式标志构建 pipecat init 命令。将项目名称作为位置目标目录放在最前面——项目会在该位置就地搭建:
pipecat init <project_name> \
--bot-type <web|telephony> \
--transport <transport> \
--mode <cascade|realtime> \
[--stt <service>] \
[--llm <service>] \
[--tts <service>] \
[--realtime <service>] \
[--video <service>] \
[--client-framework <react|vanilla|none>] \
[--client-server <vite|nextjs>] \
[--daily-pstn-mode <dial-in|dial-out>] \
[--twilio-daily-sip-mode <dial-in|dial-out>] \
[--recording | --no-recording] \
[--transcription | --no-transcription] \
[--video-input | --no-video-input] \
[--video-output | --no-video-output] \
[--deploy-to-cloud | --no-deploy-to-cloud] \
[--enable-krisp | --no-enable-krisp] \
[--observability | --no-observability] \
[--eval | --no-eval]
传入搭建标志会让 pipecat init 以非交互方式运行(无提示),并就地搭建可运行的机器人,同时写入编码 Agent 指南文件(AGENTS.md、CLAUDE.md)。
使用 . 作为目标,可搭建到当前目录而不是新目录。
对于多个传输方式,重复 --transport 标志(例如 --transport twilio --transport smallwebrtc)。
确认
在运行命令之前,向用户展示其选择的摘要:
- 项目名称
- 机器人类型
- 客户端框架(如果是 Web)
- 传输方式
- 流水线模式和服务
- 已启用的功能
- 部署目标
请用户在继续之前确认。如果他们想更改某些内容,返回并重新询问该特定问题。
运行命令
运行 pipecat init 命令。位置目标目录控制项目的创建位置——如果用户提供了 <target-dir> 参数,则使用该参数,否则默认使用以项目名称命名的新目录。
如果命令成功,向用户展示生成了什么,并建议后续步骤:
cd <project_name>/server- 将
.env.example复制为.env并填入 API 密钥 - 运行机器人
如果要部署到云端,还要提到他们可以使用 /pipecat-cloud:deploy 进行部署。
错误处理
- 如果
pipecat init因验证错误而失败,展示错误并帮助用户修正他们的选择。 - 如果目标目录已存在且不为空,在继续之前警告用户。