AI 长回复没法逐段批注?开源划词引用与行内评论胶囊插件实战(已获官方收录)

SqlSugar 是 .NET 开源的 ORM 框架,由 Fructose 大数据技术团队维护和更新,开箱即用最易用的 ORM 低代码 高性能 超级简单 功能全面 [多数据库兼容] SqlSugar 是 .NET 开源的 ORM 框架,由 Fructose 大数据技术团队维护和更新,开箱即用最易用的 ORM。[低代码] [高性能] [超级简单] [功能全面] [多数据库兼容] [合适产品]。支持.NET.net framework.net core3.1.ne5.net6.net7.net8 .net9 .net10。支持数据库 MySql、SqlServer、Sqlite、Oracle、postgresql、达梦、Mongodb 人大金仓(国产推荐)、神通数据库、瀚高、Access DB2、DuckDb、Hana、OceanBase TDengine QuestDb Clickhouse MySqlConnector、华为 GaussDB 南大通用 GBase、MariaDB、Tidb、Odbc、Percona Server, Amazon Aurora、Azure Database for MySQL、 Google Cloud SQL for MySQL、自定义数据库。真正实现零SQL ORM表构建、索引和CRUD支持。Support.NET 数百万大数据写入、更新、子表,拥有数十亿查询统计数据成熟解决方案。支持SAAS完整应用:跨数据库查询、审计、租户子数据库、租户子表和租户数据隔离。支持低代码 + 工作流程(动态类构建、动态表构建、非实体多库兼容 CRUD、JSON TO SQL、CUSTOM XML 等)。支持 ValueObject、判别器、仓库、UnitOfWork、DbContext、AOP 立即下载

玄同 765

AI Engineer


  中国传媒大学 | 数字媒体技术(游戏设计技术方向)

  ▍深耕领域  AI Agent 架构设计 Agent Harness 工程 Context Engineering 多智能体协同 & RAG
  ▍技术底座  Python TypeScript · LangChain MCP & Skills · FastAPI Milvus Docker
  ▍工程能力  专注 Agent 运行时架构、长上下文与 Prompt Cache 优化、LLM 全链路评测与工程化落地

     

「 让 AI 交互更智能,让技术落地更高效 」   |   欢迎技术探讨 / 项目合作,关注解锁大模型与智能交互的无限可能!

AI 长回复没法逐段批注?开源划词引用与行内评论胶囊插件实战(已获官方收录)

📚 《DeepSeek Harness (DSH) 插件工程与 Agent 运行时实战》连载专栏

在日常使用 AI Coding Agent 进行长代码重构、架构方案审阅或复杂排障时,开发者经常面临一个高频交互痛点:当模型一次性输出了上百行代码或十几条技术建议时,如果你想针对其中 3~5 处细节分别提出修改意见,往往需要反复在消息流与底部输入框之间来回滚动、手动复制粘贴代码片段、手打 Markdown 引用符号,再逐条写下修改说明。

为了彻底消除这种「复制—滚动—粘贴—排版」的上下文切换损耗,我开源发布了 dsh-selection-quote v0.2.0(划词引用与行内评论胶囊插件),现已被 DeepSeek Harness 官方精选插件列表(awesome-dsh-plugin)正式收录。它将 划词右键菜单(拷贝 (Copy) / 添加到对话 ⌘L)、CSS.highlights 原文持续蓝色高亮、蓝色水滴序号角标(1、2…)+ 圆角胶囊评论框,以及 输入框与已发送消息的「💬 N 条注释」胶囊及悬浮详情卡片 无缝融合进原生会话界面中:

1. 官方收录与开源仓库地址(MIT 协议,开箱即用):

2. 读完本文你将彻底掌握以下 4 项核心工程能力:

  • 会话级 UI 插槽(Session-Scoped Slots)精准挂载:深入理解 @deepseek-ai/dsh-client-ui-conversation 提供的 "conversation.input.overlay" 与 "conversation.composer.dock" 两大原生插槽机制;
  • DOM 选区边界隔离与视口自适应翻转算法:如何精确识别当前会话消息流选区,自动排除底部 Composer 输入框自身选区,并在视口顶部边缘实现浮动胶囊条的自动翻转;
  • SessionInputShell 乐观并发草稿写入(CAS Insertion):如何调用 ctx.conversation.input.shell(sessionId) 的 captureInsertion() 与 insertText() 实现光标处无损注入与自动聚焦;
  • 多片段 PR Review 式批注队列与结构化提示词组装:如何用外部快照存储(createSnapshotStore)管理多条行内批注,并一键汇总为大模型最易精准理解的结构化指令。


一、为什么 AI 对话界面急需「PR Review 式划词批注」?(原理拆解篇)

1.1 从一个生活中的比喻说起:对讲机逐句喊话 vs 图纸红线批注单

我们可以把开发者与 Coding Agent 的多轮协作,比作建筑师与施工队长核对施工蓝图的过程:

  1. 传统聊天框模式(对讲机逐句喊话):
    施工队长交给你一张包含 20 个房间管线设计的整版图纸(模型输出的长篇回复或长代码块)。你发现其中 3 个房间的插座位置不对、2 个阀门型号有误。在没有划词批注工具时,你只能把图纸翻上去抄下第 42 行代码,再滚到底部输入框粘贴,手敲一句“这里端口不对”;接着再滚回上面找第 108 行代码,再滚下来粘贴……不仅手忙脚乱,还极易在复制过程中漏掉上下文或不小心按回车提前发送了半截话。
  2. Cursor + GitHub PR Review 模式(图纸红线贴条 + 一键汇总审阅单):
    你在阅读模型回复的过程中,鼠标划过第一处问题代码,上方立刻浮现一枚轻巧的胶囊条 [ Add to Chat ⌘L | 写批注 ⇧⌘L ]。如果是简单追问,直接按 ⌘L 就能把选中代码作为引用块送入底部输入框;如果是多处代码审查,按下 ⇧⌘L 原地展开小巧的批注卡片,写下一句修改意见并按 Enter,这张批注就自动收进底部输入框正上方的**「引用与批注汇总栏」**。等你从头到尾审完 5 处细节,点击一次 「一键汇总插入输入框」,5 条「原文引用 + 对应修改意见」瞬间整齐排列在输入框草稿中,一次发送即可让 Agent 精准完成全部修改。

下面通过一张双子图架构对比,直观展示两种交互链路在操作步数与上下文连贯性上的本质差异:

dsh-selection-quote 插件链路(零视线中断 · PR Review 级汇总)

1. 鼠标划选任意消息/代码
正上方浮现胶囊工具条

2. 按 ⌘L 直接引用到输入框
或按 ⇧⌘L 原地展开写批注

3. 多处批注自动汇入底部
conversation.composer.dock

4. 一键汇总生成结构化指令
单轮精准闭环全部修改

传统手动复制粘贴链路(高摩擦 · 频繁上下滚动失焦)

1. 在长回复中选中代码
手动 Cmd+C 复制

