当前位置: 首页 > article >正文

Sebastian Raschka 手把手拆解编程 Agent:从模型到 Harness 的完整设计

这篇文章想讨论的是编程 AgentCoding Agent和 Agent Harness 的整体设计它们是什么、如何运作以及各个部分在实践中是怎样组合起来的。读过我《Build a Large Language Model (From Scratch)》和《Build a Large Reasoning Model (From Scratch)》的读者经常会问到 Agent 相关的话题所以我觉得写一篇可以随时拿来引用的参考文章会很有帮助。更广泛地看Agent 之所以变得重要是因为近年来实用型 LLM 系统的进步并不只是来自模型本身更强还来自我们使用模型的方式。在很多真实应用里围绕模型的系统层比如工具使用、上下文管理和记忆机制和模型本身同样关键。这也解释了为什么 Claude Code 或 Codex 往往会让人感觉明显强于同一模型在普通聊天界面中的表现。这篇文章里我会梳理编程 Agent 的六个核心构件。你大概已经接触过 Claude Code 或 Codex CLI。简单来说它们本质上都是带有 agentic 特征的编程工具在 LLM 外面包上一层应用层也就是所谓的 Agent Harness从而让模型在编码任务上更方便、表现也更好。图 1Claude Code CLI, Codex CLI, 和我的 Mini Coding Agent.。编程 Agent 是为软件工作专门设计的。这里真正关键的不只是选用了哪个模型还有围绕模型的一整套系统包括代码仓库上下文、工具设计、提示缓存稳定性、记忆机制以及长会话的连续性等。这个区分很重要因为一谈到 LLM 的编程能力人们常常会把模型本身、推理行为以及 Agent 产品混成一回事。不过在进入编程 Agent 的细节之前我想先简要说明一下 LLM、推理模型和 Agent 这几个更广义概念之间的区别。LLM 是核心的 next-token 模型。推理模型本质上仍然是 LLM只不过通常经过了额外训练和/或提示优化使其在推理时愿意投入更多 inference-time compute 到中间推理、结果校验或候选答案搜索上。Agent 则是模型之上的一层可以理解为围绕模型运转的控制循环。通常在给定一个目标后Agent 层或 Harness会决定下一步检查什么、调用哪些工具、如何更新状态以及何时停止。粗略来说它们的关系可以这样理解LLM 是引擎推理模型是加强版引擎动力更强但使用成本也更高而 Agent Harness 则帮助我们把模型用得更好。这个类比并不完全严谨因为普通 LLM 和推理 LLM 也都可以被单独使用比如在聊天界面里或 Python 会话里但我希望它能传达出核心意思。Figure 2图 2普通 LLM、推理 LLM推理模型和包裹在 Agent Harness 中的 LLM 之间的关系。换句话说Agent 是在环境中反复调用模型的系统。简单总结一下LLM原始模型推理模型经过优化、会输出更多中间推理痕迹并加强自我校验能力的 LLMAgent一个结合模型、工具、记忆和环境反馈运行的循环Agent Harness围绕 Agent 的软件脚手架负责管理上下文、工具使用、提示、状态和控制流Coding HarnessAgent Harness 的一种特例也就是面向软件工程任务的专用 Harness负责管理代码上下文、工具、执行和迭代反馈如上所列在 Agent 和编程工具的语境里还有两个常见术语Agent Harness 和AgenticCoding Harness。Coding Harness 是包在模型外的一层软件脚手架帮助模型更有效地编写和修改代码而 Agent Harness 则更宽泛并不局限于编码场景比如 OpenClaw。Codex 和 Claude Code 都可以看作 Coding Harness。无论如何更强的 LLM 会为推理模型提供更好的基础而 Harness 则能进一步把这种推理能力榨得更充分。当然LLM 和推理模型本身也能完成编程任务不一定非要有 Harness。但编程工作只有一部分是在做 next-token 生成更大的一部分其实是代码仓库导航、搜索、函数定位、应用 diff、执行测试、检查错误以及把所有相关信息都维持在上下文里。写代码的人都知道这些都是很费脑力的事所以我们才讨厌在编码时被打断。图 3图 3Coding Harness 由三层构成模型家族、Agent 循环和运行时支持。模型提供“引擎”Agent 循环驱动迭代式问题求解运行时支持则提供底层基础设施。在循环内部“observe”负责从环境收集信息“inspect”负责分析这些信息“choose”决定下一步而“act”执行具体动作。这里的关键结论是一个好的 Coding Harness能让推理模型和非推理模型都比在普通聊天框里显得强得多因为它在上下文管理等方面提供了大量帮助。前面提到过当我们说 Harness 时通常指的是围绕模型的软件层。它负责组装提示、暴露工具、跟踪文件状态、应用编辑、运行命令、管理权限、缓存稳定前缀、存储记忆等等。在今天的 LLM 使用场景里这一层在很大程度上塑造了用户体验相比直接提示模型或者使用更接近“上传文件后聊天”的网页聊天界面它的影响要大得多。在我看来如今各家 LLM 的基础版能力其实已经相当接近了比如 GPT-5.4、Opus 4.6 和 GLM-5 的基础版。很多时候真正拉开使用体验差距的反而是 Harness。说一点带推测性质的话如果把当前最新、能力最强的一批开源权重 LLM 之一比如 GLM-5放进一个类似的 Harness 里它很可能可以和 Codex 中的 GPT-5.4、或者 Claude Code 中的 Claude Opus 4.6 打到差不多的水平。当然一些面向 Harness 的后训练通常仍然有帮助。比如 OpenAI 过去就长期维护过独立的 GPT-5.3 和 GPT-5.3-Codex 变体。下一节里我会更具体地讨论 Coding Harness 的核心组件并以我的 Mini Coding Agent 为例https://github.com/rasbt/mini-coding-agent。图 4图 4编程 Agent / Coding Harness 的主要特性将在下面各节中讨论。顺便说明一下为了叙述方便本文会在一定程度上混用“编程 Agent”和“Coding Harness”这两个词。严格来说Agent 指的是模型驱动的决策循环而 Harness 指的是为它提供上下文、工具和执行支持的外围软件脚手架。图 5图 5极简但完整可用的从零构建的 Mini Coding Agent纯 Python 实现下面是编程 Agent 的六个主要组件。你也可以直接查看我用纯 Python 从零实现的、极简但完整可用的 Mini Coding Agent 源码里面有更具体的代码示例。代码里通过注释标出了下文讨论的六个组件################################## Six Agent Components ################################### 1) 实时代码仓库上下文 - WorkspaceContext# 2) 提示结构设计与缓存复用 - build_prefix, memory_text, prompt# 3) 结构化工具、校验和权限 - build_tools, run_tool, validate_tool, approve, parse, path, tool_*# 4) 上下文压缩与输出管理 - clip, history_text# 5) 转录、记忆与会话恢复 - SessionStore, record, note_tool, ask, reset# 6) 委派与有界子 Agent - tool_delegate1实时仓库上下文这可能是最显而易见的组件但也是最重要的之一。当用户说“修复测试”或“实现 xyz”时模型应该知道自己是不是处在一个 Git 仓库中、当前在哪个分支、项目文档里是否包含相关说明等等。这是因为这些细节往往会改变或影响正确的行动方式。比如“修复测试”本身并不是一条自包含的指令。如果 Agent 能看到 AGENTS.md 或项目 README它就可能知道该运行哪个测试命令如果它知道仓库根目录和目录结构也就能去正确的位置查找而不是靠猜。此外Git 分支、工作区状态和提交记录也能帮助系统补充上下文理解当前正在推进哪些改动以及应该重点关注哪里。图 6图 6Agent Harness 会先构建一个简短的工作区摘要再把它与用户请求结合起来为模型补充额外的项目上下文。这里的关键点在于编程 Agent 会在真正开始干活之前先收集一批信息把它们作为工作区摘要中的“稳定事实”这样后续每次提示时就不必在毫无上下文的情况下从零开始。2提示结构与缓存复用当 Agent 已经拿到了代码仓库视图接下来的问题就是如何把这些信息喂给模型。上一张图展示的是一个简化版的过程“组合提示前缀 请求”但在真实系统里如果每次用户发来请求都重新组合并处理整份工作区摘要其实是比较浪费的。也就是说编码会话本身具有很强的重复性。Agent 规则通常不变工具描述通常也不变工作区摘要往往也大体稳定。真正会变化的通常只是最新的用户请求、最近的转录也许再加上一点短期记忆。“聪明”的运行时不会在每一轮都把所有内容重新拼成一个巨大而未分层的提示如下图所示。图 7图 7Agent Harness 构建一个稳定的提示前缀添加变化的会话状态然后将组合后的提示喂给模型。这一节和第 1 节最大的区别在于第 1 节关注的是如何收集仓库事实而这里关注的是如何高效地打包并缓存这些事实以便反复调用模型时复用。所谓“稳定提示前缀”是指其中包含的信息变化不大。它通常会包含通用指令、工具描述和工作区摘要。如果没有发生什么重要变化我们就不希望在每次交互时都从头重建这一部分。其他组件则更新得更频繁通常每轮都会变化包括短期记忆、最近的转录以及最新的用户请求。简而言之“稳定提示前缀”的缓存本质上就是让足够聪明的运行时尽可能复用这部分内容。3工具访问、校验与权限工具访问和工具使用是系统开始从“聊天”变得更像“Agent”的关键所在。普通模型可以在文字里建议某个命令但处在 Coding Harness 中的 LLM 应该做一件更窄、却也更有用的事它应该能够真正执行命令并拿回结果而不是让我们手动跑完命令再把结果贴回聊天窗口。不过Harness 通常不会让模型随意发挥、临时编造语法而是提供一组预先定义好的、具名的、允许使用的工具并为它们规定清晰的输入格式和边界。当然也可以把类似 Pythonsubprocess.call这样的能力包含进去这样 Agent 仍然可以执行很宽泛的一类 shell 命令。工具调用流程如下图所示。图 8图 8模型发出一个结构化动作Harness 对其进行校验可选地请求用户批准执行之后再把有界结果反馈回循环。为了说明这一点下面是用我的 Mini Coding Agent 时的一个示例。没有 Claude Code 或 Codex 那么漂亮因为它非常极简用的是纯 Python没有任何外部依赖。图 9图 9Mini Coding Agent 中一次工具调用审批请求的示意。在这里模型必须选择一个 Harness 能识别的动作比如列出文件、读取文件、搜索、运行 shell 命令、写入文件等等。它还必须以 Harness 可校验的参数形式提供输入。所以当模型请求执行某个动作时运行时就可以先暂停下来执行一些程序化检查“这是已知的工具吗”“参数合法吗”“需要用户批准吗”“请求的路径在工作区内吗”只有这些检查都通过了才会真正执行。当然运行编程 Agent 本身始终带有一定风险但 Harness 的这些检查也会提升可靠性因为模型无法执行完全任意的命令。此外除了拒绝格式不合法的动作、加上审批门槛之外还可以通过检查文件路径把文件访问限制在仓库内部。从某种意义上说Harness 的确减少了模型的自由度但与此同时它也提升了整个系统的可用性。4控制上下文膨胀上下文膨胀并不是编程 Agent 独有的问题而是 LLM 普遍都会遇到的问题。当然如今 LLM 支持的上下文已经越来越长了我最近还写过一篇介绍实现这一点所依赖的注意力变体但长上下文依然昂贵而且如果夹杂了大量无关信息还会引入额外噪音。在多轮交互里编程 Agent 往往比普通 LLM 更容易出现上下文膨胀因为它会反复读取文件、产生很长的工具输出还会积累日志等信息。如果运行时把这些内容全都原样保留下来很快就会把可用的上下文 token 消耗殆尽。所以一个好的 Coding Harness 在处理上下文膨胀这件事上通常会做得相当精细而不只是像普通聊天界面那样简单裁剪或概括一下。从概念上看编程 Agent 中的上下文压缩大致会像下图这样工作。更具体地说这里是在继续放大上一节图 8 中clip步骤 6对应的部分。图 10图 10大的输出会被裁剪较早的读取会被去重转录在回到提示之前会先被压缩。一个最基础的 Harness至少会使用两种压缩策略来处理这个问题。第一种是裁剪clipping也就是缩短过长的文档片段、大型工具输出、记忆笔记和转录条目。换句话说它要防止某一段文本仅仅因为特别冗长就独占了整个提示预算。第二种策略是转录压缩或总结也就是把完整的会话历史下一节会详细讲变成一个更小、但仍可用于提示的摘要。这里有一个关键技巧近期事件要保留得更丰富一些因为它们更可能与当前步骤相关而更早的事件则可以被更激进地压缩因为它们大概率没那么重要。此外我们还会对较早的文件读取做去重这样模型就不会因为在会话早期多次读取过同一个文件而反复看到完全相同的内容。总的来说我觉得这恰恰是优秀编程 Agent 设计里一个经常被低估、也略显“无聊”的部分。很多看起来像是“模型质量”的差异本质上其实是上下文质量的差异。5结构化会话记忆在实践中这 6 个核心概念是高度交织在一起的。前面的不同小节和配图只是从不同的关注点和缩放层级去讨论它们。上一节里我们讨论的是历史在提示阶段如何被使用以及如何构建紧凑转录。当时关注的问题是过去的信息中到底有多少内容应该在下一轮重新送回模型所以重点放在压缩、裁剪、去重和时效性上。而这一节谈的“结构化会话记忆”关注的是历史在存储阶段的结构。这里的问题变成了随着时间推移Agent 会把什么内容保留下来作为持久记录重点在于运行时会维护一份更完整的转录作为持久状态同时再维护一层更轻量的记忆这层记忆更小会不断被修改和压缩而不是只是单纯往后追加。总结一下编程 Agent 至少会把状态拆成两层工作记忆working memoryAgent 显式维护的精简状态完整转录full transcript覆盖所有用户请求、工具输出和 LLM 响应图 11图 11新事件会被追加到完整转录中同时被总结进工作记忆。磁盘上的会话文件通常会以 JSON 文件形式保存。上图展示了两个主要的会话文件完整转录和工作记忆它们通常会以 JSON 文件的形式保存在磁盘上。如前所述完整转录保存的是全部历史因此即使关闭 Agent之后也可以恢复。工作记忆则更像一份提炼过的版本只保留当前最重要的信息它与紧凑转录有关但两者并不完全相同。不过紧凑转录和工作记忆的职责还是略有不同。紧凑转录是为提示重建服务的它的职责是给模型提供一个压缩过的近期历史视图让模型在每一轮都不需要看到完整转录也能继续对话。工作记忆则更偏向任务连续性它的职责是跨轮次维护一份小而精的、显式管理的摘要其中包含当前任务、重要文件、近期笔记等内容。按照上图中步骤 4 的描述最新的用户请求以及对应的 LLM 响应和工具输出会在下一轮中作为“新事件”被记录下来并同时写入完整转录和工作记忆。为了避免图里过于拥挤这一步没有画出来。6委派与受约束的子 Agent一旦 Agent 具备了工具和状态接下来一个很有用的能力就是委派delegation。原因在于它允许我们借助子 Agent把一部分工作并行拆成子任务从而加快主任务的推进。比如主 Agent 正在处理一个任务但中途还需要某个旁支答案例如哪个文件定义了某个符号、某个配置文件里写了什么、或者某个测试为什么会失败。把这些问题拆到一个受约束的子任务里往往比强迫同一个循环同时背负所有工作线程要好得多。在我的 Mini Coding Agent 里这部分实现更简单子 Agent 仍然是同步运行的但底层思路是一样的。子 Agent 只有在继承了足够上下文的前提下才真正有用。但如果不给它加限制就很容易出现多个 Agent 重复劳动、同时修改同一个文件、甚至继续生成更多子 Agent 等问题。所以真正棘手的设计问题不只是“怎么生成子 Agent”还包括“怎么把它约束住”。图 12图 12子 Agent 会继承足够完成任务的上下文但它运行在比主 Agent 更严格的边界之内。这里的关键技巧在于子 Agent 要继承足够的上下文才能真正完成任务但与此同时它也必须受到约束比如运行在只读模式下或者限制递归深度。Claude Code 很早就支持子 Agent而 Codex 则是后来才加入这一能力。Codex 通常不会强制子 Agent 进入只读模式相反它们往往会继承主 Agent 的大部分沙盒和审批设置。所以这里所谓的边界更多是通过任务范围、上下文和递归深度来体现的。上面这些小节试图覆盖编程 Agent 的主要组件。正如前面提到的它们在实现里往往是深度交织在一起的。不过我还是希望这样逐一拆开讲能帮助大家建立起一个关于编程 Harness 如何工作的整体心智模型也更容易理解为什么它们能让 LLM 比简单的多轮聊天有用得多。图 13图 13前面各节讨论的 Coding Harness 的六个主要特性。如果你想看看这些机制是如何用干净、极简的 Python 代码实现出来的可以去看看我的 Mini Coding Agent。OpenClaw 可能是一个很有意思的对照对象但它和这里讨论的系统并不完全是同一类东西。OpenClaw 更像是一个本地的通用 Agent 平台它也能做编码但并不是一个专门面向终端场景的编程助手。不过它和 Coding Harness 之间仍然有不少重叠点使用工作区中的提示与指令文件比如 AGENTS.md、SOUL.md 和 TOOLS.md保存 JSONL 会话文件并包含转录压缩与会话管理可以生成辅助会话和子 Agent等等不过正如前面所说两者的侧重点并不一样。编程 Agent 优化的对象是在代码仓库中工作、需要编程助手高效检查文件、编辑代码和运行本地工具的人而 OpenClaw 更偏向于在聊天、频道和工作空间中运行多个长期存活的本地 Agent编码只是它众多重要工作负载中的一项。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关文章:

