agent-Specialization/model_tests/deepseek_stream_test.py

106 lines
2.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Deepseek API 流式快速验证脚本。
按照需求:
- deepseek-chat: max_tokens=8000
- deepseek-reasoner: max_tokens=65536
- 开启流式输出,打印每条 data 行便于确认返回。
根据用户允许,直接在脚本中硬编码 DeepSeek 测试用 API 信息,避免被仓库中其他
默认配置(如 kimi覆盖。请勿在生产使用。
"""
from __future__ import annotations
import asyncio
from typing import Optional
import httpx
DEEPSEEK_BASE_URL = "https://api.deepseek.com"
DEEPSEEK_API_KEY = "sk-3457fbc33f0b4aefb2ce1d3101bb2341"
DEEPSEEK_CHAT_MODEL = "deepseek-chat"
DEEPSEEK_REASONER_MODEL = "deepseek-reasoner"
def build_headers(api_key: str) -> dict[str, str]:
return {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
}
async def stream_call(
*,
name: str,
base_url: str,
api_key: str,
model: str,
max_tokens: int,
prompt: Optional[str] = None,
) -> None:
"""向指定模型发起流式 chat/completions 请求并打印 data 行。"""
url = base_url.rstrip("/") + "/chat/completions"
payload = {
"model": model,
"stream": True,
"max_tokens": max_tokens,
"messages": [
{
"role": "user",
"content": prompt
or f"这是 {name} 模型的流式测试,请用一句话自我介绍。",
}
],
}
print(f"\n=== {name} ===")
print(f"POST {url}")
async with httpx.AsyncClient(http2=True, timeout=120) as client:
async with client.stream(
"POST",
url,
json=payload,
headers=build_headers(api_key),
) as resp:
print(f"status: {resp.status_code}")
if resp.status_code != 200:
body = await resp.aread()
print("error body:", body.decode(errors="ignore"))
return
async for line in resp.aiter_lines():
if not line:
continue
if line.startswith("data:"):
data = line[5:].strip()
if data == "[DONE]":
print("[DONE]")
break
print(data)
else:
# 兼容潜在的非 data 行(例如心跳)
print(line)
async def main() -> None:
await stream_call(
name="deepseek-chat (max_tokens=8000)",
base_url=DEEPSEEK_BASE_URL,
api_key=DEEPSEEK_API_KEY,
model=DEEPSEEK_CHAT_MODEL,
max_tokens=8000,
)
await stream_call(
name="deepseek-reasoner (max_tokens=65536)",
base_url=DEEPSEEK_BASE_URL,
api_key=DEEPSEEK_API_KEY,
model=DEEPSEEK_REASONER_MODEL,
max_tokens=65536,
prompt="你是一个思考模型,请简述测试状态并结束。",
)
if __name__ == "__main__":
asyncio.run(main())