Deepseek.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. /**
  5. * AI
  6. */
  7. class Deepseek extends Api
  8. {
  9. protected $noNeedLogin = ['*'];
  10. protected $noNeedRight = ['*'];
  11. public function test()
  12. {
  13. // 这是模拟的文本片段 - 实际应替换为真实的API调用
  14. $textChunks = [
  15. "你好!这是 DeepSeek 的流式文本响应。\n\n",
  16. "我正在逐块返回文本内容。\n",
  17. "这种方式可以实现实时输出效果。\n",
  18. "这种方式可以实现实时输出效果。\n",
  19. "这种方式可以实现实时输出效果。\n",
  20. "这种方式可以实现实时输出效果。\n",
  21. "最后一块内容。\n"
  22. ];
  23. // 逐块输出文本
  24. foreach ($textChunks as $chunk) {
  25. echo $chunk;
  26. ob_flush(); // 刷新PHP输出缓冲区
  27. flush(); // 刷新系统缓冲区
  28. sleep(1); // 暂停0.3秒模拟网络延迟
  29. }
  30. }
  31. public function deepseek(){
  32. $config = config('deepseek');
  33. $apiKey = $config['key']; //
  34. $url = 'https://api.deepseek.com/chat/completions';
  35. $params = input();
  36. $data = [
  37. 'model' => $params['model'],
  38. 'messages' => $params['messages'],
  39. // "frequency_penalty" => 0,
  40. "max_tokens" => 2048,
  41. /*"presence_penalty" => 0,
  42. "response_format" => [
  43. "type" => $params['type']
  44. ],
  45. "stop" => null,*/
  46. "stream" => true,
  47. /*"stream_options" => null,
  48. "temperature" => 1,
  49. "top_p" => 1,
  50. "tools" => null,
  51. "tool_choice" => "none",
  52. "logprobs" => false,
  53. "top_logprobs" => null*/
  54. ];
  55. // 初始化cURL会话
  56. $ch = curl_init($url);
  57. // 设置cURL选项
  58. curl_setopt_array($ch, [
  59. CURLOPT_RETURNTRANSFER => true,
  60. CURLOPT_SSL_VERIFYHOST => false,
  61. CURLOPT_SSL_VERIFYPEER => false,
  62. CURLOPT_POST => true,
  63. CURLOPT_POSTFIELDS => json_encode($data),
  64. CURLOPT_HTTPHEADER => [
  65. 'Content-Type: application/json',
  66. 'Authorization: Bearer ' . $apiKey,
  67. 'Accept: text/event-stream' // 重要:声明接受事件流
  68. ],
  69. CURLOPT_WRITEFUNCTION => function($ch, $data) {
  70. echo $data;
  71. ob_flush();
  72. flush();
  73. return strlen($data); // 返回已处理数据长度
  74. }
  75. ]);
  76. // 执行请求
  77. $response = curl_exec($ch);
  78. // 错误处理
  79. if (curl_errno($ch)) {
  80. echo 'Error: ' . curl_error($ch);
  81. }
  82. // 关闭连接
  83. curl_close($ch);
  84. }
  85. }