""" AI 服务模块 封装 OpenAI API 调用逻辑 """ from openai import OpenAI from typing import Optional, List, Dict from app.config import settings class AIService: """AI 服务类""" def __init__(self): """初始化 OpenAI 客户端""" self.client = OpenAI( api_key=settings.openai_api_key, base_url=settings.openai_base_url ) self.model = settings.openai_model async def chat( self, message: str, system_prompt: Optional[str] = None, history: Optional[List[Dict[str, str]]] = None ) -> str: """ 与 AI 进行对话 Args: message: 用户输入的消息 system_prompt: 系统提示词(可选) history: 对话历史(可选) Returns: AI 的回复内容 """ # 构建消息列表 messages = [] # 添加系统提示 if system_prompt: messages.append({"role": "system", "content": system_prompt}) # 添加对话历史 if history: messages.extend(history) # 添加当前用户消息 messages.append({"role": "user", "content": message}) try: # 调用 OpenAI API response = self.client.chat.completions.create( model=self.model, messages=messages, temperature=0.7, max_tokens=2000 ) # 返回 AI 回复 return response.choices[0].message.content except Exception as e: raise Exception(f"AI 调用失败: {str(e)}") async def chat_with_tools( self, message: str, tools: List[Dict], system_prompt: Optional[str] = None ) -> Dict: """ 使用工具与 AI 进行对话 Args: message: 用户输入的消息 tools: 可用工具列表 system_prompt: 系统提示词(可选) Returns: 包含回复和工具调用信息的字典 """ messages = [] if system_prompt: messages.append({"role": "system", "content": system_prompt}) messages.append({"role": "user", "content": message}) try: response = self.client.chat.completions.create( model=self.model, messages=messages, tools=tools, tool_choice="auto" ) return { "message": response.choices[0].message, "finish_reason": response.choices[0].finish_reason } except Exception as e: raise Exception(f"AI 工具调用失败: {str(e)}") # 创建全局 AI 服务实例 ai_service = AIService()