news 2026/6/18 6:29:38

多Agent图片提示词提取:从架构设计到工程实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
多Agent图片提示词提取:从架构设计到工程实现

1. 项目概述:为什么我们需要一个“多 Agent”的图片提示词提取工具?

如果你经常玩 Stable Diffusion、Midjourney 这类 AI 绘画工具,肯定遇到过这样的场景:在网上看到一张惊为天人的 AI 图,想自己复现或者基于它的风格进行二次创作,但原作者要么没给提示词,要么只给了几个模糊的关键词。这时候,一个能“看图说话”、把图片反向解析成精准提示词的工具,就成了刚需。市面上的单点工具,比如你搜到的 ImageToPrompt.ai,已经能解决基础需求:上传一张图,它返回一段描述。这很好,但还不够。

“多 Agent 图片提示词提取工具”这个项目标题,指向的是一个更高级、更自动化的解决方案。它不再是单一功能的脚本,而是一个由多个智能体(Agent)协同工作的系统。想象一下,你面对的不是一个只会机械识图的工具,而是一个拥有“视觉分析师”、“风格鉴定师”、“构图解构师”和“提示词优化师”的专家团队。每个 Agent 各司其职,共同完成从图片到高质量、结构化提示词的深度解析。这背后的核心驱动力,是当前 AI 绘画社区从“玩票”走向“生产”的需求升级。个人创作者和商业团队不再满足于随机抽卡,他们需要稳定的风格输出、可复现的优质结果,以及对已有成功案例的快速学习和迭代能力。一个强大的多 Agent 提取工具,正是打通“从结果反推过程”这一关键环节的桥梁。

简单来说,这个项目要做的就是:构建一个智能流水线,输入一张图片,输出一组详尽、分层、可直接用于生成模型的优质提示词,涵盖主体、风格、构图、画质、艺术家参考等所有维度。它适合所有 AI 绘画爱好者、内容创作者、设计工作者,以及任何希望系统化理解和复制视觉风格的人。接下来,我会拆解如何从零开始构建这样一个系统,分享其中的设计思路、技术选型、实操细节以及我踩过的那些坑。

2. 核心架构设计:多 Agent 如何分工协作?

单 Agent 工具就像一把瑞士军刀,虽然功能多,但每个功能都不够专业。而多 Agent 系统的设计哲学是“专人干专事”。在设计之初,我们需要明确整个提示词提取流程需要哪些专业角色,并为每个角色定义清晰的职责边界和协作方式。

2.1 四大核心 Agent 的角色定义

经过多次迭代,我认为一个健壮的系统至少需要以下四个核心 Agent:

1. 视觉感知 Agent (Vision Perception Agent)这是系统的“眼睛”。它的唯一任务是对图片进行最基础、最全面的视觉元素识别。它不关心艺术风格,只关心“有什么”。其输出是一份结构化的元素清单,例如:

  • 主体对象:一个女孩、一只猫、一座城堡。
  • 场景与环境:森林、夜晚、雨天、室内咖啡馆。
  • 细节与属性:长发、蓝色眼睛、微笑、戴着贝雷帽、木质纹理。 这个 Agent 通常基于一个强大的视觉识别模型(如 CLIP、BLIP-2 或专门训练的模型)来构建。它的输出是后续所有分析的基石。

2. 风格与美学分析 Agent (Style & Aesthetic Analysis Agent)这是系统的“艺术顾问”。它基于视觉感知 Agent 的输出,专注于分析图片的艺术属性。它的分析维度包括:

  • 艺术风格:动漫风(anime)、赛博朋克(cyberpunk)、油画(oil painting)、水墨风(ink wash painting)、照片写实(photorealistic)。
  • 渲染引擎与模型倾向:分析图片更接近 NovelAI、Midjourney v6 还是 SDXL 的典型输出,甚至可以推测可能使用的大模型(如dreamshaper)和 LoRA(如koreanDollLikeness)。
  • 画面质感:电影感(cinematic)、柔焦(soft focus)、锐利细节(sharp focus)、颗粒感(grainy)、体积光(volumetric lighting)。
  • 色彩与色调:高饱和度(high saturation)、低对比度(low contrast)、冷暖色调(warm/cool tone)。

这个 Agent 的实现更具挑战性,需要收集大量带有风格标签的图片数据进行训练,或者利用多模态大模型(如 GPT-4V)的强大概括能力。

