ai-query对接新版freesun-agent接口的分支
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

161 lines
6.4 KiB

'use strict';
const moment = require('moment')
const WebSocket = require('ws');
const { TextDecoder } = require('util');
const decoder = new TextDecoder('utf-8');
module.exports = async function factory (app, conf) {
app.fs.socket.on('connection', async (clientWs, req) => {
const addtime = moment()
const ip = req?.headers['x-forwarded-for']?.split(',')[0]?.trim() ?? req?.socket?.remoteAddress;
app.fs.logger.info(`来自 ${ip} 的 WS 客户端已连接`);
clientWs.on('close', async (reason) => {
app.fs.logger.info(`来自 ${ip} 的 WS 客户端已断开连接 连接时长:${moment.duration(moment().diff(addtime)).humanize()}`);
})
/**
* ali语音识别 基于ws转发ws的方案 90%
* 用 voiceWsProxy 代替了
*/
// // 从环境变量读取 DashScope API Key:contentReference[oaicite:8]{index=8}
// const DASH_SCOPE_API_KEY = 'sk-52bd872b19f1465c90f73cf6be090856' || process.env.DASHSCOPE_API_KEY;
// if (!DASH_SCOPE_API_KEY) {
// console.error('请配置环境变量 DASHSCOPE_API_KEY');
// process.exit(1);
// }
// // DashScope WebSocket 服务器地址:contentReference[oaicite:9]{index=9}
// const DASH_SCOPE_URL = 'wss://dashscope.aliyuncs.com/api-ws/v1/inference/';
// console.log('客户端已连接');
// // 为此连接创建对应的 DashScope WebSocket 客户端
// const dashWs = new WebSocket(DASH_SCOPE_URL, {
// headers: {
// Authorization: `bearer ${DASH_SCOPE_API_KEY}`,
// 'X-DashScope-DataInspection': 'enable'
// }
// });
// let taskId = null;
// // DashScope 连接建立后,等待 run-task 指令
// dashWs.on('open', () => {
// console.log('已连接到 DashScope 服务端');
// clientWs.send(JSON.stringify({ type: 'DashScopeOpen', message: '已连接到 DashScope 服务端' }));
// });
// // 接收 DashScope 返回的消息并转发给前端
// dashWs.on('message', (data) => {
// // DashScope 返回的是文本帧(JSON)
// let msg = JSON.parse(data);
// const event = msg.header && msg.header.event;
// switch (event) {
// case 'task-started':
// console.log('DashScope 任务启动');
// break;
// case 'result-generated':
// // 转发识别结果给前端:contentReference[oaicite:10]{index=10}
// const text = msg.payload.output.sentence.text;
// const isFinal = (msg.payload.output.sentence.end_time !== null);
// clientWs.send(JSON.stringify({
// type: 'result',
// text: text,
// final: isFinal
// }));
// break;
// case 'task-finished':
// console.log('DashScope 任务结束');
// clientWs.send(JSON.stringify({ type: 'finished' }));
// break;
// case 'task-failed':
// console.error('DashScope 任务失败:', msg.header.error_message);
// clientWs.send(JSON.stringify({
// type: 'error',
// message: msg.header.error_message || '识别失败'
// }));
// // 失败后可关闭连接
// dashWs.close();
// break;
// default:
// console.log('未知事件:', event);
// }
// });
// // DashScope 连接错误或关闭时通知前端并清理
// dashWs.on('error', (err) => {
// console.error('DashScope 连接错误:', err);
// clientWs.send(JSON.stringify({ type: 'error', message: 'DashScope 连接出错' }));
// clientWs.close();
// });
// dashWs.on('close', () => {
// console.log('DashScope 连接已关闭');
// clientWs.close();
// });
// // 处理来自前端客户端的消息
// clientWs.on('message', (data, isBinary) => {
// console.log('收到前端消息二进制:', isBinary);
// // 区分文本/二进制消息
// if (isBinary) {
// // 二进制音频数据直接转发给 DashScope
// dashWs.send(data);
// } else {
// const data_ = decoder.decode(data);
// console.log('收到前端 string 消息:', data_);
// const msg = JSON.parse(data_);
// if (msg.type === 'start') {
// console.log('命令启动');
// // 生成唯一任务ID,并发送 run-task 指令:contentReference[oaicite:11]{index=11}:contentReference[oaicite:12]{index=12}
// taskId = uuidv4().replace(/-/g, '').slice(0, 32);
// const runTaskMsg = {
// header: {
// action: 'run-task',
// task_id: taskId,
// streaming: 'duplex'
// },
// payload: {
// task_group: 'audio',
// task: 'asr',
// function: 'recognition',
// model: 'paraformer-realtime-v2',
// parameters: {
// format: 'wav',
// sample_rate: 16000
// }
// // 可按需添加热词等其他参数
// }
// };
// dashWs.send(JSON.stringify(runTaskMsg));
// } else if (msg.type === 'end') {
// // 发送 finish-task 指令:contentReference[oaicite:13]{index=13}
// const finishMsg = {
// header: {
// action: 'finish-task',
// task_id: taskId,
// streaming: 'duplex'
// },
// payload: {
// input: {}
// }
// };
// dashWs.send(JSON.stringify(finishMsg));
// }
// }
// });
// // 处理前端断开/错误:关闭 DashScope 连接
// clientWs.on('close', () => {
// console.log('客户端已断开');
// dashWs.close();
// });
// clientWs.on('error', (err) => {
// console.error('客户端 WebSocket 错误:', err);
// dashWs.close();
// });
})
}