import 'dart:convert'; import 'dart:io'; class Deepseek { final String apiKey; Deepseek({required this.apiKey}); Stream chat(String prompt) async* { final client = HttpClient(); try { final request = await client .postUrl(Uri.parse('https://api.deepseek.com/chat/completions')); // 设置流式请求头 request.headers ..set('Content-Type', 'application/json') ..set('Authorization', 'Bearer $apiKey') ..set('Accept', 'text/event-stream'); // 构建请求体 final requestBody = jsonEncode({ 'model': 'deepseek-chat', 'stream': true, 'messages': [ {'role': 'user', 'content': prompt} ] }); // 写入请求体 request.add(utf8.encode(requestBody)); final response = await request.close(); // 检查状态码 if (response.statusCode != 200) { throw Exception('API请求失败: ${response.statusCode}'); } // 处理流数据 String buffer = ''; await for (final chunk in response.transform(utf8.decoder)) { buffer += chunk; // 分割完整事件(假设使用SSE格式) while (buffer.contains('\n\n')) { final eventEnd = buffer.indexOf('\n\n'); final event = buffer.substring(0, eventEnd); buffer = buffer.substring(eventEnd + 2); if (event.startsWith('data: ')) { final dataContent = event.substring(6); // 增加有效性检查 if (dataContent == '[DONE]') { // print('流式传输结束'); continue; // 跳过特殊结束标记 } final jsonData = jsonDecode(event.substring(6)); yield jsonData['choices'][0]['delta']['content']; } } } } finally { client.close(); } } }