Deepseek.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. /*$data = [
  56. 'model' => 'deepseek-chat',
  57. 'messages' => [
  58. [
  59. 'role' => 'user',
  60. 'content' => '给我随便发一篇无用的长达千字的随机文字',
  61. ]
  62. ],
  63. "max_tokens" => 2048,
  64. "stream" => true,
  65. ];*/
  66. // 初始化cURL会话
  67. $ch = curl_init($url);
  68. // 设置cURL选项
  69. curl_setopt_array($ch, [
  70. CURLOPT_RETURNTRANSFER => true,
  71. CURLOPT_SSL_VERIFYHOST => false,
  72. CURLOPT_SSL_VERIFYPEER => false,
  73. CURLOPT_POST => true,
  74. CURLOPT_POSTFIELDS => json_encode($data),
  75. CURLOPT_HTTPHEADER => [
  76. 'Content-Type: application/json',
  77. 'Authorization: Bearer ' . $apiKey,
  78. 'Accept: text/event-stream' // 重要:声明接受事件流
  79. ],
  80. CURLOPT_WRITEFUNCTION => function($ch, $data) {
  81. echo $data;
  82. ob_flush();
  83. flush();
  84. return strlen($data); // 返回已处理数据长度
  85. }
  86. ]);
  87. // 执行请求
  88. $response = curl_exec($ch);
  89. // 错误处理
  90. if (curl_errno($ch)) {
  91. echo 'Error: ' . curl_error($ch);
  92. }
  93. // 关闭连接
  94. curl_close($ch);
  95. }
  96. }