一、场景背景
腾讯 ADP(智能应用开发平台)提供的大模型问答接口基于 HTTP SSE(Server-Sent Events)协议返回流式数据,数据分批次推送且通过is_final字段标识最终完整结果。本文聚焦该场景,提供通用的 SSE 流式响应处理方案,精准提取接口返回的最终结果,保证 UTF-8 编码兼容性。
二、核心实现代码
python
#coded by luke 20251216
import requests
import traceback
# 腾讯ADP大模型SSE接口配置
url = "https://wss.lke.cloud.tencent.com/v1/qbot/chat/sse"
headers = {"Content-Type": "application/json"}
# 业务请求问题内容
question = '''
你的问题
'''
# 接口请求参数(脱敏后)
payload = {
"session_id": "会话ID",
"bot_app_key": "应用密钥",
"visitor_biz_id": "访客ID",
"content": question,
"incremental": True,
"streaming_throttle": 10,
"visitor_labels": [],
"custom_variables": {},
"search_network": "disable",
"stream": "enable", # 开启流式返回
"workflow_status": "disable",
"tcadp_user_id": ""
}
# 存储最终结果
final_result = ""
try:
# 发送流式POST请求
response = requests.post(
url,
headers=headers,
json=payload,
stream=True, # 启用流式响应处理
timeout=60
)
print(f"请求状态码: {response.status_code}")
response.encoding = 'utf-8' # 强制UTF-8编码,避免乱码
current_event = ""
# 逐行解析SSE流式数据
for line in response.iter_lines(chunk_size=1024, decode_unicode=True):
if not line:
continue
line = line.strip()
print(f"流式数据片段: {line}") # 打印流式过程数据
# 识别SSE事件类型(目标为reply事件)
if line.startswith("event:"):
current_event = line.split(":", 1)[1].strip()
# 提取reply事件中标记为最终结果的内容
elif line.startswith("data:") and current_event == "reply":
data_part = line.split(":", 1)[1].strip()
# 匹配is_final标识(兼容带/不带空格格式)
if '"is_final":true' in data_part or '"is_final": true' in data_part:
final_result = data_part
break # 找到最终结果后终止解析
# 输出并保存最终结果
print("\n" + "="*100)
print("完整最终结果:")
print("="*100)
print(final_result)
print("="*100)
if final_result:
with open("final_result.txt", "w", encoding="utf-8") as f:
f.write(final_result)
print(f"\n最终结果已保存到 final_result.txt,字符数: {len(final_result)}")
else:
print("\n未找到is_final=true的reply事件结果")
except Exception as e:
print(f"\n请求异常: {e}")
traceback.print_exc()
三、核心逻辑说明
- 请求配置 :针对腾讯 ADP 大模型 SSE 接口,配置流式请求参数(
stream: enable),启用stream=True保证流式响应处理; - SSE 解析 :逐行识别
event:reply类型事件,过滤非目标事件数据; - 最终结果筛选 :匹配
is_final=true(兼容空格格式)字段,提取最终完整结果,找到后立即终止解析提升效率; - 编码与异常处理:强制 UTF-8 编码避免乱码,完整捕获请求 / 解析异常并输出堆栈信息;
- 结果落地:控制台输出最终结果,并将结果持久化到文件。
四、关键适配点
- 兼容腾讯 ADP 大模型 SSE 接口的
reply事件格式; - 适配接口返回的
is_final字段两种常见格式(带 / 不带空格); - 全程保证 UTF-8 编码,适配中文 / 特殊字符场景;
- 聚焦核心的流式结果提取逻辑。
