📘 **TELUS Agriculture & Consumer Goods** 如何通过 **Haystack Agents** 转变促销交易

集成:Elevenlabs

ElevenLabs 文本转语音组件,用于 Haystack。

作者
Andy

目录

概述

此存储库包含 ElevenLabs 的文本转语音 API 与 Haystack 流水的集成。此包允许您使用 ElevenLabs 的 API 将文本转换为语音,并可选择将生成的音频保存到 AWS S3。

安装

pip install elevenlabs_haystack

使用

ElevenLabs API 密钥

要访问 ElevenLabs API,您需要创建一个账户并获取一个 API 密钥。

  1. 访问 ElevenLabs 网站并注册一个账户。
  2. 登录后,导航到个人资料部分。
  3. API 部分,生成一个新的 API 密钥。
  4. 复制 API 密钥。

AWS 凭证

要将生成的音频文件存储在 AWS S3 上,您需要 AWS 凭证(访问密钥 ID、秘密访问密钥)并指定一个区域。

  1. 如果您没有 AWS 账户,请在 AWS 注册。
  2. 创建一个新的 IAM 用户,并分配必要的权限,允许用户将文件上传到 S3。AmazonS3FullAccess 策略足以满足此示例的要求。
  3. 创建 IAM 用户后,下载或记下AWS 访问密钥 ID秘密访问密钥
  4. 确定您的 S3 存储桶所在的AWS 区域(例如,us-east-1)。此信息可以在 AWS 管理控制台中找到。
  5. 最后,创建或识别将要保存生成的音频文件的 S3 存储桶。

在根目录下创建一个 .env 文件,内容如下(替换为您实际的凭证)

ELEVENLABS_API_KEY=sk_your_elevenlabs_api_key_here
AWS_ACCESS_KEY_ID=your_aws_access_key_id
AWS_SECRET_ACCESS_KEY=your_aws_secret_access_key
AWS_REGION_NAME=us-east-1
AWS_S3_BUCKET_NAME=your_s3_bucket_name

这些变量将使用 dotenv 自动加载,并用于安全地访问 ElevenLabs 和 AWS 服务。

基本文本转语音示例

此示例演示了如何使用 ElevenLabsTextToSpeech 组件将文本转换为语音,并将生成的音频文件保存在本地或 AWS S3 存储桶中。它使用环境变量来访问敏感凭证。

from haystack.utils import Secret
from elevenlabs_haystack import ElevenLabsTextToSpeech

# Initialize the ElevenLabsTextToSpeech component using environment variables for sensitive data
tts = ElevenLabsTextToSpeech(
    elevenlabs_api_key=Secret.from_env_var("ELEVENLABS_API_KEY"),
    output_folder="audio_files",  # Save the generated audio locally
    voice_id="Alice",  # ElevenLabs voice ID
    aws_s3_bucket_name=Secret.from_env_var("AWS_S3_BUCKET_NAME"),  # S3 bucket for optional upload
    aws_s3_output_folder="s3_files",  # Save the generated audio to AWS S3
    aws_access_key_id=Secret.from_env_var("AWS_ACCESS_KEY_ID"),
    aws_secret_access_key=Secret.from_env_var("AWS_SECRET_ACCESS_KEY"),
    aws_region_name=Secret.from_env_var("AWS_REGION_NAME"),  # AWS region
    voice_settings={
        "stability": 0.75,
        "similarity_boost": 0.75,
        "style": 0.5,
        "use_speaker_boost": True,  # Optional voice settings
    },
)

# Run the text-to-speech conversion
result = tts.run("Hello, world!")

# Print the result
print(result)

"""
{
    "id": "elevenlabs-id",
    "file_name": "audio_files/elevenlabs-id.mp3",
    "s3_file_name": "s3_files/elevenlabs-id.mp3",
    "s3_bucket_name": "test-bucket",
    "s3_presigned_url": "https://test-bucket.s3.amazonaws.com/s3_files/elevenlabs-id.mp3"
}
"""

使用 Haystack 流水线的示例

此示例演示了如何将 ElevenLabsTextToSpeech 组件集成到 Haystack 流水线中。此外,我们定义了一个 WelcomeTextGenerator 组件,用于生成个性化的欢迎消息。

from haystack import component, Pipeline
from haystack.utils import Secret
from elevenlabs_haystack import ElevenLabsTextToSpeech

# Define a simple component to generate a welcome message
@component
class WelcomeTextGenerator:
    """
    A component generating a personal welcome message and making it upper case.
    """
    @component.output_types(welcome_text=str, note=str)
    def run(self, name: str):
        return {
            "welcome_text": f'Hello {name}, welcome to Haystack!'.upper(),
            "note": "welcome message is ready"
        }

# Create a Pipeline
text_pipeline = Pipeline()

# Add WelcomeTextGenerator to the Pipeline
text_pipeline.add_component(
    name="welcome_text_generator",
    instance=WelcomeTextGenerator()
)

# Add ElevenLabsTextToSpeech to the Pipeline using environment variables
text_pipeline.add_component(
    name="tts",
    instance=ElevenLabsTextToSpeech(
        elevenlabs_api_key=Secret.from_env_var("ELEVENLABS_API_KEY"),
        output_folder="audio_files",  # Save the generated audio locally
        voice_id="Alice",  # ElevenLabs voice ID
        aws_s3_bucket_name=Secret.from_env_var("AWS_S3_BUCKET_NAME"),  # S3 bucket for optional upload
        aws_s3_output_folder="s3_files",  # Save the generated audio to AWS S3
        aws_access_key_id=Secret.from_env_var("AWS_ACCESS_KEY_ID"),
        aws_secret_access_key=Secret.from_env_var("AWS_SECRET_ACCESS_KEY"),
        aws_region_name=Secret.from_env_var("AWS_REGION_NAME"),  # Load region from env
        voice_settings={
            "stability": 0.75,
            "similarity_boost": 0.75,
            "style": 0.5,
            "use_speaker_boost": True,  # Optional voice settings
        },
    ),
)

# Connect the output of WelcomeTextGenerator to the input of ElevenLabsTextToSpeech
text_pipeline.connect(sender="welcome_text_generator.welcome_text", receiver="tts")

# Run the pipeline with a sample name
result = text_pipeline.run({"welcome_text_generator": {"name": "Bilge"}})

# Print the result
print(result)

"""
{
    "id": "elevenlabs-id",
    "file_name": "audio_files/elevenlabs-id.mp3",
    "s3_file_name": "s3_files/elevenlabs-id.mp3",
    "s3_bucket_name": "test-bucket",
    "s3_presigned_url": "https://test-bucket.s3.amazonaws.com/s3_files/elevenlabs-id.mp3"
}
"""

许可证

本项目根据 MIT 许可证进行许可。