2. 滚到底部输入框
手动输入引述符号并粘贴

3. 滚回上方寻找下一处问题
阅读视线反复中断

4. 多次零散发送或多轮返工
Token 与时间双重浪费

我们先来看看 dsh-selection-quote v0.2.0 的实机运行效果。首先,在消息流中普通划选文字时不会强行弹窗或抢夺焦点(完全保留原生 ⌘C 复制习惯);当你在选中文字上点击鼠标右键时,弹出毛玻璃右键菜单,提供 拷贝 (Copy) (⌘C) 与 添加到对话 (⌘L) 两个选项:

划词右键弹出拷贝与添加到对话菜单实机效果

点击 「添加到对话」(或按下 ⌘L)后,借助浏览器原生 CSS.highlights 渲染管线,被选中的原文持续保持蓝色高亮状态,首行右上角自动锚定一枚蓝色水滴序号角标 1,正上方弹出圆角胶囊评论框(输入评论后按 Enter 或点击右侧圆形 ✓ 即可确认):

持续蓝色选中高亮与蓝色水滴序号角标及圆角胶囊评论框实机效果

确认添加后,底部输入框内部左上方会内嵌显示 💬 1 条注释 × 胶囊(支持不额外打字直接按 Enter 或点击发送按钮发出!);鼠标悬停或点击该胶囊时,正上方弹出白色圆角详情卡片,按序号清晰展示 所选文本: 与 用户评论:,并提供铅笔编辑与垃圾桶删除按钮:

底部输入框内N条注释胶囊与悬浮详情卡片实机效果

更进一步,当你按下回车将消息发送出去后,借助 uiConversation.userText 规则与 "conversation.user.text.node" 插槽,已发送的用户消息气泡同样会自动渲染为干净的 💬 N 条注释 胶囊(悬停或点击即可随时回看每条注释的所选文本与评论):

已发送消息自动渲染为N条注释胶囊实机效果


1.2 主流 AI 划词与局部引用方案全景对比:为什么原生插槽架构更胜一筹?

在 Web 与桌面端 AI 客户端中,实现「划词引用与行内批注」通常有三种技术路线。下表从 DOM 隔离精度、多会话状态隔离、输入框草稿同步方式以及多点批注汇总能力四个维度进行客观对比:

方案维度方案 A:全局 document 脚本粗暴注入方案 B:模拟剪贴板 + execCommand 粘贴方案 C:DSH 原生会话插槽 + SessionInputShell(本文方案)
选区监听作用范围监听全局 document,容易在用户在底部输入框改字或改设置表单时误弹窗监听全局 mouseup,需依赖脆弱的 CSS 类名黑名单过滤输入框基于 "conversation.input.overlay" 探针定位 [data-conversation-content],精准排除 [data-composer-card]
多会话状态隔离全局单例变量,切换会话标签页后批注列表串台污染无状态队列,仅支持单次即时粘贴按 sessionId 独立维护 createSnapshotStore 实例,多会话切换零串台
草稿写入可靠性直接篡改 textarea.value 或 innerHTML,导致 React 内部受控状态失步覆盖用户系统剪贴板原有内容,体验侵入性强调用官方 ctx.conversation.input.shell(sessionId) 的 captureInsertion + insertText / setDraft
多片段批注汇总不支持,每次划词只能立即插入单条文本不支持,无法暂存多处修改意见统一编排原生挂载 "conversation.composer.dock" 汇总栏,支持内联编辑与一键批量合成结构化提示词
主题与视口自适应固定亮色或暗色样式,在窗口顶部划词时工具条被裁剪出屏幕仅快捷键触发,无可视化胶囊条与行内批注输入框自适应 CSS 变量与深浅色毛玻璃,内置视口顶部阈值检测与上下自动翻转(above / below)

工程选型建议:

  1. 如果你只是在普通静态网页里做简单的划词高亮,方案 A 即可满足;
  2. 但在像 DeepSeek Harness 这样采用 ProseMirror / 富文本 ContentEditable 输入框 + 多会话并发状态树 的现代 Agent 客户端中,直接修改 DOM 文本会导致编辑器内部状态机丢失修改记录(按下发送时内容为空)。因此,必须通过 DSH 官方暴露的 "conversation.input.overlay"、"conversation.composer.dock" 插槽与 SessionInputShell 接口实现原生级集成。

二、基础篇:3 分钟搞定 DSH 会话插槽架构与结构化批注协议

2.1 DeepSeek Harness 客户端插件与双插槽协同原理

在 DeepSeek Harness 的前端架构(@deepseek-ai/dsh-client-ui-conversation)中,每一个聊天会话面板(SessionPane)都预留了强类型的会话级插槽(Session-Scoped Slots)。dsh-selection-quote 巧妙组合了其中两个核心插槽:

插槽名称 (slot.name)插槽类型 (kind)作用域 (scope)宿主 DOM 挂载位置在 dsh-selection-quote 中的职责
"conversation.input.overlay""list""session"位于底部 Composer 卡片的 .overlayAnchor 锚点内渲染隐藏的 DOM 探针节点以反查当前会话的 [data-conversation-content] 容器,并通过 ReactDOM.createPortal 向 document.body 挂载浮动胶囊条与批注卡片
"conversation.composer.dock""list""session"位于底部输入框区域([data-composer-seat])内渲染底部输入框正上方的「引用与批注汇总栏」;当队列为空时返回 null(零高度),非空时通过 Flex order: -1 置顶在输入框正上方
"plugins.bundle.config""single""global"位于「设置 → 插件管理」详情页结合宿主端导出的 Config(Schemastery Schema),暴露 enabled、addToChatMode 与 commentLabel 配置项
2.2 结构化引用与多段批注的协议建模与算法验证

为什么将多条「代码引用 + 行内批注」汇总发送给大模型时,排版格式会直接影响 Agent 修改代码的准确率?
当模型收到一段没有任何标记的混杂文本时,它很难区分哪句话是它上一轮输出的原始代码、哪句话是你新提出的修改要求。为此,我们在插件中设计了严格的多行引用块规整与键值标注协议:

  1. 原始选区中的每一行非空文本自动加上前缀引用符,空白行保留结构占位,确保多行代码缩进丝毫不乱;
  2. 紧跟在引用块下方的一行使用加粗标签标注用户的具体批注;
  3. 多条批注之间以双换行符分隔,末尾预留双换行以便用户在输入框底部继续补充总结性指令。

为了便于在 Python 后端或评测流水线中复用同一套格式化与位置计算逻辑,下面提供完整可运行的 Python 协议实现与单元测试代码(通过 ast.parse 严格校验):

from dataclasses import dataclass, field
from typing import List, Optional, Tuple
import time


@dataclass(frozen=True)
class SelectionAnchorBox:
    """表示浏览器选区 Range.getBoundingClientRect() 返回的几何矩形边界。"""

    top: float
    left: float
    bottom: float
    right: float
    width: float
    height: float


