找回密码
 立即注册
搜索
热搜: 丝袜 魅魔 黑丝
查看: 4|回复: 0

20110336_前言

[复制链接]

13万

主题

340

回帖

22万

积分

管理员

站长

UID
1
积分
224315
余额
13 R
Moe币
84800
在线时间
264 小时
注册时间
2025-12-28
最后登录
2026-9-19
发表于 2026-9-3 23:00:59 | 显示全部楼层 |阅读模式
"""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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|M男之家

GMT+8, 2026-9-21 06:43 , Processed in 0.045477 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表