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 编码,适配中文 / 特殊字符场景;
  • 聚焦核心的流式结果提取逻辑。
相关推荐
B站_计算机毕业设计之家19 分钟前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
渣渣苏27 分钟前
Langchain实战快速入门
人工智能·python·langchain
lili-felicity36 分钟前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python
青春给了代码36 分钟前
基于WebSocket实现在线语音(实时+保存)+文字双向传输完整实现
网络·websocket·网络协议
北京耐用通信36 分钟前
破解AGV多协议互联难题:耐达讯自动化Profinet转Devicenet网关如何实现高效协同
人工智能·科技·物联网·网络协议·自动化·信息与通信
数据知道39 分钟前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json
ZH15455891311 小时前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同7651 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
User_芊芊君子1 小时前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
白日做梦Q1 小时前
Anchor-free检测器全解析:CenterNet vs FCOS
python·深度学习·神经网络·目标检测·机器学习