@dataclass
class StagedReviewNote:
    """表示暂存在输入框上方批注汇总栏中的单条引用与批注条目。"""

    note_id: str
    raw_excerpt: str
    review_remark: str = ""
    created_at_ms: int = field(default_factory=lambda: int(time.time() * 1000))


class QuoteMarkdownBuilder:
    """负责将划词选区与行内批注转换为结构化 Markdown 提示词的构建器。"""

    def __init__(self, remark_tag: str = "批注", max_preview_chars: int = 120) -> None:
        self.remark_tag: str = remark_tag.strip() or "批注"
        self.max_preview_chars: int = max(20, max_preview_chars)

    @staticmethod
    def normalize_line_breaks(raw_text: str) -> str:
        """统一 CRLF/CR 换行符并去除首尾多余空白。"""
        if not isinstance(raw_text, str):
            return ""
        return raw_text.replace("\r\n", "\n").replace("\r", "\n").strip()

    def build_quote_block(self, raw_text: str) -> str:
        """将单行或多行文本转换为标准 Markdown 引用块。"""
        cleaned = self.normalize_line_breaks(raw_text)
        if not cleaned:
            return ""
        quoted_lines: List[str] = []
        for line in cleaned.split("\n"):
            quoted_lines.append(f"> {line}" if line.strip() else ">")
        return "\n".join(quoted_lines)

    def build_Annotated_snippet(self, excerpt: str, remark: str = "") -> str:
        """将单条选中文本与批注说明组合成成对的审阅段落。"""
        block = self.build_quote_block(excerpt)
        if not block:
            return ""
        cleaned_remark = self.normalize_line_breaks(remark)
        if not cleaned_remark:
            return block
        return f"{block}\n**{self.remark_tag}**:{cleaned_remark}"

    def compile_batch_payload(
        self, notes: List[StagedReviewNote], append_trailing_gap: bool = True
    ) -> str:
        """将批注汇总栏中的全部条目一次性合成为写入输入框草稿的完整负载。"""
        sections: List[str] = []
        for item in notes:
            rendered = self.build_Annotated_snippet(item.raw_excerpt, item.review_remark)
            if rendered:
                sections.append(rendered)
        if not sections:
            return ""
        joined = "\n\n".join(sections)
        return f"{joined}\n\n" if append_trailing_gap else joined

    def summarize_excerpt(self, raw_text: str) -> str:
        """生成用于浮动批注卡片顶部与汇总栏展示的紧凑单行摘要。"""
        collapsed = " ".join(self.normalize_line_breaks(raw_text).split())
        if len(collapsed) <= self.max_preview_chars:
            return collapsed
        return f"{collapsed[: self.max_preview_chars - 1]}…"


if __name__ == "__main__":
    builder = QuoteMarkdownBuilder(remark_tag="批注", max_preview_chars=48)
    sample_notes = [
        StagedReviewNote(
            note_id="sq-1",
            raw_excerpt="const pool = createConnectionPool({ port: 8080, maxRetries: 0 });",
            review_remark="端口应支持从配置注入,且 maxRetries 建议改为 3 次并配合指数退避",
        ),
        StagedReviewNote(
            note_id="sq-2",
            raw_excerpt="catch (err) {\n  return null;\n}",
            review_remark="不要静默吞掉连接异常,应抛出带上下文的 GatewayConnectionError",
        ),
    ]
    batch_output = builder.compile_batch_payload(sample_notes)
    print(batch_output)

三、进阶篇:划词浮动胶囊条、视口翻转算法与双插槽核心实战

3.1 多阶段运行时交互闭环拆解

当用户在 DeepSeek Harness 会话窗口中按下鼠标左键划选文字时,插件内部会经历 「DOM 容器溯源校验 → 视口防溢出坐标解算 → 胶囊条/批注卡状态切换 → 汇总队列与 SessionInputShell 草稿注入」 四个紧密衔接的阶段。

下图展示了 dsh-selection-quote 在浏览器端与 DSH 会话控制器之间的完整数据流转架构:

阶段三:双路径分流与草稿合成闭环

阶段二:视口坐标解算与浮动层渲染

阶段一:选区捕获与容器边界门禁

空间充足

靠近视口顶部

命中黑名单:静默忽略

合法消息流选区

document mouseup / keydown
捕获原生 Selection 对象

探针向上查找
[data-conversation-content]

选区是否位于
Composer 或可编辑框内?

提取 Range 矩形边界
计算水平居中锚点

顶部剩余高度
是否大于所需阈值?

placement = above
在选区正上方浮现

placement = below
自动翻转至选区正下方

路径 A:Add to Chat (⌘L)
立即转为引用块

SessionInputShell
captureInsertion + insertText

路径 B:写批注 (⇧⌘L)
加入 conversation.composer.dock

支持多条暂存、内联编辑
与一键汇总批量写入

保持浮动条隐藏
不干扰输入框正常打字

3.2 为什么必须设计「DOM 探针溯源」与「视口顶部翻转算法」?

在实际工程落地中,有两个极易踩坑的边界场景:

  1. 底部输入框与自身弹层的选区误触发问题:
    当用户在底部聊天输入框([data-composer-card])里用鼠标选中一段自己刚写的草稿准备删除时,或者在展开的「写批注卡片」内部的 <textarea> 里选中文字修改时,浏览器同样会触发全局 mouseup 事件且 window.getSelection().toString() 非空。如果不做严格的祖先节点过滤,浮动胶囊条就会荒谬地弹在输入框或者批注卡片自己的头上!
    因此,我们在 isValidMessageSelection 中设计了双重校验:

    • 黑名单拦截:一旦选区的 startContainer、endContainer 或 commonAncestorContainer 命中 [data-composer-seat]、[data-composer-card]、[data-dsh-quote-toolbar]、[data-dsh-quote-dock]、[contenteditable="true"]、textarea 或 input,立即判定为无效选区;
    • 白名单归属:利用挂载在 "conversation.input.overlay" 中的隐藏探针 <span data-dsh-selection-quote-probe={sessionId} />,通过 probeRef.current.closest("[data-conversation-content]") 锁定当前会话的专属 DOM 树,要求选区起止节点必须 100% 包含在该会话容器内部。
  2. 窗口顶部与左右边缘的防裁剪翻转算法(computeToolbarPosition):
    默认情况下,浮动胶囊条(高度约 44px)与展开后的批注输入卡片(高度约 200px)采用 transform: translate(-50%, -100%) 渲染在选区第一行的正上方。但当用户滚动页面,使选中的代码正好位于窗口最顶部(例如 rect.top = 30px)时,向上展开批注卡片会导致卡片上半部分直接超出视口顶部而无法点击!
    为此,我们根据当前所处模式动态计算所需顶部净空高度(胶囊态 requiredTopSpace = 54px,批注卡片态 requiredTopSpace = 210px):当 rect.top < requiredTopSpace 时,自动将 placement 切换为 "below",使卡片丝滑翻转到选区正下方(rect.bottom + 10px),同时对水平中心坐标 left 施加 [margin + halfWidth, viewportWidth - margin - halfWidth] 区间钳制,彻底杜绝任何方向的溢出裁剪。

