1. 从单模型到多代理为什么“组织化”是必然一步大语言模型LLM这两年从实验室走到大众视野速度之快让很多做传统软件的人措手不及。但如果你真正拿它做过稍微复杂一点的事情就会发现一个尴尬的现实单个模型再强也像一个记忆力超群但只会单线程工作的实习生。你让它写代码它写得不错你让它同时查资料、写代码、跑测试、改bug它就开始顾此失彼。这不是模型能力不够而是架构范式的问题。“从大语言模型到组织化 AI 代理”这个标题说的正是这个转折点。它不是在讨论某个具体模型又刷新了榜单而是在讨论一种系统设计思路的迁移把 LLM 从“一个被调用的函数”变成“一个组织里的核心成员”让它和工具、记忆、其他代理协同工作。这个转变背后涉及的技术栈包括 Transformer 架构、RLHF基于人类反馈的强化学习、SFT监督微调以及代理编排、工具调用、记忆管理等工程实践。这篇文章适合谁看如果你已经跑过几个 LLM 的 API尝试过写 prompt 让模型做多步任务但总觉得“差一口气”——任务一长就乱、工具一多就崩、状态一复杂就忘——那这篇就是写给你的。我会从架构选型的逻辑讲起拆解组织化代理的核心组件给出可落地的实操方案最后分享我在实际搭建中踩过的坑和排查技巧。全文基于常见工程实践展开不涉及任何特定平台的绑定。2. 核心思路拆解为什么单模型撑不起复杂任务2.1 单模型范式的三个硬伤先说说为什么“一个模型打天下”的思路在复杂场景下会失效。我总结下来主要是三个问题。第一是上下文窗口的物理限制。不管你用的是 8K、32K 还是 128K 的上下文它终究是有限的。当你让模型处理一个需要查阅十几份文档、调用五六个工具、维护多轮状态的任务时把所有信息塞进一个 prompt 里要么超长被截断要么模型在长上下文里“迷失中间”——这是有实证研究支持的现象模型对上下文中间部分的信息召回率明显低于开头和结尾。第二是单线程推理的串行瓶颈。Transformer 的解码是自回归的一个 token 一个 token 往外蹦。你让它先分析需求、再查资料、再写代码、再验证它只能一步一步来。但真实任务里查资料和写代码框架这两件事完全可以并行。单模型架构下这种并行性被浪费了。第三是能力耦合导致的“灾难性干扰”。当你用 SFT 把一个模型微调成“既能写诗又能算账还能调 API”的全能选手时不同任务的数据会互相干扰。RLHF 阶段更是如此人类偏好数据里如果混合了多种任务类型奖励模型很难学出一个对所有任务都友好的统一信号。结果就是模型在每个单项上都不差但组合起来就平庸。2.2 组织化代理的核心设计哲学组织化 AI 代理的思路本质上是分而治之加专业化协作。它不再追求一个模型解决所有问题而是设计一个系统里面有不同的角色有的负责规划有的负责执行有的负责审查有的负责记忆。这些角色可以由同一个底层模型扮演也可以由不同模型甚至不同规模的模型分别担任。这个思路借鉴了人类组织的运作方式。一个公司不会让一个人同时做战略、执行、质检和档案管理而是分成不同部门通过流程和协议协作。AI 代理系统也一样规划代理负责把大任务拆成子任务执行代理负责调用工具完成具体操作审查代理负责检查结果质量记忆模块负责存储和检索历史信息。这样做的好处很明显。每个代理的 prompt 可以更专注上下文更短推理更稳定。执行代理可以并行跑多个实例规划代理可以专注于任务分解而不被具体执行细节干扰。审查代理可以用不同的模型甚至不同的提示策略形成交叉验证。2.3 技术选型背后的权衡在实际搭建时你会面临几个关键选择。底层模型用哪个代理之间怎么通信记忆用什么存储工具怎么注册和调用底层模型的选择上我的经验是规划用强模型执行用快模型审查用中等模型。规划任务对推理能力要求最高值得用最大的模型执行任务往往有明确的输入输出格式小模型微调后完全够用而且速度快、成本低审查任务需要一定的判断力但不需要太强的生成能力中等模型性价比最高。代理间通信有两种主流模式消息传递和共享状态。消息传递像 Actor 模型每个代理有自己的收件箱通过发消息协作共享状态像黑板模式所有代理读写同一个状态存储。前者解耦更彻底后者实现更简单。我一般推荐从共享状态开始因为调试直观等系统复杂了再考虑消息传递。记忆模块的选择取决于任务类型。短期记忆用对话历史加滑动窗口就够了长期记忆需要向量数据库做语义检索如果涉及结构化知识图数据库可能更合适。这里的关键是记忆的写入和读取策略而不是存储技术本身。3. 核心组件深度解析与实操要点3.1 Transformer 作为代理的“大脑”不管你的代理系统怎么设计底层大概率还是 Transformer。理解它的工作原理对调试代理行为至关重要。Transformer 的核心是自注意力机制。简单说它让每个 token 都能“看到”序列里其他所有 token并计算一个注意力权重决定从每个位置吸收多少信息。这个机制的数学表达是 softmax(QK^T/√d)V其中 Q、K、V 分别是查询、键、值矩阵。除以 √d 是为了防止点积过大导致 softmax 梯度消失。为什么这很重要因为当你设计代理的 prompt 时你实际上是在构造 Transformer 的输入序列。注意力权重的分布决定了模型“关注”什么。如果你把关键指令放在长 prompt 的中间模型很可能注意不到。这就是为什么我强烈建议把最重要的指令放在 prompt 的开头和结尾中间放参考材料。位置编码是另一个关键点。Transformer 本身没有顺序概念全靠位置编码注入顺序信息。原始论文用的是正弦余弦编码后来发展出可学习的位置嵌入、相对位置编码、旋转位置编码RoPE等。RoPE 现在是大模型的主流选择因为它能更好地外推到训练时没见过的序列长度。这对代理系统很重要你的任务描述可能比训练数据长位置编码的外推能力直接影响模型在长任务上的表现。实操中有一个容易忽略的点Transformer 的层数和头数决定了它的“推理深度”和“并行广度”。层数越多模型能做的串行推理步骤越多头数越多模型能同时关注的不同模式越多。当你发现代理在复杂规划任务上表现不佳时换一个层数更多的模型往往比换一个头数更多的模型更有效。3.2 SFT 与 RLHF让模型“听话”的两个阶段SFT监督微调和 RLHF基于人类反馈的强化学习是让基础模型变成可用代理的关键步骤。很多人分不清两者的区别和适用场景这里说清楚。SFT 是“教模型怎么做”。你准备一批高质量的输入输出对比如“用户问帮我查一下明天北京的天气。助手答调用天气查询工具参数为城市北京日期明天。”模型通过最大化对数似然来学习这些示范。SFT 的效果取决于数据质量而不是数量。一千条精心构造的代理行为示范比十万条噪声数据有用得多。RLHF 是“教模型怎么选”。当模型有多个可能的输出时人类标注者告诉它哪个更好。训练一个奖励模型来预测人类偏好然后用强化学习通常是 PPO优化语言模型让它生成奖励模型打分更高的输出。RLHF 解决的是 SFT 无法覆盖的“微妙偏好”问题比如回答的简洁程度、语气、安全性。在代理系统里SFT 和 RLHF 的分工很明确。SFT 用来教模型工具调用的格式、任务分解的模板、错误处理的模式。这些是确定性的行为有标准答案。RLHF 用来教模型在模糊情况下的取舍比如当用户指令不完整时是追问还是猜测当工具返回错误时是重试还是换方案。实操心得如果你要微调一个代理模型先做 SFT 再做 RLHF但不要跳过 SFT 直接做 RLHF。我试过在基础模型上直接跑 RLHF结果模型学会了“讨好”奖励模型但完全不会调工具因为工具调用的格式在 RLHF 的偏好数据里很难被充分覆盖。SFT 先把格式教会RLHF 再优化决策这个顺序不能乱。3.3 代理编排从“调用”到“协作”代理编排是组织化 AI 代理的核心工程问题。它要解决的是多个代理怎么分工、怎么通信、怎么处理冲突、怎么保证整体目标一致。我常用的编排模式有三种。第一种是流水线模式任务按固定顺序经过规划、执行、审查三个阶段。简单可靠适合流程固定的场景。第二种是黑板模式所有代理共享一个状态存储谁有需要就读写。灵活但容易乱需要设计好状态的结构和访问控制。第三种是市场模式任务被分解成子任务后“挂”出来代理们“竞标”执行。这个最灵活但实现复杂度最高一般用在大规模异构代理系统里。对于大多数团队我建议从流水线模式开始。它的调试成本最低每个阶段的输入输出都清晰。等业务复杂到流水线不够用了再演进到黑板模式。编排中一个关键细节是超时和重试策略。代理调用工具时工具可能超时代理调用另一个代理时对方可能卡住。你必须为每个调用设置超时并定义重试逻辑。我的经验值是工具调用超时设 30 秒代理间调用超时设 60 秒重试最多 2 次且重试时要修改参数或换策略不能原样重试。3.4 工具调用与函数注册的工程细节工具调用是代理从“聊天”变成“做事”的关键。实现上你需要一个工具注册表每个工具包含名称、描述、参数 schema 和执行函数。这里有一个容易被低估的问题工具描述的质量直接决定代理的调用准确率。我见过太多团队把工具描述写成“查询天气”结果模型不知道该传什么参数。好的工具描述应该包含工具做什么、什么时候用、每个参数的含义和格式、返回值的结构、可能的错误。举个例子一个天气查询工具的描述应该像这样{ name: get_weather, description: 查询指定城市指定日期的天气。当用户询问天气相关问题时使用。如果用户没有指定日期默认查询今天。, parameters: { city: {type: string, description: 城市名称如北京、上海}, date: {type: string, description: 日期格式YYYY-MM-DD默认为今天} }, returns: { temperature: 温度摄氏度, condition: 天气状况如晴、多云, humidity: 湿度百分比 } }参数 schema 用 JSON Schema 定义这样模型能准确理解每个参数的类型和约束。返回值结构也要描述清楚这样模型知道怎么解析工具的输出。另一个实操要点是工具调用的错误处理。工具可能因为网络问题、参数错误、权限不足等原因失败。代理需要能区分这些错误类型并采取不同策略参数错误就修正参数重试网络错误就等待后重试权限错误就报告给用户。我在系统里给每个工具定义了标准错误码代理根据错误码决定下一步动作。4. 完整实操搭建一个最小可用的组织化代理系统4.1 环境准备与基础架构先说明下面的方案是基于常见工程实践的参考实现不绑定任何特定云平台或商业产品。你需要准备的东西包括一个能调用 LLM API 的环境本地或云端均可、一个向量数据库用于记忆、一个消息队列或状态存储用于代理通信。我用的技术栈是 Python FastAPI 做服务层Redis 做短期记忆和消息队列Chroma 或 Qdrant 做长期记忆的向量存储。底层模型可以根据你的算力情况选择规划代理用大模型执行代理用小模型。目录结构建议这样组织agent_system/ agents/ planner.py executor.py reviewer.py tools/ registry.py weather.py search.py memory/ short_term.py long_term.py orchestrator/ pipeline.py config/ settings.yaml每个代理是一个独立的类实现run(task, context)方法。工具在注册表里注册代理通过名称调用。记忆模块提供store和retrieve接口。编排器负责按流程调用代理。4.2 规划代理的实现要点规划代理的任务是把用户请求拆解成可执行的子任务序列。它的 prompt 设计是关键。我的规划代理 prompt 模板大致是这样的你是一个任务规划专家。用户会给你一个复杂请求你需要把它拆解成一系列子任务。 每个子任务必须满足1) 可以由单个工具调用或单个代理完成2) 有明确的输入和输出3) 子任务之间有清晰的依赖关系。 可用工具列表 {tools_description} 请以 JSON 格式输出任务计划包含 tasks 数组每个 task 有 id、description、tool、depends_on 字段。 用户请求{user_request}这里有几个细节。第一工具列表要动态注入这样规划代理知道当前系统有哪些能力。第二输出格式要严格约束用 JSON Schema 验证解析失败就重试。第三依赖关系要显式声明这样编排器知道哪些任务可以并行。规划代理的模型选择上我强烈建议用你预算内最强的模型。规划质量直接决定整个系统的上限。一个糟糕的计划执行代理再强也救不回来。4.3 执行代理的工具调用循环执行代理拿到一个子任务后进入“思考-行动-观察”循环。它先分析任务需要什么工具然后调用工具观察结果判断是否完成没完成就继续。这个循环的伪代码def execute(task, context): max_steps 10 for step in range(max_steps): thought llm.generate(f任务{task}\n历史{context}\n下一步做什么) if thought.is_final_answer: return thought.answer tool_call parse_tool_call(thought) result tools.call(tool_call.name, tool_call.params) context.append({tool: tool_call.name, result: result}) return 任务超时未完成关键参数是max_steps。设太小复杂任务完不成设太大模型可能陷入死循环。我的经验值是 10 到 15 步。超过这个步数还没完成大概率是任务分解有问题或者工具能力不足应该返回给规划代理重新规划。执行代理的模型可以用小一点的因为它的任务相对确定。但工具调用的格式准确性很重要所以 SFT 阶段要重点训练这个。4.4 审查代理与质量闭环审查代理负责检查执行结果是否满足任务要求。它的 prompt 要包含原始任务描述、执行过程和最终结果。审查代理的输出应该是结构化的通过或不通过不通过的话给出具体原因和修改建议。如果审查不通过编排器可以把任务打回给执行代理重做或者打回给规划代理重新规划。这里有一个设计选择审查代理用同一个模型还是不同模型我倾向于用不同模型最好是不同厂商的模型。因为同一个模型的盲区是相似的它可能漏掉自己生成内容里的错误。用不同模型做交叉审查能发现更多问题。审查代理的另一个作用是积累反馈数据。每次审查不通过的原因都是宝贵的训练数据。你可以定期把这些数据整理成 SFT 样本用来微调执行代理形成质量闭环。4.5 记忆模块的读写策略记忆模块分短期和长期。短期记忆就是当前任务的对话历史和中间状态用 Redis 存储设置 TTL。长期记忆是跨任务的知识用向量数据库存储。写入策略上我建议只存有价值的信息用户的偏好、任务的最终结果、审查发现的常见错误模式。不要把每一步的中间状态都存进去那样检索时会引入大量噪声。读取策略上用语义检索加时间衰减。检索时不仅看语义相似度还看记忆的新旧程度。太旧的记忆权重降低因为环境和需求可能已经变了。一个实操技巧给记忆打标签。比如“用户偏好”“工具使用经验”“错误模式”等。检索时可以按标签过滤提高精准度。5. 常见问题与排查技巧实录5.1 代理“胡言乱语”不调工具怎么办这是最常见的问题。代理在应该调用工具的时候直接编了一个答案。原因通常是工具描述不够清晰或者 SFT 数据里工具调用的示范不够。排查步骤先检查工具描述是否包含了“什么时候用”的说明。然后检查 SFT 数据里工具调用的比例如果低于 30%模型很难学会优先调工具。最后检查 prompt 里是否有“如果不知道就调用工具查询”的明确指令。我的解决方法是在 SFT 数据里加入大量“不知道就调工具”的示范并且在系统 prompt 里明确写“当你不确定答案时必须调用工具查询禁止编造。”5.2 多代理之间“踢皮球”怎么破规划代理把任务给执行代理执行代理说“这不该我做”又退回给规划代理规划代理重新规划后又给执行代理循环往复。这个问题根源是职责边界不清晰。解决方法是在编排器里加一个“责任链”机制每个任务必须有一个明确的负责代理如果该代理拒绝执行必须给出具体理由且该理由要能被规划代理理解并调整计划。同时设置最大退回次数超过就升级给人工处理。5.3 工具调用参数格式错误的排查模型生成的工具调用参数经常格式不对比如日期格式写成“明天”而不是“2025-01-15”或者数字写成字符串。排查时先看工具 schema 是否足够明确。JSON Schema 里要写清楚format和pattern。然后在执行代理的 prompt 里加入参数格式的示例。最后可以在工具调用前加一个参数校验层格式不对就返回错误信息让模型修正。我常用的参数校验用 Pydantic 做定义好模型后自动校验和转换。这样即使模型输出“明天”Pydantic 也能尝试解析成日期解析失败就返回明确的错误信息。5.4 长任务中代理“忘记”目标任务步骤一多代理就忘了最初的目标是什么。这是上下文窗口限制导致的。解决方法有三层。第一层是状态摘要每完成几个步骤就让代理生成一个当前状态和剩余目标的摘要替换掉详细的历史记录。第二层是目标重述在每个子任务的 prompt 里都重新注入原始目标。第三层是外部记忆把关键状态存到外部存储需要时检索回来。我实测下来状态摘要加目标重述的组合最有效能显著降低长任务中的目标漂移。5.5 常见问题速查表问题现象可能原因排查方向解决措施代理不调工具直接编答案工具描述不清、SFT数据不足检查工具描述和SFT比例补充“不知道就调工具”示范多代理循环退回职责边界不清检查任务分配逻辑加责任链和最大退回次数工具参数格式错误schema不明确检查JSON Schema加Pydantic校验层长任务目标漂移上下文超限检查历史长度状态摘要目标重述审查代理漏检同模型盲区检查审查模型换不同厂商模型交叉审查执行代理死循环max_steps过大检查步数设置限制10-15步超时重规划6. 从能跑到好用几个进阶优化方向6.1 代理的并行化执行当任务计划里有多个无依赖的子任务时可以并行执行。实现上编排器解析依赖图把入度为 0 的任务同时分发给多个执行代理实例。每个实例独立运行结果汇总后再触发下游任务。并行化的收益在 I/O 密集型任务上特别明显。比如同时查询多个数据源串行可能要 30 秒并行只要 5 秒。但要注意并发控制避免同时调用同一个工具有速率限制。6.2 基于反馈的持续微调系统跑起来后审查代理的反馈、用户的修正、工具调用的成功率都是宝贵的训练数据。定期把这些数据整理成 SFT 样本微调执行代理和规划代理系统会越用越顺手。我的做法是每周跑一次数据整理脚本把审查不通过的案例、用户手动修正的案例、工具调用失败的案例提取出来人工审核后加入训练集。这样迭代几轮后代理的准确率会有明显提升。6.3 成本与延迟的平衡组织化代理系统的成本主要来自 LLM 调用。规划代理用大模型执行代理用小模型审查代理用中等模型这个分层策略能显著降低成本。延迟方面并行化是最大的优化手段。另外执行代理的 max_steps 不要设太大大部分任务 5 步内应该完成。如果经常超过 5 步说明规划质量有问题应该优化规划代理而不是增加步数。我在实际项目里的体会是组织化代理系统的瓶颈往往不在模型能力而在工程细节。工具描述写清楚、参数校验做严格、错误处理做完善这些看似琐碎的工作对系统整体表现的影响比换一个更强的模型大得多。踩过几次坑之后我现在搭建新系统时会先把工具注册和参数校验的框架搭好再接入模型这样后续调试会顺畅很多。
企业数字化 ERP 产品动态
相关推荐
雅思词汇真经:语义网络+真题词频驱动的高效背词法 简介:本资源是专为雅思备考者打造的词汇核心学习资料——《雅思词汇真经》,由雅思培训界权威名师刘洪波编写,系统覆盖雅思考试高频、常考及易混淆词汇,兼顾词义辨析、搭配用法与真题语境应用,有效解决考生词汇记忆碎片… · 2026/11/3 7:31:58
Scratch条件执行语句全解析:布尔逻辑、嵌套与实战避坑 很多人带初学者学 Scratch,前面几节课都很顺:角色会动、会说话、会换造型,孩子兴奋得不行。可一旦讲到控制模块里的条件执行语句,进度就会突然卡住。原因不复杂——在此之前,所有脚本都是“从上到下一条条跑完”的直线… · 2026/11/3 7:31:58
PHP数组取值全解析:从基础下标到高效批量提取的实战指南 数组取值这件事,说它是PHP里最基础的操作一点都不为过,但真要把它讲透,反而比很多花哨的功能更考验功底。我见过太多项目里因为取值方式选错,导致代码可读性崩塌、性能悄悄劣化,甚至埋下难以排查的隐性bug。这篇内容就… · 2026/11/3 8:36:28
PHP数组取值全解析:从基础到进阶的实战指南 PHP 数组取值这件事,说简单也简单,$arr[key]谁都会写;说复杂也复杂,我见过太多项目里因为取值方式选错,导致代码可读性崩塌、性能悄悄劣化,甚至埋下难以排查的 bug。这篇内容就围绕"从数组里取出想要的… · 2026/11/3 8:36:28
文科生如何零基础转行网络安全:路径与技巧 1. 为什么文科生也能学网络安全? 很多人认为网络安全是理科生的专属领域,需要深厚的计算机基础才能入门。这种刻板印象让不少对网络安全感兴趣的文科生望而却步。但实际情况是,网络安全领域需要多元化的思维方式和知识背景。
1.1 网络安全行… · 2026/11/3 8:36:28
AI三线共振:安理会限速、真武V900芯片与Gemini 4泄题背后的行业拐点 1. 三条热搜背后,藏着同一件事2026年9月23日这一天,AI圈的信息密度高得有点离谱。早上刷到安理会就AI"限速"议题召开听证会的消息,中午云栖大会上真武V900芯片实物亮相,下午Gemini 4的"幽灵模型"泄题事件又在… · 2026/11/3 8:36:28
网络安全转型路径与技能树构建指南 1. 网络安全行业转型路径全景解析 2026年的网络安全领域正在经历一场深刻变革,随着企业数字化转型加速和新型威胁不断涌现,行业对专业人才的需求呈现出明显的结构性分化。最近半年我面试了47位来自不同背景的转行者,发现很多人对"做安全… · 2026/11/3 8:36:28
UAT验收测试报告模板:质量闭环与风险量化实战指南 简介:本资源是一份标准化、可直接套用的UAT验收测试报告模板(V1.0),面向软件测试工程师、QA负责人、项目经理及参与系统交付的业务方人员,解决验收阶段缺乏规范文档框架、内容覆盖不全、结论表述模糊等实际问题。模板严… · 2026/11/3 8:35:26
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46