跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

Python

依赖:pip install requests(Python 3.8+)

1) 非流式聊天

import os
import requests

BASE_URL = "https://ai.umeng.com"
API_KEY = os.getenv("UMENG_AI_KEY", "YOUR_API_KEY")

def chat(prompt: str, model: str = "auto") -> str:
    payload = {
        "model": model,
        "enableThinking": False,
        "messages": [{"role": "user", "content": prompt}],
    }
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    }
    resp = requests.post(f"{BASE_URL}/api/llm/chat",
                         json=payload, headers=headers, timeout=60)
    resp.raise_for_status()
    result = resp.json()
    if not result.get("success"):
        raise RuntimeError(result.get("msg", "接口返回失败"))

    data = result["data"]
    print(f"[路由] {data['meta']['actual_model']}  [算力点] {data['usage']['cost_credits']}")
    return data["content"]

if __name__ == "__main__":
    print("回答:", chat("用一句话介绍牛顿第一定律"))

2) 流式聊天(SSE)

import json
import os
import requests

BASE_URL = "https://ai.umeng.com"
API_KEY = os.getenv("UMENG_AI_KEY", "YOUR_API_KEY")

def chat_stream(prompt: str, model: str = "auto"):
    payload = {
        "model": model,
        "enableThinking": False,
        "messages": [{"role": "user", "content": prompt}],
    }
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Accept": "text/event-stream",
        "Content-Type": "application/json",
    }
    with requests.post(f"{BASE_URL}/api/llm/chat/stream",
                       json=payload, headers=headers, stream=True, timeout=120) as resp:
        resp.raise_for_status()
        event_type, data_buf = None, []
        for raw in resp.iter_lines(decode_unicode=True):
            if raw is None:
                continue
            if raw == "":
                if event_type and data_buf:
                    obj = json.loads("\n".join(data_buf))
                    yield event_type, obj
                event_type, data_buf = None, []
                continue
            if raw.startswith("event:"):
                event_type = raw[6:].strip()
            elif raw.startswith("data:"):
                data_buf.append(raw[5:].lstrip())

if __name__ == "__main__":
    for ev, payload in chat_stream("请用 Python 写一个 LRU 缓存"):
        if ev == "delta" and payload.get("type") == "content":
            print(payload.get("delta", ""), end="", flush=True)
        elif ev == "done":
            print(f"\n[完成] tokens={payload.get('total_tokens')} cost={payload.get('cost_credits')}")

3) 图像生成

import re
import requests

payload = {
    "model": "doubao-seedream-5-0-pro-260628",
    "messages": [{"role": "user", "content": "一只在写代码的柯基"}],
    "imageParams": {"size": "1024x1024", "quality": "low", "n": 1},
}
headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
resp = requests.post(f"{BASE_URL}/api/llm/chat", json=payload, headers=headers, timeout=180)
data = resp.json()

markdown = data["data"]["content"]
image_url = re.search(r"\((https?://[^)]+)\)", markdown).group(1)
print("图片地址:", image_url)

4) 视频生成(提交 + 轮询)

import time
import requests

headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

# ① 提交任务
payload = {
    "model": "wan2.5-t2v-preview",
    "messages": [{"role": "user", "content": "一只橘猫在窗台上晒太阳"}],
    "videoParams": {"resolution": "480P", "ratio": "16:9", "duration": 5},
}
resp = requests.post(f"{BASE_URL}/api/llm/chat", json=payload, headers=headers, timeout=30)
request_id = resp.json()["data"]["request_id"]
print("任务已提交:", request_id)

# ② 轮询结果(不会重复扣费)
for i in range(1, 41):
    resp = requests.post(f"{BASE_URL}/api/llm/chat/video/result",
                         json={"requestId": request_id}, headers=headers, timeout=30)
    data = resp.json()["data"]
    print(f"第 {i} 次轮询,状态:{data['status']}")

    if data["status"] == "SUCCEEDED":
        print("视频地址:", data["video_url"])
        print("扣费:", data["credits"], "算力点")
        break
    if data["status"] == "FAILED":
        print("生成失败")
        break
    time.sleep(15)