下面给出视口坐标解算器与会话级状态管理器的完整 Python 算法仿真实现(可直接运行验证各种边界坐标下的翻转行为):

from dataclasses import dataclass, replace
from typing import Dict, List, Literal, Optional


PlacementMode = Literal["above", "below"]
ToolbarViewMode = Literal["pill", "comment"]


@dataclass(frozen=True)
class ViewportSize:
    """浏览器可视区域宽高尺寸。"""

    width: int = 1280
    height: int = 800


@dataclass(frozen=True)
class FloatingAnchorLayout:
    """解算后的浮动胶囊条或批注卡片定位参数。"""

    left: int
    top: int
    placement: PlacementMode
    mode: ToolbarViewMode


@dataclass(frozen=True)
class SessionToolbarSnapshot:
    """单个会话的划词浮动层与批注队列不可变状态快照。"""

    visible: bool = False
    mode: ToolbarViewMode = "pill"
    selected_text: str = ""
    comment_draft: str = ""
    layout: Optional[FloatingAnchorLayout] = None
    queued_count: int = 0


class ToolbarPositionSolver:
    """负责计算选区浮动胶囊条与批注输入卡片的防溢出坐标与上下翻转方向。"""

    PILL_HALF_WIDTH: int = 140
    COMMENT_HALF_WIDTH: int = 190
    PILL_TOP_CLEARANCE: int = 54
    COMMENT_TOP_CLEARANCE: int = 210
    VIEWPORT_MARGIN: int = 16
    VERTICAL_GAP: int = 10

    @classmethod
    def solve(
        cls,
        rect_top: float,
        rect_left: float,
        rect_bottom: float,
        rect_width: float,
        viewport: ViewportSize,
        mode: ToolbarViewMode = "pill",
    ) -> FloatingAnchorLayout:
        """根据选区矩形与视口尺寸,计算最佳锚点坐标与翻转方向。"""
        half_width = cls.COMMENT_HALF_WIDTH if mode == "comment" else cls.PILL_HALF_WIDTH
        required_top = (
            cls.COMMENT_TOP_CLEARANCE if mode == "comment" else cls.PILL_TOP_CLEARANCE
        )

        raw_center_x = rect_left + (rect_width / 2.0)
        min_x = float(cls.VIEWPORT_MARGIN + half_width)
        max_x = float(max(min_x, viewport.width - cls.VIEWPORT_MARGIN - half_width))
        clamped_left = int(round(min(max(raw_center_x, min_x), max_x)))

        if rect_top >= required_top:
            top_pos = int(round(max(float(cls.VIEWPORT_MARGIN), rect_top - cls.VERTICAL_GAP)))
            return FloatingAnchorLayout(
                left=clamped_left,
                top=top_pos,
                placement="above",
                mode=mode,
            )

        bottom_pos = int(
            round(min(float(viewport.height - cls.VIEWPORT_MARGIN), rect_bottom + cls.VERTICAL_GAP))
        )
        return FloatingAnchorLayout(
            left=clamped_left,
            top=bottom_pos,
            placement="below",
            mode=mode,
        )


class MultiSessionQuoteRegistry:
    """管理多个并发会话的划词状态与待插入批注队列。"""

    def __init__(self, max_items_per_session: int = 20) -> None:
        self.max_items_per_session: int = max(1, max_items_per_session)
        self._snapshots: Dict[str, SessionToolbarSnapshot] = {}
        self._queues: Dict[str, List[Dict[str, str]]] = {}

    def activate_pill(
        self,
        session_id: str,
        selected_text: str,
        rect: Tuple[float, float, float, float],
        viewport: ViewportSize,
    ) -> SessionToolbarSnapshot:
        """当用户在消息流完成划词时,激活胶囊态工具条。"""
        top, left, bottom, width = rect
        layout = ToolbarPositionSolver.solve(top, left, bottom, width, viewport, mode="pill")
        queue = self._queues.setdefault(session_id, [])
        snap = SessionToolbarSnapshot(
            visible=True,
            mode="pill",
            selected_text=selected_text.strip(),
            comment_draft="",
            layout=layout,
            queued_count=len(queue),
        )
        self._snapshots[session_id] = snap
        return snap

    def expand_to_comment_card(
        self,
        session_id: str,
        rect: Tuple[float, float, float, float],
        viewport: ViewportSize,
    ) -> SessionToolbarSnapshot:
        """当用户点击写批注或按下 Shift+Cmd+L 时,原地切换为批注卡片并重算顶部净空。"""
        prev = self._snapshots.get(session_id, SessionToolbarSnapshot())
        top, left, bottom, width = rect
        layout = ToolbarPositionSolver.solve(top, left, bottom, width, viewport, mode="comment")
        snap = replace(prev, visible=True, mode="comment", layout=layout)
        self._snapshots[session_id] = snap
        return snap


if __name__ == "__main__":
    vp = ViewportSize(width=1280, height=800)
    registry = MultiSessionQuoteRegistry()
    pill_state = registry.activate_pill("sess-01", "listen 8080;", (35.0, 420.0, 55.0, 140.0), vp)
    card_state = registry.expand_to_comment_card("sess-01", (35.0, 420.0, 55.0, 140.0), vp)
    print("Pill placement at top=35:", pill_state.layout)
    print("Comment card placement at top=35 (auto-flipped):", card_state.layout)

四、高阶技巧:SessionInputShell 乐观并发草稿写入与焦点恢复闭环

4.1 为什么不能直接修改 DOM,而要用 captureInsertion + insertText?

在 DeepSeek Harness 客户端中,底部输入框由 SessionInputShell 统一托管,支持富文本标签(如 @file 引用胶囊、技能徽标)、历史草稿持久化和多端同步。SessionInputShell 内部维护了一套基于版本号的快照投影(shell.projection.clipboardText)与光标选区捕获机制(shell.actions.captureInsertion()):

  1. 当底部输入框为空(!hasExisting)时:
    优先调用 const span = shell.actions.captureInsertion() 获取当前光标位置令牌,再调用 shell.actions.insertText(textWithTrailingNewlines, span)。如果编辑器选区有效,文本会直接以原子事务写入编辑器;
  2. 当底部输入框已有草稿文本,或编辑器处于失焦状态导致 insertText 返回 false 时:
    自动回退到 shell.setDraft(payload),读取当前草稿 shell.projection.clipboardText,去除末尾多余空白后以双换行 \n\n 拼接新插入的引用或汇总批注块,保证用户此前已经在输入框里写了一半的文字绝不会被覆盖丢失;
  3. 自动聚焦与光标置尾:
    写入完成后,立即调用 shell.focus() 并定位当前会话 [data-composer-card] [contenteditable="true"] 节点,通过 Range.selectNodeContents(editor) + range.collapse(false) 将输入光标精准停靠在新插入引用块下方的空白行上,用户双手无需离开键盘即可直接打字提问。

