一键导入
amazon-polly-generative
Amazon Polly Generative Voices. Reference skill (loaded via skill:// from the ios agent).
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Amazon Polly Generative Voices. Reference skill (loaded via skill:// from the ios agent).
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Amazon Location Service. Reference skill (loaded via skill:// from the ios agent).
Amazon Cognito — Custom UI with Passkeys, Social Login & Face ID. Reference skill (loaded via skill:// from the ios agent).
Builds generative AI applications on Amazon Bedrock. Covers model invocation (Converse API, InvokeModel), RAG with Knowledge Bases, Bedrock Agents, Guardrails, and AgentCore. Use when invoking models, setting up Knowledge Bases, creating agents, applying guardrails, deploying to AgentCore, troubleshooting Bedrock errors (ThrottlingException, AccessDeniedException), or choosing models (Claude, Llama, Nova, Titan). ALSO USE for prompt caching setup and debugging, quota health checks and throttling diagnosis, cost attribution and tracking, migrating between Claude model generations (4.5 to 4.6 to 4.7), chunking strategies, API selection (Converse vs InvokeModel), guardrail capabilities, and model selection. NOT for custom model training, Rekognition, or Comprehend.
| name | amazon-polly-generative |
| description | Amazon Polly Generative Voices. Reference skill (loaded via skill:// from the ios agent). |
Amazon Polly Generative engine produces the most human-like speech synthesis available on AWS. Use it for podcast-style content where naturalness, expressiveness, and conversational flow are critical.
| Voice ID | Gender | Language | Best For |
|---|---|---|---|
| Matthew | Male | en-US | Conversational, energetic host |
| Ruth | Female | en-US | Warm, articulate host |
| Stephen | Male | en-US | Authoritative, documentary |
| Gregory | Male | en-US | Calm, educational |
| Danielle | Female | en-US | Professional, clear |
import boto3
polly = boto3.client('polly', region_name='us-east-1')
response = polly.synthesize_speech(
Engine='generative',
OutputFormat='mp3',
SampleRate='24000',
Text='<speak>Hello from the road!</speak>',
TextType='ssml',
VoiceId='Matthew'
)
# Stream audio to S3
audio_stream = response['AudioStream'].read()
<speak>
<prosody rate="medium" pitch="medium">
Welcome back to the show!
</prosody>
<break time="500ms"/>
<prosody rate="slow" pitch="low">
Did you know that this highway was built in 1952?
</prosody>
</speak>
<speak>
<emphasis level="strong">Wow</emphasis>, that's incredible!
<break time="300ms"/>
<prosody rate="fast" pitch="high">
I can't believe we're already passing through Banff!
</prosody>
</speak>
<!-- Between speakers (natural conversation pause) -->
<break time="800ms"/>
<!-- Dramatic pause -->
<break time="1500ms"/>
<!-- Quick interjection pause -->
<break time="200ms"/>
<!-- Paragraph break -->
<break strength="x-strong"/>
<amazon:effect name="soft">
This is a little-known secret about this town...
</amazon:effect>
For two-host podcast content, generate the script in this structured format:
{
"segmentId": "seg-001",
"title": "The Ghost Town of Bankhead",
"duration_target_seconds": 90,
"dialogue": [
{
"speaker": "host_a",
"voiceId": "Matthew",
"text": "Okay so get this — we're about to pass through what used to be a thriving coal mining town.",
"ssml_hints": {
"rate": "medium",
"emphasis_words": ["thriving"]
}
},
{
"speaker": "host_b",
"voiceId": "Ruth",
"text": "Wait, a coal mining town? Here in the middle of the Rockies?",
"ssml_hints": {
"rate": "medium-fast",
"pitch": "high",
"emphasis_words": ["coal mining town"]
}
},
{
"speaker": "host_a",
"voiceId": "Matthew",
"text": "Yep! Bankhead. At its peak in 1911, over a thousand people lived here. They had a swimming pool, a tennis court, even a hockey rink.",
"ssml_hints": {
"rate": "medium",
"emphasis_words": ["thousand", "hockey rink"]
}
}
]
}
After generating individual voice clips per dialogue turn:
from pydub import AudioSegment
import io
def stitch_dialogue(turns: list[dict], audio_clips: list[bytes]) -> bytes:
"""Stitch individual Polly clips into a single podcast segment."""
combined = AudioSegment.empty()
for i, (turn, clip) in enumerate(zip(turns, audio_clips)):
segment = AudioSegment.from_mp3(io.BytesIO(clip))
combined += segment
# Add pause between speakers
if i < len(turns) - 1:
next_speaker = turns[i + 1]['speaker']
current_speaker = turn['speaker']
if next_speaker != current_speaker:
combined += AudioSegment.silent(duration=600) # Speaker change: 600ms
else:
combined += AudioSegment.silent(duration=300) # Same speaker continuation: 300ms
# Normalize to -16 dBFS (broadcast standard)
combined = combined.normalize()
output = io.BytesIO()
combined.export(output, format='mp3', bitrate='128k')
return output.getvalue()
from aws_cdk import aws_iam as iam
# Lambda role needs Polly access
polly_policy = iam.PolicyStatement(
actions=[
'polly:SynthesizeSpeech',
'polly:DescribeVoices',
'polly:GetSpeechSynthesisTask',
'polly:StartSpeechSynthesisTask'
],
resources=['*']
)
<break> tags at natural pause points (commas, periods aren't enough)