forked from ChaiHao/BPOS-MVP
UI③:LLM 工具改为大模型驱动的系统内通用工具 —— 不是模型实例
五件真实存在的:案例决断(loop-turn)/ 步内生成(flow-step)/ 叙述性小结 / 蒸馏归纳 / 连通探针,各标算谁的账。模型实例退成尾注:模型是发动机,这些是装在上面的件。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
@@ -469,6 +469,11 @@
|
||||
*/
|
||||
.g-page > * { flex-shrink: 0; }
|
||||
|
||||
/* 正文里的行内跳转:看着是链接、按钮语义(可聚焦、可键盘触发) */
|
||||
.g-link { border: 0; padding: 0; background: none; font: inherit; color: var(--brand); cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
|
||||
.g-link:hover { color: var(--brand-deep); }
|
||||
.g-link:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; border-radius: 3px; }
|
||||
|
||||
/* 蓝图因果链:四库节点卡以真箭头相连 —— 箭头编码真实依赖(流程包→活动→工具→数据),节点即入口 */
|
||||
.g-chain { display: flex; align-items: stretch; gap: 0; margin-bottom: 14px; }
|
||||
.g-chain-node { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 8px; padding: 14px 16px; background: var(--card); border: 1px solid var(--cline); border-radius: 13px; box-shadow: var(--cshadow); text-align: left; font: inherit; color: var(--ink); cursor: pointer; transition: border-color var(--t-fast), transform var(--t-fast), box-shadow var(--t-fast); }
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
* feature `gov-tool` —— 工具箱:**系统能对世界做什么**,一屏四段。
|
||||
*
|
||||
* 功能工具 · 已注册的调用契约(读类自由调,写类登记意向)
|
||||
* LLM 工具 · 模型实例(活动只见逻辑名,不触厂商与密钥)
|
||||
* LLM 工具 · 大模型驱动的系统内通用工具(**不是模型**;模型在系统区绑)
|
||||
* 人类工具 · 工单两模式 + 对话卡三族(调人也是调工具,只是被调的是人)
|
||||
* 接入 · 导入自定义工具(与第一方同门两审)/ 连接 MCP
|
||||
*
|
||||
* 三类工具并列不是编排:它是「一件事能交给谁办」的全集 ——
|
||||
* 交给系统(功能工具)、交给模型(LLM)、交给人(人类工具)。少列一类,活动就以为自己没得选。
|
||||
* 交给系统(功能工具)、交给模型(LLM 工具)、交给人(人类工具)。少列一类,活动就以为自己没得选。
|
||||
*
|
||||
* 自 `~/coding/JCAI_PRD/governance/_components/Governance.tsx` 平移:
|
||||
* 类名(`g-*` + 色调 `t-*`)与文案沿用;设计台以**卡片**为基调(运营台才以列表为主)。
|
||||
@@ -74,6 +74,51 @@ const HUMAN_TOOLS = [
|
||||
},
|
||||
] as const;
|
||||
|
||||
/**
|
||||
* LLM 工具目录 —— 系统内**由大模型驱动**的通用工具(不是模型本身)。
|
||||
*
|
||||
* 模型是发动机,这些是装在发动机上的件:每一件都有明确的入、出与算账口径。
|
||||
* 它们不在工具目录里注册 —— 与人类工具一样,是基座给的能力,不是谁装上来的。
|
||||
* 跑在哪个模型上由系统区的四元绑定决定(活动只见逻辑名,不触厂商与密钥)。
|
||||
*/
|
||||
const LLM_TOOLS = [
|
||||
{
|
||||
name: '案例决断',
|
||||
mode: 'loop-turn',
|
||||
ico: 'rotate-ccw',
|
||||
desc: '案例活动每一拍:读「当下可为 ∩ 目标所需」,从 调工具 / 调人 / 立监听 里选一个行动',
|
||||
cost: '活动预算',
|
||||
},
|
||||
{
|
||||
name: '步内生成',
|
||||
mode: 'flow-step',
|
||||
ico: 'list-checks',
|
||||
desc: '标准活动的 llm 步:模板 + 出参 schema → 结构化产出;出参必过 schema 校验,不合即不算数',
|
||||
cost: '活动预算',
|
||||
},
|
||||
{
|
||||
name: '叙述性小结',
|
||||
mode: 'system-use',
|
||||
ico: 'file-text',
|
||||
desc: '任务日志 → 200 字阶段小结,只陈述日志里有的事实、不推测',
|
||||
cost: '系统账',
|
||||
},
|
||||
{
|
||||
name: '蒸馏归纳',
|
||||
mode: 'system-use',
|
||||
ico: 'layers',
|
||||
desc: '终态封卷时从任务记忆归纳活动记忆条目:四层归位 + 证据链必挂',
|
||||
cost: '系统账',
|
||||
},
|
||||
{
|
||||
name: '连通探针',
|
||||
mode: 'probe',
|
||||
ico: 'plug',
|
||||
desc: '试一次端点与鉴权,回延迟 —— 绑完模型先探一下,别等活动跑起来才发现调不通',
|
||||
cost: '系统账',
|
||||
},
|
||||
] as const;
|
||||
|
||||
export function ToolsHome({ nav }: HomeProps) {
|
||||
const tools = useGovTools();
|
||||
const llm = useGovLlm();
|
||||
@@ -131,39 +176,40 @@ export function ToolsHome({ nav }: HomeProps) {
|
||||
)}
|
||||
</Sec>
|
||||
|
||||
<Sec ico="cpu" title="LLM 工具" extra="调模型经模型网关一缝 · 活动只见逻辑名,四元绑定在系统区">
|
||||
<Sec ico="cpu" title="LLM 工具" extra="大模型驱动的系统内通用工具 · 调模型经模型网关一缝">
|
||||
<div className="g-shelf">
|
||||
{(llm.data?.instances ?? []).map((m) => (
|
||||
<button
|
||||
key={m.id}
|
||||
className={'g-tile t-' + (m.enabled ? 'auto' : 'mute')}
|
||||
onClick={() => nav.jump('system', 'llm', { k: 'llm', id: m.id })}
|
||||
>
|
||||
{LLM_TOOLS.map((t) => (
|
||||
<div key={t.name} className="g-tile t-auto">
|
||||
<span className="g-tile-h">
|
||||
<span className="g-tile-i">
|
||||
<Ico name="cpu" s={16} />
|
||||
<Ico name={t.ico} s={16} />
|
||||
</span>
|
||||
<span className="g-tile-t">
|
||||
<b>{m.name}</b>
|
||||
<em>{m.provider}</em>
|
||||
<b>{t.name}</b>
|
||||
<em>{t.mode}</em>
|
||||
</span>
|
||||
<St tone={m.apiKeyBound ? 'ok' : 'danger'} ico={m.apiKeyBound ? 'circle-check' : 'alert-circle'}>
|
||||
{m.apiKeyBound ? '已绑密钥' : '未绑密钥'}
|
||||
<St tone="ok" ico="circle-check">
|
||||
内置
|
||||
</St>
|
||||
</span>
|
||||
<span className="g-tile-m">
|
||||
<span className="g-tile-d">型号 {m.model}</span>
|
||||
<span className="g-tile-d">{t.desc}</span>
|
||||
</span>
|
||||
<span className="g-tile-f">
|
||||
{m.systemUse && <Chip tone="brand">系统用途</Chip>}
|
||||
<span className="r">{m.enabled ? '启用中' : '已停用'}</span>
|
||||
<Chip tone={t.cost === '系统账' ? 'mute' : 'auto'} ico="coins">
|
||||
计量入{t.cost}
|
||||
</Chip>
|
||||
</span>
|
||||
</button>
|
||||
))}
|
||||
{(llm.data?.instances ?? []).length === 0 && (
|
||||
<Clear>还没有绑定模型 —— 去系统区加一个实例,活动才有模型可用。</Clear>
|
||||
)}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<Note>
|
||||
这些是<b>工具</b>,不是模型 —— 模型是它们跑在上面的发动机。
|
||||
当前绑了 {(llm.data?.instances ?? []).length} 个模型实例(
|
||||
{(llm.data?.instances ?? []).map((m) => m.name).join(' · ') || '尚未绑定'});
|
||||
换厂商、换型号只改<button className="g-link" onClick={() => nav.jump('system', 'llm')}>系统区的四元绑定</button>,
|
||||
这些工具与活动一行都不动。
|
||||
</Note>
|
||||
</Sec>
|
||||
|
||||
<Sec ico="hand" title="人类工具" extra="调人也是调工具 · 打扰上限在契约授权边界,由 Harness 强制">
|
||||
|
||||
Reference in New Issue
Block a user