下面通过时序图展示从按下快捷键到 SessionInputShell 完成草稿注入与光标置尾的完整交互过程:

SessionInputShell (ctx.conversation.input.shell) QuotesCommentsDock (conversation.composer.dock) SelectionQuoteStore (会话级快照存储) SelectionQuoteOverlay (conversation.input.overlay) SessionInputShell (ctx.conversation.input.shell) QuotesCommentsDock (conversation.composer.dock) SelectionQuoteStore (会话级快照存储) SelectionQuoteOverlay (conversation.input.overlay) alt [场景 A:按下 ⌘L 直接引用到对话框] [场景 B:按下 ⇧⌘L 多处写批注并一键汇总] 开发者 (User) 在消息流划选代码片段 (mouseup) 1 showPill(text, rect, viewport) 2 渲染浮动胶囊 [Add to Chat ⌘L | 写批注 ⇧⌘L] 3 按下 ⌘L (或点击 Add to Chat) 4 captureInsertion() + insertText("> 选中代码\\n\\n") 5 输入框写入引用块 + 光标自动定位于末尾 6 按下 ⇧⌘L (或点击 写批注) 7 openCommentMode() 原地展开批注卡片 8 输入修改意见并按 Enter 9 addItem({ quote, comment }) 10 响应式更新批注队列 (展示卡片 + 数量角标) 11 点击「一键汇总插入输入框」 12 setDraft(合并已有草稿 + 批量结构化 Markdown) 13 clearItems() 清空队列恢复零高度 14 聚焦底部输入框,单轮发送完成全部审查 15 开发者 (User)
4.2 SessionInputShell 乐观并发草稿合并器完整仿真代码

下面给出 SessionInputShell 乐观并发(CAS)选区插入与非破坏性草稿追加器的完整 Python 实现与自测用例:

from dataclasses import dataclass
from typing import Optional


@dataclass(frozen=True)
class InsertionSpanToken:
    """表示编辑器在某一文档版本下捕获的光标选区 CAS 令牌。"""

    doc_revision: int
    cursor_start: int
    cursor_end: int


class ComposerShellSimulator:
    """模拟 DeepSeek Harness 的 SessionInputShell 草稿状态机与 CAS 插入接口。"""

    def __init__(self, initial_draft: str = "") -> None:
        self._draft: str = initial_draft
        self._revision: int = 1
        self._cursor_offset: int = len(initial_draft)
        self.is_focused: bool = False

    @property
    def clipboard_text(self) -> str:
        """返回当前输入框的纯文本投影。"""
        return self._draft

    def capture_insertion(self) -> InsertionSpanToken:
        """捕获当前文档版本号与光标区间。"""
        return InsertionSpanToken(
            doc_revision=self._revision,
            cursor_start=self._cursor_offset,
            cursor_end=self._cursor_offset,
        )

    def insert_text(self, text: str, token: Optional[InsertionSpanToken] = None) -> bool:
        """校验 CAS 版本令牌并在光标处原子插入文本。"""
        if token is None or token.doc_revision != self._revision:
            return False
        before = self._draft[: token.cursor_start]
        after = self._draft[token.cursor_end :]
        self._draft = f"{before}{text}{after}"
        self._revision += 1
        self._cursor_offset = len(before) + len(text)
        return True

    def set_draft(self, next_draft: str) -> None:
        """全量替换草稿文本并推进文档版本号。"""
        self._draft = next_draft
        self._revision += 1
        self._cursor_offset = len(next_draft)

    def focus(self) -> None:
        """聚焦底部输入框并将光标移至草稿末尾。"""
        self.is_focused = True
        self._cursor_offset = len(self._draft)


def inject_formatted_markdown_into_shell(
    shell: ComposerShellSimulator, raw_markdown: str
) -> bool:
    """向 SessionInputShell 安全写入格式化后的引用块或批量批注,保留用户已有草稿。"""
    normalized = raw_markdown.replace("\r\n", "\n").replace("\r", "\n").strip()
    if not normalized:
        return False

    payload_with_gap = f"{normalized}\n\n"
    existing_text = shell.clipboard_text.rstrip()
    has_existing = len(existing_text) > 0

    inserted = False
    if not has_existing:
        span_token = shell.capture_insertion()
        inserted = shell.insert_text(payload_with_gap, span_token)

    if not inserted:
        merged_draft = (
            f"{existing_text}\n\n{payload_with_gap}" if has_existing else payload_with_gap
        )
        shell.set_draft(merged_draft)
        inserted = True

    if inserted:
        shell.focus()
    return inserted


if __name__ == "__main__":
    sim_shell = ComposerShellSimulator()
    ok_first = inject_formatted_markdown_into_shell(sim_shell, "> listen 8080;")
    ok_second = inject_formatted_markdown_into_shell(
        sim_shell, "> maxRetries: 0\n**批注**:请改为指数退避重试 3 次"
    )
    assert ok_first and ok_second and sim_shell.is_focused
    print("Merged Composer Draft:\n" + repr(sim_shell.clipboard_text))

五、实战避坑指南:DSH 客户端插槽开发高频报错与一键解决速查表

在开发与调试 DeepSeek Harness 客户端插件时,以下 5 个高频问题是开发者最容易遇到的拦路虎。我们将其整理为速查表格,方便按图索骥:

序号遇到的报错或异常现象背后的真正原因一句话解决办法
01点击浮动胶囊条按钮时,按钮点击事件没触发,胶囊条却直接消失了浏览器在点击按钮时先触发了全局 mousedown 监听器,导致选区失焦并先一步调用了 hideToolbar()在浮动工具条根容器与按钮的 onMouseDown 中调用 e.preventDefault() 与 e.stopPropagation(),并在全局 mousedown 中放行 toolbarRef.current.contains(e.target)
02在批注输入框使用中文拼音输入法按 Enter 选词时,批注卡片直接被提交关闭了未检查 IME 组合输入状态(isComposing),导致输入法上屏回车被误判为提交快捷键在 onKeyDown 开头增加 if (e.nativeEvent?.isComposing) return; 门禁判断
03"conversation.composer.dock" 挂载后,批注汇总栏与底部的 ContextMeter 挤在同一行导致样式错乱DSH 默认的 .yhfFVG_dock 容器采用单行水平 Flex 布局且位于输入框卡片下方为父容器注入 [data-composer-seat] > div:has(> [data-dsh-quote-dock]) { order: -1; flex-wrap: wrap !important; width: 100% !important; },让汇总栏独占一行置顶于输入框正上方
04在展开的批注输入框 <textarea> 内用鼠标选中文字想修改时,选区被替换成了批注文字自己全局 mouseup 选区同步函数未判断当前是否已处于 mode === "comment" 状态在 syncFromDomSelection 开头判断 if (currentToolbar.visible && currentToolbar.mode === "comment") return;,锁定原引用文本不被覆盖
05执行 dsh plugin add 安装插件时提示缺少 dsh.bundle 清单package.json 仅声明了 dsh.client 而遗漏了 dsh.bundle.patch 字段在 package.json 中同时声明 "dsh": { "bundle": { "patch": "./cordis.patch.yml" }, "client": { "entry": "./lib/client.js", "platform": "web" } }

