# -*- coding: utf-8 -*- """千问(Qwen)模型调用:读取配置文件中的 API Key,使用 OpenAI 兼容接口。""" import logging import os from typing import List, Optional logger = logging.getLogger("wechat-backend.qwen") # 优先 QWEN_API_KEY,其次 DASHSCOPE_API_KEY,最后 APIKEY(.env 中可配置千问 key) QWEN_API_KEY = os.getenv("QWEN_API_KEY") or os.getenv("DASHSCOPE_API_KEY") or os.getenv("APIKEY") QWEN_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1" QWEN_MODEL = os.getenv("QWEN_MODEL", "qwen-turbo") async def qwen_chat(messages: List[dict], api_key: Optional[str] = None) -> Optional[str]: """调用千问对话,返回 assistant 回复文本。messages 格式 [{"role":"user","content":"..."}] 或含 system。""" key = api_key or QWEN_API_KEY if not key: logger.warning("No QWEN_API_KEY / APIKEY in env, skip qwen call") return None try: from openai import AsyncOpenAI client = AsyncOpenAI(api_key=key, base_url=QWEN_BASE_URL) r = await client.chat.completions.create(model=QWEN_MODEL, messages=messages) text = r.choices[0].message.content if r.choices else None return text except Exception as e: logger.exception("qwen_chat error: %s", e) return None async def generate_greeting(remark_name: str, region: str = "", tags: List[str] = None) -> Optional[str]: """根据客户备注、地区、标签生成一句简短个性化问候语。""" tags = tags or [] user = f"请生成一句简短的微信问候语(1-2句话),客户备注名:{remark_name}" if region: user += f",地区:{region}" if tags: user += f",标签:{','.join(tags)}" user += "。不要解释,只输出问候语本身。" return await qwen_chat([{"role": "user", "content": user}])