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 编码,适配中文 / 特殊字符场景;
  • 聚焦核心的流式结果提取逻辑。
相关推荐
那就回到过去11 分钟前
MPLS多协议标签交换
网络·网络协议·hcip·mpls·ensp
阔皮大师16 分钟前
INote轻量文本编辑器
java·javascript·python·c#
小法师爱分享20 分钟前
StickyNotes,简单便签超实用
java·python
深蓝电商API20 分钟前
处理字体反爬:woff字体文件解析实战
爬虫·python
开源技术22 分钟前
Claude Opus 4.6 发布,100万上下文窗口,越贵越好用
人工智能·python
张3蜂34 分钟前
深入理解 Python 的 frozenset:为什么要有“不可变集合”?
前端·python·spring
皮卡丘不断更1 小时前
手搓本地 RAG:我用 Python 和 Spring Boot 给 AI 装上了“实时代码监控”
人工智能·spring boot·python·ai编程
爱打代码的小林1 小时前
基于 MediaPipe 实现实时面部关键点检测
python·opencv·计算机视觉
极客小云1 小时前
【ComfyUI API 自动化利器:comfyui_xy Python 库使用详解】
网络·python·自动化·comfyui
闲人编程2 小时前
Elasticsearch搜索引擎集成指南
python·elasticsearch·搜索引擎·jenkins·索引·副本·分片