结语

通过 dsh-selection-quote 插件的设计与实现,我们不仅为 DeepSeek Harness 补齐了 Cursor 式的 ⌘L 一键划词引用 与 GitHub PR Review 式的 ⇧⌘L 多点行内批注汇总 能力,更完整走通了 DSH 客户端插件从会话级插槽("conversation.input.overlay" / "conversation.composer.dock")挂载、DOM 选区边界隔离、视口防溢出翻转解算,到 SessionInputShell 乐观并发草稿写入的全套工程范式。

目前 dsh-selection-quote(v0.2.0)已在 GitHub、Gitee 与 npm 官方仓库全面开源上线,欢迎大家直接安装体验或 Star 支持:

  • GitHub 仓库:https://github.com/xt765/dsh-selection-quote
  • Gitee 仓库:https://gitee.com/xt765/dsh-selection-quote
  • npm 包主页:https://www.npmjs.com/package/dsh-selection-quote

在下一篇 DeepSeek Harness 插件实战文章中,我们将继续探索会话上下文窗口可视化监控与自动摘要压缩插件的开发,敬请期待!

基于热成像的土壤水分反馈MATLAB实现,以及用于灌溉调度的模型预测控制。.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

相关推荐

基于netty框架下的推送系统,支持websocket,android,ios,桌面应用,系统应用等多端接入支持,应用于移动应用,物联网,智能家居,嵌入式开发,WEB应用以及后台系统之间的即时消服务

基于netty框架下的推送系统,或许有一些企业有着自己一套即时通讯系统的需求,那么CIM为您提供了一个解决方案,目前CIM支持websocket,android,ios,桌面应用,系统应用等多端接入支持,可应用于移动应用,物联网,智能家居,嵌入式开发,桌面应用,WEB应用以及后台系统之间的即时消服务。

(报告+仿真)基于永磁同步电机的飞轮储能系统控制(网侧逆变+机侧整流)仿真

内容概要:本文针对含分布式电源的配电网在多线路故障情况下的恢复问题,提出了一种将网络重构、孤岛划分与检修进度统一纳入多时段优化框架的故障恢复模型。该模型以最小化网损和甩负荷惩罚为目标,采用混合整数二阶锥规划方法,结合虚拟流思想与二阶锥松弛技术,实现对支路投切状态、负荷保留比例、节点电压、功率分布等变量的协同优化,确保各供电区域的连通性与辐射状结构。模型在IEEE33节点系统上进行验证,支持动态调整孤岛范围,充分利用联络开关转供能力和分布式电源的黑启动能力,提升了配电网的韧性与恢复效率。同时,文章对建模细节进行了深入评述,并提出了在负荷分级、无功处理、辐射状约束精确性等方面的改进建议。; 适合人群:电力系统自动化、智能电网、配电系统优化等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于研究含高比例分布式电源的主动配电网在故障后的快速恢复策略;②为配电网重构、孤岛划分与多时段动态恢复的联合优化提供建模范式;③作为学术论文复现与改进的基础模型,推动配电网韧性提升技术的发展。; 阅读建议:建议读者结合文中提到的参考文献与仿真代码,深入理解虚拟流建模、二阶锥松弛等关键技术的应用逻辑,并尝试在模型中引入负荷等级权重、储能系统、分布式电源出力调控等要素,以增强模型的实用性与完整性。

WeVisOne-VL一套模型,把检测、分割、抠图和OCR都接到了一起

WeVisOne-VL 想解决的不是单点能力更强,而是把目标级理解和像素级理解放进同一套视觉语言模型里:从点、框,到 mask,再到连续 alpha matte,都能统一生成。 它覆盖检测、指代表达定位、计数、点选、OCR、分割和抠图,最大的看点是输出粒度可以按需求切换,而且遇到图里根本不存在的目标时,能直接返回 None,尽量避免“看错了还硬答”的幻觉。 技术上,它把任务统一写成结构化文本预测,再配一个只有 960 万参数的轻量像素解码器,不依赖 SAM,也能把框进一步细化成 mask 和 alpha matte。项目同时放出了 2B、4B 权重、推理包、Cookbooks、评测流程和 Gradio Demo;按仓库给出的结果,4B 版本在检测、指代定位、计数、OCR、分割和抠图等多项基准上都压过一批强开源基线。 更值得琢磨的是它背后的数据引擎:用知识图谱驱动概念发现,再结合专家模型与 VLM 校验,把框扩展到 mask 和高质量透明度标注,累计覆盖超过 1 亿张图像。这类工作真正有价值的地方,不只是又做出一个大模型,而是让“看见什么”和“精确到哪一层”第一次被放进一条顺滑的产品链路里。

双闭环PWM整流器VOC控制 +SVPWM调制仿真(Simulink仿真实现)

内容概要:本文详细介绍了基于Simulink的双闭环PWM整流器电压定向控制(VOC)与空间矢量脉宽调制(SVPWM)的仿真建模方法,重点实现电流内环与电压外环协同控制策略,以实现电网侧单位功率因数运行、低谐波畸变及快速动态响应。通过构建完整的控制框图,集成锁相环(PLL)、坐标变换、PI调节器、SVPWM模块及Park反变换等关键环节,系统化展示三相PWM整流器在理想与不平衡电网条件下的高性能控制机制。该模型不仅适用于常规工况分析,还可拓展用于电网故障、功率平衡控制等复杂场景的研究,具备较高的科研价值与工程参考意义,尤其支持高水平EI期刊论文的复现与创新验证。; 适合人群:电气工程、自动化、电力电子与电力传动方向的高校本科生、研究生,以及从事新能源变换器、工业整流装置研发的工程技术人员。; 使用场景及目标:①深入理解PWM整流器双闭环控制原理与VOC控制策略的设计流程;②掌握SVPWM调制技术在Simulink环境中的实现方法与波形生成机制;③为高性能电力电子变换系统(如储能变流器、电机驱动器)的控制算法开发提供仿真验证平台;④支撑学术研究中对先进控制策略(如PR控制、重复控制、模型预测控制)的对比测试与性能评估。; 阅读建议:建议结合《电力电子技术》《自动控制理论》《电机与拖动》等基础知识进行学习,优先运行并调试仿真模型,观察dq坐标系下电流跟踪、直流母线电压稳定、网侧电流正弦性等关键波形,深入理解控制器参数整定规律,有条件者可进一步对接dSPACE或DSP控制器实现实物验证。

魔兽世界大秘境评分线历史数据集11赛季日度统计

