Deepseek.php 3.0 KB

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