Skip to content

Gemini 原生格式流式输出 API 文档

📌 接口地址

https://www.dmxapi.cn/v1beta/models/{model}:generateContent

💻 请求示例 (Python)

python
"""
==============================================================================
DMXAPI Gemini AI 流式对话 API 调用示例
==============================================================================
功能说明:
    本脚本演示如何使用 DMXAPI 调用 Gemini 模型进行流式对话生成
    支持实时接收和显示 AI 生成的文本内容
    
作者:DMXAPI
==============================================================================
"""

import json
import requests

# ==============================================================================
# 配置参数区域
# ==============================================================================
model = "gemini-2.5-flash"  # 使用的 AI 模型名称
API_KEY = "sk-*****************************************"  # 你的 API 密钥

# 构建完整的 API 请求 URL
# 格式:基础URL + 模型名称 + 流式生成端点 + API密钥 + SSE格式参数
url = f"https://www.dmxapi.cn/v1beta/models/{model}:streamGenerateContent?key={API_KEY}&alt=sse"

# ==============================================================================
# 请求数据准备
# ==============================================================================
payload = json.dumps({
    "system_instruction": {  # 系统指令:定义 AI 助手的角色和行为特征
        "parts": [{"text": "你是我的助手,你叫 小巴。"}]
    },
    "contents": [  # 用户输入:包含用户的对话内容
        {"role": "user", "parts": [{"text": "随机生成300个字"}]}
    ]
})

# 设置 HTTP 请求头
headers = {"Content-Type": "application/json"}

# ==============================================================================
# 发送 API 请求
# ==============================================================================
# 发送 POST 请求到 API 端点
# stream=True:启用流式响应,可以实时接收数据块,而不是等待全部完成
response = requests.post(url, headers=headers, data=payload, stream=True)

# 检查响应状态码
if response.status_code != 200:
    print(f"API 请求失败,状态码: {response.status_code}")
    print(f"错误信息: {response.text}")
    exit(1)

response.encoding = 'utf-8'  # 设置编码为 UTF-8,确保中文字符正确显示

# ==============================================================================
# SSE 流式响应解析函数
# ==============================================================================
def parse_sse_response(response):
    """
    解析 Server-Sent Events (SSE) 格式的流式响应
    
    SSE 是一种服务器向客户端推送实时数据的技术,常用于流式 AI 对话场景
    本函数会实时解析并输出 AI 生成的文本内容
    
    参数说明:
        response (requests.Response): requests 库返回的响应对象,包含流式数据
        
    返回值:
        str: 完整拼接后的 AI 生成文本
        
    工作流程:
        1. 逐行读取 SSE 数据流
        2. 识别并提取 JSON 格式的数据
        3. 解析 JSON 并提取文本内容
        4. 实时输出文本片段
        5. 累积并返回完整文本
    """
    full_text = ""  # 用于累积存储完整的 AI 响应文本
    
    # 逐行迭代读取流式响应数据
    for line in response.iter_lines(decode_unicode=True):
        # 跳过空行
        if not line or line.strip() == "":
            continue
            
        # SSE 格式的数据行以 'data: ' 开头
        if line.startswith('data: '):
            # 提取 'data: ' 后面的 JSON 内容(去掉前 6 个字符)
            json_str = line[6:].strip()
            
            # 跳过空数据或 [DONE] 标记
            if not json_str or json_str == '[DONE]':
                continue
            
            try:
                # 将 JSON 字符串解析为 Python 字典对象
                data = json.loads(json_str)
                
                # 验证响应数据结构的完整性
                # 检查是否包含 'candidates' 字段且不为空
                if 'candidates' in data and len(data['candidates']) > 0:
                    candidate = data['candidates'][0]  # 获取第一个候选响应结果
                    
                    # 检查候选结果是否包含内容数据
                    if 'content' in candidate and 'parts' in candidate['content']:
                        # 遍历内容的各个部分(parts)
                        for part in candidate['content']['parts']:
                            # 如果当前部分包含文本内容
                            if 'text' in part:
                                text = part['text']
                                full_text += text  # 累积到完整文本中
                                # 实时输出文本片段
                                # end='': 不自动换行
                                # flush=True: 立即刷新输出缓冲区,确保实时显示
                                print(text, end='', flush=True)
                                
            except json.JSONDecodeError:
                # 如果遇到非法 JSON 格式,跳过当前行继续处理下一行
                continue
            except Exception:
                # 捕获其他异常,确保程序继续运行
                continue
    
    return full_text  # 返回完整拼接的生成文本


# ==============================================================================
# 主程序执行
# ==============================================================================
# 调用解析函数处理 API 响应并获取完整结果
result_text = parse_sse_response(response)

📤 返回示例

text
细雨绵绵,笼罩着古老的石桥,青苔在岁月的侵蚀下,愈发显得斑驳。桥下溪水潺潺,带着泥土的清香,缓缓流淌,倒映着岸边摇曳的垂柳。柳枝低垂,轻抚水面,泛起层层涟漪,仿佛在低声细语。

远处山峦叠嶂,云雾缭绕,宛如仙境。山顶偶有几缕阳光穿透云层,洒落在翠绿的林间,点缀出斑斓的光影。鸟儿在枝头欢快地鸣唱,歌声清脆悦耳,为这寂静的山谷增添了几分生机。

一条蜿蜒的小径,穿梭于林荫之间,铺满了落叶。踩上去沙沙作响,仿佛在演奏着一曲秋日的乐章。小径尽头是一座古朴的茅屋,屋顶青瓦,墙壁土坯,炊烟袅袅,弥漫着淡淡的饭菜香。

屋前有一片菜地,绿油油的蔬菜长势喜人,沾着晶莹的露珠。一位老农佝偻着身躯,在地里辛勤劳作,额头布满汗珠,却依旧乐此不疲。他眼神中透着满足,仿佛从这片土地中找到了生命的真谛。

日暮时分,夕阳西下,将天边染成了绚烂的橘红色。晚霞映照着远山,为这片宁静的田园披上了一层神秘而温柔的面纱。一切都显得那么和谐,那么美好,让人心生向往,流连忘返。

© 2025 DMXAPI Gemini 流式输出

一个 Key 用全球大模型