news 2026/10/2 2:43:36

DeepSeek Harness:构建可验证的自动化AI编程闭环

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek Harness:构建可验证的自动化AI编程闭环

很多人用 DeepSeek,打开网页或 IDE 插件,问一句“帮我写个排序算法”,把代码复制进项目,运行报错了再贴回去问。这个流程在简单任务上很好用,但一旦任务变成“实现一个带测试的模块”“给十几个接口补异常处理”“修复 CI 上的随机失败”,对话式 AI 就撑不住了:上下文越来越乱,生成的代码没有人真正跑过,改到一半还经常把之前的功能改坏。

问题不在于 DeepSeek 的能力,而在于使用方式。把模型当聊天窗口用,它只是一支会说话的笔;把模型放进“任务定义、生成、执行、验证、反馈、提交”的闭环里,它才真正变成能交付结果的开发协作者。这个闭环,就是本文要讲的 Harness 思路,而 Vibe Coding 则是驱动这个闭环最自然的人机协作姿势。

先说判断:DeepSeek Harness 并不是某个神秘的桌面插件,也不是换一个模型入口那么简单。它本质上是一种工程模式——用代码把 AI 的生成能力约束在可执行、可验证、可回滚的工作流中。谁先理解这一点,谁就能从“让 AI 写代码片段”升级到“让 AI 完成一个任务单元”。

下面的内容会从 Harness、Agent、Vibe Coding 三者的概念对比讲起,然后带你用 DeepSeek API 和 GitHub Actions 搭出一个最小可运行的 Harness 工作流。全程包含完整代码、预期输出、常见报错排查和工程建议。读完你至少能实现一个“生成代码 → 自动执行测试 → 失败反馈 → 自动修复 → 提交结果”的闭环。

1. 这篇文章真正要解决的问题

1.1 聊天式 AI 的三个硬伤

先复盘一下大多数人的 DeepSeek 用法:打开对话框,输入任务描述,复制代码,运行,有错再复制错误信息回去问。这种模式有三个明显的硬伤。

第一个是上下文失控。DeepSeek 的上下文窗口再大,也经不住多轮“稍微改一下”“不对,是这里报错”“你再看看第 30 行”式的拉扯。任务越接近真实项目,背景信息越多,模型就越容易顾此失彼,最后给出的代码跟项目风格、依赖版本、目录结构完全脱节。

第二个是没有执行环境。模型只会生成文本,它不知道自己写的代码能不能跑。你贴一段“应该能用的函数”,它永远回答“应该没问题”。除非你把这段代码真正丢进 Python 解释器、pytest、编译器或者 CI 里跑一遍,否则所有的“应该”都只是猜测。聊天窗口恰恰缺少这层验证。

第三个是不可回滚。AI 改完代码以后,你很难精准知道它改了什么、为什么改、改坏了对不对。项目越大,这种“黑盒修改”越危险。如果 AI 在无意识中删掉了某个分支逻辑,而你恰好没有做版本管理,排查起来会比手写代码更痛苦。

1.2 Harness 补上的是哪块拼图

Harness 的英文原意是“挽具、安全带”,用在 AI 工程里就是指“给模型戴上安全绳,把它固定在一条可控的轨道上执行任务”。

对比聊天窗口,Harness 工作流至少多出四样东西:

  • 约束:模型每一步的输入、输出格式、工具范围都是确定的。
  • 反馈:模型生成的代码会被真实执行,执行结果会作为下一轮的依据。
  • 校验:有自动测试、lint、编译检查等硬性门槛。
  • 回滚:所有变更先产生补丁或 commit,出问题可以退回。

这四样东西合在一起,解决的根本问题是:让模型从“生成者”变成“被验证的执行者”。生成者只对文本负责,执行者必须对结果负责。

1.3 什么样的读者应该读这篇文章

  • 想用 DeepSeek 处理真实项目任务,而不是只写零散代码片段的开发者。
  • 正在了解 Vibe Coding、Agent 编程,但不确定怎么落地的技术团队。
  • 已经在用 GitHub Actions 或类似 CI 工具,想给自动化流程加入 AI 能力的工程师。

如果你只是想找一个“输入需求就出来完整项目”的工具,这篇文章会让你失望。因为现实里不存在那样的好东西,只有一套把模型、执行环境、反馈机制组合起来的方法论。

