Luna:支持语音的费用管理代理
Luna是一款使用Langgraph构建的语音AI助手,可帮助用户通过自然对话来管理开支。该项目演示了如何为任何Langgraph代理创建语音接口,将语音到文本和文本到语音功能与强大的代理框架相结合。
🌟 特性
- 语音交互:与Luna交谈,通过高质量的文本到语音听取回应
- 费用管理:通过自然对话创建、查询、更新和删除费用
- 类别分类:根据描述自动对费用进行分类
- 数据库集成:将费用数据存储在PostgreSQL数据库中(通过Supabase)
- 使用Agent的工具:使用Langgraph的代理框架构建,用于复杂推理
🛠️ 技术栈
后端
- Python 3.13:后端的核心语言
- 兰格拉夫:用于构建会话式人工智能的代理框架
- OpenAI:
- 语音转文本的Whisper API - GPT-4 Mini用于代理推理 - 用于文本到速度响应的TTS API
- MCP(模型调用协议):用于定义和使用工具
- SQL炼金术:ORM用于数据库交互
- Supabase:PostgreSQL数据库提供程序
音频处理
- 音响装置:用于从麦克风捕获音频
- Scipy 的:用于音频文件处理
📋 先决条件
- Python 3.13
- OpenAI API密钥
- 辅助账户和数据库
- 麦克风和扬声器
🚀 入门指南
1.克隆存储库
git clone https://github.com/rosiefaulkner/langgraph-voice-agent.git
cd langgraph-voice-agent2.设置虚拟环境并安装依赖项
(推荐)使用 紫外线 用于依赖关系管理
在项目目录中设置venv,并使用一个命令安装所有依赖项。
uv sync3.设置环境变量
创建一个 .env 根目录中的文件,包含以下变量:
OPENAI_API_KEY=your_openai_api_key
SUPABASE_URI=postgresql://postgres:password@db.example.supabase.co:5432/postgres4.运行应用程序
python main.py🎤 使用Luna
- 运行应用程序
- 当系统提示时,说出你的请求(例如,“为今天的午餐创建一笔新的费用,花费15美元”)
- 按Enter停止录制
- Luna将处理您的请求,必要时与数据库交互,并口头回复
- 继续对话或说“退出”或“退出”以结束会话
🧩 项目结构
langgraph-voice-agent/
├── main.py # Main application entry point
├── assistant_graph.py # Langgraph agent definition
├── state.py # State management for the agent
├── voice_utils.py # Audio recording and playback utilities
├── mcps/ # Model Calling Protocol servers
│ ├── mcp_config.json # MCP server configuration
│ └── local_servers/
│ └── db.py # Database tools implementation
├── .env # Environment variables (not in repo)
├── .env.example # Example environment variables
└── pyproject.toml # Project dependencies🔧 自定义代理
修改系统提示
要更改Luna的个性或能力,请编辑 system_prompt 在……里面 assistant_graph.py:
system_prompt = """You are Luna, the company's expense manager...添加新工具
- 在中创建新的MCP服务器或向现有服务器添加工具
mcps/local_servers/ - 在中注册服务器
mcps/mcp_config.json - 代理将自动使用这些工具
更改语音设置
在中修改TTS设置 voice_utils.py:
async def play_audio(message: str):
# ...
async with openai_async.audio.speech.with_streaming_response.create(
model="gpt-4o-mini-tts",
voice="fable", # Change the voice here
input=cleaned_message,
instructions="Speak in a cheerful, helpful tone with a brisk pace.", # Modify instructions
response_format="pcm",
speed=1.2, # Adjust speed
) as response:
# ...📚 资源
🤝 贡献
欢迎投稿!请随时提交拉取请求。