Sebastian Raschka 手把手拆解编程 Agent:从模型到 Harness 的完整设计

这篇文章想讨论的是编程 Agent(Coding Agent)和 Agent Harness 的整体设计:它们是什么、如何运作,以及各个部分在实践中是怎样组合起来的。 读过我《Build a Large Language Model (From Scratch)》和《Build a Large Reasoning …...

OpenRAG: 企业级 RAG 平台的终极解决方案

引言: 当知识管理遇上 AI 革命 在这个信息爆炸的时代,企业和个人每天都在产生海量的文档、报告、邮件和知识资产。然而,一个残酷的现实是:90% 的企业知识被困在 PDF、Word 文档和各种云存储中,无法被有效检索和利用。 想象一下这样的场景:你急需找到三个月前某次会议的决策依…...

用 OpenClaw 构建个人知识库:从几百字到 10 万字,让 AI 真正懂你

为什么只有聊天记录还不够? 最近很多人都在用 OpenClaw,都在说”它是我的私人助手”。 甚至有人做了一个开源项目(https://github.com/titanwings/colleague-skill),可以导入前同事的聊天记录,生成对应的 S…...

揭开 AI Agent Harness Engineering 的神秘面纱:从概念到核心技术解析

揭开 AI Agent Harness Engineering 的神秘面纱:从概念到核心技术解析 副标题:从零搭建智能体的「操作系统」,让大模型从「会聊天」变「会干活」 关键词 AI Agent、Harness Engineering、智能体编排、大模型应用框架、工具调用管控、Agent运行时、Prompt Engineering进阶…...

Docker容器在产线崩溃的7种隐性原因:从cgroup泄漏到时钟漂移,一文定位真凶

第一章:Docker容器在产线崩溃的7种隐性原因:从cgroup泄漏到时钟漂移,一文定位真凶生产环境中,Docker容器看似“一键启停”,实则深藏七类不易察觉的崩溃诱因。它们不触发明显错误日志,却在高负载、长周期运行…...

生产环境已全面切换!Docker 27监控增强配置落地指南:从零部署27项增强指标采集链路,含Grafana 11.2仪表盘一键导入包

第一章:Docker 27监控增强配置全景概览Docker 27 引入了原生、轻量级的运行时监控增强机制,通过深度集成 cgroups v2、eBPF 和 Prometheus 兼容指标端点,显著提升容器资源可见性与故障定位效率。该版本默认启用 docker stats 的低开销采样模式…...

从日志里揪出WebShell:手把手教你用D盾和河马分析Apache/Nginx访问日志(附排查脚本)

从日志中狩猎WebShell:Apache/Nginx异常访问模式深度解析与实战对抗 当服务器CPU莫名飙高、网站首页出现陌生跳转链接或是深夜突然出现异常文件上传记录时,有经验的运维工程师会立即意识到——这很可能是WebShell活动的征兆。不同于传统的病毒或木马&…...

别再只盯着加密算法了!聊聊GM/T 0054标准里密钥生命周期的8个关键环节(附实操建议)

密钥生命周期管理的工程实践:从GM/T 0054标准到落地实施 在密码应用系统的开发与运维中,密钥管理往往被视为"后台"功能而草率实现,直到安全事件发生才追悔莫及。GM/T 0054标准虽明确了密钥生命周期的理论框架,但如何将其…...

别再让笔记本在包里‘发烧’了!手把手教你将Windows 11的Modern Standby改回传统S3睡眠

拯救发热的笔记本:Windows 11睡眠模式终极优化指南 你是否经历过这样的场景:合上笔记本放进包里,几小时后取出时发现机身滚烫,电量耗尽,甚至系统卡死需要强制重启?这很可能要归咎于Windows 11默认采用的Mod…...

富士胶片ApeosPort 3410SD网络扫描配置踩坑实录:从共享文件夹到SMB协议,保姆级避坑指南

富士胶片ApeosPort 3410SD网络扫描配置实战:共享文件夹与SMB协议深度解析 办公室里那台新到的富士胶片ApeosPort 3410SD激光一体机静静地闪着蓝灯,看起来人畜无害——直到你尝试配置它的网络扫描功能。作为一款面向中小企业和SOHO用户的高性价比设备&…...

别再只会用Excel了!用Prism做One-Way ANOVA,从数据到图表5分钟搞定

科研数据分析革命:5分钟用Prism完成One-Way ANOVA全流程 还在为论文里的统计图表熬夜调整格式?每次看到Excel生成的柱状图总觉得少了点"学术气质"?作为经历过无数次数据折磨的科研人,我完全理解这种痛苦。直到遇见Prism…...

别再手动维护省市区数据了!Vue项目里用element-china-area-data插件5分钟搞定三级联动

Vue项目中的省市区三级联动:用element-china-area-data插件实现高效开发 每次项目需要集成省市区选择功能时,你是否还在为手动维护行政区划数据而头疼?从数据采集到格式转换,再到定期更新,整个过程既耗时又容易出错。现…...

智能家居项目翻车实录:聊聊嵌入式IoT开发中那些容易踩的坑(附避坑指南)

智能家居开发实战:嵌入式IoT项目避坑指南 去年我接手了一个智能家居中控系统的开发项目,原本以为凭借多年的嵌入式开发经验能够轻松搞定,结果却遭遇了各种意想不到的问题——设备频繁离线、传感器数据延迟、OTA升级失败……这些问题不仅让项目…...

别再为噪声头疼了!用MATLAB实现加权最小二乘相位解包裹(附残点计算代码)

噪声干扰下的相位解包裹实战:MATLAB加权最小二乘法全解析 光学测量和雷达干涉领域的研究者常遇到一个棘手问题——噪声导致的相位解包裹失败。传统最小二乘法在干净数据上表现良好,但现实中采集的相位图往往充满噪声,这时就需要引入加权最小二…...

别再死记硬背!从‘寻宝大冒险’题解看CCF-CSP第二题常见的暴力破解与优化边界

从‘寻宝大冒险’题解拆解CCF-CSP第二题的暴力美学与优化哲学 当你在CCF-CSP考场上面对第二题时,是否经常陷入"该暴力还是优化"的决策困境?2022年6月的"寻宝!大冒险!"这道题给出了一个经典案例——数据范围S≤…...

YOLO26最新创新改进系列:融合YOLOv9下采样机制ADown,强强联合!扩大YOLO网络模型感受野,降低过拟合,让小目标无处可遁!检测精度再提新高!!

YOLO26最新创新改进系列:融合YOLOv9下采样机制ADown,强强联合!扩大YOLO网络模型感受野,降低过拟合,让小目标无处可遁!检测精度再提新高!! 购买相关资料后畅享一对一答疑!…...

Windows 11终极优化指南:使用Win11Debloat脚本免费提升系统性能40%

Windows 11终极优化指南:使用Win11Debloat脚本免费提升系统性能40% 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to decl…...

YOLO26最新创新改进系列:(粉丝反馈涨点模型TOP3)融合轻量级网络Ghostnet(幽灵卷积or幻影卷积),实测参数量降低!轻量化水文小神器!

YOLO26最新创新改进系列:(粉丝反馈涨点模型TOP3)融合轻量级网络Ghostnet(幽灵卷积or幻影卷积),实测参数量降低!轻量化水文小神器! 购买相关资料后畅享一对一答疑! 畅享超多免费持续更新且可大…...

终极塞尔达旷野之息存档修改器:5分钟掌握免费图形化编辑技巧

终极塞尔达旷野之息存档修改器:5分钟掌握免费图形化编辑技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 你是否曾经在《塞尔达传说:旷野…...

FPGA新手避坑指南:编码器/译码器仿真波形老不对?检查这5个ModelSim设置细节

FPGA新手避坑指南:编码器/译码器仿真波形老不对?检查这5个ModelSim设置细节 刚接触FPGA开发的朋友们,是否经常遇到这样的场景:你按照教程一字不差地敲完了8-3编码器或3-8译码器的Verilog代码,满心期待地在ModelSim中运…...

Windows Subsystem for Android 完全指南:在 Windows 11 上畅享 Android 应用生态

Windows Subsystem for Android 完全指南:在 Windows 11 上畅享 Android 应用生态 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 你是否曾经想过…...

从‘天书’到‘白话’:一个药学专业玩家如何逆向工程墨水屏LUT并调整局刷参数

从‘天书’到‘白话’:一个药学专业玩家如何逆向工程墨水屏LUT并调整局刷参数 墨水屏技术因其低功耗特性在电子价签、阅读器等场景广泛应用,但驱动芯片的底层参数配置常让非电子专业开发者望而生畏。当规格书中的术语如同密码,而开源代码中的…...

为什么你的Keil工程总是报GCC pragma错误?深入解析arm_math.h与编译器兼容性问题

为什么你的Keil工程总是报GCC pragma错误?深入解析arm_math.h与编译器兼容性问题 当你在Keil MDK环境下开发STM32项目时,是否曾在编译过程中遭遇过这样的警告信息? ..\CORE\arm_math.h(293): warning: #2803-D: unrecognized GCC pragma #pra…...

Vant动态表单封装实战:从零构建可配置的VForm组件

1. 为什么需要封装Vant动态表单组件 在移动端开发中,表单是最常见的交互场景之一。我做过一个统计,在典型的B端应用中,表单页面占比超过60%。但每次遇到需要收集用户信息的场景,都让我头疼不已 - 特别是当表单字段多达几十个&…...

好写作AI:科研绘图的“学术导航仪”,专治“做了研究却画不出来”

“老师,我研究做了半年,数据也有了,结果也挺有意思的,但要把这些东西画成论文里的图,我连从哪里开始都不知道。” 这样的私信,我每个月至少收到十几条。很多人以为科研绘图的核心问题是“不会画”&#xf…...

芯驰E3-gateway开发板Windows环境搭建保姆级教程(含IAR配置与常见坑点)

芯驰E3-gateway开发板Windows环境搭建全流程解析与实战避坑指南 拿到芯驰E3-gateway开发板的第一天,我对着官方文档折腾了整整8小时——环境变量报错、IAR工程无法生成、烧录后芯片不响应...这些坑几乎让项目还没开始就濒临放弃。如果你也正在经历这种痛苦&#xf…...

RS485通信冲突?手把手教你用C语言实现一个简单的“软件仲裁”驱动库

RS485通信冲突的软件仲裁解决方案:从原理到C语言实现 在工业自动化、智能楼宇等场景中,RS485总线因其抗干扰能力强、传输距离远等优势被广泛应用。但当多个设备同时尝试发送数据时,总线冲突问题便成为工程师们头疼的难题。与CAN总线不同&…...

Vant动态表单封装实战:从零构建可配置化VForm组件

1. 为什么需要封装Vant动态表单组件 在移动端开发中,表单是最常见的交互元素之一。我做过一个社区健康调查项目,需要收集居民的家庭信息、健康状况等数据,整个应用包含5个Tab页,每个Tab下都有7-8个表单字段。如果直接用Vant的Fiel…...

第一个FastAPI应用:从Hello World到完整接口

003、第一个FastAPI应用:从Hello World到完整接口 一、调试台前的困惑 昨天隔壁组的小王跑过来问:“FastAPI 文档里跑起来明明显示 http://127.0.0.1:8000,为什么我手机连同一个Wi-Fi就是访问不了?” 这个问题太典型了——很多工程师第一个坎不是语法,而是“服务到底跑在…...

Ubuntu 20.04开发踩坑记:系统自带OpenSSL为啥编译总报错?手把手教你用libssl-dev搞定

Ubuntu 20.04开发实战:解密OpenSSL开发环境配置的底层逻辑 刚接触Linux开发的程序员们,是否曾在Ubuntu上编写网络或加密相关代码时,遭遇过这样的场景:系统明明能正常使用openssl命令,但编译时却疯狂报错"找不到op…...