返回市场
语言图谱语音代理

语言图谱语音代理

作者:rosiefaulkner22 星标更新:2025-05-27

项目介绍

Luna:语音驱动的费用管理代理

Luna 是一个基于 Langgraph 构建的语音驱动的 AI 助手,通过自然对话帮助用户管理他们的费用。这个项目展示了如何为任何 Langgraph 代理创建语音接口,结合了语音转文本和文本转语音的功能与强大的代理框架。

🌟 特性

  • 语音交互:与 Luna 对话并通过高质量的文本转语音听到回应
  • 费用管理:通过自然对话创建、查询、更新和删除费用
  • 分类归类:根据描述自动对费用进行分类
  • 数据库集成:在 PostgreSQL 数据库中存储费用数据(通过 Supabase)
  • 工具使用代理:使用 Langgraph 的代理框架进行复杂推理

🛠️ 技术栈

后端

  • Python 3.13:后端的核心语言
  • Langgraph:用于构建对话式 AI 的代理框架
  • OpenAI
    • 使用 Whisper API 进行语音转文本
    • 使用 GPT-4 Mini 进行代理推理
    • 使用 TTS API 进行文本转语音响应
  • MCP(模型调用协议):定义和使用工具
  • SQLAlchemy:用于数据库交互的 ORM
  • Supab abase:PostgreSQL 数据库提供商

音频处理

  • sounddevice:从麦克风捕获音频
  • scipy:音频文件处理

📋 先决条件

  • Python 3.13
  • OpenAI API 密钥
  • Supabase 账户和数据库
  • 麦克风和扬声器

🚀 开始使用

1. 克隆仓库

git clone https://github.com/rosiefaulkner/langgraph-voice-agent.git
cd langgraph-voice-agent

2. 设置虚拟环境并安装依赖

(推荐)使用 uv 进行依赖管理

在项目目录中设置 venv 并使用一条命令安装所有依赖。

uv sync

3. 设置环境变量

在根目录下创建一个 .env 文件,并添加以下变量:

OPENAI_API_KEY=your_openai_api_key
SUPABASE_URI=postgresql://postgres:password@db.example.supabase.co:5432/postgres

4. 运行应用程序

python main.py

🎤 使用 Luna

  1. 运行应用程序
  2. 当提示时,说出你的请求(例如,“创建今天午餐花费15美元的新费用”)
  3. 按 Enter 停止录音
  4. Luna 将处理你的请求,如有需要会与数据库交互,并口头回应
  5. 继续对话或说“退出”或“结束”以结束会话

🧩 项目结构

langgraph-voice-agent/
├── main.py                  # 主应用入口点
├── assistant_graph.py       # Langgraph 代理定义
├── state.py                 # 代理的状态管理
├── voice_utils.py           # 音频录制和播放工具
├── mcps/                    # 模型调用协议服务器
│   ├── mcp_config.json      # MCP 服务器配置
│   └── local_servers/
│       └── db.py            # 数据库工具实现
├── .env                     # 环境变量(不在仓库中)
├── .env.example             # 示例环境变量
└── pyproject.toml           # 项目依赖

🔧 自定义代理

修改系统提示

要更改 Luna 的个性或能力,请编辑 assistant_graph.py 中的 system_prompt

system_prompt = """您是 Luna,公司的费用管理员...

添加新工具

  1. mcps/local_servers/ 中创建新的 MCP 服务器或向现有服务器添加工具
  2. mcps/mcp_config.json 中注册服务器
  3. 工具将自动对代理可用

更改语音设置

修改 voice_utils.py 中的 TTS 设置:

async def play_audio(message: str):
    # ...
    async with openai_async.audio.speech.with_streaming_response.create(
        model="gpt-4o-mini-tts",
        voice="fable",  # 在此处更改语音
        input=cleaned_message,
        instructions="以愉快、乐于助人的语气快速说话。",  # 修改指令
        response_format="pcm",
        speed=1.2,  # 调整速度
    ) as response:
        # ...

📚 资源

🤝 贡献

欢迎贡献!请随时提交拉取请求。