代理语音产品发现助手
端到端演示:语音输入→ 基于LangGraph的代理规划→ RAG通过MCP超越亚马逊2020切片→ 可选的实时网络比较→ 有根据的、引用的答案→ TTS播放。
第一阶段——完整管道
语音转语音·RAG+Web混合·MCP驱动的代理
______________________________________________________________________
🚀 概述
该项目实现了 代理多模式产品搜索助手 使用:
- LangGraph 用于多步骤代理编排
- 拥抱亚马逊2020数据集 (15列-无评分,无评论)
- ChromaDB 向量索引
- MCP服务器 公开RAG+网络搜索工具
- 勇敢搜索API
- Whisper ASR 演讲
- OpenAI TTS 最后的口头回答
- 流线型UI 用于语音对语音演示
系统接受用户的语音输入→ 转换为文本→ 解读意图→ 通过RAG和/或网络搜索获取产品→ 返回答案→ 回答。
第一阶段已100%实施并开始工作。
______________________________________________________________________
📁 项目结构
agentic-voice-assistant/
│
├── app/
│ ├── ui_streamlit.py # Main Streamlit voice UI
│ ├── audio_utils.py # (optional placeholder)
│ └── components.py # (optional placeholder)
│
├── configs/
│ └── env.example
│
├── data/
│ ├── processed/products.csv # HF Amazon 2020 dataset (15 cols)
│ └── index/ # Chroma DB (auto-created)
│
├── graph/
│ ├── langgraph_pipeline.py
│ ├── schemas.py
│ └── nodes/
│ ├── router.py
│ ├── planner.py
│ ├── retriever.py
│ ├── answerer.py
│ └── critic.py
│
├── indexing/
│ └── build_index.py # Build HF→Chroma vector index
│
├── mcp_server/
│ ├── server.py # FastAPI MCP server
│ └── tools/
│ ├── rag_tool.py
│ └── web_tool.py
│
├── prompts/
│ ├── system_router.md
│ ├── system_planner.md
│ ├── system_answerer.md
│ └── tool_call_instructions.md # (empty for Phase 1)
│
├── scripts/
│ ├── build_index.sh
│ ├── run_mcp.sh
│ └── run_ui.sh
│
└── tts_asr/
├── asr_whisper.py
└── tts_client.py______________________________________________________________________
🔧 安装和设置
1.️⃣ 创造环境
conda create -n GenAI python=3.10 -y
conda activate GenAI
pip install -r requirements.txt______________________________________________________________________
2.️⃣ 添加环境变量
创建 .env 使用 configs/env.example 作为参考:
OPENAI_API_KEY=
BRAVE_API_KEY=
SEARCH_PROVIDER=brave
EMBED_MODEL=all-MiniLM-L6-v2
GEN_MODEL=openai/gpt-4o-mini
ASR_MODEL=small
TTS_PROVIDER=openai
TTS_VOICE=alloy
INDEX_PATH=./data/index
DATA_PRODUCTS=./data/processed/products.csv
MCP_BASE=http://127.0.0.1:8000______________________________________________________________________
📦 第1阶段组件
1.️⃣ HF数据集→ 色度指数
indexing/build_index.py:
- 重命名HF字段:
Uniq Id → id, Product Name → title, Selling Price → price等等。
- 清洁价格(
$移除→ 浮动) - 提取物
price_per_oz如有可能 - 确保 所有元数据都是Chroma安全的
- 将文档添加到集合
amazon2020
构建索引:
bash scripts/build_index.sh______________________________________________________________________
2.️⃣ MCP服务器(工具)
启动MCP:
bash scripts/run_mcp.sh暴露的工具:
/rag.search
- 语义搜索(句子转换器)
- 可选价格过滤器(
lte/gte)
- 输出字段:
- doc_id - title - price - brand (占位符) - sku
/web.search
- 勇敢的网络API
- 退货:
- title - url - snippet - profile
测试:
curl -X POST http://127.0.0.1:8000/rag.search \
-H "Content-Type: application/json" \
-d '{"query":"stainless steel cleaner"}'______________________________________________________________________
3.️⃣ 代理工作流(LangGraph)
工作流程: router → planner → retriever → answerer → critic
路由器
- 对意图进行分类
- 决定:
- 仅限RAG - 仅限web - 两者
- 提取过滤器(品牌、价格)
规划器
- 确保过滤器与HF匹配(仅限价格)
- 决定工具列表
检索器
- 调用MCP端点
- 存储RAG/Web证据
回答者
- HF数据集包含 没有评级、成分、评论
- 所以answerer使用:
- title - price - brand (空)
- 排序方式 售价仅
- 生成引用
批评家
- 第2阶段增强功能的占位符
______________________________________________________________________
4.️⃣ 语音用户界面(流媒体)
运行UI:
bash scripts/run_ui.sh特征:
- 录音
- Whisper ASR
- 多智能体推理
- 产品结果表
- 引用
- OpenAI TTS播放
打开浏览器:
http://localhost:8501______________________________________________________________________
🔥 下一页:第二阶段增强功能
接下来:
- 工具标准化层
- 冲突解决引擎
- Web–RAG合并逻辑
- 更好的产品排名
- 从web提取元数据
- 每盎司价格排名逻辑
- 安全+化学限制
- 对链完整性的批评重写
- LLM回退丢失的数据
- 最终答案评分系统