2. 核心概念:Harness、Agent 与 Vibe Coding 的关系

在展开实操之前,先把三个高频词讲透。网上很多人把这几个词混在一起用,实际上它们描述的是不同层面的东西。

2.1 三个概念一句话理解

  • Agent(智能体):让 AI 自主规划任务、调用工具、决定先做什么后做什么。核心特征是“自主决策”。
  • Harness(约束流程):为 AI 定义好执行轨道,比如输入什么、调用什么工具、怎样的结果算成功、失败后怎么处理。核心特征是“受控可靠”。
  • Vibe Coding(氛围编程):一种人机协作节奏,开发者用自然语言持续给 AI 描述需求、感受和反馈,AI 连续生成修改,人的主要精力放在判断方向上。核心特征是“快速反馈、持续迭代”。

2.2 Harness 与 Agent 到底有什么区别

两者不是对立关系,而是侧重不同。这里用一个表格说清楚:

对比维度AgentHarness
决策方式模型自己规划步骤人在流程中预先定义步骤
工具调用模型自主决定何时调用流程规定在哪个节点调用
失败处理模型尝试自行纠错流程触发重试、回滚或告警
可预测性较低,依赖模型能力较高,边界清晰
适用阶段探索型任务可重复、可验收的生产任务

一个比较形象的类比是:Agent 相当于把车钥匙交给 AI,让它自己找路开过去;Harness 相当于在赛道上装好护栏、转弯标志和刹车系统,AI 仍然在驾驶,但偏离轨道时会立刻被拉回来。

2.3 DeepSeek Harness 到底是什么

从社区和真实项目实践来看,“DeepSeek Harness”通常指一类工作流:以 DeepSeek 模型为核心,结合任务编排、代码执行、反馈校验等机制,把一次完整的软件任务封装成可重复运行的流程。有些开源项目把这类流程做成 CLI、插件或桌面客户端,所以你会看到各种名称和入口,但它们背后的骨架是同一条:模型 + API + 执行环境 + 反馈循环。

因此,如果有人告诉你“装了某个 DeepSeek Harness 桌面版就万事大吉”,建议先冷静下来看两件事:第一,它是否只换了 API 入口,而没有真正加入执行验证环节;第二,它的代码和配置是否透明,模型权限边界是否清晰。把 Harness 理解成“工程模式”而不是“某个软件”,你的判断力会高很多。

2.4 Vibe Coding 的正确姿势

Vibe Coding 这个词最近很火,但很多人理解成了“完全放手让 AI 乱写,人负责欣赏”。这是对它的误读。

真正能落地的 Vibe Coding 有三条纪律:

  • 小步骤推进。一次只让 AI 完成一个小的、可验证的任务,而不是丢给它整个项目。
  • 闭环验证。AI 每给出一个版本,你至少运行一次测试或构建,把真实结果反馈回去。
  • 人控方向。AI 负责生成细节实现,你负责判断“这个方向对不对”“这次改动是否引入风险”。

本文后面的示例,就是把这三条纪律变成自动化脚本:模型生成代码,pytest 执行验证,失败信息自动反馈,模型自己修。你只需要在成功门槛满足后确认提交。

3. 环境准备与前置条件

动手搭建之前,先确认环境。下表是完整清单:

依赖项用途说明
DeepSeek API Key调用模型在 DeepSeek 开放平台申请,按 token 计费
Python 3.10 及以上运行示例脚本也可替换为 Node 或其他语言,本文使用 Python
requests / pytest调用 API、执行测试通过 pip 安装
Git 仓库承接生成结果本地仓库或 GitHub 仓库皆可
GitHub Actions做云端 Harness需要 GitHub 仓库和 secrets 配置

3.1 DeepSeek API 配置要点

DeepSeek 对外提供 OpenAI 兼容的接口,这意味着你不需要引入专属 SDK,只要配置好三个参数就能调用:

  • API Key:在平台后台创建,请求时放在 Authorization 请求头。
  • Base URL:官方兼容端点,常见写法是https://api.deepseek.com/v1,也有文档写https://api.deepseek.com,具体以官方最新文档为准;如果某个端点返回 404,换另一个试试。
  • 模型名:官方接口常用deepseek-chat,需要更强推理能力时可选deepseek-reasoner。模型名不要照抄社区里来路不明的叫法,只认官方模型名。

