实时语音解析服务器

一个支持实时语音解析、数据库自动迁移和API集成的服务器,适用于订单处理和库存管理。

  • by PSYGER02
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 PSYGER02/mcpserver

使用说明

mcp服务器

添加到.env: JWT_SECRET=your_JWT_SECRET_here(生成一个强密码,例如通过openssl和-hex 32)

实时WebSockets

对于实时语音解析(例如,不准确的订单),请在端口3002上使用WebSockets。

客户端示例(带Web语音API的浏览器)

const ws = new WebSocket('ws://localhost:3002'); // Add ?token=your-jwt for auth
ws.onopen = () => console.log('Connected');
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.continuous = true;
recognition.interimResults = true;
recognition.onresult = (event) => {
  for (let i = event.resultIndex; i < event.results.length; i++) {
    const chunk = event.results[i][0].transcript;
    ws.send(JSON.stringify({
      toolName: 'live_voice_stream',
      params: { streamId: 'session1', transcriptChunk: chunk, products: [{id: 'whole', name: 'Whole Chicken'}] }
    }));
  }
};
ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  if (data.partialParse) console.log('Partial:', data.partialParse); // e.g., {items: [{productId: 'whole', qty: 2}], confidence: 0.8}
  if (data.final) console.log('Final sales:', data.final); // Structured {items, payment}
  if (data.streamChunk) console.log('Gemini correction:', data.streamChunk);
};
recognition.start();

服务器协议

  • 连接:ws://localhost:3002(升级时授权:承载 )
  • 发送:JSON{toolName:'live_voice_stream',参数:{streamId,transcriptChunk,products?}}
  • 接收:流式传输{部分解析:{…},置信度:数字}或{最终:{结构化销售:{…}},streamId}
  • 超时:最终解析5秒;模糊+双子流处理“chikin”→ “整只鸡”。

与Todo 1身份验证集成,以实现安全流。

数据库迁移

服务器在启动时使用服务角色自动迁移数据库(如果表丢失,则运行sql/enhanced-database-schema.sql,通过notes-table进行幂等检查)。

  • 自动:在npm run dev/start上,将构造函数--logs中调用的migrate()迁移到ai_audit_logs。
  • 手册:构建(npm run Build),然后是节点dist/migrate.js(独立运行,记录错误)。
  • 模式:编辑sql/enhanced-database-schema.sql以进行更改(表:注释、实体、关系、观察、ai_audit_logs、产品、销售;pgvector索引)。
  • 后备方案:如果失败,手动Supabase SQL编辑器将运行schema.SQL(服务角色绕过RLS)。

可扩展性

对于生产规模,使用集群模式:

  • Run:npm Run start:cluster(对于多核,env WORKERS=4)。
  • 指南:有关多实例、并发选项(批处理=5)、负载平衡(WS-sticky),请参阅[MD files/scalability.MD](MD files/scalable.MD)。

API集成示例

注意工作流程(使用JWT卷曲)

  1. 身份验证:curl-X POSThttp://localhost:3002/auth-H“内容类型:应用程序/json”-d'{“令牌”:“your_mcp_auth_token”}'→ {“token”:“jwt_here”}

  2. 收集笔记:curl-X POSThttp://localhost:3002/api/tools/call-H“授权:持有者jwt_here”-H“内容类型:应用程序/json”-d'{“名称”:“note_collection”,“参数”:{“内容”:“用10000比索买了20袋整鸡”,“用户角色”:“所有者”}'→ {“成功”:true,“结果”:{“note_id”:“uuid”,“消息”:“已收集笔记”}}

  3. 解析:curl-X POST。..-d'{“name”:“parse_chicken_note”,“arguments”:{“note_id”:“uuid”}'→ {“success”:true,“result”:{“parsed_data”:{“purchases”:〔{“productId”:“whole”,“qty”:20,“cost”:10000}〕,“status”:“analysted”}}

  4. 应用:卷曲-X POST。..-d'{“name”:“apply_to_stock”,“arguments”:{“note_id”:“uuid”}'→ {“成功”:true,“消息”:“股票已更新”}

部署(Heroku/Codespace)

  • Heroku:Heroku创建,git推送Heroku主,Heroku配置:设置GEMINI_API_KEY=。..suabase_URL=。..JWT_SECRET=。..工人=4
  • 程序文件:web:npm运行开始:集群
  • 代码空间:npm运行dev:cluster(环境工人=2)
  • 规模:heroku ps:Scale web=2(多动态负载平衡)

故障排除

  • 代理重试:高级GeminiProxy在429/5xx上回退3次(检查日志)。
  • 速率限制:10/min/用户(Todo 1429错误);增加环境最大请求值_PER_MINUTE。
  • 数据库问题:启动时自动迁移;如果失败,手动节点dist/migrate.js(检查aiaudit_logs)。
  • WS-auth:WS://localhost:3002?token=jwt_here代表live_voice_stream。

集成示例

注意工作流程(使用JWT卷曲)

  1. 身份验证:curl-X POSThttp://localhost:3002/auth-H“内容类型:应用程序/json”-d'{“令牌”:“your_mcp_auth_token”}'(获取JWT)。

  2. 收集备注:curl-X POSThttp://localhost:3002/api/tools/call-H“授权书:持票人 “-H”内容类型:application/json“-d”{“name”:“note_collection”,“arguments”:{“Content”:“花10k买了20袋整鸡”,“userRole”:”owner“}'(响应{note_id,成功})。

  3. 解析:curl-X POST。..-d'{“name”:“parse_chicken_note”,“arguments”:{“note_id”:““}”(响应{解析:{购买:[{产品ID:“整件”,数量:20,成本:10000}]})。

  4. 应用:卷曲-X POST。..-d'{“name”:“apply_to_stock”,“arguments”:{“note_id”:““,”dry_run“:false}}”(响应{成功,stockUpdated})。

语音流(WS)

请参阅实时WebSockets部分。

预测:卷曲-X POST。..-d'{“名称”:“预测库存”,“参数”:{“销售历史”:[{“日期”:“2025-09-22”,“金额”:5000}]}'(回复{预测销售额:[{天:“1”,金额:5500,置信度:0.8}],摘要})。

部署

Heroku

  1. 进程文件:web:npm启动:集群
  2. 环境:GEMINI_API_KEY、SUPABASE_URL、SUPABASE_SERVICE_ROLE_KEY、MCP_AUTH_TOKEN、JWT_SECRET、PORT=3002、WORKERS=2
  3. 部署:git推送heroku main;heroku scale web=2(多dyno用于缩放)。

代码空间

  1. .devcontainer/devcontainer.json:postCreateCommand“npm i&&npm run build”
  2. 运行:npm运行dev:cluster(环境工人=4)

有关多实例,请参阅scalability.md。

故障排除

  • 代理检索:advanced-gemini-proxy.ts在429/5xx上回退(环境gemini_RETRY_MAX=3)。
  • 速率限制:10/min/用户(每个待办事项1);429响应——等待60秒。
  • DB问题:启动时自动迁移;如果失败,手动节点dist/migrate.js(检查Supabase日志)。
  • 身份验证错误:401/403--验证JWT到期时间(1小时,通过/auth刷新);环境中的MCP_AUTH_TOKEN。
  • 工具错误:422验证(检查openapi.yaml中的模式);记录ai_audit_logs以获取详细信息。
  • WS断开连接:关闭时重新连接,在查询中传递令牌?代币=.