魔兽世界史诗钥石地下城(大秘境)Mythic+评分线的逐日历史追踪数据集,覆盖11个赛季,从暗影国度第三赛季直至当前Midnight赛季。文件包含:cutoff_history.csv(各顶级百分比门槛的逐日评分线)、curve_points.csv(计时完成全部地牢各钥石等级的曲线分数)与seasons.csv(赛季信息:资料片缩写、钥石等级压缩、词缀拆分、是否包含前置补丁等)。数据集附带详尽术语表:钥石等级、限时完成、评分规则、赛季重置、词缀机制、难度缩放调整等均有清晰解释,是理解该游戏模式的完整参考。适用于游戏数据可视化、电竞与游戏社区数据趋势分析、时间序列研究与游戏运营分析。数据许可:其他(详见数据集描述)。

利用自适应直流伺服电机和模糊PI控制器的增强天线定位控制系统》.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

无刷直流电机(BLDCM)转速电流双闭环控制、三相桥式星型全控电机研究(Simulink仿真实现)

内容概要:本文围绕无刷直流电机(BLDCM)的转速电流双闭环控制系统展开研究,基于Simulink平台构建三相桥式星型全控电机的仿真模型,系统阐述了电流环与转速环双闭环控制结构的设计原理及其在电机调速系统中的核心作用。研究重点对比了传统PID控制与模糊PID控制在动态响应速度、抗负载扰动能力及稳态精度等方面的性能差异,通过仿真验证了模糊PID控制器在提升系统鲁棒性与控制品质方面的显著优势。内容涵盖电机数学建模、PI调节器设计、PWM驱动控制、反馈信号检测与处理等关键环节,为高性能电机控制系统的分析与优化提供了完整的仿真解决方案和技术支撑。; 适合人群:自动化、电气工程、机电一体化等相关专业的本科生、研究生,以及从事电机控制、电力电子、运动控制等领域研发工作的工程师和科研人员。; 使用场景及目标:①用于高校课程设计或实验教学,帮助学生深入理解双闭环控制机制与PID参数整定方法;②为科研项目中电机控制器的设计与性能优化提供仿真验证平台;③对比分析传统PID与智能控制策略(如模糊PID)在实际系统中的控制效果,提升无刷直流电机在复杂工况下的动态与稳态性能表现。; 阅读建议:建议结合提供的Simulink仿真模型同步操作,重点关注控制器结构搭建、参数调试过程与波形分析,配合电机控制理论教材深化理解,可进一步拓展至无位置传感器控制、滑模观测器、FOC矢量控制等先进控制技术的研究与实现。

基于MATLAB的步态和肌电图分析应用,用于评估携带笔记本电脑引起的疲劳。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

三相PWM整流器双闭环仿真(Simulink仿真实现)

内容概要:本文详细介绍了一种基于Simulink的三相PWM整流器双闭环控制系统仿真模型,重点实现了电压外环与电流内环的协同控制策略,通过构建完整的主电路、控制器模块、坐标变换环节及PWM生成机制,全面展示系统在稳态运行与动态响应下的性能表现。文档进一步涵盖了VOC(虚拟同步发电机控制)、SVPWM空间矢量调制技术的应用,并拓展至电网不平衡条件下的功率平衡控制、自抗扰控制与模型预测控制等先进控制算法,提供了从基础建模到高级优化的全流程仿真解决方案,适用于电力电子变换器的科研分析与教学实践。; 适合人群:电气工程、自动化、新能源技术等相关专业的本科生、研究生,以及从事电力电子系统研发的工程师和科研人员。; 使用场景及目标:①深入理解三相PWM整流器的工作原理及其双闭环控制的设计方法;②开展课程设计、毕业设计或科研项目中的系统建模与仿真验证;③对比传统PID、模糊PID、自抗扰及模型预测等多种控制策略的动态性能与鲁棒性;④研究电网不平衡条件下系统的功率补偿与稳定性控制问题; 阅读建议:建议结合MATLAB/Simulink环境动手搭建并调试仿真模型,按照文档结构逐步掌握各模块功能与参数整定方法,同时可延伸学习SVPWM调制、VOC控制及高级非线性控制策略,以提升对现代电力电子系统控制理论的理解与应用能力。

【化工设备防腐】基于BF凝水除铁缓蚀剂的螺旋板换热器腐蚀与冷凝水发红问题综合治理技术应用

内容概要:本文针对氯碱厂盐水螺旋板预热器腐蚀渗漏及蒸汽冷凝水发红、偏酸性的问题,提出并实施了采用BF凝水除铁缓蚀剂成膜法的综合治理方案。通过分析腐蚀原因,确认主要为二氧化碳引起的酸性腐蚀和溶解氧导致的氧腐蚀。在原有阴极保护与局部防腐涂层改造基础上,进一步投加BF凝水除铁缓蚀剂,该药剂能在金属表面形成单分子保护膜,有效阻隔腐蚀介质,实现全系统气液两相的协同防护。经72小时试验,冷凝水pH值恢复至8.5以上,铁离子浓度降至0.07mg/L以下,颜色清澈透明,达到回用标准,实现了设备安全运行与冷凝水高效回收。; 适合人群:从事化工、电力、锅炉系统管理及相关工业设备维护的技术人员与工程管理人员,尤其适用于面临换热器腐蚀、冷凝水水质异常问题的企业技术人员。; 使用场景及目标:①解决工业蒸汽系统中冷凝水发红、铁离子超标、pH偏低等腐蚀问题;②提升冷凝水回收率,降低能耗与水资源浪费,实现节能减排与降本增效;③替代传统除氧剂与末端过滤设备,优化现有水处理工艺。; 阅读建议:此资源结合实际案例提供系统性解决方案,读者应重点关注问题诊断逻辑、药剂作用机制与实施流程,可将其作为类似工况下腐蚀治理的技术参考,并结合自身系统特点进行可行性评估与小试验证。

数字化供应链AI智能体平台规划及场景应用方案.pptx

数字化供应链AI智能体平台规划及场景应用方案.pptx

个人关于acl的配置作业

个人关于acl的配置作业

数字雕刻基于CatmulI-Clark细分与笔刷位移场的ZBrush流程建模:月哨兵角色精细度上限分析

内容概要:本文以“月哨兵”科幻角色数字雕刻工程为实例,系统构建了从程序化粗模到高精度雕刻的完整数学模型。研究涵盖重拓扑、Catmul-Clark细分、笔刷位移场建模、多部件组装及精细度上限分析等核心环节。通过ZRemesher将304,050顶点粗模重拓扑为28,600顶点的全四边形网格,并逐级细分至732万面,实测面数递推F(k)=F₀·4ᵏ完全符合理论。利用ZBrush Python接口注入Standard笔刷操作,首次通过同拓扑OBJ逐顶点差分获得真实位移场数据,实测最大位移0.454873,8.756%顶点发生显著位移。提出“理论-内存-拓扑-视觉”四层精细度上限模型,指出在24GB内存条件下工程合理上限为10⁷~10⁸面,视觉收益受渲染分辨率制约趋于饱和。最终完成755万面的组装网格并经工程文件回读验证一致性。; 适合人群:具备三维建模与数字雕刻基础,熟悉ZBrush工作流,从事角色资产开发或程序化内容生成的技术美术、图形学研究人员及高阶数字艺术家。; 使用场景及目标:①理解Catmul-Clark细分曲面在工业级雕刻流程中的数学机制;②掌握基于脚本驱动的可复核雕刻工程构建方法;③评估高面数模型的内存代价与视觉收益平衡;④学习重拓扑、位移场量化、多部件合并等关键技术的工程实现。; 阅读建议:本文强调数学建模与实证闭环,建议结合附录中的脚本与数据文件进行复现实践,重点关注逐顶点差分、细分递推验证与四层上限模型的构建逻辑,以深入掌握高精度数字雕刻的系统性工程方法。

