Stream DATA From openai GPT-3 API using php

news2024/9/22 11:23:56

题意:“使用 PHP 从 OpenAI GPT-3 API 流式传输数据”

问题背景:

I'm having trouble with the OpenAI API, Basically what I'm trying to do is stream each data node that is streamed back from the openai API response and output each data node one at a time as it streams in from the API call, but I have no clue how this is done, I researched for hours and can not find any information on how this can be achieved with PHP.

“我在使用 OpenAI API 时遇到了问题。基本上,我想要做的是流式处理从 OpenAI API 响应中返回的每个数据节点,并在从 API 调用中接收到时逐个输出这些数据节点,但我不知道如何实现这一点。我研究了好几个小时,却找不到任何关于如何使用 PHP 实现这一点的信息。”

How can I get my code to output each data node in real time as the API streams in the data?

The Following is the best I can come up with, it outputs all the data at once after the call is complete, but It does not stream in the data.

“如何让我的代码在 API 流式传输数据时实时输出每个数据节点?

以下是我能想到的最好办法,但它在调用完成后一次性输出所有数据,而不是实时流式传输数据。”

function openAI(){
  $OPENAI_API_KEY="API_KEY_GOES_HERE";
  $user_id="1";  //  users id optional
   
    $prompt="tell me what you can do for me.";
    $temperature=0.5;  // 1 adds complete randomness  0 no randomness 0.0
    $max_tokens=30;
 
         $data = array('model'=>'text-davinci-002',
              'prompt'=>$prompt,
              'temperature'=>$temperature,
              'max_tokens'=>$max_tokens,
              'top_p'=>1.0,
              'stream'=>TRUE,// stream back response
              'frequency_penalty'=>0.0,
              'presence_penalty'=>0.0,
               'user' => $user_id);

   $post_json= json_encode($data);
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/completions');
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $post_json);

  $headers = array();
  $headers[] = 'Content-Type: application/json';
  // $headers[] = 'Content-Type: text/event-stream';
   $headers[] = "Authorization: Bearer $OPENAI_API_KEY";
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

   $result = curl_exec($ch);
   return $result;

  curl_close($ch);
}

echo openAI();

问题解决:

I ended up solving my problem. Hopefully my answer will help someone in the future.

I made the following additions to my code. This simple logic makes what I inquired about work.

“我最终解决了我的问题。希望我的答案能在未来帮助到其他人。

我在代码中做了以下添加。这种简单的逻辑实现了我所询问的功能。”

// This should be at the very top, alternatively can be set in you php.ini file
@ini_set('zlib.output_compression',0);
@ini_set('implicit_flush',1);
// This function discards the contents of the topmost output buffer and turns off this output buffering.
@ob_end_clean(); 

The following curl_setopt should also be added. I personally added it on the line after CURLOPT_POSTFIELDS

“还应添加以下 curl_setopt。我个人是在 CURLOPT_POSTFIELDS 之后的一行添加的。”

curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($curl, $data) {
  # str_repeat(' ',1024*8) is needed to fill the buffer and will make streaming the data possible
   echo $data.str_repeat(' ',1024*8);
   return strlen($data); 
});

Alternatively instead of adding str_repeat(' ',1024*8) you can shut off buffering in your web servers config file, e.g.(nginx.conf)

“或者,可以不添加 str_repeat(' ',1024*8),而是在你的 Web 服务器配置文件(如 nginx.conf)中关闭缓冲。”

gzip off;
proxy_buffering off;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2078874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ModBus RTU、ModBus ASCII、ModBus TCP,它们有什么区别?

ModBus是一种通信协议,用于连接自动化设备(如PLC、温度控制器等)和计算机。它被广泛应用于工业控制系统,支持多种通信方式,包括ModBus RTU、ModBus ASCII和ModBus TCP 3种模式。 Modbus是一种应用层协议,它…

在线绘制甘特图!推荐这款白板绘图神器,职场办公必备!

在当今快节奏的现代职场中,高效的项目管理和任务规划至关重要。作为一种强大的可视化工具,甘特图在项目管理中扮演着不可或缺的角色。它能够直观地展示项目进度、任务分配和时间安排,帮助团队成员更好地理解和执行项目计划。 甘特图是什么意…

SQL血缘解析

