
管理员
站长
- UID
- 1
- 积分
- 224315
- 余额
- 13 R
- Moe币
- 84800
- 在线时间
- 264 小时
- 注册时间
- 2025-12-28
- 最后登录
- 2026-9-19
|
"""AI 分析服务:调用 OpenAI 兼容端点"""
from typing import Optional
import httpx
from .config import settings
async def call_ai_analyze(prompt: str, category: Optional[str] = "行业分析") -> tuple[str, int]:
"""调用真实模型返回分析内容与 token 数;凭据缺失或调用失败都直接报错,绝不返回编造内容"""
if not settings.ai_api_key or not settings.ai_base_url:
raise RuntimeError(
"AI 服务未配置:请确认 .env 中的 AI_API_KEY 与 AI_BASE_URL 已设置,"
"且服务的启动目录为项目根目录(.env 按相对路径读取)"
)
system_msg = (
"你是温州阜博人工智能有限公司的 AI 研究分析助手。"
"基于用户提供的问题作答;信息不足时明确说明假设与不确定性,不得编造数据、机构、评测结果或来源。"
"使用简洁、可执行的中文输出。除非用户明确要求,否则不使用表格。"
"建议按核心判断、分析依据、风险或下一步三个部分组织内容。"
)
payload = {
"model": settings.ai_model,
"temperature": 0.5,
"messages": [
{"role": "system", "content": system_msg},
{"role": "user", "content": f"【分析类型】{category}\n【问题】{prompt}"},
],
}
try:
async with httpx.AsyncClient(timeout=60.0) as client:
base = settings.ai_base_url.rstrip("/")
resp = await client.post(
f"{base}/chat/completions",
headers={"Authorization": f"Bearer {settings.ai_api_key}"},
json=payload,
)
resp.raise_for_status()
data = resp.json()
content = data["choices"][0]["message"]["content"]
usage = data.get("usage") or {}
tokens = int(usage.get("total_tokens") or len(content))
return content, tokens
except Exception as e:
raise RuntimeError(f"AI 服务暂时不可用:{type(e).__name__}") from e
|
|