"""
DashScope API 调用封装(本项目唯一联网层)。
所有演示模式最终都通过 call_llm() 发起真实 HTTP 请求:
dashscope.Generation.call() → 阿里云百炼 qwen-plus → 返回生成文本
没有本地假数据,没有 if-else 写死答案。
"""
from __future__ import annotations
import dashscope
from dashscope import Generation
from config import API_KEY, MODEL_NAME, SEED, TEMPERATURE
# 统计 API 调用次数,便于学生确认「确实在真实请求」
_call_count = 0
def get_call_count() -> int:
return _call_count
def call_llm(messages: list[dict[str, str]]) -> str:
"""
调用百炼文本生成接口,返回模型回复文本。
参数 messages 格式示例:
[
{"role": "system", "content": "你是数学助手..."},
{"role": "user", "content": "9.9 和 9.10 谁大?"},
]
"""
global _call_count
_call_count += 1
if not API_KEY:
raise RuntimeError(
"未读取到系统环境变量 DASHSCOPE_API_KEY,"
"请先在 Windows 系统环境变量中配置后重新打开终端。"
)
response = Generation.call(
api_key=API_KEY, # 显式传入;密钥来源为 os.getenv("DASHSCOPE_API_KEY")
model=MODEL_NAME,
messages=messages,
temperature=TEMPERATURE,
seed=SEED,
result_format="message",
)
if response.status_code != 200:
raise RuntimeError(
f"模型调用失败:code={response.status_code}, "
f"message={response.message}"
)
return response.output.choices[0].message.content.strip()