Druid 作为使用率特别高的的数据库连接池工具,在具备完善的连接池管理功能外,同时Druid 的 SQL解析功能可以用来防止 SQL注入等安全风险。通过对 SQL 语句进行解析和检查,Druid 可以识别并阻止潜在的恶意 SQL 语句执行,黑名单(阻止特定的 SQL 语句执行)、白名单(仅允许特…

解决添加MPJ插件启动报错

在项目中需要用到多数据源的级联查询,所以引入了MPJ插件,MPJ的版本是1.2.4,MP的版本是3.5.3,但却在启动的时候报错,报错如下: 解决办法: 将MP的版本降到3.5.1

【苍穹外卖】Day1 环境搭建 接口文档

1 软件开发整体介绍 1.1 软件开发流程 | 需求分析 | 形成两个文档:需求规格说明书、产品原型 | 设计 | UI 设计、数据库设计、接口设计 | 编码 | 项目代码,单元测试 | 测试 | 测试用例、测试报告 | 运维 | 软件环境安装、配置 1.2 角色分工 1.3 软件…

企业开展TPM管理培训需要什么条件?

在探讨企业如何有效开展TPM管理培训时,我们不得不深入分析几个核心要素,这些要素构成了成功实施TPM管理培训的必要条件。TPM作为一 种追求生产系统效率最大化的现代管理理念,其成功推行不仅依赖于先进的技术手段,更离不开企业内部…

探索最佳数据恢复工具:为您的数据保驾护航

数据已成为我们日常工作和生活中不可或缺的部分,然而,数据丢失的意外却总是让人措手不及——无论是因误操作删除文件,抑或是因病毒攻击或硬件故障而丢失数据,这些情况都可能带来巨大的困扰。所幸,市场上有诸多功能强大的数据恢复工…

FSQ26信号分析仪RS FSU26 20HZ-26.5G频谱分析仪

罗德与施瓦茨Rohde & Schwarz FSQ26信号分析仪,20 Hz - 26.5 GHz ​R&S FSQ26 信号分析仪集两种仪器于一身。它提供高达 120 MHz 解调带宽的信号分析,并具有高端频谱分析仪的动态范围。 频率范围:20 Hz 至 26.5 GHz 高端频谱分析仪…

智慧公厕系统如何应对高峰期游客?

在旅游景区、繁华商圈等场所,高峰期游客的涌入常常给公共设施带来巨大压力,公厕便是其中之一。传统公厕在面对高峰期游客时往往捉襟见肘,出现排队过长、环境脏乱、设施故障等问题。然而,随着科技的不断进步,智慧公厕系…

如何使用ssm实现基于SSM的社区物业管理系统的设计与实现+vue

TOC ssm223基于SSM的社区物业管理系统的设计与实现vue 绪论 1.1 研究背景 现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生活不仅变得更加地便利化&…

接口测试面试题及参考答案,轻松拿捏面试官

1、你们公司的接口测试流程是? 接口测试我们是在XX项目做的,主要有XX接口,XX接口,XX接口等。 1、首先是从开发那里拿到API接口文档,了解接口业务、包括接口地址、请求方式,入参、出参,token鉴…

【python】数据分析统计

逐行读取’\t’分割的txt 对其中的每个数值都转为六位小数的str 再存入dict 存到excel pip install pandas pip install openpyxl # 用于写入Excel文件import pandas as pd # 假设txt文件的路径是data.txt file_path data.txt # 用于存储数据的字典,假设每…

每天学习一个基础算法之插入排序

目录 前言: 一、插入排序的基本思路与实现方法 1、基本思路 2、实现方法 二、插入排序的执行过程示意图 三、插入排序的实现代码 插入排序代码主体(以接口函数的形式) 测试部分(主函数调用) 四、对插入排序复杂度的分析…

Vue中使用el-table自定义序号翻页后又从1开始没有连续

在 ​​el-table​​​ 中,自定义序号列在翻页后会重新从 1 开始是因为每页的数据是重新渲染的,没有保留之前的序号。如果您希望在翻页后保持连续的序号,可以使用 ​​index​​ 属性来获取全局的行索引。 以下是一个示例,演示如…

string题(下)最后一个单词的长度

string类题目&#xff08;下&#xff09; 题目&#xff1a;字符串里面最后一个单词的长度&#xff08;牛客网&#xff09; 然后我们不假思索写出这样的代码&#xff1a; #include <iostream> using namespace std;int main() {string str;cin>>str;size_t pos st…

VS环境中使用QT、OpenCV进行简易图像处理(附源码)

1.背景 在VS2022中&#xff0c;结合QT开发框架&#xff0c;使用OpenCV开源图像处理库&#xff0c;实现在QT界面中完成简易的图像处理&#xff0c;这里展示采用了灰度化处理&#xff0c;其它图像处理操作依据具体场景编写即可。 2.图像格式问题 在QT中&#xff0c;采用的是QI…

详细解读版本控制工具Git+常见命令实操演示

1.版本控制的重要性 版本控制允许开发者查看文件和项目的整个历史记录&#xff0c;包括每次更改的详细记录。在团队项目中&#xff0c;版本控制使得多个开发者可以同时工作在同一个项目上&#xff0c;而不会相互干扰。当引入的错误导致项目出现问题时&#xff0c;版本控制可以…

中吉自动售货机netty对接出货慢问题解决

情景说明&#xff1a; 采购中吉自动售货机&#xff0c;自研对接java代码对接&#xff0c;使用netty方式。&#xff08;注&#xff1a;有需要对接java对接中吉设备代码的可以关注我们的公众号&#xff0c;联系我们。 对接中吉自动售货机&#xff0c;下发 出货指令&#xff0c;要…

代码随想录算法训练营第四十天| 深搜与广搜理论基础以及模板代码

今天是算法学习第四十天&#xff0c;主要的学习内容是深度优先搜索和广度优先搜索&#xff0c;以及对于模板题的讲解。 深度优先搜索&#xff08;DFS) 深搜其实原理就是先往一个方向搜索&#xff0c;直到遇到终止条件再回头。所以深度优先搜索的关键就是递归和回溯。 对于深…

超声波清洗机哪个品牌好用?实用性强的超声波眼镜清洗机推荐

眼镜一类的物品都很难清理&#xff0c;特别容易刮花&#xff0c;此外还有小件的首饰&#xff0c;也很难通过常规的清洁方式去除污渍&#xff0c;这时候就要用到超声波清洗机&#xff0c;这两年这种小工具很流行&#xff0c;而超声波清洗机便是其中的一种热门清洁神器&#xff0…