Ver código fonte

feat(webui): 创建智能体时可勾「任务型(ReAct)+ 进度纪律」

AgentCreate 基本设置加一个勾选:勾则把新 agent 建成 type=react +
react.progressDiscipline=true(平台自动配内置读写/跑命令工具),不勾保持纯对话型
(conversation)。配合 AgentEdit 行为 tab 的开关——创建时即可选,创建后也能在编辑里调。
tsc 0 错误、webui 重建;纯前端,生产静态服务自动上线。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
kenny67nju 2 meses atrás
pai
commit
534e49371c
1 arquivos alterados com 18 adições e 1 exclusões
  1. 18 1
      webui/src/pages/AgentCreate.tsx

+ 18 - 1
webui/src/pages/AgentCreate.tsx

@@ -48,6 +48,9 @@ export default function AgentCreate() {
   const [systemPrompt, setSystemPrompt] = useState(SYSTEM_PROMPT_TEMPLATES[0].prompt)
   const [selectedKBs, setSelectedKBs] = useState<string[]>([])
   const [kbSearchMode, setKbSearchMode] = useState('bm25')
+  // 任务型(ReAct)+ 进度纪律:勾选则建可多步读写文件的 react 智能体并开 PROGRESS.md 纪律;
+  // 不勾为纯对话问答型(conversation)。
+  const [taskMode, setTaskMode] = useState(false)
 
   const { data: providerData } = useQuery({
     queryKey: ['providers'],
@@ -77,7 +80,7 @@ export default function AgentCreate() {
           agentId: name.toLowerCase().replace(/\s+/g, '-'),
           name,
           description,
-          type: 'conversation',
+          type: taskMode ? 'react' : 'conversation',
           systemPrompt,
           model: {
             provider,
@@ -85,6 +88,8 @@ export default function AgentCreate() {
             temperature: parseFloat(temperature),
             maxTokens: parseInt(maxTokens, 10),
           },
+          // 任务型:给默认 react 配置 + 开进度纪律(平台自动配内置读写/跑命令工具)。
+          ...(taskMode ? { react: { maxSteps: 20, progressDiscipline: true } } : {}),
         },
         tags: tags
           .split(',')
@@ -145,6 +150,18 @@ export default function AgentCreate() {
               onChange={e => setTags(e.target.value)}
               hint="标签便于筛选和分类"
             />
+            <label className="flex items-start gap-2 cursor-pointer rounded-lg border border-gray-200 p-3 hover:bg-gray-50">
+              <input type="checkbox" className="mt-0.5" checked={taskMode}
+                     onChange={e => setTaskMode(e.target.checked)} />
+              <span className="text-sm">
+                <span className="font-medium text-gray-800">任务型智能体(可读写文件、多步执行)</span>
+                <span className="block text-xs text-gray-500 mt-0.5">
+                  勾选则创建 ReAct 智能体,可读写文件/跑命令,并自动维护工作目录里的
+                  PROGRESS.md 进度清单(逐项打勾、不重做、不做完不收尾),防多步任务"乱跳/重做"。
+                  不勾则为纯对话问答型。创建后可在「编辑 → 行为」里再调整。
+                </span>
+              </span>
+            </label>
             <Button onClick={() => setActiveTab('model')} className="w-full" disabled={!name.trim()}>
               下一步:模型配置
             </Button>