HTTP SSE 流式响应处理:调用腾讯 智能应用开发平台ADP智能体的 API

一、场景背景

腾讯 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()

三、核心逻辑说明

  1. 请求配置 :针对腾讯 ADP 大模型 SSE 接口,配置流式请求参数(stream: enable),启用stream=True保证流式响应处理;
  2. SSE 解析 :逐行识别event:reply类型事件,过滤非目标事件数据;
  3. 最终结果筛选 :匹配is_final=true(兼容空格格式)字段,提取最终完整结果,找到后立即终止解析提升效率;
  4. 编码与异常处理:强制 UTF-8 编码避免乱码,完整捕获请求 / 解析异常并输出堆栈信息;
  5. 结果落地:控制台输出最终结果,并将结果持久化到文件。

四、关键适配点

  • 兼容腾讯 ADP 大模型 SSE 接口的reply事件格式;
  • 适配接口返回的is_final字段两种常见格式(带 / 不带空格);
  • 全程保证 UTF-8 编码,适配中文 / 特殊字符场景;
  • 聚焦核心的流式结果提取逻辑。
相关推荐
2501_938810112 小时前
动态IP的使用方法
网络·网络协议·tcp/ip
倔强的小石头_2 小时前
Python 从入门到实战(八):类(面向对象的 “对象模板”)
服务器·开发语言·python
无限大.2 小时前
为什么网站需要“域名“?——从 IP 地址到网址的演进
网络·网络协议·tcp/ip
qq_214782612 小时前
GWalkR,部分替代Tableau!
ide·python·jupyter
Yuner20002 小时前
Python机器学习:从零基础到深度实战
人工智能·python·机器学习
r i c k3 小时前
办公小程序开发----提高工作效率
python·python程序开发
wha the fuck4043 小时前
(渗透脚本)TCP创建连接脚本----解题----极客大挑战2019HTTP
python·网络协议·tcp/ip·网络安全·脚本书写
qq_356196953 小时前
day39模型的可视化和推理@浙大疏锦行
python
深蓝电商API3 小时前
从 “能爬” 到 “稳爬”:Python 爬虫中级核心技术实战
开发语言·爬虫·python