一个基础原则:不要把 API Key 写进代码或提交到 Git 仓库。本地开发用环境变量,云端流程用 CI 的 secrets 机制。

3.2 本地环境校验

安装依赖:

pip install requests pytest

设置环境变量(Windows 可使用set命令,Linux/macOS 使用export):

export DEEPSEEK_API_KEY="你的API Key"

然后运行一个最小请求脚本,确认 API 连通性。

4. 核心流程拆解:从聊天窗口到 Harness 工作流

把一次“让 AI 生成并交付代码”的任务拆开,你会看到 Harness 解决的不只是“生成”环节,而是覆盖全流程的编排。下面用表格列出核心阶段:

阶段输入输出关键动作常见失败点
任务定义自然语言需求结构化任务描述拆小、明确验收标准任务太大,无法验证
模型生成任务描述 + 上下文代码文本要求输出格式明确输出内容偏离主题
执行验证生成的代码测试报告/错误日志在隔离环境运行环境依赖缺失
反馈修复错误日志修复后的代码把日志喂回模型上下文被历史污染
提交结果通过验证的代码补丁/commit/PR版本管理、格式化未做回滚保护

对一个标准任务来说,流程只有五步,但每一步都可能失败。Harness 的核心价值就是让每个失败点都有明确的处理策略,而不是靠运气祈盼模型一次写对。

4.1 任务定义阶段最容易犯的错

很多人在这一步就输了。让“实现一个回文判断函数”听起来很简单,但它缺少验收标准:输入是什么类型?空字符串怎么算?大小写敏感吗?是否需要测试用例?没有这些约束,模型只能靠猜测写代码,后面无论怎么反馈都是盲人摸象。

正确的做法是把验收门槛写进系统提示词:

你是 TDD 工程师。 请实现 is_palindrome(s) 函数,并附带 pytest 测试。 要求: 1. 输入为字符串,输出为布尔值; 2. 空字符串视为回文; 3. 忽略大小写但保留字符顺序; 4. 代码中不要包含 main 调用; 5. 只输出 Python 代码块。

任务定义越精确,后面的执行验证越有意义。

4.2 执行验证必须使用真实环境

不要相信模型说“这段代码已经测试过了”,也不要相信你的眼睛。把生成的代码写入临时文件,调用 pytest 或编译器真实跑一遍。这一步筛选出来的错误,才是值得反馈给模型的有效信息。

反馈时同样要注意信息质量。直接把 2000 行错误日志全部塞回去,会让上下文很快膨胀。正确做法是截取失败摘要、堆栈顶部和关键断言语录,控制在 2000 字符内,并明确要求模型只输出修复后的完整代码。

5. 完整示例:用 DeepSeek API 搭建一个最小 Harness

这一节给出三个可以直接运行的示例。它们按难度递进:先验证 API 连通,再加入反馈循环,最后放进 GitHub Actions 做云端 Harness。

5.1 示例一:DeepSeek API 最小调用

文件路径deepseek_minimal.py:

import os import requests api_key = os.environ["DEEPSEEK_API_KEY"] url = "https://api.deepseek.com/v1/chat/completions" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json", } payload = { "model": "deepseek-chat", "messages": [ {"role": "system", "content": "你是一个精通 Python 的工程师。"}, {"role": "user", "content": "写一个函数判断字符串是否为回文,并给出两个测试用例。"}, ], "temperature": 0.2, "max_tokens": 1024, } resp = requests.post(url, json=payload, headers=headers, timeout=120) resp.raise_for_status() data = resp.json() print(data["choices"][0]["message"]["content"])

运行命令:

python deepseek_minimal.py

成功时你会看到模型输出的代码和测试用例。如果返回 404,把 URL 中的/v1去掉再试;如果返回 401,先检查环境变量是否注入到了当前终端进程。

5.2 示例二:带反馈循环的 Harness 脚本

这是本文的核心示例。它模拟一个最小 Harness:模型生成代码,pytest 跑测试,失败则把错误信息反馈给模型,最多重试 5 轮。

文件路径harness_demo.py:

