From 515735b77271a8bd8b30aeecefc982b77ba7f156 Mon Sep 17 00:00:00 2001 From: Pine Date: Tue, 25 Aug 2026 14:08:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(compute):=20=E7=94=A8=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E7=AE=97=E5=8A=9B=E4=B8=AD=E5=BF=83=20base=20=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E6=94=AF=E6=8C=81=E5=85=AC=E7=BD=91=E9=85=8D=E7=BD=AE?= =?UTF-8?q?(PINEAGENTS=5FCOMPUTE=5FPUBLIC=5FBASE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - config 加 COMPUTE_PUBLIC_BASE; /opc/compute/base 优先用公网, 回落 request.base_url - 避免经代理显示 127.0.0.1 内部地址; 用户可获真实可用的 /v1 接入地址 --- app/api/routers/rbac_opc.py | 8 +++++--- app/config.py | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/api/routers/rbac_opc.py b/app/api/routers/rbac_opc.py index 9374a88..6608644 100644 --- a/app/api/routers/rbac_opc.py +++ b/app/api/routers/rbac_opc.py @@ -14,6 +14,7 @@ from ..schemas.opc import BidRequest, ProfileUpdate, FinanceRecordCreate from ...rbac import require_roles, write_audit from ...infrastructure.repositories import Database, new_id, utcnow_iso from ...infrastructure.models import FinanceRecord +from ... import config from ...services import compute_client, compute_catalog router = APIRouter(prefix="/opc", tags=["opc"]) @@ -221,14 +222,15 @@ async def opc_compute_base( request: Request, user: dict = Depends(require_roles("opc_member")), ): - """用户接入地址:经 server-core /v1 中继(OpenAI 兼容)。""" - base = request.base_url.rstrip("/") + """用户接入地址:经 server-core /v1 中继(OpenAI 兼容)。优先用公网配置,回落请求 host。""" + base = config.COMPUTE_PUBLIC_BASE or request.base_url.rstrip("/") + base = base.rstrip("/") return { "base_url": f"{base}/v1", "relay_path": "/v1/chat/completions", "models_path": "/v1/models", "username": user.get("username"), - "hint": "将 base_url 与下方令牌填入 OpenAI 兼容客户端(如 request_url/base)即可调用本平台模型", + "hint": "将 base_url 与下方令牌填入 OpenAI 兼容客户端(如 base_url/api_key)即可调用本平台模型", } diff --git a/app/config.py b/app/config.py index a3f9572..038d35b 100644 --- a/app/config.py +++ b/app/config.py @@ -115,6 +115,9 @@ COMPUTE_ADMIN_TOKEN = os.environ.get("PINEAGENTS_INTERNAL_TOKEN") or os.environ. # /v1 模型中继转发(relay.py)用的引擎消费令牌:需是引擎 /v1 能识别的真实用户/渠道令牌, # 与聚合 root 的 COMPUTE_ADMIN_TOKEN 区分开(后者仅用于管理/root 端点)。回退 COMPUTE_ADMIN_TOKEN。 COMPUTE_RELAY_TOKEN = os.environ.get("PINEAGENTS_COMPUTE_RELAY_TOKEN", "") +# 用户端算力中心「基础 API 地址」:对外公网地址(如 https://opc.pinesound.cn),供用户其它工具接入。 +# 未设置时回落请求的 base_url。经代理时 request.base_url 可能为内部地址,故用此配置给公网地址。 +COMPUTE_PUBLIC_BASE = os.environ.get("PINEAGENTS_COMPUTE_PUBLIC_BASE", "").rstrip("/") COMPUTE_TIMEOUT = float(os.environ.get("PINEAGENTS_COMPUTE_TIMEOUT", "10")) COMPUTE_RETRIES = int(os.environ.get("PINEAGENTS_COMPUTE_RETRIES", "2"))