feat(portal): add logical group guidance config

This commit is contained in:
phamnazage-jpg
2026-05-30 10:38:59 +08:00
parent e940ebda2c
commit 3bfd4cfc1c
10 changed files with 144 additions and 11 deletions

View File

@@ -531,6 +531,20 @@
description
<textarea id="group-description" placeholder="例如:对用户只暴露一个 GPT Shared 分组,内部按 route 转到不同 shadow group"></textarea>
</label>
<label style="margin-top:12px;">
usage_scenario
<textarea id="group-usage-scenario" placeholder="例如:适合高质量推理、复杂编排、统一 GPT 产品入口。"></textarea>
</label>
<div class="field-grid two" style="margin-top:12px;">
<label>
recommendation
<textarea id="group-recommendation" placeholder="例如:优先使用 gpt-5.4 做主模型。"></textarea>
</label>
<label>
next_step_hint
<textarea id="group-next-step-hint" placeholder="例如:先创建测试 Key再按推荐模型发起第一次请求。"></textarea>
</label>
</div>
<div class="actions">
<button class="primary" id="create-group-btn" type="button">创建分组</button>
<button class="secondary" id="update-group-btn" type="button">更新分组</button>
@@ -691,6 +705,9 @@
const groupDisplayNameInput = document.getElementById("group-display-name");
const groupStatusInput = document.getElementById("group-status-input");
const groupDescriptionInput = document.getElementById("group-description");
const groupUsageScenarioInput = document.getElementById("group-usage-scenario");
const groupRecommendationInput = document.getElementById("group-recommendation");
const groupNextStepHintInput = document.getElementById("group-next-step-hint");
const groupRoutePolicyInput = document.getElementById("group-route-policy");
const groupStickyModeInput = document.getElementById("group-sticky-mode");
const groupConversationTTLInput = document.getElementById("group-conversation-ttl");
@@ -868,6 +885,9 @@
display_name: groupDisplayNameInput.value.trim(),
status: groupStatusInput.value,
description: groupDescriptionInput.value.trim(),
usage_scenario: groupUsageScenarioInput.value.trim(),
recommendation: groupRecommendationInput.value.trim(),
next_step_hint: groupNextStepHintInput.value.trim(),
route_policy: groupRoutePolicyInput.value,
sticky_mode: groupStickyModeInput.value,
conversation_ttl_seconds: Number(groupConversationTTLInput.value || "0"),
@@ -896,6 +916,9 @@
groupDisplayNameInput.value = group?.display_name || "";
groupStatusInput.value = group?.status || "active";
groupDescriptionInput.value = group?.description || "";
groupUsageScenarioInput.value = group?.usage_scenario || "";
groupRecommendationInput.value = group?.recommendation || "";
groupNextStepHintInput.value = group?.next_step_hint || "";
groupRoutePolicyInput.value = group?.route_policy || "priority";
groupStickyModeInput.value = group?.sticky_mode || "conversation_preferred";
groupConversationTTLInput.value = String(group?.conversation_ttl_seconds || 7200);

View File

@@ -823,7 +823,7 @@
description: "适合 DeepSeek 官方 chat 路线需求。当前用户侧建议直接使用 deepseek-chat。"
}
};
const MODEL_GUIDANCE = {
const LEGACY_MODEL_GUIDANCE = {
"kimi-k2.6": {
scenario: "适合日常聊天、长上下文问答和轻量智能体使用。",
recommendation: "默认先从这条模型线开始验证接入是否通畅。"
@@ -1254,11 +1254,14 @@
const group = row.logicalGroup;
const models = portalLogicalGroupModels(group);
const primaryModel = models[0] || "";
const guidance = MODEL_GUIDANCE[primaryModel] || {
const configuredScenario = String(group.usage_scenario || "").trim();
const configuredRecommendation = String(group.recommendation || "").trim();
const configuredNextStep = String(group.next_step_hint || "").trim();
const guidance = LEGACY_MODEL_GUIDANCE[primaryModel] || {
scenario: "适合按该逻辑分组下的公开模型集合统一接入。",
recommendation: "建议先用列表中的第一个公开模型做连通性验证。"
};
const nextStep = row.stateKey === "active"
const defaultNextStep = row.stateKey === "active"
? "当前已具备订阅与权限,建议直接创建测试 Key 并使用推荐模型发起第一次请求。"
: row.stateKey === "granted"
? "当前已具备线路权限,但未发现活跃订阅;建议先确认订阅状态后再发起调用。"
@@ -1274,9 +1277,9 @@
models,
stateText: row.stateText,
stateKey: row.stateKey,
scenario: guidance.scenario,
recommendation: guidance.recommendation,
nextStep,
scenario: configuredScenario || guidance.scenario,
recommendation: configuredRecommendation || guidance.recommendation,
nextStep: configuredNextStep || defaultNextStep,
compatibility,
stickyMode: group.sticky_mode || "conversation_preferred",
routePolicy: group.route_policy || "priority"