AI Tools Client:连接ComfyUI与本地LLM的桌面创作中心实战指南
1. 项目概述一个为本地AI实验室设计的“乐高式”创作前端如果你和我一样对Stable Diffusion、ComfyUI、Ollama这些本地AI工具着迷但又厌倦了在浏览器标签页、命令行窗口和一堆JSON配置文件之间来回切换那么SethRobinson的“AI Tools Client”可能会让你眼前一亮。这不是另一个WebUI而是一个用Unity和C#编写的原生Windows桌面应用。你可以把它想象成一个专为本地AI工作流设计的“指挥中心”或“创意沙盒”。它的核心哲学很直接将ComfyUI强大的、可节点化编排的图像/视频生成能力与本地大语言模型LLM的文本理解能力结合起来封装进一个统一的、可交互的桌面环境里让你能更流畅地玩转AI驱动的图像生成、故事创作、互动游戏甚至视频制作。这个工具最吸引我的地方在于它的“乐高”理念。它不试图重新发明轮子而是作为ComfyUI和Ollama或类似后端的一个智能前端。你依然需要搭建好自己的ComfyUI服务器安装好各种自定义节点和模型但在此之后AI Tools Client提供了一个图形化的界面来管理和执行这些复杂的工作流。你可以通过它预设的“冒险模式”生成图文并茂的互动故事或测验用“AI指南”功能制作带插图的教程或海报甚至进行一些实时的图像处理实验。它尊重隐私所有计算都发生在你的本地或你控制的服务器上应用本身除了检查更新外不会上传任何数据。注意开发者Seth在文档中直言不讳地提到这个软件“很难用”因为它假设你已经对ComfyUI和本地LLM如llama.cpp有相当的了解。如果你对这些概念完全陌生这里可能不是最佳的起点。不过如果你愿意投入时间搭建本地环境它带来的创作自由度和集成体验是相当独特的。2. 核心功能与设计思路拆解2.1 核心定位连接器与编排器AI Tools Client的核心角色不是执行AI计算而是连接和编排。它自身不包含Stable Diffusion模型或LLM而是通过API与后端的ComfyUI服务器处理图像/视频以及LLM服务如Ollama、llama.cpp服务器或云端的OpenAI/Claude API进行通信。这种设计带来了几个关键优势资源解耦你可以将计算密集型的ComfyUI服务部署在拥有强大GPU的机器上甚至是局域网内的另一台电脑而AI Tools Client作为轻量级前端运行在你的工作机上只负责发送指令和呈现结果。后端自由理论上只要后端服务提供兼容的API如ComfyUI的API、OpenAI的Chat Completion API你就可以替换或同时使用多个后端。应用内置了对多ComfyUI服务器的支持可以并行处理任务以提高吞吐量。专注体验应用可以专注于提供更好的用户交互如图像的拖拽粘贴、内置的裁剪与蒙版绘制、海量生成结果的平铺浏览与缩放这些都是Web版的ComfyUI原生体验所欠缺的。2.2 工作流驱动从静态JSON到动态脚本与直接使用ComfyUI的Web界面手动连接节点不同AI Tools Client的操作单元是预先定义好的ComfyUI工作流JSON文件。你需要在ComfyUI中设计并调试好一个可用的工作流例如一个文生图流程然后将其保存为.json文件。AI Tools Client会加载这个文件并在运行时将你输入的提示词Prompt动态替换到工作流中预定义的位置如AITOOLS_PROMPT然后通过API提交给ComfyUI服务器执行。这听起来似乎限制了灵活性但应用通过引入“Job Script”任务脚本机制极大地增强了动态性。任务脚本允许你在执行一个工作流前后执行一系列命令来操作数据。例如你可以用copy命令将一个LLM生成的描述复制到图像生成提示词中。用resize_if_larger命令在图像放大前先检查并调整尺寸。用replace命令直接修改工作流JSON的特定部分实现动态切换模型或参数。这种“工作流脚本”的模式将复杂的节点图逻辑抽象成了可读性更强的指令序列特别适合构建自动化的、多步骤的创作管道。2.3 关键特性详解多模态集成这是其“智能”所在。例如在“冒险模式”下你可以先用LLM生成一段故事文本然后应用通过“AutoPic”预设自动调用另一个LLM或规则来分析这段文本提取出适合视觉化的场景描述再将这些描述作为提示词调用ComfyUI工作流生成相应的插图。整个过程可以自动化完成实现“从文本到图文故事”的一键生成。变量系统任务脚本支持丰富的变量操作包括文本变量prompt,llm_reply, 自定义的%var%和图像变量image,temp1-3。这构成了复杂逻辑的基础。比如你可以将LLM的回复解析后存入%scene1%、%scene2%等变量再分别用于生成系列图像。预设Presets与实验Experiments应用内置了许多预设这本质上是预配置好的任务脚本和工作流组合针对特定任务如“Z-Image”风格图生图、“Wan”模型优化等做了调优。此外“实验”功能包含了一些小巧的、有时可能不太稳定的趣味应用用于测试AI能力的边界比如基于摄像头的实时风格化应用“SpookyCam”。3. 环境搭建与核心配置实战3.1 基础后端准备在启动AI Tools Client之前你必须先让它的“左膀右臂”就位。1. ComfyUI服务器配置安装从官方GitHub仓库下载ComfyUI并按照指南完成基础安装。强烈建议通过ComfyUI Manager安装常用节点包这将省去大量手动寻找依赖的麻烦。启动参数启动ComfyUI时必须使用--listen参数例如python main.py --listen。这允许其API被同一网络下的其他设备包括本机的AI Tools Client访问。默认会在8188端口启动服务。安装关键自定义节点为了获得最佳体验你需要通过ComfyUI Manager安装Seth提供的Workflow to API Converter Endpoint。这个节点是桥梁中的桥梁。早期版本中AI Tools Client需要使用一种特殊的“API版本”工作流文件管理非常不便。这个节点能在后台自动将普通的ComfyUI工作流JSON实时转换为API所需的格式让你永远只需要维护一份标准的工作流文件。2. LLM服务配置你有多种选择AI Tools Client的LLM设置界面提供了GUI进行配置本地部署推荐Ollama最简单的方式。安装Ollama后拉取一个模型如llama3.2:1b、qwen2.5:0.5b确保Ollama服务在运行默认端口11434。在AI Tools Client的LLM设置中选择类型为“Ollama”填入正确的地址和模型名。llama.cpp服务器如果你需要更精细的控制或使用Ollama不支持的模型格式可以编译并运行llama.cpp的server示例。配置时选择相应的API类型并填入地址。云端API如果你没有足够的本地算力跑LLM也可以填入OpenAI、Anthropic Claude或TabbyAPI等服务的API密钥。这虽然会涉及数据出站但为图像生成部分提供创意文本是足够的。3.2 AI Tools Client初始设置首次运行下载最新的SethsAIToolsWindows.zipV2.52解压后运行.exe文件。首次运行时它会在同级目录下生成一个config.txt文件。编辑配置点击应用内的“Config Edit”按钮会打开这个配置文件。你需要关注并修改以下几个关键部分comfy_servers填入你的ComfyUI服务器地址如http://127.0.0.1:8188。如果你有多个服务器可以配置多个应用会利用它们进行负载均衡。llm_config根据你选择的LLM服务类型Ollama, OpenAI等填写对应的基地址Base URL、API密钥、模型名称等。新版GUI使这一过程直观很多。presets_path确认预设文件夹路径是否正确通常不需要改动。auto_pic_preset设置冒险模式默认使用的AutoPic预设文件例如AutoPic.txt。3.3 工作流测试与对接这是确保一切正常的关键一步目的是验证AI Tools Client能否正确驱动你的ComfyUI后端。导入测试工作流在AI Tools Client的压缩包内通常附带一个ComfyUI文件夹里面有一些示例工作流如FullWorkflowVersions/text_to_img_flux.json。将这个JSON文件拖入你的ComfyUI Web界面中。在ComfyUI中补全与测试ComfyUI会自动将JSON还原为节点图。你大概率会看到一堆“红色”的错误节点这通常意味着缺少自定义节点或模型。使用ComfyUI Manager安装所有缺失的节点。根据节点错误提示下载并放置缺失的模型文件如checkpoint, LoRA, VAE等到ComfyUI对应的模型文件夹。将工作流中的AITOOLS_PROMPT暂时替换为一个简单的测试提示词如“a cat”。点击“Queue Prompt”进行生成。如果成功输出图片说明这个工作流在ComfyUI端是完好的。恢复关键词并导出将测试提示词改回AITOOLS_PROMPT。在ComfyUI中选择“Save (API Format)”或直接“Save”即可如果安装了Converter Endpoint普通保存即可。将这个调试好的工作流JSON文件放入AI Tools Client的ComfyUI工作流目录下或你自定义的目录。在AI Tools Client中测试回到AI Tools Client你应该能在对应的预设或工作流选择列表中看到你刚放置的JSON文件。选择一个输入提示词点击生成。如果一切顺利任务会被发送到ComfyUI服务器并在完成后将图片显示在AI Tools Client的界面中。实操心得调试工作流是前期最耗时但最重要的一步。建议从一个极其简单、只包含必要节点如Load Checkpoint, CLIP Text Encode, KSampler, VAEDecode的工作流开始测试连通性。成功后再逐步添加ControlNet、LoRA等复杂节点。每次在ComfyUI Web界面测试成功后再导入AI Tools Client可以快速定位问题是出在ComfyUI配置还是客户端通信上。4. 核心玩法解析从文生图到互动冒险4.1 基础图像生成与处理AI Tools Client最直接的功能就是作为ComfyUI的增强前端进行图像生成。直接生成选择一个文生图txt2img工作流预设在提示词框输入描述点击生成。应用的优势在于可以方便地管理大量生成结果支持缩略图平铺、缩放、拖拽排序以及简单的右键操作复制、删除、用作新输入等。图生图与局部重绘将一张图片拖入应用界面它会自动加载到“当前图像”槽位。选择图生图img2img或inpainting工作流。应用内置了基本的蒙版绘制工具你可以用画笔涂抹想要重绘的区域这部分信息会作为蒙版alpha通道连同原图一起通过upload命令传递给工作流中的AITOOLS_INPUT_1等位置。使用任务脚本增强单纯切换工作流可能不够。例如你可能想先对输入图像进行智能裁剪再生成。这时可以编辑预设的Job Script# 假设我们有一个智能裁剪的LLM步骤和一个图生图工作流 call_llm # LLM被预设为分析图像并返回裁剪建议结果在 llm_reply # 解析LLM回复获取裁剪坐标存入变量 command set|%crop_coords%|parse_from_llm_reply(%llm_reply%)| # 执行一个自定义的“裁剪”工作流需要你事先定义 image_crop.json replace|CROP_COORDS|%crop_coords%| # 将裁剪后的图像可能在temp1上传给主图生图工作流 img2img_workflow.json upload|temp1|input1|通过脚本你可以将LLM的认知能力与ComfyUI的生成能力无缝串联。4.2 AI指南与自动化海报生成“AI Guide”功能是一个有趣的自动化用例。它本质上是一个复杂的、预配置好的任务脚本管道。流程拆解你输入一个主题如“机器学习入门”。脚本可能首先调用LLM将主题扩展成一个大纲或一系列关键知识点。然后针对每个知识点再次调用LLM生成一个简洁的、适合视觉化的描述性句子即图像提示词。接着并行或串行地调用ComfyUI工作流为每一个提示词生成配图。最后可能还会调用LLM为每张图生成一段解说文字。变量与解析这个过程大量依赖llm_prompt_add_from_user、parse_llm_prompts等命令来与LLM交互并使用%prompt_1%到%prompt_8%等变量来存储多个图像提示词。parse_llm_prompts命令会智能地从LLM的回复llm_reply中寻找类似SET_PROMPT1: 描述...的结构化文本并将其提取到对应的变量中。输出最终所有这些文本和图像被组合成一个结构化的文档或海报布局。这展示了如何用脚本将零散的AI能力组装成一个解决特定问题制作教程海报的自动化工具。4.3 冒险模式生成互动叙事与游戏这是AI Tools Client最具特色的功能之一它融合了LLM和图像生成来创建可玩的互动体验。故事生成你设定一个初始场景如“你是一名侦探在雨夜来到一座古宅前”。冒险模式会调用LLM扮演游戏大师GM根据你的选择推进故事并生成叙述文本。自动插图AutoPic关键在这里。传统的AI地下城类游戏要么没图要么手动配图。AI Tools Client的冒险模式在生成一段故事文本后会自动触发一个选定的“AutoPic”预设。这个预设本身就是一个Job Script其核心任务是分析刚生成的这段故事文本并生成一个或多个与之匹配的图像提示词。例如AutoPic.txt预设可能包含call_llm llm_prompt_add_from_user|基于以下故事段落生成一个详细的、适合图像生成的场景描述%story_text%| parse_llm_prompts。LLM的回复被解析到%prompt_1%随后这个提示词被用于调用一个文生图工作流。动态游戏构建生成的图像会实时显示在故事文本旁边极大地增强了沉浸感。更强大的是你可以将整个会话包括所有分支选择、生成的文本和图片导出为一个独立的、可交互的HTML文件基于Twine引擎。这意味着你可以创建一个完全由AI驱动剧情和画面的小型网页游戏并分享给他人而他们无需安装任何AI软件。注意事项冒险模式的体验质量高度依赖于两个因素一是你使用的LLM的故事生成和指令遵循能力二是AutoPic预设中LLM提示词工程的质量。你需要精心设计引导LLM生成高质量、具体、符合视觉化要求的描述的提示词。这可能需要进行大量的调试和迭代。5. 任务脚本Job Script深度指南与实战任务脚本是AI Tools Client的灵魂它让你从“工作流执行者”变为“流程设计师”。我们来深入剖析其核心用法。5.1 脚本结构解析一个典型的任务脚本由多行组成每行定义了一个“步骤”。步骤有两种类型工作流步骤一行以工作流文件名如my_workflow.json开头后面可以跟多个命令在工作流执行前后执行。纯命令步骤一行以command或call_llm开头只执行命令不运行工作流。# 示例一个复杂的图像优化脚本 # 步骤1调用LLM分析图像并生成优化建议 call_llm llm_prompt_add_from_user|描述这张图片的质量问题并提出具体的优化提示词。图片描述%prompt%| # 步骤2将LLM的优化建议设置为新的提示词 command copy|llm_reply|prompt| # 步骤3执行一个图像放大工作流并限制最大尺寸 upscale_workflow.json resize_if_larger|x|2048|y|2048|aspect_correct|1| # 步骤4执行一个面部修复工作流如果检测到人脸 face_restore.json upload|image|input1| # 使用上一步的结果 # 步骤5将最终结果保存到全局变量供其他预设使用 command setimage|%global_final_result%|image|5.2 变量系统的灵活运用变量是脚本间传递数据的纽带。理解其作用域和用法至关重要。1. 内置变量与图像槽位文本变量如prompt当前主提示词、llm_replyLLM最新回复、temp_text1临时文本缓冲区。它们是“即时”的随步骤变化。图像变量/槽位image或image1代表当前步骤主要处理的图像。temp1,temp2,temp3三个临时图像存储槽用于在步骤间传递中间图像结果。例如你可以将image裁剪后存到temp1然后在下一步用upload|temp1|input1|将其送入另一个工作流。2. 自定义变量%var%这是实现复杂逻辑的关键。你可以创建任何名称的变量来存储中间状态。# 设置变量 %optimal_width%1024 %style_adjective%cinematic, dramatic lighting # 使用变量 command add|prompt|, %style_adjective%| workflow.json replace|WIDTH|%optimal_width%|作用域%local_var%局部变量仅在当前这个图片处理任务PicMain实例内有效。%global_shared_var%全局变量以global_开头在整个应用运行时内有效可以在不同的预设、甚至不同的图片处理任务之间共享数据。例如你可以用一个全局变量来记录用户偏好的艺术风格。3. 变量在LLM交互中的妙用LLM可以生成结构化的文本脚本再将其解析为变量。这是实现自动化决策的核心。call_llm llm_prompt_add_from_user 你是一个艺术总监。请分析以下描述并决定最佳生成风格。 描述%prompt% 请严格按以下格式回复 STYLE: [风格关键词如“oil painting”, “digital art”] ASPECT_RATIO: [宽高比如“16:9”] NEEDS_FACE_IMPROVEMENT: [是/否] end command parse_llm_prompts # 假设LLM回复了“STYLE: oil painting\nASPECT_RATIO: 16:9\nNEEDS_FACE_IMPROVEMENT: 是” # 现在 %style%, %aspect_ratio%, %needs_face_improvement% 变量已被创建并赋值 command add|prompt|, %style%| workflow.json replace|RATIO|%aspect_ratio%| # 根据LLM的判断决定是否执行面部修复 if %needs_face_improvement% 是 face_restore.json注原版脚本不支持if条件判断上述if仅为逻辑示意。实际中需要通过设计工作流或使用stopjob等命令实现条件分支。5.3 核心命令实战示例让我们通过几个具体场景来理解常用命令场景一智能图生图管道目标用户上传一张草图自动为其上色并添加细节。# 1. 使用LLM分析草图内容生成详细的色彩和细节描述 call_llm llm_prompt_add_from_user|这是一张线稿草图。请详细描述图中应包含的色彩、材质和光影效果。草图描述%prompt%| command copy|llm_reply|color_description| # 2. 组合原始描述和LLM的细节描述形成最终提示词 command set|%final_prompt%|%prompt%, detailed illustration, %color_description%| command copy|%final_prompt%|prompt| # 3. 执行线稿上色工作流 sketch_to_color.json upload|image|input1| # 4. 如果生成图尺寸小于目标则进行智能放大 command set|%target_size%2048| upscale_smart.json resize_if_larger|x|%target_size%|y|%target_size%|aspect_correct|1|场景二批量风格迁移目标对一张输入图像用多个不同的风格模型分别生成结果。# 将原图备份到临时槽位 command setimage|%global_source_img%|image| # 使用风格A模型 command set|%style%Van Gogh style| command add|prompt|, %style%| style_model_a.json upload|%global_source_img%|input1| copy|image|temp1| # 使用风格B模型重置提示词应用新风格 command copy|global_prompt|prompt| # 从全局提示词框重新获取原描述 command set|%style%Cyberpunk style| command add|prompt|, %style%| style_model_b.json upload|%global_source_img%|input1| copy|image|temp2| # 此时temp1和temp2保存了两种风格的结果可以同时显示或用于后续步骤场景三动态工作流修改replace命令非常强大它允许你在提交前直接修改工作流JSON。# 根据变量动态切换模型 command set|%model_to_use%|models/flux_dev.safetensors| my_workflow.json replace|ckpt_name: default_model.safetensors|ckpt_name: %model_to_use%| # 根据图像宽高动态调整采样步数 # 假设我们从图像变量中获取了尺寸这需要前置步骤计算并存入变量 command set|%steps%20| if %image_width% 1024 command set|%steps%30| # 大图需要更多步数 my_workflow.json replace|steps: 20|steps: %steps%|6. 常见问题、故障排查与进阶技巧6.1 连接与通信问题问题现象可能原因排查步骤AI Tools Client中点击生成无反应或提示连接失败。1. ComfyUI服务器未启动或未以--listen参数启动。2. 防火墙或网络设置阻止了本地连接。3.config.txt中的服务器地址配置错误。1. 检查ComfyUI终端是否运行并确认有--listen标志。2. 在浏览器中访问http://127.0.0.1:8188确认ComfyUI Web界面可打开。3. 检查AI Tools Client的config.txt确保comfy_servers项为http://127.0.0.1:8188或你的实际IP。工作流提交后ComfyUI端显示“缺少节点”或“模型未找到”。1. 工作流JSON引用了你本地未安装的自定义节点。2. 模型文件路径不正确或缺失。1. 在ComfyUI Web界面重新导入该JSON查看红色错误节点用ComfyUI Manager安装。2. 根据节点错误信息将缺失的模型文件下载并放入ComfyUI对应的models子目录。LLM调用失败无回复或超时。1. Ollama/llama.cpp服务未运行。2. API地址或模型名称配置错误。3. 云端API密钥无效或额度不足。1. 检查Ollama服务状态ollama list或llama.cpp服务器进程。2. 在AI Tools Client的LLM设置GUI中仔细核对地址、端口和模型名大小写敏感。3. 对于云端API检查密钥有效性及余额。6.2 工作流与脚本调试问题现象可能原因排查步骤图像生成成功但结果不符合预期黑图、扭曲、内容错误。1. 工作流中的关键词如AITOOLS_PROMPT未被正确替换。2. 工作流本身在ComfyUI中就有参数问题。3. 脚本中的replace命令修改了错误的部分。1. 在ComfyUI中打开工作流确认AITOOLS_PROMPT等关键词存在于CLIP文本编码器的文本字段中。2. 在ComfyUI中手动输入提示词测试该工作流确保其本身能产出正常结果。3. 使用简单的replace命令或直接在AI Tools Client的日志/控制台输出中查看发送给ComfyUI的最终API请求如果应用提供日志功能。任务脚本执行出错停在某一步。1. 命令语法错误管道符缺失或多余。br2. 引用了不存在的变量或图像槽位。br3. 多行文本块没有正确使用end结束。AutoPic在冒险模式中不触发或生成的图片与故事无关。1. AutoPic预设文件未正确选择或路径错误。2. AutoPic脚本中的LLM提示词设计不佳无法从故事文本提取有效视觉描述。3. LLM本身能力不足或未遵循指令。1. 在AI Tools Client的通用设置中确认auto_pic_preset指向正确的文件。2. 打开对应的AutoPic.txt文件检查其中call_llm部分的提示词。你需要精心设计提示词来“教导”LLM如何从叙事文本中提取场景。可以单独在LLM聊天界面测试这个提示词。3. 尝试换用更强大的LLM模型。6.3 进阶技巧与优化建议预设管理不要直接修改内置预设。复制一份到自定义目录如MyPresets/再进行修改。这样在应用更新时不会丢失你的配置。利用全局变量做状态管理你可以用%global_last_style%来记录用户上次选择的艺术风格在后续的生成中自动应用。或者用%global_job_count%来计数实现一些简单的循环或条件逻辑虽然原生不支持循环但可以通过外部方式驱动。图像预处理链对于复杂的处理可以设计多个专门的工作流如detect_subject.json检测主体、remove_background.json去背景、recolor.json重新上色然后用脚本将它们像管道一样串联起来。每个中间结果存到temp槽位。调试脚本在脚本中大量使用#注释和command set|%debug_info%|some_value|来输出中间状态。虽然不能直接打印到UI但你可以将调试信息赋值给一个变量然后在最后一步通过某种方式如写入文件或作为提示词一部分生成一张包含文本的图片来查看。性能考量队列管理AI Tools Client可以配置多个ComfyUI服务器地址。将繁重的任务如高清修复分配到性能更强的服务器将轻量任务如预览图生成分配到备用服务器。GPU锁定使用lock_gpu命令可以让一个复杂的工作流脚本独占某个GPU/服务器避免被其他任务打断适合需要多步连贯处理的任务。LLM缓存如果脚本中多次调用LLM且提示词相似考虑将LLM回复存入全局变量复用以减少不必要的LLM调用提升速度并节省token。6.4 已知限制与应对策略学习曲线陡峭正如开发者所说这不是一个开箱即用的傻瓜软件。应对策略是从模仿开始。仔细研究内置的预设脚本尤其是AutoPic.txt和Z-Image等理解每一行命令的意图。先尝试修改其中的参数再尝试组合简单的命令最后设计自己的脚本。功能稳定性一些边缘功能如CrazyCam可能已失效。专注于核心的文生图、图生图、冒险模式和AI指南。这些功能经过更多测试相对稳定。错误处理薄弱脚本引擎没有完善的错误处理和条件分支。需要你作为设计者尽量保证工作流本身的健壮性并在脚本中预设清晰的变量状态避免出现未定义的情况。社区与文档项目的Discussions和GitHub Issue是宝贵的资源。遇到问题时先去那里搜索很可能已经有类似的问题和解决方案。由于是小众项目主动的社区交流尤为重要。这个工具的魅力在于它赋予了你将本地AI能力“组装”成个性化创意工具的无限可能。它不像商业产品那样提供光滑的界面和保姆式的引导而是给了你一套强大的“扳手和螺丝刀”。当你成功搭建起第一个自动化的图像处理管道或者生成第一个完全由AI驱动画面的互动故事时那种成就感是无可替代的。它可能永远不会变得“易用”但对于喜欢折腾、渴望深度控制本地AI工作流的创作者和开发者来说它是一个充满惊喜的宝藏。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2583844.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!