调用chatgpt流式输出
时间: 2025-03-18 12:35:53 浏览: 43
### 实现 ChatGPT 的流式响应调用
为了实现对 ChatGPT 的流式响应调用,可以利用 OpenAI 提供的 API 并设置 `stream=True` 参数。此参数使得 API 响应以数据仅限服务器发送事件 (SSE, Server-Sent Events) 的形式返回[^1]。
以下是完整的实现方法:
#### 1. 引入必要的库
需要引入 `openai` 库来处理 API 调用以及标准 Python 库如 `time` 来测量时间延迟。
```python
import openai # for OpenAI API calls
import time # for measuring time duration of API calls
```
#### 2. 配置 OpenAI 密钥
在使用 OpenAI API 之前,需先配置您的 API 密钥。
```python
openai.api_key = 'your-api-key-here'
```
#### 3. 使用流式传输的代码示例
下面是一个支持流式输出的函数定义及其调用方式:
```python
def stream_chatgpt_response(prompt):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo", # 或者 gpt-4 如果可用
messages=[{"role": "user", "content": prompt}, {"role": "assistant", "content": ""}],
temperature=0.7,
max_tokens=None,
stream=True # 启用流模式
)
collected_chunks = []
collected_messages = ""
try:
for chunk in response:
delta_content = chunk['choices'][0]['delta'].get('content', '')
collected_chunks.append(delta_content)
collected_messages += delta_content
# 动态打印接收到的内容
print(collected_messages, end="\r")
return "".join(collected_chunks).strip()
except Exception as e:
print(f"Error during streaming: {e}")
return None
# 测试流式功能
prompt_text = "解释一下量子计算的基本原理"
start_time = time.time()
response_message = stream_chatgpt_response(prompt_text)
end_time = time.time()
print("\nFinal Response:", response_message)
print("Time taken:", round(end_time - start_time, 2), "seconds")
```
上述代码片段实现了以下几点:
- **启用流式传输**:通过将 `stream=True` 添加到请求中,使每次接收的部分内容来自 `delta` 字段而非整体消息字段。
- **动态显示结果**:随着新部分到达,实时更新并展示当前累积的结果。
- **错误捕获机制**:如果发生异常,则停止进一步处理并记录错误信息。
需要注意的是,在采用流式传输的情况下,“usage”字段不会被包含于最终回复之中,因此无法即时知晓所消耗的具体令牌数量。
另外,因为 SSE 是基于 HTTP 协议的一种特殊应用,其头部中的 `Content-Type` 设置为 `text/event-stream`,这是确保客户端能够解析这些连续传来的增量数据的关键因素之一[^2]。
---
阅读全文
相关推荐
















