fix: 收敛 Agent 设计器导航与记忆配置
- 增加返回智能体列表入口 - 移除旧消息数压缩参数并保持令牌阈值配置
This commit is contained in:
@@ -9,7 +9,8 @@ import type {
|
|||||||
import { computed, onActivated, onDeactivated, onMounted, ref } from 'vue';
|
import { computed, onActivated, onDeactivated, onMounted, ref } from 'vue';
|
||||||
import { useRoute, useRouter } from 'vue-router';
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
|
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus';
|
import { ArrowLeft } from '@element-plus/icons-vue';
|
||||||
|
import { ElButton, ElMessage, ElMessageBox } from 'element-plus';
|
||||||
import { tryit } from 'radash';
|
import { tryit } from 'radash';
|
||||||
|
|
||||||
import { api } from '#/api/request';
|
import { api } from '#/api/request';
|
||||||
@@ -502,10 +503,22 @@ function handleTryout() {
|
|||||||
function handleCloseTryout() {
|
function handleCloseTryout() {
|
||||||
selectBase();
|
selectBase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleBack() {
|
||||||
|
router.push(AGENT_TAB_PAGE_KEY);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div v-loading="pageLoading" class="agent-designer">
|
<div v-loading="pageLoading" class="agent-designer">
|
||||||
|
<ElButton
|
||||||
|
class="agent-designer__back"
|
||||||
|
:icon="ArrowLeft"
|
||||||
|
aria-label="返回智能体列表"
|
||||||
|
@click="handleBack"
|
||||||
|
>
|
||||||
|
返回智能体列表
|
||||||
|
</ElButton>
|
||||||
<template v-if="contentReady">
|
<template v-if="contentReady">
|
||||||
<AgentStudioCanvas
|
<AgentStudioCanvas
|
||||||
:active="canvasActive"
|
:active="canvasActive"
|
||||||
@@ -566,4 +579,13 @@ function handleCloseTryout() {
|
|||||||
),
|
),
|
||||||
var(--el-fill-color-extra-light);
|
var(--el-fill-color-extra-light);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.agent-designer__back {
|
||||||
|
position: absolute;
|
||||||
|
top: var(--space-6);
|
||||||
|
left: var(--space-6);
|
||||||
|
z-index: 10;
|
||||||
|
border-radius: var(--radius-control);
|
||||||
|
box-shadow: var(--shadow-subtle);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -82,11 +82,14 @@ const selectedMcpToolCount = computed(() => selectedMcpTools.value.length);
|
|||||||
|
|
||||||
const asyncExecutionEnabled = computed({
|
const asyncExecutionEnabled = computed({
|
||||||
get() {
|
get() {
|
||||||
return String(props.binding.optionsJson?.executionMode || '').toUpperCase() === 'ASYNC';
|
return (
|
||||||
|
String(props.binding.optionsJson?.executionMode || '').toUpperCase() ===
|
||||||
|
'ASYNC'
|
||||||
|
);
|
||||||
},
|
},
|
||||||
set(value: boolean) {
|
set(value: boolean) {
|
||||||
props.binding.optionsJson = {
|
props.binding.optionsJson = {
|
||||||
...(props.binding.optionsJson || {}),
|
...props.binding.optionsJson,
|
||||||
executionMode: value ? 'ASYNC' : 'SYNC',
|
executionMode: value ? 'ASYNC' : 'SYNC',
|
||||||
};
|
};
|
||||||
emit('change');
|
emit('change');
|
||||||
|
|||||||
@@ -31,3 +31,42 @@ describe('useAgentDesignerState generation stream', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('useAgentDesignerState memory compression', () => {
|
||||||
|
it('keeps only token-based compression settings in state and payload', () => {
|
||||||
|
expect(
|
||||||
|
createEmptyAgent().memoryConfigJson?.compressionParameter,
|
||||||
|
).not.toHaveProperty('msgThreshold');
|
||||||
|
|
||||||
|
const designer = useAgentDesignerState();
|
||||||
|
designer.reset({
|
||||||
|
name: '旧压缩配置智能体',
|
||||||
|
memoryConfigJson: {
|
||||||
|
maxAttachedMessageCount: 12,
|
||||||
|
compressionParameter: {
|
||||||
|
enabled: true,
|
||||||
|
msgThreshold: 12,
|
||||||
|
lastKeep: 6,
|
||||||
|
minCompressionTokenThreshold: 128_000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const stateCompressionParameter =
|
||||||
|
designer.state.agent.memoryConfigJson?.compressionParameter;
|
||||||
|
expect(stateCompressionParameter).not.toHaveProperty('msgThreshold');
|
||||||
|
expect(stateCompressionParameter?.lastKeep).toBe(6);
|
||||||
|
expect(stateCompressionParameter?.minCompressionTokenThreshold).toBe(
|
||||||
|
128_000,
|
||||||
|
);
|
||||||
|
|
||||||
|
const payloadMemoryConfig = designer.buildPayloadAgent().memoryConfigJson;
|
||||||
|
expect(payloadMemoryConfig).not.toHaveProperty('maxAttachedMessageCount');
|
||||||
|
expect(payloadMemoryConfig?.compressionParameter).not.toHaveProperty(
|
||||||
|
'msgThreshold',
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
payloadMemoryConfig?.compressionParameter.minCompressionTokenThreshold,
|
||||||
|
).toBe(128_000);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -76,6 +76,14 @@ function normalizeBindingToolName(binding: AgentToolBinding) {
|
|||||||
return resolveToolName(kind, resource);
|
return resolveToolName(kind, resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function tokenOnlyCompressionParameter(
|
||||||
|
parameter?: Record<string, any>,
|
||||||
|
): Record<string, any> {
|
||||||
|
const normalized = { ...parameter };
|
||||||
|
delete normalized.msgThreshold;
|
||||||
|
return normalized;
|
||||||
|
}
|
||||||
|
|
||||||
export function createEmptyAgent(): AgentInfo {
|
export function createEmptyAgent(): AgentInfo {
|
||||||
return {
|
return {
|
||||||
name: '未命名智能体',
|
name: '未命名智能体',
|
||||||
@@ -88,7 +96,6 @@ export function createEmptyAgent(): AgentInfo {
|
|||||||
memoryConfigJson: {
|
memoryConfigJson: {
|
||||||
compressionParameter: {
|
compressionParameter: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
msgThreshold: 12,
|
|
||||||
lastKeep: 8,
|
lastKeep: 8,
|
||||||
minCompressionTokenThreshold: 6000,
|
minCompressionTokenThreshold: 6000,
|
||||||
},
|
},
|
||||||
@@ -101,10 +108,11 @@ export function createEmptyAgent(): AgentInfo {
|
|||||||
function normalizeAgent(agent?: AgentInfo): AgentInfo {
|
function normalizeAgent(agent?: AgentInfo): AgentInfo {
|
||||||
const source = agent || {};
|
const source = agent || {};
|
||||||
const memoryConfig = source.memoryConfigJson || {};
|
const memoryConfig = source.memoryConfigJson || {};
|
||||||
const compressionParameter = memoryConfig.compressionParameter || {};
|
const compressionParameter = tokenOnlyCompressionParameter(
|
||||||
|
memoryConfig.compressionParameter,
|
||||||
|
);
|
||||||
const defaultCompressionParameter =
|
const defaultCompressionParameter =
|
||||||
createEmptyAgent().memoryConfigJson?.compressionParameter || {};
|
createEmptyAgent().memoryConfigJson?.compressionParameter || {};
|
||||||
const legacyMsgThreshold = memoryConfig.maxAttachedMessageCount;
|
|
||||||
return {
|
return {
|
||||||
...createEmptyAgent(),
|
...createEmptyAgent(),
|
||||||
...source,
|
...source,
|
||||||
@@ -121,10 +129,6 @@ function normalizeAgent(agent?: AgentInfo): AgentInfo {
|
|||||||
compressionParameter: {
|
compressionParameter: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
...compressionParameter,
|
...compressionParameter,
|
||||||
msgThreshold:
|
|
||||||
compressionParameter.msgThreshold ??
|
|
||||||
legacyMsgThreshold ??
|
|
||||||
defaultCompressionParameter.msgThreshold,
|
|
||||||
lastKeep:
|
lastKeep:
|
||||||
compressionParameter.lastKeep ?? defaultCompressionParameter.lastKeep,
|
compressionParameter.lastKeep ?? defaultCompressionParameter.lastKeep,
|
||||||
minCompressionTokenThreshold:
|
minCompressionTokenThreshold:
|
||||||
@@ -353,9 +357,13 @@ export function useAgentDesignerState() {
|
|||||||
|
|
||||||
function buildPayloadAgent(): AgentInfo {
|
function buildPayloadAgent(): AgentInfo {
|
||||||
const memoryConfigJson = state.agent.memoryConfigJson || {};
|
const memoryConfigJson = state.agent.memoryConfigJson || {};
|
||||||
const compressionParameter = memoryConfigJson.compressionParameter || {};
|
const compressionParameter = tokenOnlyCompressionParameter(
|
||||||
const { maxAttachedMessageCount, ...restMemoryConfigJson } =
|
memoryConfigJson.compressionParameter,
|
||||||
memoryConfigJson;
|
);
|
||||||
|
const {
|
||||||
|
maxAttachedMessageCount: _maxAttachedMessageCount,
|
||||||
|
...restMemoryConfigJson
|
||||||
|
} = memoryConfigJson;
|
||||||
return {
|
return {
|
||||||
...state.agent,
|
...state.agent,
|
||||||
interactionConfigJson: buildInteractionConfigPayload(
|
interactionConfigJson: buildInteractionConfigPayload(
|
||||||
|
|||||||
Reference in New Issue
Block a user