完成世界书、骰子、apiconfig页面处理
This commit is contained in:
88
backend/utils/llm_client.py
Normal file
88
backend/utils/llm_client.py
Normal file
@@ -0,0 +1,88 @@
|
||||
"""
|
||||
LLM 客户端工具
|
||||
|
||||
提供统一的 LLM 接口,支持多种模型提供商。
|
||||
使用 LangChain 的 ChatModel 抽象,简化不同厂商 API 的调用。
|
||||
"""
|
||||
from typing import Optional
|
||||
from langchain_core.language_models.chat_models import BaseChatModel
|
||||
from core.config import settings
|
||||
|
||||
|
||||
def get_llm(
|
||||
provider: str = "openai",
|
||||
model: Optional[str] = None,
|
||||
temperature: float = 0.7,
|
||||
streaming: bool = False,
|
||||
**kwargs
|
||||
) -> BaseChatModel:
|
||||
"""
|
||||
获取 LLM 实例
|
||||
|
||||
Args:
|
||||
provider: 模型提供商 ("openai", "anthropic", "ollama")
|
||||
model: 模型名称 (如果不指定则使用配置中的默认值)
|
||||
temperature: 温度参数 (0-2)
|
||||
streaming: 是否启用流式输出
|
||||
**kwargs: 其他参数传递给模型
|
||||
|
||||
Returns:
|
||||
BaseChatModel: LangChain 的聊天模型实例
|
||||
"""
|
||||
|
||||
if provider == "openai":
|
||||
from langchain_openai import ChatOpenAI
|
||||
|
||||
return ChatOpenAI(
|
||||
model=model or settings.OPENAI_MODEL or "gpt-4",
|
||||
temperature=temperature,
|
||||
api_key=settings.OPENAI_API_KEY,
|
||||
streaming=streaming,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
elif provider == "anthropic":
|
||||
from langchain_anthropic import ChatAnthropic
|
||||
|
||||
return ChatAnthropic(
|
||||
model=model or settings.ANTHROPIC_MODEL or "claude-3-opus-20240229",
|
||||
temperature=temperature,
|
||||
api_key=settings.ANTHROPIC_API_KEY,
|
||||
max_tokens=kwargs.pop("max_tokens", 4096),
|
||||
streaming=streaming,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
elif provider == "ollama":
|
||||
try:
|
||||
from langchain_ollama import ChatOllama
|
||||
|
||||
return ChatOllama(
|
||||
model=model or settings.OLLAMA_MODEL or "llama3",
|
||||
base_url=settings.OLLAMA_BASE_URL or "http://localhost:11434",
|
||||
temperature=temperature,
|
||||
**kwargs
|
||||
)
|
||||
except ImportError:
|
||||
raise ImportError(
|
||||
"langchain-ollama not installed. Run: pip install langchain-ollama"
|
||||
)
|
||||
|
||||
else:
|
||||
raise ValueError(f"Unsupported provider: {provider}. Use 'openai', 'anthropic', or 'ollama'")
|
||||
|
||||
|
||||
# 便捷函数 - 常用配置
|
||||
def get_fast_llm(provider: str = "openai") -> BaseChatModel:
|
||||
"""获取快速响应的 LLM (低温度,适合事实性问题)"""
|
||||
return get_llm(provider, temperature=0.3)
|
||||
|
||||
|
||||
def get_creative_llm(provider: str = "openai") -> BaseChatModel:
|
||||
"""获取创造性 LLM (高温度,适合创意写作)"""
|
||||
return get_llm(provider, temperature=0.9)
|
||||
|
||||
|
||||
def get_streaming_llm(provider: str = "openai") -> BaseChatModel:
|
||||
"""获取支持流式输出的 LLM"""
|
||||
return get_llm(provider, streaming=True)
|
||||
Reference in New Issue
Block a user