ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DeepSeek Harness本地视觉插件开发:从原理到实践的全栈指南

DeepSeek Harness本地视觉插件开发:从原理到实践的全栈指南 如果你正在使用 DeepSeek Harness 这个强大的 AI 编程助手却因为它是“纯文本模型”而无法处理图片、图表或截图中的代码这篇文章就是为你准备的。很多人误以为 Harness 只是一个代码补全工具但它的真正潜力在于通过插件生态扩展能力边界。今天要解决的核心痛点很具体如何让一个原本只能处理文本的 AI 助手获得“看图”的能力并且完全在本地部署保障代码隐私和安全。这不仅仅是安装一个插件那么简单。网络上关于“DeepSeek Harness 识图”的讨论很多但信息零散实操中你会遇到各种问题官方插件可能失效、图片发送失败、本地模型部署复杂、API 调用不稳定。本文将提供一个完整的、经过验证的解决方案从修复官方插件的常见问题到教你如何自制一个开源、可定制的视觉插件最后实现本地视觉模型的部署与集成。读完本文你将能理解 DeepSeek Harness 插件系统的工作原理明白“文本模型”如何通过外部调用获得视觉能力。修复或绕过官方“识图”插件可能遇到的图片发送失败等常见问题。掌握从零开始构建一个自定义视觉插件的完整流程拥有完全的控制权。成功在本地部署一个轻量级视觉模型如 BLIP、LLaVA并通过 API 提供服务。将本地视觉模型与 Harness 无缝连接实现安全、私密的“本地识图”工作流。我们不止步于“能用”更要追求“好用”和“放心”。下面我们从原理开始一步步拆解实现方案。1. 核心问题为什么纯文本模型需要“识图”能力在深入技术细节之前我们必须先厘清一个关键概念DeepSeek Harness 本身是一个基于大型语言模型LLM的编程助手其核心是理解和生成文本。它并不具备原生处理图像像素数据的能力。那么“识图”是如何实现的1.1 技术原理插件作为“感官延伸”Harness 的“识图”并非让 LLM 直接看懂图片而是通过插件架构调用外部的“视觉理解模型”Visual Understanding Model。这个过程可以类比为Harness (大脑)负责逻辑推理、代码生成、任务规划。视觉插件 (眼睛和翻译官)接收图片调用视觉模型将图片内容“翻译”成一段详细的、结构化的文本描述。视觉模型 (视觉皮层)真正执行图像识别、物体检测、OCR光学字符识别、场景理解等任务。Harness 接收到这段文本描述后就能像处理普通文本一样基于描述中的信息进行对话、编程或分析。因此整个链路是图片 - 视觉模型 - 文本描述 - Harness (LLM) - 回答/代码。1.2 为什么本地部署至关重要目前常见的方案是调用云端视觉 API如 GPT-4V、Claude 3 Opus。但这带来三个问题隐私与安全将包含代码、架构图、内部文档的截图上传到第三方服务器存在敏感信息泄露风险。成本与延迟每次调用都需要付费且网络请求会引入延迟。可控性云端服务可能不稳定、变更或受限。本地部署视觉模型完美解决了上述痛点所有数据处理都在你自己的机器上完成零数据出境一次部署无限次免费使用你可以选择最适合的模型并针对编程场景如代码截图OCR进行微调。1.3 目标读者与前置知识本文适合已在使用 DeepSeek Harness 的开发者希望扩展其能力。对 AI 应用开发、模型部署感兴趣的实践者。注重代码隐私和安全希望构建本地化 AI 工作流的团队。你需要具备的基础熟悉基本的命令行操作Terminal, PowerShell。了解 Python 和 pip 的基本使用。有一台性能尚可的电脑建议配备独立显卡以获得更好体验但 CPU 也可运行轻量模型。2. 环境准备与工具选型在开始动手之前我们需要准备好“工具箱”。以下是整个项目所需的核心组件及其选型理由。2.1 核心工具清单工具/组件推荐版本/型号作用备注DeepSeek Harness最新桌面版主 AI 编程助手确保已安装并能正常运行Python3.8 - 3.11插件开发与模型服务的主要语言避免使用 3.12某些库兼容性可能不佳Node.js18.x 或 20.xHarness 插件运行环境非必须但某些插件模板需要代码编辑器VS Code插件开发与脚本编写或其他你熟悉的 IDEGit最新版克隆代码仓库用于获取示例项目2.2 视觉模型选型轻量、高效、易部署对于本地部署我们优先选择在消费级硬件上能流畅运行的模型。以下是两个优秀选择BLIP-2由 Salesforce 发布在图像描述生成和视觉问答任务上表现优异模型相对较小推理速度快非常适合作为“图片转文本”的通用描述器。LLaVA一个将视觉编码器与大语言模型连接起来的开源项目。它不仅能描述图片还能进行复杂的视觉推理和对话更接近 GPT-4V 的体验。LLaVA-1.5 的 7B 参数版本在 16GB 内存的机器上可以运行。对于初次尝试建议从 BLIP-2 开始因为它部署更简单对硬件要求更低。本文将以 BLIP-2 为例进行演示但方法同样适用于 LLaVA 或其他视觉模型。2.3 模型服务框架FastAPI我们需要一个简单的 Web 服务器来封装视觉模型提供标准的 HTTP API 接口供 Harness 插件调用。FastAPI 是现代、快速高性能的 Python Web 框架非常适合构建此类 AI 模型服务。2.4 安装基础环境打开你的终端执行以下命令来创建并激活一个独立的 Python 虚拟环境强烈推荐避免包冲突。# 创建项目目录并进入 mkdir deepseek-vision-local cd deepseek-vision-local # 创建 Python 虚拟环境 python -m venv venv # 激活虚拟环境 # 在 macOS/Linux 上 source venv/bin/activate # 在 Windows 上 # venv\Scripts\activate # 升级 pip pip install --upgrade pip激活后你的命令行提示符前应该会出现(venv)字样表示你正在虚拟环境中工作。3. 方案A修复与使用官方/社区识图插件快速上手在自制插件之前我们先尝试修复或找到可用的现成插件。这是最快上手的路径。3.1 排查官方插件问题DeepSeek Harness 的插件市场可能提供“识图”或“Vision”相关插件。如果安装后出现“图片发送失败”请按以下步骤排查检查网络连接插件可能需要访问外部 API如 OpenAI。确保你的网络环境允许访问相关服务。检查 API 密钥如果插件需要配置 API 密钥如 GPT-4V请确保在插件设置中正确填写。查看开发者控制台在 Harness 中通常可以通过CtrlShiftI(Windows/Linux) 或CmdOptionI(Mac) 打开开发者工具查看Console或Network标签页中的错误信息。插件版本与兼容性检查插件是否为最新版或尝试回退到旧版本。3.2 使用开源社区插件如果官方插件不可用可以在 GitHub 等平台搜索deepseek-harness-vision-plugin或类似关键词。找到一个开源插件后通常的安装方法是# 假设你找到了一个插件仓库 git clone https://github.com/username/deepseek-vision-plugin.git cd deepseek-vision-plugin # 安装插件依赖 npm install # 或 yarn install # 构建插件 npm run build # 将构建好的插件目录链接或复制到 Harness 的插件目录 # Harness 插件目录位置因操作系统而异通常在 # macOS: ~/Library/Application Support/DeepSeek/Harness/plugins # Windows: %APPDATA%\DeepSeek\Harness\plugins # Linux: ~/.config/DeepSeek/Harness/plugins3.3 自制插件的基础结构预备知识了解插件的基本结构有助于我们后续完全自建。一个典型的 Harness 插件包含以下文件my-vision-plugin/ ├── package.json # 插件元数据名称、版本、依赖、入口文件 ├── src/ │ ├── index.ts # 插件主逻辑定义工具和交互 │ └── vision-client.ts # 调用视觉模型 API 的客户端 ├── webpack.config.js # 构建配置 └── README.mdpackage.json中的main字段指向编译后的入口文件。插件通过 Harness 提供的 SDK 定义“工具”Tools当用户触发该工具时如上传图片插件代码会执行调用我们后续部署的视觉 API。4. 方案B核心实战 - 本地部署视觉模型服务这是本文的核心部分。我们将使用 BLIP-2 模型和 FastAPI 搭建一个本地的视觉理解服务。4.1 安装模型服务依赖在之前激活的虚拟环境中安装必要的 Python 包pip install fastapi uvicorn pillow transformers torch torchvision requests pip install python-multipart # 用于 FastAPI 处理文件上传4.2 编写视觉模型服务代码创建一个名为vision_service.py的文件内容如下# vision_service.py import io from typing import Optional from PIL import Image from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import JSONResponse from pydantic import BaseModel from transformers import Blip2Processor, Blip2ForConditionalGeneration import torch # 初始化模型和处理器使用相对轻量的模型 device cuda if torch.cuda.is_available() else cpu print(fUsing device: {device}) model_name Salesforce/blip2-opt-2.7b # 也可选择 Salesforce/blip2-opt-6.7b 或 Salesforce/blip2-flan-t5-xl processor Blip2Processor.from_pretrained(model_name) model Blip2ForConditionalGeneration.from_pretrained(model_name, torch_dtypetorch.float16 if device cuda else torch.float32) model.to(device) model.eval() app FastAPI(titleLocal Vision API, descriptionA local BLIP-2 vision model service) class VisionResponse(BaseModel): description: str model: str device: str app.get(/) def read_root(): return {message: Local Vision Model API is running. Use POST /describe to process images.} app.post(/describe, response_modelVisionResponse) async def describe_image(file: UploadFile File(...), question: Optional[str] None): 接收一张图片返回其文本描述。 可选参数 question: 可以针对图片进行提问实现视觉问答(VQA)。 if not file.content_type.startswith(image/): raise HTTPException(status_code400, detailFile must be an image.) try: # 读取图片数据 contents await file.read() image Image.open(io.BytesIO(contents)).convert(RGB) # 预处理图片 inputs processor(image, textquestion, return_tensorspt).to(device, torch.float16 if device cuda else torch.float32) # 模型生成描述 with torch.no_grad(): generated_ids model.generate(**inputs, max_new_tokens100) generated_text processor.batch_decode(generated_ids, skip_special_tokensTrue)[0].strip() return VisionResponse(descriptiongenerated_text, modelmodel_name, devicedevice) except Exception as e: raise HTTPException(status_code500, detailfError processing image: {str(e)}) if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000, reloadTrue)代码关键点解释模型加载我们选择了blip2-opt-2.7b版本在精度和速度之间取得平衡。首次运行时会从 Hugging Face 下载模型请保持网络通畅。设备选择代码自动检测是否有可用的 CUDAGPU优先使用 GPU 加速否则使用 CPU。API 端点GET /一个简单的健康检查端点。POST /describe核心端点。接收一个图片文件和一个可选的question文本参数。如果提供question模型会进行视觉问答否则生成通用描述。安全与错误处理检查文件类型并捕获处理过程中的异常。4.3 启动视觉模型服务在终端中确保位于项目目录下且虚拟环境已激活运行python vision_service.py你会看到类似以下的输出表示服务启动成功Using device: cuda # 或 cpu INFO: Started server process [12345] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRLC to quit)4.4 测试视觉模型服务打开另一个终端使用curl或 Python 脚本测试 API。使用 curl 测试# 准备一张名为 test_code.png 的图片可以是任何截图 curl -X POST http://localhost:8000/describe \ -H accept: application/json \ -H Content-Type: multipart/form-data \ -F filetest_code.png使用 Python 脚本测试创建test_api.pyimport requests url http://localhost:8000/describe image_path test_code.png with open(image_path, rb) as img_file: files {file: img_file} response requests.post(url, filesfiles) if response.status_code 200: print(Success!) print(response.json()) else: print(fError: {response.status_code}) print(response.text)运行python test_api.py你应该会收到一个 JSON 响应其中包含对图片的文本描述。{ description: a screenshot of a Python code editor showing a function definition, model: Salesforce/blip2-opt-2.7b, device: cuda }至此一个本地视觉模型服务已经搭建完成。它运行在http://localhost:8000等待被调用。5. 方案B核心实战 - 为 Harness 开发自定义视觉插件现在我们为刚刚部署好的本地视觉服务开发一个 Harness 插件。5.1 创建插件项目结构在项目根目录与vision_service.py同级下创建一个新的插件目录mkdir harness-vision-plugin cd harness-vision-plugin npm init -y5.2 安装 Harness 插件开发依赖编辑package.json文件确保它包含以下关键内容并安装依赖// package.json { name: harness-local-vision, version: 1.0.0, description: A plugin to enable image understanding for DeepSeek Harness using a local model, main: dist/index.js, scripts: { build: tsc npm run copy-files, copy-files: copyfiles -u 1 src/**/*.html src/**/*.css dist/, watch: tsc --watch }, keywords: [deepseek, harness, vision, plugin, local], author: Your Name, license: MIT, devDependencies: { types/node: ^20.0.0, typescript: ^5.0.0, copyfiles: ^2.4.0 }, dependencies: { deepseek/harness-sdk: latest // 请根据 Harness 实际 SDK 版本调整 } }然后安装依赖npm install5.3 配置 TypeScript创建tsconfig.json文件{ compilerOptions: { target: ES2020, module: commonjs, lib: [ES2020], outDir: ./dist, rootDir: ./src, strict: true, esModuleInterop: true, skipLibCheck: true, forceConsistentCasingInFileNames: true, resolveJsonModule: true, declaration: true, declarationMap: true }, include: [src/**/*], exclude: [node_modules, dist] }5.4 编写插件核心代码创建src目录并在其中创建index.ts// src/index.ts import { HarnessPlugin, Tool, ToolContext, ToolResult } from deepseek/harness-sdk; // 定义插件的配置项例如本地服务的地址 interface LocalVisionConfig { apiEndpoint: string; } class LocalVisionPlugin implements HarnessPlugin { private config: LocalVisionConfig; constructor() { // 默认配置指向本地运行的视觉服务 this.config { apiEndpoint: http://localhost:8000/describe, }; } // 插件初始化时调用可以读取用户配置 async initialize(context: any): Promisevoid { // 这里可以读取 Harness 的插件设置覆盖默认配置 // 例如this.config.apiEndpoint context.settings?.apiEndpoint || this.config.apiEndpoint; console.log(Local Vision Plugin initialized with endpoint:, this.config.apiEndpoint); } // 定义插件提供的工具 getTools(): Tool[] { return [ { name: describe_image, description: Analyze an image and generate a detailed text description. Useful for understanding screenshots, diagrams, or photos., parameters: { type: object, properties: { image_path: { type: string, description: The local file path to the image you want to analyze., }, question: { type: string, description: An optional question about the image. If provided, the model will answer based on the image content., nullable: true, }, }, required: [image_path], }, execute: this.describeImage.bind(this), // 绑定 this 上下文 }, ]; } // 工具执行函数 private async describeImage(args: { image_path: string; question?: string }, context: ToolContext): PromiseToolResult { const { image_path, question } args; try { // 1. 读取本地图片文件 const fs await import(fs/promises); const imageBuffer await fs.readFile(image_path); // 2. 构建 FormData (在 Node.js 环境中) const FormData (await import(form-data)).default; const form new FormData(); form.append(file, imageBuffer, { filename: image.png }); if (question) { form.append(question, question); } // 3. 调用本地视觉模型 API const response await fetch(this.config.apiEndpoint, { method: POST, body: form as any, // 类型断言 headers: form.getHeaders(), }); if (!response.ok) { const errorText await response.text(); throw new Error(Vision API error: ${response.status} - ${errorText}); } const result await response.json(); // 4. 返回结果给 Harness return { content: [ { type: text, text: **Image Analysis Result:**\n\n${result.description}\n\n*Model: ${result.model} (Running on ${result.device})*, }, ], }; } catch (error: any) { // 错误处理 return { content: [ { type: text, text: ❌ Failed to analyze the image.\nError: ${error.message}\n\nPlease ensure:\n1. The local vision service is running at ${this.config.apiEndpoint}.\n2. The image path ${image_path} is correct and accessible., }, ], }; } } } // 导出插件实例 export default new LocalVisionPlugin();5.5 构建插件运行构建命令npm run build成功后会在dist目录下生成index.js等文件。5.6 在 Harness 中加载自定义插件由于是本地开发插件通常无法直接通过市场安装。Harness 一般支持从本地目录加载插件。找到 Harness 的插件目录路径见 3.2 节。将整个harness-vision-plugin目录或将其打包成.harnessplugin文件如果支持的话复制到插件目录。重启 DeepSeek Harness。在 Harness 的设置或插件管理界面中你应该能看到 “Local Vision” 或 “harness-local-vision” 插件启用它。5.7 在 Harness 中使用插件确保你的本地视觉服务vision_service.py正在运行。在 Harness 聊天框中你可以通过符号或工具调用菜单来使用describe_image工具。你需要提供图片的本地绝对路径作为参数。例如describe_image image_path/Users/YourName/Desktop/code_screenshot.png或者如果插件设计得好可能会提供文件选择器。Harness 会将请求发送给你的插件插件调用本地视觉 API并将返回的描述文本插入对话中。之后你就可以基于这段描述向 Harness 提问了例如“根据这个截图帮我修复其中的 bug”或“把图中的 Python 代码重构一下”。6. 运行验证与效果测试现在我们来验证整个流程是否跑通并测试实际效果。6.1 端到端测试流程启动服务在一个终端窗口运行python vision_service.py保持服务运行。启动 Harness打开 DeepSeek Harness 应用程序。验证插件加载在 Harness 设置中确认自定义插件已启用。执行测试准备一张测试图片例如一个简单的网页截图、一个 UML 图或者一段代码截图。在 Harness 聊天框中输入工具调用指令包含图片路径。观察 Harness 的回复。它应该先显示“正在分析图片...”然后返回模型生成的描述。6.2 测试不同场景场景一代码截图描述图片一个包含 Python 函数定义的编辑器截图。预期模型应能识别出这是代码并大致描述代码结构如“a Python function namedcalculate_sumthat takes two parameters”。后续提问“将这段代码转换成 Java 版本。”场景二架构图理解图片一个简单的系统架构图如微服务示意图。预期模型应描述图中的主要组件和它们之间的关系如“a diagram showing a client, an API gateway, and three microservices: user, order, and payment”。后续提问“为这个架构图中的 ‘Order Service’ 设计数据库表结构。”场景三视觉问答图片一张办公室桌面的照片上面有显示器、键盘和一杯咖啡。工具调用describe_image image_pathdesk.jpg questionWhat is on the desk?预期模型应回答“a computer monitor, a keyboard, and a cup of coffee”。6.3 验证成功的关键指标本地服务日志在运行vision_service.py的终端看到成功的 POST 请求日志。Harness 回复收到结构化的、包含图片描述的回复。无网络请求整个过程除了首次下载模型如果未缓存不应产生对外部 API 的请求。可以通过网络监控工具确认。7. 常见问题与排查思路在部署和使用过程中你可能会遇到以下问题。这里提供系统的排查方法。问题现象可能原因排查方式解决方案启动vision_service.py时报错ImportError虚拟环境未激活或依赖未正确安装。1. 确认命令行前有(venv)。2. 运行pip list检查transformers,torch,fastapi是否存在。重新激活虚拟环境并运行pip install -r requirements.txt如果你创建了该文件。模型下载缓慢或失败网络连接 Hugging Face 不畅。观察下载进度条是否卡住或提示网络错误。1. 使用国内镜像源设置环境变量HF_ENDPOINThttps://hf-mirror.com。2. 手动下载模型文件到~/.cache/huggingface/hub。服务启动后调用 API 返回500 Internal Server Error模型加载失败或 GPU 内存不足。查看vision_service.py终端的错误堆栈信息。1. 确认torch版本与 CUDA 匹配如果使用 GPU。2. 尝试使用更小的模型如Salesforce/blip2-opt-2.7b。3. 强制使用 CPU修改代码device cpu。Harness 插件调用失败提示“插件未找到”或“工具执行错误”1. 插件未正确构建或放置。2. 插件代码有语法错误。3. Harness 未重启。1. 检查 Harness 插件目录下是否有你的插件文件夹。2. 查看 Harness 开发者控制台F12的错误信息。3. 检查dist/index.js是否成功生成。1. 重新运行npm run build。2. 将插件目录移出再移入并重启 Harness。3. 根据控制台错误修改src/index.ts。插件调用成功但返回“Failed to analyze the image”1. 本地视觉服务未运行。2. API 地址配置错误。3. 图片路径不存在或无权访问。1. 检查vision_service.py进程是否存活。2. 用浏览器访问http://localhost:8000看是否返回信息。3. 用curl直接测试 API见4.4节。1. 启动视觉服务。2. 在插件代码或配置中修正apiEndpoint。3. 使用图片的绝对路径并检查文件权限。描述结果不准确或过于简略1. BLIP-2 模型能力限制。2. 图片复杂或模糊。3. 生成文本长度限制太短。对比不同模型如 LLaVA的结果。1. 尝试更换为blip2-opt-6.7b或 LLaVA 模型。2. 在describe函数中增加max_new_tokens参数值如 200。3. 在提问时更具体使用question参数。GPU 内存溢出 (OOM)模型或图片太大超出显存。终端显示 CUDA out of memory 错误。1. 减小输入图片尺寸在预处理前调整。2. 使用torch.float32而不是torch.float16CPU模式。3. 换用更小的视觉模型。8. 进阶优化与最佳实践当基础功能跑通后可以考虑以下优化让整个系统更健壮、易用和强大。8.1 插件体验优化添加文件选择器目前的插件需要手动输入图片路径体验很差。可以研究 Harness SDK 是否支持文件上传接口或者通过插件 UI 触发系统文件选择对话框。支持拖拽和粘贴图片更优雅的交互方式是让用户直接将图片拖入聊天框或粘贴截图。这需要更深入的插件前端开发。配置界面在插件设置中增加一个表单让用户可以方便地修改本地视觉服务的 API 地址而不是硬编码在代码里。8.2 视觉服务增强模型管理创建model_manager.py支持动态加载和切换多个视觉模型如 BLIP-2 用于快速描述LLaVA 用于复杂问答。图片预处理在vision_service.py中添加自动的图片缩放、格式转换和增强逻辑提升模型识别效果。异步处理与队列如果并发请求多可以使用asyncio和任务队列如celery来避免服务阻塞。添加健康检查与监控增加/health端点返回模型状态和负载信息。集成 Prometheus 指标。8.3 安全与权限API 密钥认证虽然服务在本地但如果你希望在同一网络内开放应为/describe端点添加简单的 API 密钥认证。请求限流防止被误操作或恶意请求打满资源。输入验证严格限制上传文件的大小和类型防止恶意文件攻击。8.4 替换为更强的 LLaVA 模型如果你有足够的 GPU 内存16GB强烈建议升级到 LLaVA 以获得更好的视觉推理能力。修改vision_service.py的核心部分# 可选LLaVA 服务示例 (需要额外安装) # pip install githttps://github.com/haotian-liu/LLaVA.git from llava.model.builder import load_pretrained_model from llava.mm_utils import process_images, tokenizer_image_token from llava.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN from llava.conversation import conv_templates # 加载 LLaVA 模型和处理器 model_path liuhaotian/llava-v1.5-7b # 或 13b 版本 tokenizer, model, image_processor, context_len load_pretrained_model( model_pathmodel_path, model_baseNone, model_namemodel_path, load_8bitFalse, # 可尝试 True 以减少显存占用 load_4bitFalse ) model.to(device) # 在 API 处理函数中使用 LLaVA 的对话模板处理图片和问题 # ... (具体处理逻辑请参考 LLaVA 官方仓库)8.5 生产环境部署建议使用 Docker 容器化将视觉模型服务打包成 Docker 镜像确保环境一致性便于分发和部署。编写 systemd 服务或使用进程管理器使用systemd(Linux) 或pm2来管理服务进程实现开机自启和自动重启。日志记录使用logging模块将服务日志输出到文件便于问题追踪。通过以上步骤你不仅修复了“图片发送失败”的问题更是构建了一个完全自主可控、可深度定制的本地 AI 视觉增强方案。这套方案的核心优势在于隐私安全和灵活性。你可以根据实际需求更换不同的开源视觉模型调整 API 接口甚至将视觉服务部署在内网服务器上供整个团队的 Harness 客户端使用。从“纯文本模型”到“能看图的智能助手”关键的桥梁就是本地部署的视觉模型和精心设计的插件。这个模式可以复用到其他能力扩展上例如语音识别、代码仓库分析等。希望这篇教程能帮助你彻底解锁 DeepSeek Harness 的视觉潜能打造更高效、更安全的个人 AI 工作流。如果在实践中遇到新问题不妨回头检查每个环节的日志或者考虑在社区分享你的改进方案。
返回列表