3. 构图与镜头语言 Agent (Composition & Camera Agent)这是系统的“摄影师”。它解析图片的视觉组织方式,这部分信息对于复现图片的“感觉”至关重要。

  • 构图方式:中心构图(center composition)、三分法(rule of thirds)、对称构图(symmetrical)、引导线构图(leading lines)。
  • 镜头视角:特写(close-up)、中景(medium shot)、全景(wide shot)、鸟瞰视角(bird's-eye view)、仰视(low angle)。
  • 镜头效果:景深(depth of field)、广角畸变(wide-angle distortion)、运动模糊(motion blur)。
  • 光照方向:侧光(side lighting)、背光(backlighting)、顶光(top lighting)。

4. 提示词合成与优化 Agent (Prompt Synthesis & Optimization Agent)这是系统的“总编辑”和“调校师”。它接收前三个 Agent 的原始分析结果,负责进行信息整合、去重、排序和格式化。它的核心工作包括:

  • 结构化组装:将零散的元素按照“主体+细节+场景+风格+构图+画质”的逻辑进行组织。
  • 权重分配:根据元素在图片中的显著程度,自动添加强调语法(如(keyword:1.3)[keyword])。
  • 负面提示词推断:根据图片“过于完美”或某些风格的常见缺陷,推断出可能的负面提示词(如blurry, bad hands, deformed)。
  • 格式标准化:输出为特定模型(如 Stable Diffusion WebUI 的 A1111 或 ComfyUI)偏好接受的提示词格式。

2.2 工作流与通信机制设计

这四个 Agent 如何协同?我采用的是有向无环图(DAG)工作流。视觉感知 Agent 最先启动,它的输出同时分发给风格分析 Agent 和构图分析 Agent。这两个 Agent 可以并行工作以提高效率。最后,它们三者的输出汇聚到提示词合成 Agent 进行最终处理。

注意:在初期,你可以用一个简单的中心调度器(用 Python 脚本即可)来模拟这个工作流。但随着复杂度提升,建议引入像LangGraphPrefect这样的工作流编排框架,它们能清晰地定义节点(Agent)和边(数据流向),并处理错误重试、状态持久化等生产级问题。

关于 Agent 间的通信,我强烈建议采用结构化数据进行交换,比如 JSON。每个 Agent 的输出都应该是定义良好的 JSON Schema。例如,视觉感知 Agent 的输出可能是:

{ “objects”: [“1girl”, “cat”, “candle”], “scene”: “gothic library interior”, “attributes”: [“long black hair”, “red eyes”, “smiling”], “materials”: [“wooden desk”, “velvet curtain”] }

这样,下游 Agent 可以毫无歧义地解析和使用这些数据,极大降低了集成和调试的复杂度。

3. 技术栈选型与核心模块实现

确定了架构,接下来就要选择趁手的工具来实现每个 Agent。这里没有唯一答案,我会分享我经过对比后的选择及其理由。

3.1 视觉感知 Agent 的实现:CLIP Interrogator 的深度改造

很多人第一个想到的是直接调用 OpenAI 的 GPT-4V 或 Google 的 Gemini Vision API。它们能力强大,但成本高、有延迟,且不适合处理大量图片。对于自建工具,CLIP 模型是更务实和可控的选择。

我最初直接使用了CLIP Interrogator这个知名项目,它通过将图片和一系列预设的提示词标签进行 CLIP 编码比对,找出最匹配的标签。但它的输出是混合了内容、风格和艺术家的长串提示词,不符合我们“只做基础识别”的职责分离原则。

我的改造方案如下:

  1. 构建专属标签库:我拆解了CLIP Interrogator的标签库(如blipvit-l-14/openai对应的词表),并将其分类。我创建了三个独立的文本文件:
    • objects.txt: 包含常见的物体、人物、动物名词。
    • styles.txt: 包含艺术运动、渲染风格名称。
    • artists.txt: 包含画家、摄影师、工作室名称。
  2. 分阶段编码比对:视觉感知 Agent 只使用objects.txt。加载图片和这个词表,分别通过 CLIP 的图像编码器和文本编码器得到特征向量,然后计算余弦相似度。
  3. 设置阈值与 Top-K:不是所有相似度高的词都有用。我设置了一个相似度阈值(如 0.25),只保留超过阈值的词。同时,每个类别(如主体、场景)只取相似度最高的前 5-10 个词,避免列表过长。
# 简化示例代码 - 视觉感知 Agent 核心函数 import torch from PIL import Image from transformers import CLIPProcessor, CLIPModel class VisionPerceptionAgent: def __init__(self, model_name=“openai/clip-vit-large-patch14”): self.model = CLIPModel.from_pretrained(model_name) self.processor = CLIPProcessor.from_pretrained(model_name) self.device = “cuda” if torch.cuda.is_available() else “cpu” self.model.to(self.device) # 加载自定义的对象标签库 with open(‘./tags/objects.txt’, ‘r’) as f: self.object_tags = [line.strip() for line in f if line.strip()] def analyze(self, image_path): image = Image.open(image_path).convert(‘RGB’) inputs = self.processor(text=self.object_tags, images=image, return_tensors=“pt”, padding=True).to(self.device) with torch.no_grad(): outputs = self.model(**inputs) image_features = outputs.image_embeds text_features = outputs.text_embeds # 计算相似度 similarity = (image_features @ text_features.T).squeeze(0) # 获取 Top-K 结果 top_k = 10 values, indices = torch.topk(similarity, top_k) results = [] for val, idx in zip(values, indices): if val > 0.25: # 阈值过滤 results.append({“tag”: self.object_tags[idx], “score”: val.item()}) # 简单分类逻辑(可根据标签词进一步分类) return {“objects”: results}

实操心得:CLIP 模型对物体识别效果不错,但对场景和抽象概念的识别较弱。为了提升准确率,我后来集成了BLIP-2模型来生成图片的通用描述语句,然后用 NLP 方法(如 spaCy)从描述语句中抽取名词短语作为物体识别的补充。这种“CLIP + BLIP-2”的多模型投票机制,显著提高了感知的鲁棒性。

3.2 风格与美学分析 Agent:让大语言模型担任“艺术评论家”

风格分析是主观且复杂的。纯视觉模型很难准确区分“吉卜力风格”和“普通动漫风”。这里,多模态大语言模型(MLLM)的优势就体现出来了。我选择使用Qwen-VLLLaVA这类开源模型,它们既能看懂图,又能用自然语言进行复杂推理。

实现步骤:

  1. 设计系统提示词(System Prompt):这是引导模型行为的关键。你需要用清晰的指令告诉模型它的角色和任务。
    你是一个专业的AI绘画风格分析师。请严格根据提供的图片,分析其艺术风格和视觉特征。 请按以下JSON格式输出,且只输出JSON: { “art_styles”: [“风格1”, “风格2”], // 如 anime, cyberpunk, oil painting “likely_model”: “”, // 推测可能使用的AI模型,如 SDXL, Midjourney v6, NovelAI “lighting”: “”, // 光照描述,如 soft studio lighting, dramatic side lighting “color_palette”: “”, // 色彩调性,如 vibrant and saturated, desaturated and moody “quality_descriptors”: [“关键词1”, “关键词2”] // 如 highly detailed, masterpiece, 8k } 注意:分析必须基于图片本身,不要臆测。
  2. 本地部署与调用:使用ollamavLLM等工具在本地部署 Qwen-VL-Chat 模型。虽然需要一定的 GPU 内存(7B 模型约需 14GB),但一次部署,无限次调用,长期来看比 API 更经济可控。
  3. 解析与后处理:模型返回的是文本,我们需要用json.loads()解析成结构。由于大模型可能“胡说八道”,必须加入健壮的异常处理,比如当 JSON 解析失败时,使用正则表达式尝试提取关键信息,或返回一个安全的默认值。

踩坑记录:初期我让模型分析的维度太多,导致输出不稳定。后来我将其拆分成两个串行的任务:第一个模型只分析“风格和模型”,第二个模型(或用同一模型但不同的提示词)分析“光影和色彩”。任务单一化后,输出的准确性和一致性大幅提升。

3.3 构图分析与提示词合成 Agent:规则与启发式方法

构图分析目前没有特别成熟的开源模型。我的做法是结合规则判断轻量级模型

  • 规则判断:使用OpenCV计算图片的灰度直方图、边缘检测(Canny)和显著性区域检测。例如,如果主体位于图片中心区域且周围留白较多,可推测为“中心构图”;如果检测到强烈的、汇聚的线条,可能是“引导线构图”。
  • 轻量级模型:在 Hugging Face 上可以找到一些用于场景分类或美学评分的小模型,可以辅助判断“特写”或“风景”。

提示词合成 Agent则更像一个规则引擎。它接收前面所有 Agent 的 JSON 输出,按照一套优先级和模板进行组装。

# 提示词合成 Agent 示例 class PromptSynthesisAgent: def synthesize(self, vision_data, style_data, composition_data): prompt_parts = [] # 1. 主体与核心细节(来自视觉感知) if vision_data.get(‘objects’): main_subjects = [item[‘tag’] for item in vision_data[‘objects’][:3]] # 取置信度最高的前3个 prompt_parts.append(‘, ‘.join(main_subjects)) # 2. 风格与渲染(来自风格分析) if style_data.get(‘art_styles’): prompt_parts.append(‘, ‘.join(style_data[‘art_styles’])) if style_data.get(‘likely_model’): prompt_parts.append(f“{style_data[‘likely_model’]} style”) # 3. 构图与镜头(来自构图分析) if composition_data.get(‘composition’): prompt_parts.append(composition_data[‘composition’]) if composition_data.get(‘shot_type’): prompt_parts.append(composition_data[‘shot_type’]) # 4. 画质与光照(来自风格分析) if style_data.get(‘quality_descriptors’): prompt_parts.append(‘, ‘.join(style_data[‘quality_descriptors’])) if style_data.get(‘lighting’): prompt_parts.append(style_data[‘lighting’]) # 组合成最终提示词 final_prompt = ‘, ‘.join([p for p in prompt_parts if p]) # 简单权重模拟:对主体和风格进行强调 final_prompt = final_prompt.replace(main_subjects[0], f‘({main_subjects[0]}:1.2)’) return final_prompt

4. 系统集成、部署与性能优化

单个 Agent 跑通只是第一步,将它们集成成一个稳定、可用的服务才是真正的挑战。

4.1 搭建 Agent 调度服务

我使用FastAPI来构建每个 Agent 的独立 API 服务,以及一个总调度器。这样做的好处是解耦,每个 Agent 可以独立开发、部署和扩展。

  • Agent 服务:每个 Agent 都是一个 FastAPI 应用,暴露一个/analyze的 POST 接口,接收图片(或图片 URL)和可能的上文,返回 JSON 格式的分析结果。
  • 调度器服务:另一个 FastAPI 应用,它定义了工作流 DAG。当用户提交一张图片时,调度器按顺序或并行地调用各个 Agent 的 API,收集结果,最后调用合成 Agent 生成最终提示词。
# 调度器伪代码示例 import asyncio import aiohttp from fastapi import FastAPI, File, UploadFile app = FastAPI() AGENT_URLS = { “vision”: “http://localhost:8001/analyze”, “style”: “http://localhost:8002/analyze”, “composition”: “http://localhost:8003/analyze”, “synthesize”: “http://localhost:8004/synthesize” } async def call_agent(session, url, image_data): async with session.post(url, files={“image”: image_data}) as resp: return await resp.json() @app.post(“/extract-prompt”) async def extract_prompt(image: UploadFile = File(...)): image_data = await image.read() async with aiohttp.ClientSession() as session: # 并行调用视觉、风格、构图 Agent vision_task = call_agent(session, AGENT_URLS[‘vision’], image_data) style_task = call_agent(session, AGENT_URLS[‘style’], image_data) comp_task = call_agent(session, AGENT_URLS[‘composition’], image_data) vision_res, style_res, comp_res = await asyncio.gather(vision_task, style_task, comp_task) # 串行调用合成 Agent synthesis_data = {“vision”: vision_res, “style”: style_res, “composition”: comp_res} async with session.post(AGENT_URLS[‘synthesize’], json=synthesis_data) as resp: final_prompt = await resp.json() return {“prompt”: final_prompt}

4.2 缓存与性能优化

图片推理是计算密集型的,尤其是大模型。为了提升响应速度和服务吞吐量,缓存至关重要。

  1. 结果缓存:对同一张图片(用 MD5 或感知哈希作为键)的分析结果进行缓存。可以使用Redismemcached。下次遇到相同图片时,直接返回缓存结果,无需再推理。
  2. 模型预热:在服务启动时,就将所有模型加载到 GPU 内存中,避免第一次请求时的冷启动延迟。
  3. 异步处理:对于耗时长(如超过 5 秒)的请求,可以采用“提交任务-轮询结果”的异步模式。调度器立即返回一个任务 ID,客户端随后通过这个 ID 来查询处理进度和结果。
  4. 硬件考量:视觉感知 Agent 用的 CLIP 模型相对较小,可以和合成 Agent 部署在同一台机器。风格分析 Agent 用的大模型(如 Qwen-VL-7B)则需要单独的、带 GPU 的服务器。根据预算和性能要求,灵活选择云主机或本地服务器。

4.3 前端界面与用户体验

一个友好的 Web 界面能极大提升工具的使用率。我用Gradio快速搭建了一个原型界面,因为它与 Python 后端集成非常简单,几行代码就能生成一个带文件上传、按钮和结果显示的 Web 应用。

import gradio as gr import requests def extract_prompt_interface(image): # 调用本地调度器 API files = {“image”: image} response = requests.post(“http://localhost:8000/extract-prompt”, files=files) if response.status_code == 200: result = response.json() return result[‘prompt’] else: return “Error: ” + response.text # 创建 Gradio 界面 iface = gr.Interface( fn=extract_prompt_interface, inputs=gr.Image(type=“filepath”, label=“上传图片”), outputs=gr.Textbox(label=“提取的提示词”, lines=10), title=“多 Agent 图片提示词提取工具”, description=“上传图片,获取可用于 AI 绘画的详细提示词。” ) iface.launch(server_name=“0.0.0.0”)

对于更复杂的前端,可以考虑使用StreamlitVue.js+FastAPI前后端分离的架构。

5. 评估、迭代与常见问题排查

工具做出来了,效果怎么样?如何改进?在实际运行中会遇到哪些问题?

5.1 如何评估提取质量?

没有绝对的标准答案,但可以从以下几个维度进行主观和客观评估:

  1. 人工评测(最重要):收集一批风格各异的 AI 图片和对应的优质真实提示词(可从 Civitai 等社区获取)。用你的工具提取提示词,然后请几位有经验的 AI 绘画玩家进行盲评:将原始提示词和提取的提示词打乱,让他们判断哪个生成的图片更接近原图,或者对提取的提示词在“完整性”、“准确性”、“可用性”上打分。
  2. 反向生成对比:将提取的提示词输入到原图可能使用的模型中(如 SDXL),生成一批新图。计算生成图与原图在特征空间(如使用 CLIP 图像特征)的相似度。相似度越高,说明提示词越能抓住原图的核心特征。
  3. A/B 测试:将你的多 Agent 工具与市面上的单点工具(如 ImageToPrompt.ai)进行对比。使用同一批测试图片,比较两者输出提示词的丰富度、结构性和最终生成效果。

5.2 迭代改进的方向

根据评估反馈,常见的迭代点包括:

  • 扩充标签库:视觉感知 Agent 的objects.txt需要不断补充新概念,尤其是 AI 绘画中流行的特定元素(如chibi,mecha,arcane style)。
  • 优化提示工程:风格分析 Agent 的系统提示词需要精心调优。可以尝试few-shot的方式,在提示词中给出几个正确分析的例子,引导模型输出更规范的格式。
  • 引入反馈循环:可以增加一个“用户修正”环节。当工具输出提示词后,允许用户对不满意的部分进行删改,并将修正后的结果作为训练数据,微调相关的 Agent(尤其是合成 Agent),使其越来越符合用户的偏好。

5.3 常见问题与排查清单

在开发和运行过程中,我遇到了不少问题,这里列出一个速查表:

问题现象可能原因排查与解决思路
提取的提示词非常笼统(如“a picture of a person”)视觉感知 Agent 的 CLIP 模型识别能力不足或标签库不匹配。1. 检查使用的 CLIP 模型版本,尝试ViT-L/14或更大的模型。
2. 扩充和细化objects.txt标签库,加入更具体的词汇。
3. 集成 BLIP-2 生成描述后再抽取关键词。
风格分析完全错误(如将写实照片识别为动漫)风格分析 Agent 的提示词指令不清晰,或使用的 MLLM 模型能力有限。1. 重写系统提示词,明确指令和输出格式。
2. 升级更强的 MLLM 模型(如 Qwen-VL-Max)。
3. 将风格分析任务拆解为多个子问题,逐个击破。
最终提示词结构混乱,权重不合理提示词合成 Agent 的规则过于简单或存在冲突。1. 制定更详细的优先级规则(如:主体 > 风格 > 构图 > 画质)。
2. 引入简单的 NLP 处理,去除重复和同义词。
3. 收集一批“优质提示词”样本,分析其结构规律,让合成规则向其靠拢。
服务响应速度极慢模型推理耗时过长,或网络通信存在瓶颈。1. 为每个 Agent 服务添加推理耗时日志,定位瓶颈。
2. 引入缓存机制,对相同图片跳过推理。
3. 考虑使用模型量化技术(如 GPTQ, AWQ)减小模型体积,提升推理速度。
4. 检查调度器与 Agent 服务间的网络延迟。
处理某些特定类型图片(如文字密集图、抽象画)时崩溃某个 Agent 的输入预处理或后处理逻辑不健壮,未能处理异常情况。1. 在每个 Agent 的 API 入口和核心函数添加try...except,记录详细错误日志。
2. 对输入图片进行预处理(如尺寸缩放、格式统一)。
3. 为无法分析的图片设置默认返回值,保证流程不中断。

构建这样一个多 Agent 系统,最大的体会是“分而治之”的思想让复杂问题变得可控。每个 Agent 只需要专注做好一件事,通过清晰的接口组合起来,就能产生“1+1>2”的效果。这个过程里,最重要的不是追求某个 Agent 的极致精度,而是保证整个工作流的稳定性和可解释性。当提取效果不理想时,你能快速定位是哪个环节出了问题,然后有针对性地去优化那个环节的模型、数据或规则。这种模块化的设计,也为后续迭代升级留下了充足的空间——未来完全可以随时替换一个更强的视觉模型,或者增加一个专门分析“色彩搭配”的新 Agent,而无需推翻重来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 6:26:55

Pexels免费图库注册与高效使用全指南:规避版权风险,提升创作效率

1. 项目概述:为什么我们需要一个高质量的免费图库账号?做内容创作,无论是写博客、做视频、设计海报,还是运营社交媒体,最头疼的问题之一就是“找图”。版权风险、图片质量、搜索效率,每一个都是拦路虎。几年…

作者头像 李华
网站建设 2026/6/18 6:22:22

Firebase AutoML Vision Edge端侧图像识别实战指南

1. 项目概述:让手机摄像头“秒懂”你拍的是什么“Build TensorFlow Lite Model with Firebase AutoML Vision Edge”——这个标题乍看像一串技术缩写拼贴,但拆开来看,它其实讲了一件非常实在的事:不用从零写代码、不需GPU服务器、…

作者头像 李华
网站建设 2026/6/18 6:19:18

Qwen3-VL工业部署实战:前沿多模态大模型落地指南

1. 项目概述:这不是调用API,而是真正“驾驭”多模态大模型的实操手册如果你最近在技术社区、论文预印平台或开源仓库里看到Qwen3-VL这个名字,大概率已经注意到它和前代 Qwen2-VL 相比,不只是参数量涨了、分辨率高了——它在图文对…

作者头像 李华
网站建设 2026/6/18 6:06:58

EasyOCR中CRAFT文本检测微调实战指南

1. 项目概述:为什么你该认真对待 EasyOCR 中的 CRAFT 文本检测微调如果你正在做文档识别、票据 OCR、工业表计读数、多语言菜单提取,或者任何需要在复杂背景(比如手写批注叠加、低对比度扫描件、倾斜拍摄的手机照片)下稳定框出文字…

作者头像 李华
网站建设 2026/6/18 5:56:09

自定义Zod错误信息的实现

在Vue 3和VeeValidate的组合式API中,我们经常会使用Zod来进行表单验证。然而,在处理自定义错误信息时,可能会遇到一些问题。本文将通过一个实例,展示如何在VeeValidate中使用Zod进行表单验证,并自定义错误信息,确保无论是输入还是未输入状态下都能展示自定义的错误信息。…

作者头像 李华
网站建设 2026/6/18 5:49:23

OpenSlide终极指南:5个技巧轻松处理医学影像切片文件

OpenSlide终极指南:5个技巧轻松处理医学影像切片文件 【免费下载链接】openslide C library for reading virtual slide images 项目地址: https://gitcode.com/gh_mirrors/op/openslide OpenSlide是一个强大的C语言库,专门用于读取虚拟切片图像&…

作者头像 李华