# gpt流式接口调用介绍

和openai的流式接口一样方式输出 [ server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format)

服务器不断输出一行一行的json 数据。
```json
data: {"code":0,"info":"succ","data":{"content":"# 大","finish_reason":null}}

data: {"code":0,"info":"succ","data":{"content":"语言模型的发展历程","finish_reason":null}}

data: {"code":0,"info":"succ","data":{"content":"\n## 1","finish_reason":null}}

data: {"code":0,"info":"succ","data":{"content":". 起","finish_reason":null}}
.....

```
客户端代码如下：(nodejs 18+)

```js
// sse-client.js
const { TextDecoder } = require('util');

const api_key = "sk-xxxxxxxxxxxxxxxxx"; //修改成你的api_key
const host ="https://api.mindshow.vip/v1/gpt/gen_outline_by_topic";
async function connectSSE() {
  const response = await fetch(host, {
    method: "POST",
    headers: {
        "Authorization": `Bearer ${api_key}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      topic: "大语言模型发展史",
      stream: true,//指定流式输出
      desc_info: ""
    })
  });

  const decoder = new TextDecoder('utf-8');
  const reader = response.body.getReader();
  let buffer = '';

  while (true) {
    const { done, value } = await reader.read();
    if (done) break;

    buffer += decoder.decode(value, { stream: true });

    const parts = buffer.split('\n\n');
    buffer = parts.pop(); // 留下可能未完整的数据段

    for (const part of parts) {
        console.log(part+"\n");
    }
  }
}

connectSSE().catch(console.error);


```
PHP+curl 调用

```php

<?php
// 设置请求地址
$api_key="sk-xxxxxxxxxxxxxxx";
$url = "https://api.mindshow.vip/v1/gpt/gen_outline_by_topic";

// 初始化 cURL
$ch = curl_init($url);

// 设置请求参数
$data = [
    "topic" => "大语言模型发展史",
    "stream" => true, //指定流式输出
    "desc_info" => "",
    "resource_id_list"=> [
        "1_mdAajfs1WM"
    ],
];

curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        "Authorization: Bearer $api_key"
    ],
    CURLOPT_POSTFIELDS => json_encode($data),
    CURLOPT_RETURNTRANSFER => false, // 不一次性返回
    CURLOPT_WRITEFUNCTION => function($ch, $chunk) {
        // 处理每一块 SSE 返回的流
        $lines = explode("\n", $chunk);
        foreach ($lines as $line) {
            $line = trim($line);
            echo $line."\n" ;
        }
        return strlen($chunk);
    }
]);

// 执行请求
curl_exec($ch);
curl_close($ch);




```

