2 changed files with 85 additions and 6 deletions
@ -0,0 +1,71 @@ |
|||||
|
import 'dart:convert'; |
||||
|
|
||||
|
import 'package:get_storage/get_storage.dart'; |
||||
|
import 'package:http/http.dart' as http; |
||||
|
|
||||
|
import '../../core/utils/logger.dart'; |
||||
|
import 'ai_service.dart'; |
||||
|
|
||||
|
class DeapsoundAIService implements AiService { |
||||
|
late final String apiKey; |
||||
|
|
||||
|
DeapsoundAIService() { |
||||
|
final GetStorage storage = GetStorage(); |
||||
|
apiKey = storage.read('logintoken'); |
||||
|
} |
||||
|
|
||||
|
@override |
||||
|
Stream<String> sendMessageStream({ |
||||
|
required List<Map<String, String>> messages, |
||||
|
required String systemPrompt, |
||||
|
}) async* { |
||||
|
final client = http.Client(); |
||||
|
final url = Uri.parse('https://www.deapsound.com/ai/chat'); |
||||
|
|
||||
|
final headers = { |
||||
|
'Content-Type': 'application/json', |
||||
|
'Authorization': apiKey, |
||||
|
}; |
||||
|
|
||||
|
final requestBody = { |
||||
|
"msg": messages.last['content'], |
||||
|
}; |
||||
|
|
||||
|
try { |
||||
|
final request = http.Request('POST', url) |
||||
|
..headers.addAll(headers) |
||||
|
..body = jsonEncode(requestBody); |
||||
|
final response = await client.send(request); |
||||
|
|
||||
|
//流式处理响应数据 |
||||
|
await for (final chunk in response.stream |
||||
|
.transform(utf8.decoder) |
||||
|
.transform(const LineSplitter())) { |
||||
|
if (chunk.isEmpty) continue; |
||||
|
|
||||
|
if (chunk.startsWith('data:')) { |
||||
|
final jsonStr = chunk.substring(5).trim(); |
||||
|
|
||||
|
try { |
||||
|
final data = jsonDecode(jsonStr); |
||||
|
if (data['event'] == 'workflow_finished') { |
||||
|
break; |
||||
|
} |
||||
|
if (data['event'] == 'text_chunk') { |
||||
|
String content = data['data']['text'] ?? ''; |
||||
|
if (content.isNotEmpty) { |
||||
|
yield content; |
||||
|
} |
||||
|
} |
||||
|
} catch (e) { |
||||
|
Logger.error('JSON解析错误: $e'); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} catch (e) { |
||||
|
Logger.error('请求异常: $e'); |
||||
|
} finally { |
||||
|
client.close(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue