ARTICLE DETAIL

资讯详情

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

SiYuan v3.7.0 版本深度解读:命令行接口、内核插件系统与 AI 知识库的落地路径

SiYuan v3.7.0 版本深度解读:命令行接口、内核插件系统与 AI 知识库的落地路径 SiYuan v3.7.0 版本深度解读命令行接口、内核插件系统与 AI 知识库的落地路径【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuanSiYuan v3.7.0 是一次全面焕新的发布界面重设计之外更关键的是能力层面的三块基石——不启动图形界面即可直接操作数据的命令行接口CLI、常驻内核的插件系统、以及进入公测的 SiYuan Agent 与向量嵌入语义搜索。本文以 v3.7.0 官方更新日志为主线结合内核源码逐项拆解这些能力的实现机制与可用参数帮助你理解每个新特性的边界条件与底层行为。一、版本总览五大主线官方更新日志 app/changelogs/v3.7.0/v3.7.0.md 将本版本概括为五个方向重设计的用户界面更清晰的视觉层级其中包含合并顶部标题栏与标签栏issue #10749、新版设置界面PR #17675、底部 Dock 改进issue #8890等具体条目移动端快捷入口Shorthands长按 App 图标即可记录灵感内容以带时间戳的笔记保存保存路径可自定义issue #14414内核插件系统插件常驻内核运行成为唯一的数据真相源让所有窗口与实例保持一致终结多窗口数据冲突命令行接口CLI不启动 SiYuan 即可直连内核数据层用于批量导入/导出、定时处理与外部系统集成issue #17674AI 知识库SiYuan Agent 与向量嵌入搜索进入公测支持用自然语言对话笔记、语义化检索与管理知识。此外本版本还支持了密钥与变量配置issue #17933、跨文档撤销issue #4866、本地 HTTPS HTTP/2issue #17822以及乌克兰语、印地语、印尼语、荷兰语、泰语等 5 个新语言包并为 Linux 提供了 rpm 发布包PR #17596。二、命令行接口CLI直连内核数据层v3.7.0 最重要的工程性变化是引入了完整的 CLI。它基于 cobra命令集覆盖笔记块、笔记本、文档、搜索、SQL、导入导出、同步、工作空间等 20 余个领域对应 kernel/cli/cmd/ 目录下的各命令文件。2.1 全局参数从rootCmd的持久化 flag 定义kernel/cli/cmd/root.go可以确认四个全局参数参数简写默认值说明--workspace-w空工作空间路径留空时依次回退到环境变量SIYUAN_WORKSPACE_PATH再回退到~/SiYuan--format-ftable输出格式table或json--dry-run—false干跑模式只校验并打印将发生什么不实际变更数据--log-level-v—日志级别off / trace / debug / info / warn / error / fatal单次命令默认warnserve子命令则跟随conf.json的system.logLevel2.2 启动时的初始化行为PersistentPreRunEkernel/cli/cmd/root.go揭示了 CLI 单次命令的完整启动流程也解释了若干使用前提工作目录解析resolveWorkingDir()从内核可执行文件位置探测包含appearance/langs的目录打包态为resources/兼容 macOS app bundle并要求该目录存在否则报错退出工作空间校验-w指定的路径必须存在且通过util.IsWorkspaceDir校验否则拒绝执行数据库初始化依次初始化主库、历史库与资产内容库并按配置设置搜索大小写敏感性与资产路径索引开关语义搜索可用调用model.PrepareEmbeddingSearch()——源码注释说明常驻的嵌入索引器是死循环不适合立即退出的进程这里只打开开关让search -m 4语义模式这类一次性命令也能命中向量搜索退出前落库PersistentPostRunE在命令结束后统一调用model.FlushTxQueue()与sql.FlushQueue()把内存中的 SQL 索引队列刷入磁盘——因为单次命令没有 server 模式的 cron 定时 flush不做这一步写完即搜就无法保证。2.3 加密笔记本的限制CLI 对加密笔记本是显式拒绝的rejectEncryptedNotebookCLIkernel/cli/cmd/root.go会检查notebook、box、id、parent等 flag 值以及文件/资产路径参数凡涉及加密笔记本一律报错CLI does not support encrypted notebook [...]。源码注释给出了设计动机加密笔记本只能通过应用内专用流程解锁与操作避免 CLI 进程成为明文或密文文件的旁路入口。serve子命令不受此限制。2.4 典型使用场景结合命令目录与官方描述CLI 的典型用法包括批量导入/导出import/export相关命令kernel/cli/cmd/import.go、kernel/cli/cmd/export.go直接查询数据search、sql、block、database命令kernel/cli/cmd/sql.go同步与系统操作sync、system、workspace命令。配合--format json输出与--dry-run校验CLI 可以安全地嵌入 shell 脚本与 CI 定时任务。三、Breaking Changeserve 需要显式子命令本版本明确标注了一条破坏性变更内核启动服务现在必须显式使用serve子命令issue #17866。此前的内核二进制默认即启动 HTTP 服务现在裸进程只作为 CLI 入口长期驻留的服务由serve承载。serve的完整参数定义在 kernel/cli/cmd/serve.go参数默认值说明--wd自动探测SiYuan 工作目录含appearance/、stage/的目录--port0HTTP 服务端口--readonlyfalse只读模式--accessAuthCode空访问授权码--lang空语言ar/de/en/es/fr/he/hi/id/it/ja/ko/nl/pl/pt-BR/ru/sk/th/tr/uk/zh-CN/zh-TW--modeproddev/prod--sslfalse启用 HTTPS 与 WSS对应Local HTTPS HTTP/2 supportissue #17822--attach-uifalse将内核生命周期挂载到桌面 UI 进程Electron 使用--safe-modefalse安全模式启动对应Supports launching in Safe Mode on Desktopissue #17948从serve的Run函数kernel/cli/cmd/serve.go可以看到长驻进程的单次命令都做了启动 HTTP server、初始化三套数据库、启动数据同步、加载闪卡、启动 cron 定时任务、初始化插件管理器plugin.InitManager()、启动嵌入索引器model.StartEmbeddingIndexer()、监视资产/表情/主题变更。这也解释了为什么 CLI 单次命令路径与serve路径在root.go中要互相绕开对方的初始化逻辑。四、内核插件系统单一数据真相源更新日志描述内核插件系统的核心价值是插件常驻内核保持所有窗口与实例一致终结多窗口数据冲突对应 PR #17487。源码实现位于 kernel/plugin/ 目录其中 manager.go 定义了PluginManager单例与生命周期InitManager通过sync.Once保证全局唯一并注册OnKernelPluginStart/Stop等模型层回调由serve启动流程中的go plugin.InitManager()触发热重载内置fsnotify.Watcher监视插件源文件变化可触发热重载无需重启内核并发控制每个插件名一把独立锁pluginsMu允许不同插件并发启停、同一插件串行启停RPC 能力PluginInfo暴露插件名、状态与 RPC 方法列表配合 kernel/plugin/rpc.go、websocket.go、worker.go 构成插件与内核之间的调用通道另有sandbox.go提供沙箱能力安全集成kernel/plugin/api_secrets_vars.go 使插件也能消费下一节介绍的密钥与变量体系。插件目录约定为工作空间内的data/plugins见PluginManager.pluginsDir注释。这一设计与单窗口前端 常驻内核的架构相配合无论打开多少个前端窗口插件状态与数据变更都收敛到内核这一处。五、配置密钥与变量Secrets and VariablesSupports configuring secrets and variablesissue #17933为智能体、MCP 服务等提供了统一的凭据注入机制实现在 kernel/conf/secrets.go 与 kernel/conf/variables.go。5.1 存储与加密Secrets是全局密钥库每条Secret由name与value组成。关键设计落盘加密Secrets.Encrypt()在AppConf.Save()序列化前对每个非空Value做util.AESEncrypt启动加载时Decrypt()反向解密注释中特别提到 AES 解密结果还需一次 hex 解码才得到明文与 AI 配置中 API key 的处理模式一致运行时常驻明文解析操作必须在InitConf解密之后进行因此密钥只在进程内存中短暂以明文存在。5.2 引用语法与解析优先级Resolve方法kernel/conf/secrets.go支持两类占位符显式语法{{secrets.NAME}}正则\{\{secrets\.([^}])\}\}匹配仅替换已配置的名字未配置时保留原文便于调用方尤其是 LLM发现尚未配置的密钥Shell 风格的$NAME与${NAME}正则限定NAME以字母/下划线开头避免误伤$100、正则表达式等无关文本且仅当密钥库中存在同名条目时才替换。统一入口ResolveSecretsVars先执行密钥解析再执行变量解析由此形成$NAME先查密钥库、再查变量库的优先级顺序。其消费场景在源码注释中写明智能体的http_request工具、MCP 服务 headers 等。六、AI 知识库Agent 与向量嵌入搜索SiYuan Agent 与向量嵌入搜索进入公测是本版本向智能化迈出的标志。仓库中对应的实现分为两部分6.1 嵌入索引kernel/model/embedding.go 定义了后台嵌入索引器的完整参数文件头部的常量块批量与并发每批 10 个块最大 8 并发内容长度门槛短于 7 字符或长于 12000 字符的块被标记为忽略embeddingIgnoredByLen可配置排除支持.siyuan/embeddingignoregitignore 语法匹配排除的块对应embeddingIgnoredByConf失败退避嵌入 API 不可用时按30s 失败次数指数退避上限 30 分钟单块连续失败 8 次视为永久失败不再调度并用embeddingErrNotified原子标记避免并发 worker 重复弹窗。CLI 侧通过model.PrepareEmbeddingSearch()让一次性命令同样可查询这些向量索引见 2.2 节。6.2 SiYuan Agentkernel/agent/ 目录实现了智能体核心agent.go内置的系统提示词定义了块的领域概念容器块/叶子块、标题层级是后续兄弟节点而非子节点、hPath 人类可读路径等并约束了工具使用模式——关键词检索走search.fulltext、语义检索走search.semantic、内容增删改走block.*工具、日记走dailynote.*工具等session.go管理会话tools.go与compaction.go分别负责工具注册与上下文压缩modelmeta.go与 models.json 描述可用模型。Agent 通过 kernel/mcp/client/ 集成 MCP 工具调用并严格约束不捏造块 ID未找到就如实说明。七、界面与编辑体验增强摘要本版本 Enhancement 清单非常长完整条目见更新日志按主题归纳如下界面布局合并顶部标题栏与标签栏#10749、底部 Dock 改进#8890、Dock 面板最小宽度保存与拖拽保持#17919、Windows 下自定义下拉框样式PR #17861块与编辑器超级块内拖拽调节块宽#9521、AltEnter列表末尾插入改进PR #16314、块的递归折叠/展开PR #17651、嵌入块支持原地编辑#17800、块图标支持在块上/下方快速插入#17900、块图标提示简化#17945数据库/属性视图过滤器组合#10550、条目创建副本#10850、多选字段拖拽排序#13468、页脚字段模板化计算#14394、日期字段输入格式化#13428、视图性能改进#17830表格合并单元格粘贴改进#11888、撤销编辑时保持横向滚动位置#13829、键盘导航不穿越合并单元格#17587、取消合并时tbody内th转td#17835移动端多块选择#13207、手机/桌面界面切换#13952、平板与移动端拖拽#17612、#17628、跟随系统锁屏#17625、Android 内核后台进程改进#17641导出Markdown 导出参数对话框#17031、桌面与移动端导出不再依赖浏览器下载#17405、#17580、嵌入块标题级别导出改进#17629、PDF 导出预览 UI 改进#17687安全与系统不再向浏览器暴露工作空间绝对路径#17410、工作空间丢失后的启动提示改进#14748、数据同步 DNS 故障时自动刷新本地 DNS 缓存并重试#17936、macOS GPU 占用异常修复#17087。另有两条值得注意的行为变更废弃Abolishment——不再支持把列表块直接插入列表项块#17890Agent 系统提示词中也明确嵌套列表须先在内层列表项下创建新的 list 块两者互相印证重构Refactor——升级 Electron 至 v42.5.0、highlight.js 升级至 v11.11.2、不再创建blocks_fts_case_insensitive表#17849。八、面向开发者的 API 变更本版本对插件开发者与 API 使用者有若干破坏性变更完整清单见更新日志 Development 一节部分内核 API 存在破坏性变更#15727/api/history/rollbackDocHistory移除notebook参数#17411updateTransaction弃用由updateTransactionElement替代#17828lang取值改为符合 RFC 5646#17855——对照serve --lang的参数说明可见语言代码集合已按此规范整理新增能力/api/query/sql支持只读模式PR #17696、新增内核 API/api/lute/md2htmlPR #17697与/api/history/createDocHistory#17774、LocalStorage 相关 API 改进PR #17482、addDock允许在任意生命周期阶段调用#17506、插件函数支持导出文件#15484。文档方面本版本补齐了三份关键资料仓库中均可直接查阅docs/SY-FORMAT.md.sy文件 JSON 结构规范面向 AI 读写场景明确了 HTTP API、MCP、CLI、直接读写.sy四种数据通道的分工与索引重建注意事项docs/WORKSPACE.md工作空间磁盘布局docs/API.mdAPI 文档本版本新增了 Database 相关端点#11130。九、小结SiYuan v3.7.0 的更新日志表面是一份功能清单实际勾勒出产品架构的三个转向服务与命令分离serve子命令化 全功能 CLI脚本化与自动化首次成为官方一等公民、前端与状态分离内核插件常驻内核多窗口共享单一数据真相源、笔记与智能体融合Agent 与向量嵌入搜索公测密钥/变量体系为 LLM 调用提供安全凭据通道。对运维与开发者而言理解serve的完整参数、CLI 的全局 flag 与退出前索引落库行为、加密笔记本在 CLI 中的禁用边界是正确使用本版本新能力的前提。【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表