Merge pull request #5163 from Pollo3470/feat/ai-proxy

This commit is contained in:
jxxghp
2025-11-21 12:23:39 +08:00
committed by GitHub
+14 -33
View File
@@ -1,7 +1,6 @@
"""MoviePilot AI智能体实现""" """MoviePilot AI智能体实现"""
import asyncio import asyncio
import threading
from typing import Dict, List, Any from typing import Dict, List, Any
from langchain.agents import AgentExecutor, create_openai_tools_agent from langchain.agents import AgentExecutor, create_openai_tools_agent
@@ -21,9 +20,6 @@ from app.helper.message import MessageHelper
from app.log import logger from app.log import logger
from app.schemas import Notification from app.schemas import Notification
# 用于保护环境变量修改的线程锁
_env_lock = threading.Lock()
class AgentChain(ChainBase): class AgentChain(ChainBase):
pass pass
@@ -77,36 +73,21 @@ class MoviePilotAgent:
raise ValueError("未配置 LLM_API_KEY") raise ValueError("未配置 LLM_API_KEY")
if provider == "google": if provider == "google":
import os
from contextlib import contextmanager
from langchain_google_genai import ChatGoogleGenerativeAI
# 使用线程锁保护的临时环境变量配置
@contextmanager
def _temp_proxy_env():
"""线程安全的临时设置代理环境变量的上下文管理器"""
with _env_lock:
old_http = os.environ.get("HTTP_PROXY")
old_https = os.environ.get("HTTPS_PROXY")
try:
if settings.PROXY_HOST: if settings.PROXY_HOST:
os.environ["HTTP_PROXY"] = settings.PROXY_HOST from langchain_openai import ChatOpenAI
os.environ["HTTPS_PROXY"] = settings.PROXY_HOST return ChatOpenAI(
yield model=settings.LLM_MODEL,
finally: api_key=api_key,
# 恢复原始环境变量 max_retries=3,
if old_http is not None: base_url="https://generativelanguage.googleapis.com/v1beta/openai",
os.environ["HTTP_PROXY"] = old_http temperature=settings.LLM_TEMPERATURE,
elif "HTTP_PROXY" in os.environ: streaming=True,
del os.environ["HTTP_PROXY"] callbacks=[self.callback_handler],
stream_usage=True,
if old_https is not None: openai_proxy=settings.PROXY_HOST
os.environ["HTTPS_PROXY"] = old_https )
elif "HTTPS_PROXY" in os.environ: else:
del os.environ["HTTPS_PROXY"] from langchain_google_genai import ChatGoogleGenerativeAI
# 在临时环境变量中初始化 ChatGoogleGenerativeAI
with _temp_proxy_env():
return ChatGoogleGenerativeAI( return ChatGoogleGenerativeAI(
model=settings.LLM_MODEL, model=settings.LLM_MODEL,
google_api_key=api_key, google_api_key=api_key,