阻尼器磁流变阻尼器MR Damper非线性(阻尼、滞回)特性研究(Matlab代码实现)

内容概要:本文系统研究磁流变阻尼器(MR Damper)的非线性动力学特性,重点聚焦其阻尼力输出与滞回行为的建模与仿真分析。基于Matlab平台,构建了能够准确描述MR阻尼器非线性、强耦合及滞后特性的数学模型,并通过仿真代码实现了在不同激励条件下的动态响应模拟。研究涵盖模型建立、参数辨识、仿真验证全过程,深入剖析滞回环的形成机制与系统对频率、幅值等输入信号的敏感性,为高精度振动控制提供理论支撑和数据基础。资源包含完整可调试代码,有助于用户掌握智能材料器件的非线性建模方法。; 适合人群:具备控制系统理论基础和Matlab编程能力的机械工程、车辆工程、土木结构或自动化等相关专业的研究生及科研工程师,特别适用于从事智能材料驱动器建模、半主动悬挂系统或结构振动控制研究的专业技术人员。; 使用场景及目标:①掌握磁流变阻尼器非线性力学特性的建模思路与实现方法;②学习利用Matlab进行复杂非线性系统仿真与滞回曲线可视化技术;③为设计高性能半主动控制器(如模糊PID、滑模控制、自适应控制等)构建精确的被控对象模型;④支撑学位论文课题、科研项目申报或工程样机开发中的关键仿真验证环节。; 阅读建议:建议结合所提供的Matlab代码逐行调试运行,采用典型激励信号(如正弦位移输入)观察输出阻尼力的变化规律,重点关注滞回非线性特征的表现形式与关键参数的影响机制,并可进一步拓展至与先进控制算法的联合仿真研究,深化对系统动态性能的理解。

通信行业CentOS 7系统性能调优关键技术:电信级服务器优化配置与自动化运维实践

内容概要:本文围绕CentOS 7在通信行业的系统性能调优实践,深入探讨了从默认配置到满足电信级高可用性(如“五个九”)要求的优化路径。文章系统阐述了内存、网络、磁盘IO、服务精简与可观测性五大维度的调优策略,并通过一个完整的内核参数调优脚本实例,逐行解析其设计逻辑,涵盖备份机制、内存管理、网络连接容量、TCP缓冲区设置、文件句柄限制及中断均衡等关键技术点。同时展望了自动化基线管理、Ansible批量运维、向CentOS Stream/Rocky Linux迁移以及AIOps智能调参等未来趋势。; 适合人群:具备Linux系统管理基础,从事通信行业运维、系统架构或性能优化工作的技术人员,尤其是负责核心网元、5G UPF、计费系统等高负载场景的工程师;也适用于追求高可用、高性能系统部署的中高级运维人员。; 使用场景及目标:①应对5G基站控制器快速部署、话务高峰连接风暴及话单批量写入等典型通信业务挑战;②掌握如何通过系统级调优保障服务稳定性与响应性能,达成电信级SLA指标;③构建可复制、可自动化的性能优化方案,提升大规模服务器集群的运维效率与可靠性。; 阅读建议:学习时应结合实际生产环境逐步验证各项参数效果,重点关注变更安全(如配置备份)、业务语义(如信令进程保护)与压测验证环节,避免盲目套用参数。建议配合监控工具与自动化平台推进调优落地。

Python自动化数据处理程序-V2

Python自动化数据处理程序-V2

批量ruflow.py

批量ruflow.py

无刷直流电机BLDC无感+滑模观测器+转速电流双闭环PI控制(总共三个仿真模型)(Simulink仿真实现)

内容概要:本文档系统阐述了无刷直流电机(BLDC)在无位置传感器条件下的高性能控制策略,基于Simulink平台构建了三个相互关联的仿真模型,重点实现无感控制与滑模观测器(Sliding Mode Observer, SMO)相结合的转速电流双闭环PI控制系统。该资源摒弃了传统的霍尔传感器,利用滑模观测器实时估算转子的位置与转速信息,有效降低了系统成本并提升了在恶劣环境下的运行可靠性。仿真模型完整涵盖了逆变电路、空间矢量脉宽调制(SVPWM)、三相电流采样、坐标变换(Clark & Park)、PI调节器以及滑模观测器等核心模块,形成了一个闭环的、高动态响应的电机驱动系统。此外,文档还集成了模糊PID、传统PID等多种控制算法的对比仿真模型,便于研究者深入分析不同控制策略在动态响应、抗干扰能力和稳态精度方面的性能差异,为电机控制算法的研究与工程化应用提供了坚实的仿真验证基础。; 适合人群:具备自动控制理论、电机拖动原理及电力电子技术基础知识,并熟悉MATLAB/Simulink软件操作的电气工程、自动化、机电一体化等专业的高年级本科生、硕士研究生,以及从事电机驱动、新能源汽车、工业自动化等领域的研发工程师和技术人员。; 使用场景及目标:①深入学习和掌握无刷直流电机无位置传感器控制的基本原理与实现方法;②系统性地理解滑模观测器的设计思想、稳定性分析及其在转子位置与速度估计中的关键技术;③对比研究传统PI控制、模糊PID控制及滑模观测器在BLDC调速系统中的综合性能,分析其在不同工况下的鲁棒性与适应性;④为毕业设计、科研课题或工业项目中的电机控制系统开发提供可复用的仿真平台与技术参考。; 阅读建议:本资源以Simulink仿真为核心载体,建议使用者结合文档中提供的详细说明报告与参考文献,循序渐进地理解各功能模块的设计逻辑与参数整定方法。在学习过程中,务必动手运行并调试仿真模型,仔细观察并记录在不同负载突变、转速指令变化等工况下,电机的三相电流、转速响应曲线及滑模观测器输出的转子位置与速度的动态波形,从而深刻理解控制算法的内在机理。为进一步提升实践与创新能力,可尝试修改控制器参数(如PI增益、滑模增益),或替换不同的控制策略进行对比实验,探究其对系统性能的影响。

上一篇: 【RAG 架构与评测实战 #04】Agent 评测体系(上):三轴结果模型、基建故障归因与三态门禁
下一篇: AI Agent 流式工具调用总报 terminated 与签名丢失?深度拆解 SSE 静默超时与协议适配陷阱
玄同765
玄同765 新星创作者: 人工智能技术领域 新星创作者: 人工智能技术领域
博客等级 码龄6年 1万+粉丝 262原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值