import { useState, useRef } from "react"; import { Card, Select, Input, Button, Badge, Divider, Form, message } from "antd"; import { Plus, ArrowLeft, Play, Save, RefreshCw, FileText, Code, X, } from "lucide-react"; import { useNavigate } from "react-router"; import { mockTemplates } from "@/mock/annotation"; import DevelopmentInProgress from "@/components/DevelopmentInProgress"; const { TextArea } = Input; export default function InstructionTemplateCreate() { return ; const navigate = useNavigate(); const [selectedTemplate, setSelectedTemplate] = useState(null); const [isTestingTemplate, setIsTestingTemplate] = useState(false); const [templates, setTemplates] = useState(mockTemplates); const [variables, setVariables] = useState([]); const variableInputRef = useRef(null); const [form] = Form.useForm(); // 初始化表单数据 const initialValues = selectedTemplate ? { name: selectedTemplate.name, category: selectedTemplate.category, prompt: selectedTemplate.prompt, description: selectedTemplate.description, testInput: "", testOutput: "", } : { name: "", category: "", prompt: "", description: "", testInput: "", testOutput: "", }; // 变量同步 const handlePromptChange = (e: React.ChangeEvent) => { const value = e.target.value; form.setFieldValue("prompt", value); // 自动提取变量 const matches = Array.from(value.matchAll(/\{(\w+)\}/g)).map((m) => m[1]); setVariables(Array.from(new Set(matches))); }; // 添加变量(手动) const handleAddVariable = () => { const input = variableInputRef.current?.input; const value = input?.value.trim(); if (value && !variables.includes(value)) { setVariables([...variables, value]); input.value = ""; } }; // 删除变量 const handleRemoveVariable = (index: number) => { setVariables(variables.filter((_, i) => i !== index)); }; // 测试模板 const handleTestTemplate = async () => { const values = form.getFieldsValue(); if (!values.prompt || !values.testInput) return; setIsTestingTemplate(true); setTimeout(() => { form.setFieldValue( "testOutput", `基于输入"${values.testInput}"生成的测试结果: 这是一个模拟的输出结果,展示了模板的工作效果。在实际使用中,这里会显示AI模型根据您的模板和输入生成的真实结果。 模板变量已正确替换,输出格式符合预期。` ); setIsTestingTemplate(false); }, 2000); }; // 保存模板 const handleSaveTemplate = async () => { try { const values = await form.validateFields(); if (!values.name || !values.prompt || !values.category) return; if (selectedTemplate) { setTemplates((prev) => prev.map((t) => t.id === selectedTemplate.id ? { ...t, ...values, variables, type: "custom" as const, usageCount: t.usageCount, lastUsed: new Date().toISOString().split("T")[0], } : t ) ); } else { const newTemplate: Template = { id: Date.now(), ...values, variables, type: "custom", usageCount: 0, quality: 85, }; setTemplates([newTemplate, ...templates]); } message.success("模板已保存"); navigate("/data/synthesis/task"); } catch { // 校验失败 } }; return ( {/* Header */} navigate("/data/synthesis/task")} type="text" > {selectedTemplate ? "编辑模板" : "创建新模板"} 基本信息 Prompt内容 提示:使用 {"{变量名}"} 格式定义变量,例如 {"{text}"} 或 {"{input}"} 变量管理 {variables.map((variable, index) => ( handleRemoveVariable(index)} /> } style={{ backgroundColor: "#fff" }} > {variable} ))} {variables.length === 0 && ( 暂无变量,在Prompt中使用 {"{变量名}"} 格式定义 )} 添加 模板测试 {isTestingTemplate ? ( <> 测试中... > ) : ( <> 测试模板 > )} 保存模板 navigate("/data/synthesis/task")} type="default" className="px-4 py-2 text-sm" > 取消 ); }
提示:使用 {"{变量名}"} 格式定义变量,例如 {"{text}"} 或 {"{input}"}