首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
swoole-inc/open-ai中chat聊天接收不到sendRequest的返回值
别人的服务器上是正常的,我的服务器环境centos7.9,php8.2,swoole4。 ```php public function chat($opts, $stream = null) { if ($stream != null && array_key_exists('stream', $opts)) { if (! $opts['stream']) { throw new Exception( 'Please provide a stream function. Check https://github.com/orhanerday/open-ai#stream-example for an example.' ); } $this->stream_method = $stream; } $opts['model'] = $opts['model'] ?? $this->chatModel; $url = $this->baseUrl . Url::chatUrl(); $res = $this->sendRequest($url, 'POST', $opts); var_dump($res); return $res; } ``` 以上代码我稍微改了下,为了打印res看结果。 ```php private function sendRequest(string $url, string $method, array $opts = []) { $post_fields = json_encode($opts); if (array_key_exists('file', $opts) || array_key_exists('image', $opts)) { $this->headers[0] = $this->contentTypes["multipart/form-data"]; $post_fields = $opts; } else { $this->headers[0] = $this->contentTypes["application/json"]; } $curl_info = [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => $this->timeout, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => $this->httpVersion, CURLOPT_CUSTOMREQUEST => $method, CURLOPT_POSTFIELDS => $post_fields, CURLOPT_HTTPHEADER => $this->headers, ]; if ($opts == []) { unset($curl_info[CURLOPT_POSTFIELDS]); } if (! empty($this->proxy)) { $curl_info[CURLOPT_PROXY] = $this->proxy; } if (array_key_exists('stream', $opts) && $opts['stream']) { /** * @var $stream_method callable */ $stream_method = $this->stream_method; $curl_info[CURLOPT_WRITEFUNCTION] = function ($curl, $data) use ($stream_method) { $list = explode("\n\n", trim($data)); foreach ($list as $msg) { if (!str_starts_with($msg, 'data: ')) { $stream_method($curl, $msg); break; } $clean = substr($msg, strlen("data: ")); if ($stream_method($curl, $clean) === false) { return 0; } } return strlen($data); }; } $curl = curl_init(); curl_setopt_array($curl, $curl_info); $response = curl_exec($curl); if (empty($response)) { $this->error = curl_error($curl); $this->errno = curl_errno($curl); } else { $this->error = ''; $this->errno = 0; } $info = curl_getinfo($curl); $this->curlInfo = $info; curl_close($curl); var_dump(response); return $response; } ``` 这两个函数我都增加了dump,最终结果是,sendRequest中可以打印出gpt返回的正确结果内容,而chat中没有出现打印,整个程序也没有再继续往下走,好像就卡住了一样,没有打印也没有报错,实在是不清楚这到底是怎么回事,求大佬解答,万分感谢。 补充一下,如果在```php $curl = curl_init(); ``` 上面加个return "222";程序就能继续运行,在它下面加,程序就异常不动了,感觉和curl有关系
发布于1年前 · 0 次浏览 · 来自
提问
1
别人的服务器上是正常的,我的服务器环境centos7.9,php8.2,swoole4。 ```php public function chat($opts, $stream = null) { if ($stream != null && array_key_exists('stream', $opts)) { if (! $opts['stream']) { throw new Exception( 'Please provide a stream function. Check https://github.com/orhanerday/open-ai#stream-example for an example.' ); } $this->stream_method = $stream; } $opts['model'] = $opts['model'] ?? $this->chatModel; $url = $this->baseUrl . Url::chatUrl(); $res = $this->sendRequest($url, 'POST', $opts); var_dump($res); return $res; } ``` 以上代码我稍微改了下,为了打印res看结果。 ```php private function sendRequest(string $url, string $method, array $opts = []) { $post_fields = json_encode($opts); if (array_key_exists('file', $opts) || array_key_exists('image', $opts)) { $this->headers[0] = $this->contentTypes["multipart/form-data"]; $post_fields = $opts; } else { $this->headers[0] = $this->contentTypes["application/json"]; } $curl_info = [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => $this->timeout, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => $this->httpVersion, CURLOPT_CUSTOMREQUEST => $method, CURLOPT_POSTFIELDS => $post_fields, CURLOPT_HTTPHEADER => $this->headers, ]; if ($opts == []) { unset($curl_info[CURLOPT_POSTFIELDS]); } if (! empty($this->proxy)) { $curl_info[CURLOPT_PROXY] = $this->proxy; } if (array_key_exists('stream', $opts) && $opts['stream']) { /** * @var $stream_method callable */ $stream_method = $this->stream_method; $curl_info[CURLOPT_WRITEFUNCTION] = function ($curl, $data) use ($stream_method) { $list = explode("\n\n", trim($data)); foreach ($list as $msg) { if (!str_starts_with($msg, 'data: ')) { $stream_method($curl, $msg); break; } $clean = substr($msg, strlen("data: ")); if ($stream_method($curl, $clean) === false) { return 0; } } return strlen($data); }; } $curl = curl_init(); curl_setopt_array($curl, $curl_info); $response = curl_exec($curl); if (empty($response)) { $this->error = curl_error($curl); $this->errno = curl_errno($curl); } else { $this->error = ''; $this->errno = 0; } $info = curl_getinfo($curl); $this->curlInfo = $info; curl_close($curl); var_dump(response); return $response; } ``` 这两个函数我都增加了dump,最终结果是,sendRequest中可以打印出gpt返回的正确结果内容,而chat中没有出现打印,整个程序也没有再继续往下走,好像就卡住了一样,没有打印也没有报错,实在是不清楚这到底是怎么回事,求大佬解答,万分感谢。 补充一下,如果在```php $curl = curl_init(); ``` 上面加个return "222";程序就能继续运行,在它下面加,程序就异常不动了,感觉和curl有关系
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2024-11-16
Rango
建议使用 swoole-cli ,你的 swoole 可能缺少了 curl-native
赞
0
回复