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 编码,适配中文 / 特殊字符场景;
  • 聚焦核心的流式结果提取逻辑。
相关推荐
用户8356290780511 天前
无需 Office:Python 批量转换 PPT 为图片
后端·python
markfeng81 天前
Python+Django+H5+MySQL项目搭建
python·django
GinoWi1 天前
Chapter 2 - Python中的变量和简单的数据类型
python
JordanHaidee1 天前
Python 中 `if x:` 到底在判断什么?
后端·python
ServBay1 天前
10分钟彻底终结冗长代码,Python f-string 让你重获编程自由
后端·python
闲云一鹤1 天前
Python 入门(二)- 使用 FastAPI 快速生成后端 API 接口
python·fastapi
Rockbean1 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
曲幽1 天前
FastAPI + Ollama 实战:搭一个能查天气的AI助手
python·ai·lora·torch·fastapi·web·model·ollama·weatherapi
用户60648767188961 天前
国内开发者如何接入 Claude API?中转站方案实战指南(Python/Node.js 完整示例)
人工智能·python·api
只与明月听1 天前
RAG深入学习之Chunk
前端·人工智能·python