import json import os import re import subprocess import sys import requests DEEPSEEK_API_KEY = os.environ["DEEPSEEK_API_KEY"] BASE_URL = "https://api.deepseek.com/v1" MODEL = "deepseek-chat" MAX_ROUNDS = 5 OUTPUT_FILE = "solution.py" def ask_deepseek(conversation): url = f"{BASE_URL}/chat/completions" headers = {"Authorization": f"Bearer {DEEPSEEK_API_KEY}"} payload = { "model": MODEL, "messages": conversation, "temperature": 0.2, "max_tokens": 2048, } resp = requests.post(url, json=payload, headers=headers, timeout=120) resp.raise_for_status() return resp.json()["choices"][0]["message"]["content"] def extract_code(text): match = re.search(r"```(?:python)?\s*(.*?)```", text, re.S) return match.group(1).strip() if match else text.strip() def run_code(code): with open(OUTPUT_FILE, "w", encoding="utf-8") as f: f.write(code) proc = subprocess.run( [sys.executable, "-m", "pytest", "-q", OUTPUT_FILE], capture_output=True, text=True, ) return proc.returncode, proc.stdout + proc.stderr system_prompt = ( "你是一名 TDD 工程师。" "只输出可运行的 Python 代码,代码必须包含函数实现和 pytest 测试用例。" "不要输出 main 调用,不要输出解释性文字,不要使用不存在的依赖。" ) task = ( "实现 is_palindrome(s) 函数,判断字符串是否为回文。" "要求忽略大小写,空字符串视为回文,并附带 pytest 测试。" ) conversation = [ {"role": "system", "content": system_prompt}, {"role": "user", "content": task}, ] for round_no in range(1, MAX_ROUNDS + 1): print(f"[Round {round_no}] 请求模型生成代码...") raw = ask_deepseek(conversation) code = extract_code(raw) print(f"[Round {round_no}] 在隔离环境执行 pytest...") returncode, output = run_code(code) if returncode == 0: print("[PASS] 测试全部通过") with open(OUTPUT_FILE, "w", encoding="utf-8") as f: f.write(code) break print(f"[FAIL] 测试未通过,错误信息将反馈给模型") conversation.append({"role": "assistant", "content": raw}) conversation.append( { "role": "user", "content": ( "运行上述代码后测试失败,请修复并重新输出完整代码。\n" f"错误信息:\n{output[:2000]}" ), } ) else: print("[ABORT] 轮次耗尽,未得到可用补丁") sys.exit(1)

这段代码的逻辑并不复杂,但恰好体现了 Harness 的三个关键设计:

  • 模型从未直接操作真实文件或执行命令,它只负责产出文本,执行由脚本控制。
  • 错误信息形成结构化反馈回路,而不是让模型凭感觉乱猜。
  • 有最大轮次限制,防止无限循环烧光 token。

运行命令:

python harness_demo.py

如果本地没有 pytest,脚本会在第一轮执行阶段报错;如果 API 不可用,会在请求阶段报错。无论哪种失败,你都能从输出日志里看到具体位置。

5.3 示例三:把 Harness 工作流放进 GitHub Actions

本地循环跑通后,下一步把它搬上云端,让 Harness 在 CI 环境中执行。这样可以做到:任何人推送代码、创建 issue、或者手动触发,系统都会自动启动一次 AI 任务。

文件路径.github/workflows/deepseek-harness.yml:

name: deepseek-harness-demo on: workflow_dispatch: jobs: harness: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 安装 Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: 安装依赖 run: | pip install requests pytest - name: 运行 Harness 流程 env: DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} run: python harness_demo.py - name: 提交结果 run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add solution.py git diff --cached --quiet || git commit -m "chore: auto-generate solution by DeepSeek Harness" git push

使用前需要在 GitHub 仓库的 Settings → Secrets and variables → Actions 中新增一条DEEPSEEK_API_KEY,值填你的 API Key。

需要注意,这个 YAML 把结果直接 push 回触发分支。生产环境的更稳妥做法是改成创建 Pull Request,让真人 review 后再合并。最小演示先保证跑通。

5.4 三个示例之间的关系

用一个图来理解会更清晰:

  • 示例一验证“模型能答”。
  • 示例二验证“模型给出的代码能被自动验证,失败还能自修复”。
  • 示例三把示例二放进可重复的云环境,让整个闭环变成团队可用的流程。

