llm.py 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from __future__ import annotations
  2. """大模型工厂:统一创建项目共用的ChatOpenAI实例,兼容OpenAI及其兼容服务(DeepSeek等),支持独立超时配置。"""
  3. from typing import Any
  4. from langchain_openai import ChatOpenAI
  5. from app.config import get_settings
  6. def get_chat_model(
  7. timeout: float | None = None,
  8. ) -> ChatOpenAI:
  9. """创建项目统一使用的大模型。
  10. 支持OpenAI以及兼容OpenAI协议的模型服务。
  11. timeout: 可选的自定义超时时间(秒)。
  12. """
  13. settings = get_settings()
  14. model_kwargs: dict[str, Any] = {
  15. "model": settings.require("model"),
  16. "api_key": settings.require("openai_api_key"),
  17. "temperature": 0,
  18. "max_retries": 2,
  19. "timeout": (
  20. timeout
  21. if timeout is not None
  22. else settings.request_timeout_seconds
  23. ),
  24. }
  25. base_url = settings.base_url.strip()
  26. if base_url:
  27. model_kwargs["base_url"] = base_url
  28. return ChatOpenAI(**model_kwargs)