stock-ai-agent/backend/app/services/llm_service.py
2026-02-21 19:36:58 +08:00

112 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
LLM服务 - 兼容层,使用多模型服务
"""
import asyncio
from typing import Optional, List, Dict, Any
from app.services.multi_llm_service import multi_llm_service
from app.utils.logger import logger
class LLMService:
"""LLM服务类兼容层"""
def __init__(self):
"""初始化LLM服务"""
self.multi_service = multi_llm_service
self.client = multi_llm_service.current_model # 兼容性
def chat(
self,
messages: List[Dict[str, str]],
model: str = None,
temperature: float = 0.7,
max_tokens: int = 2000,
model_override: str = None
) -> Optional[str]:
"""
调用LLM进行对话同步版本
Args:
messages: 消息列表
model: 模型名称(已废弃,使用 model_override
temperature: 温度参数
max_tokens: 最大token数
model_override: 指定使用的模型 (zhipu/deepseek)
Returns:
LLM响应文本
"""
return self.multi_service.chat(
messages=messages,
temperature=temperature,
max_tokens=max_tokens,
model_override=model_override
)
async def achat(
self,
messages: List[Dict[str, str]],
model: str = None,
temperature: float = 0.7,
max_tokens: int = 2000,
model_override: str = None
) -> Optional[str]:
"""
调用LLM进行对话异步版本 - 不阻塞事件循环)
Args:
messages: 消息列表
model: 模型名称(已废弃,使用 model_override
temperature: 温度参数
max_tokens: 最大token数
model_override: 指定使用的模型 (zhipu/deepseek)
Returns:
LLM响应文本
"""
# 在线程池中执行同步的 LLM 调用,避免阻塞事件循环
loop = asyncio.get_event_loop()
return await loop.run_in_executor(
None,
lambda: self.multi_service.chat(
messages=messages,
temperature=temperature,
max_tokens=max_tokens,
model_override=model_override
)
)
def analyze_intent(self, user_message: str) -> Dict[str, Any]:
"""使用LLM分析用户意图"""
return self.multi_service.analyze_intent(user_message)
def chat_stream(
self,
messages: List[Dict[str, str]],
temperature: float = 0.7,
max_tokens: int = 2000,
model_override: str = None
):
"""
流式调用LLM进行对话
Args:
messages: 消息列表
temperature: 温度参数
max_tokens: 最大token数
model_override: 指定使用的模型 (zhipu/deepseek)
Yields:
LLM响应的文本片段
"""
return self.multi_service.chat_stream(
messages=messages,
temperature=temperature,
max_tokens=max_tokens,
model_override=model_override
)
# 创建全局实例
llm_service = LLMService()