从工程角度说,示例二才是 Harness 的核心,示例三只是给它加了一层“远程运行 + 权限隔离”的外壳。如果你只能记住一个示例,记住示例二就足够了。

6. 运行结果与效果验证

运行harness_demo.py的预期输出大概是这样的模式:

[Round 1] 请求模型生成代码... [Round 1] 在隔离环境执行 pytest... [FAIL] 测试未通过,错误信息将反馈给模型 [Round 2] 请求模型生成代码... [Round 2] 在隔离环境执行 pytest... [PASS] 测试全部通过

最终目录会多出solution.py文件,里面是模型生成并经过 pytest 验证的代码和测试用例。

判断成功有三个标准:

  1. 脚本最终输出[PASS],退出码为 0。
  2. 生成的solution.py能被 pytest 独立执行通过。
  3. 生成代码中不包含硬编码的 API Key、临时路径等环境相关内容。

如果失败,第一步要看日志中的[FAIL]和[ABORT]标记。[ABORT]意味着模型连续多轮没有交付通过测试的代码,这时优先检查任务定义是否太模糊,其次检查系统提示是否给定了过严或过松的约束。

7. 常见问题与排查思路

问题现象可能原因排查方式解决方案
请求返回 401API Key 无效或没有注入环境变量检查环境变量是否为空重新生成 Key,确认 export 后重启终端
请求返回 404Base URL 路径不符合当前接口版本查看错误响应体中的路径提示在/v1和根路径之间切换测试
请求超时网络链路不稳定或模型负载过高观察超时时间与响应状态码增大 timeout,加入重试与退避策略
生成的代码带 Markdown 标记提示中没有约束输出格式打印模型原始返回值在 system prompt 中要求“只输出代码块”
pytest 报模块不存在本地依赖未安装查看 pytest 输出首行先执行 pip install pytest
无限循环烧 token没有设置最大轮次检查循环条件是否固定增加 MAX_ROUNDS 上限和 token 预算
网页插件出现 failed to load plugins插件入口未激活或平台过滤条件不匹配查看插件元数据的 entry 配置和启动日志统一入口命名,重装或升级插件版本
web boot 显示多入口未激活依赖加载顺序错误或启动策略过严按 boot 日志逐个检查入口状态调整启动顺序,跳过不兼容入口

这里要特别提醒:网上会出现各种“第三方镜像”“桌面端整合包”,它们可能修改了 Base URL、模型名甚至私自记录 API Key。建议一律优先使用 DeepSeek 官方接口,不要轻信来路不明的封装。代码里的 Base URL 和模型名始终以官方文档为准。

8. 最佳实践与工程建议

8.1 永远保留人工确认节点

Harness 可以自动执行、自动提交,但“自动提交”不等于“自动上线”。生产级流程应该让 AI 修改停留在 Pull Request 或补丁阶段,由人 review 后合入。CI 里加上测试门槛,比任何提示词都有效。

8.2 一次任务只验证一件事

不要试图让 AI 在一个任务里同时做“重构、加测试、改文档、优化性能”。任务粒度越大,验证门槛就越难定义,模型就越容易迷失。把“实现回文函数”拆成“实现函数 + 写测试 + 跑测试”,每个小步骤都是最小可验证单元。

8.3 把错误信息做成结构化反馈

反馈给模型的错误信息应当包含三部分:失败摘要、关键堆栈、预期行为。不要只贴一个截图式的完整日志。实践中可以用一个截断函数统一处理,限制在 2000 字符左右,既保留关键信息,又避免上下文膨胀。

8.4 设置硬性预算

成本控制是 Harness 落地时绕不开的问题。建议在脚本中显式增加三个预算上限:最大轮数、最大 token 数、最大超时时间。轮次耗尽后的策略应该是“失败退出 + 生成报告”,而不是继续消耗 token 做无意义的自愈。

8.5 重视安全边界

Harness 里的模型应该按最小权限运行:

  • 不直接访问生产数据库。
  • 不在未经授权的服务器上执行命令。
  • 不读取包含密钥的配置文件。
  • API Key 只通过环境变量或 secrets 传入。

这些边界不是限制模型能力,而是保护你自己的系统不被难以预测的文本生成结果破坏。

8.6 把 Prompt 模板当成代码管理

任务描述、系统提示、反馈模板都是 Harness 的一部分。把它们放入版本控制,和代码一起演进。当模型输出质量发生变化时,你能快速定位是模型版本问题还是提示变化问题。

9. 总结与后续学习方向

这篇文章真正想做的是纠正一个普遍误区:DeepSeek 的价值不在聊天窗口,而在 “DeepSeek + Harness 编排 + 真实执行验证” 的组合。

从概念上,你知道了 Agent 偏向自主决策,Harness 偏向受控流程,Vibe Coding 是两者可以共存的协作节奏。从实践上,你拿到了一个最小闭环示例:模型生成代码,pytest 真实执行,失败信息自动反馈,通过后输出补丁。从工程上,你看到了如何把闭环搬进 GitHub Actions,以及每一步可能出现的典型故障。

建议你接下来的实践顺序是:

  1. 先把示例二在本地跑通,理解反馈循环的日志结构。
  2. 把任务换成你自己项目里的一个小模块,比如“补齐某个接口的输入校验 + 单元测试”。
  3. 再把流程搬进 CI,加上 Pull Request 审查节点。

如果继续深入,可以关注三个方向:一是让模型自动拆解子任务,从单轮 Harness 进化到多阶段流水线;二是引入代码评测和覆盖率为验证标准,而不是只看测试是否通过;三是记录每次任务的输入输出日志,积累成自己的评估数据集,用来比较不同模型和提示词的效果。

最后提醒一句:所有涉及 API Base URL、模型名、版本号的配置,都以 DeepSeek 官方文档为准,不要照抄任何第三方整合包里的参数。先跑通最小闭环,再谈大规模应用,这是 AI 工程化最稳妥的路径。

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

Python垃圾短信分类实战:从数据到模型全流程

简介:本资源为基于Python的垃圾短信分类课程设计完整资料包,面向正在学习机器学习、模式识别或自然语言处理的高校学生与自学者,可帮助解决文本分类入门实践中从数据预处理到建模预测的全流程问题。包内共17个文件,以m脚本、csv数…

作者头像 李华
网站建设 2026/10/2 2:43:27

LLM Agent 应用实战:打造自动化执行任务的智能体

我在开源社区里翻到过一个很有意思的标题:“我造了一台魔法机器”。第一反应是,这大概又是一篇凡尔赛式的项目分享。但真把材料看完之后,反而觉得这个标题特别准确——它说的不是科幻片里的魔法,而是现在开发者正在亲手搭建的一种…

作者头像 李华
网站建设 2026/10/2 2:43:24

AI视觉防尾随门系统落地:技术选型与工程实践

好的,我将按照上述要求,撰写一篇关于高档小区防尾随门项目落地的CSDN技术博客。文章将围绕AI视觉方案与AI摄像头的结合,深入剖析技术选型、系统架构、具体实施、环境适配、问题排查与工程实践,确保内容专业、详实且可直接落地。1.…

作者头像 李华
网站建设 2026/10/2 2:42:26

YOLOv5+HRnet人体姿态估计实战:从数据到部署全流程解析

简介:这是一份基于YOLOv5的HRnet人体姿态估计完整工程,面向需要快速实现图片、视频及摄像头实时关键点检测的开发者与学生,下载后只需修改本地路径即可直接运行,省去繁琐的环境搭建和调参过程。包内共2000个文件,以186…

作者头像 李华
网站建设 2026/10/2 2:41:56

Kali Linux虚拟机安装配置保姆级教程:从VMware选型到避坑全指南

开门见山说结论:Kali Linux 本身就是一个基于 Debian 的渗透测试发行版,拿来装系统不难,难的是装完以后不踩坑、不闪屏、不变砖、不卡成 PPT。这篇文章我从项目初期选型开始讲,一直讲到换源、输入法、SSH、快照,所有步…

作者头像 李华
网站建设 2026/10/2 2:41:52

C#集成L2CS-Net:ONNX Runtime实现实时人脸姿态估计

简介:这是一份面向C#开发者的完整示例工程,基于OpenCvSharp与L2CS-Net算法实现人脸检测、眼睛注视方向和头部朝向估计,适合想将ONNX模型部署到Windows桌面应用的视觉开发者参考。工程按功能拆分为人脸检测、L2CS推理管理、人脸管理、主窗体交…

作者头像 李华