<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Blog</title><description>Jones Ray</description><link>https://sues.fun/</link><language>zh_CN</language><item><title>Claude Code 命令速查：斜杠命令、全局参数与子命令</title><link>https://sues.fun/posts/260903_claudecodecommands/</link><guid isPermaLink="true">https://sues.fun/posts/260903_claudecodecommands/</guid><description>基于本机 Claude Code 2.1.259 实测整理的一份完整命令速查，覆盖 110 条斜杠命令、52 个全局参数与 18 个子命令。</description><pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;记命令是件反人性的事。所以这一篇，我把 Claude Code 从「怎么启动」到「有哪些斜杠命令、参数、子命令」全部整理成一张可查的表。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Claude Code 的命令看起来多，其实只有三种形态：&lt;strong&gt;斜杠命令&lt;/strong&gt;（进入 &lt;code&gt;claude&lt;/code&gt; 之后敲 &lt;code&gt;/&lt;/code&gt;）、&lt;strong&gt;全局参数&lt;/strong&gt;（启动时附加 &lt;code&gt;--flag&lt;/code&gt;）、&lt;strong&gt;子命令&lt;/strong&gt;（&lt;code&gt;claude &amp;lt;子命令&amp;gt;&lt;/code&gt;）。分清楚这三类，剩下的就是查表。&lt;/p&gt;
&lt;p&gt;本文基于本机已安装的 &lt;strong&gt;Claude Code 2.1.259&lt;/strong&gt;，命令与参数来自 &lt;code&gt;claude --help&lt;/code&gt; 的实际输出，斜杠命令以官方文档为准。不同版本的命令可能略有差异（文末已标注本版本中被移除的几条），遇到疑问时运行 &lt;code&gt;claude --help&lt;/code&gt; 或 &lt;code&gt;claude &amp;lt;命令&amp;gt; --help&lt;/code&gt; 看本机说明，交互界面内输入 &lt;code&gt;/help&lt;/code&gt; 看完整斜杠命令清单。&lt;/p&gt;
&lt;p&gt;本文适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;刚开始用 Claude Code、想快速摸清命令体系的人；&lt;/li&gt;
&lt;li&gt;已经用了很久、但总想不起来某个斜杠命令拼法的人；&lt;/li&gt;
&lt;li&gt;想在脚本 / CI 里做非交互调用（&lt;code&gt;-p&lt;/code&gt;）的人。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%80%E4%B8%89%E7%A7%8D%E5%BD%A2%E6%80%81%E6%80%8E%E4%B9%88%E5%88%86&quot;&gt;三种形态怎么分&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BA%8C%E6%96%9C%E6%9D%A0%E5%91%BD%E4%BB%A4&quot;&gt;斜杠命令&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%89%E5%85%A8%E5%B1%80%E5%8F%82%E6%95%B0&quot;&gt;全局参数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%9B%9B%E5%AD%90%E5%91%BD%E4%BB%A4&quot;&gt;子命令&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BA%94%E5%AE%89%E5%85%A8%E6%8F%90%E9%86%92&quot;&gt;安全提醒&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;一、三种形态怎么分&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;形态&lt;/th&gt;
&lt;th&gt;什么时候用&lt;/th&gt;
&lt;th&gt;例子&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;斜杠命令&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进入 &lt;code&gt;claude&lt;/code&gt; 交互界面后，在输入框敲 &lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/help&lt;/code&gt;、&lt;code&gt;/review&lt;/code&gt;、&lt;code&gt;/compact&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;全局参数&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;启动 &lt;code&gt;claude&lt;/code&gt; 时附加 &lt;code&gt;--flag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude -p &quot;...&quot;&lt;/code&gt;、&lt;code&gt;claude --model sonnet&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;子命令&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude&lt;/code&gt; 后面跟一个动词&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude doctor&lt;/code&gt;、&lt;code&gt;claude mcp add&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一句话：&lt;strong&gt;斜杠命令管「对话里做什么」，全局参数管「这次怎么跑」，子命令管「claude 这个工具本身的配置与诊断」。&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、斜杠命令&lt;/h2&gt;
&lt;h3&gt;会话与上下文&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/help&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;显示帮助与可用命令。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/clear [name]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;清空上下文开始新会话（别名 &lt;code&gt;/reset&lt;/code&gt;、&lt;code&gt;/new&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/compact [instructions]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;压缩对话，释放上下文空间。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/context [all]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;用彩色网格可视化上下文占用，并给优化建议。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/export [filename]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;把当前对话导出为纯文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/copy [N]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;复制最近（或第 N 条）助手回复到剪贴板。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/resume [session]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;按 ID / 名称恢复会话，或打开选择器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/rewind&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;回退对话和/或代码到某个检查点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/fork [prompt]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;把当前对话复制成新的后台会话。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/branch [name]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;在此处创建会话分支，尝试不同方向。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/background [prompt]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;将会话转到后台运行（别名 &lt;code&gt;/bg&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/stop&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;停止当前后台会话。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;打开设置的状态页（版本 / 模型 / 账户 / 连接）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/usage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看用量与花费（别名 &lt;code&gt;/cost&lt;/code&gt;、&lt;code&gt;/stats&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/goal [condition/clear]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;设置跨轮次持续执行的目标。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/btw [question]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;旁路提问，不写入对话历史。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/focus&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;切换焦点视图（只显示提示、工具摘要与最终回复）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/recap&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;按需生成当前会话的一句话总结。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/rename [name]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;重命名当前会话并显示在提示栏。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/diff&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;打开交互式 diff 查看器（未提交改动 + 每轮 diff）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/tui [default/fullscreen]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;切换 TUI 渲染模式。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;模型、配置与权限&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/model [model]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;切换模型并设为新会话默认。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/effort [level/auto/status]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;设置推理强度（low–xhigh、max、auto）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/fast [on/off]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;切换快速模式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/config [key=value ...]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;打开设置界面或直接改配置（别名 &lt;code&gt;/settings&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/theme&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;切换颜色主题（含跟随终端明暗的 auto）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/color [color/default]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;设置当前会话提示栏颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/vim&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;已移除（v2.1.92），改用 &lt;code&gt;/config&lt;/code&gt; → Editor。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/autocompact [auto/tokens]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;设置自动压缩的上下文阈值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/permissions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;管理工具的 allow / ask / deny 规则（别名 &lt;code&gt;/allowed-tools&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/hooks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看工具事件相关的 Hook 配置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/keybindings&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;打开键盘快捷键配置文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/add-dir &amp;lt;path&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;为当前会话添加工作目录。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/cd &amp;lt;path&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;切换会话工作目录（保留对话）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/memory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;编辑 CLAUDE.md 并管理自动记忆。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/sandbox&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;切换沙箱模式（仅受支持平台）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/statusline&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;配置状态栏。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/scroll-speed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;交互式调整鼠标滚轮滚动速度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/rate-limit-options&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看被限流时的续作选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/terminal-setup&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;安装 Shift+Enter 换行键绑定等终端配置。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;审查、计划与任务&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;为当前项目生成 CLAUDE.md 指令文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/plan [description]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;进入计划模式，先规划再实施。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/review [...]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;审查当前 diff（主命令 &lt;code&gt;/code-review&lt;/code&gt;，可 &lt;code&gt;--fix&lt;/code&gt; / &lt;code&gt;--comment&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/security-review&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;分析当前分支改动中的安全漏洞。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/simplify [target]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;审查并清理改动的可复用 / 精简项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/ultraplan &amp;lt;prompt&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;已移除，改用 plan 模式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/ultrareview [PR/branch]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;云端沙箱多智能体深度审查。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/pr-comments [PR]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;已移除（v2.1.91），直接让 Claude 查看 PR 评论。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/agents&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;提示创建 / 管理子代理（或直接编辑 &lt;code&gt;.claude/agents/&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/list-agents&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列出子代理、队友与可通信会话（别名 &lt;code&gt;/peers&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/subtask &amp;lt;task&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;派生子代理处理子任务并回报。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/tasks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看管理后台任务与已完成的子代理。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/verify&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;构建 / 运行项目，确认改动达到预期。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;启动并驱动项目应用，查看改动真实效果。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/run-skill-generator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;教 &lt;code&gt;/run&lt;/code&gt;、&lt;code&gt;/verify&lt;/code&gt; 如何构建 / 启动本项目。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/workflows&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;打开工作流进度视图（观看 / 暂停 / 恢复）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/workflow-authoring&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;加载动态工作流编写参考。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;MCP、插件与集成&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/mcp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;管理 MCP 连接与 OAuth 认证。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/plugin [subcommand]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;管理插件（list / install / enable / disable）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/skills&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列出可用 skills，可按名称 / 描述过滤。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/reload-plugins [--force]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;不重启重新加载所有插件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/reload-skills&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;重新扫描 skill 与命令目录。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/ide&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;管理 IDE 集成并显示状态。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/login&lt;/code&gt; / &lt;code&gt;/logout&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;登录 / 登出 Anthropic 账号。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/bug [report]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;反馈 Bug 或分享会话（别名 &lt;code&gt;/share&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/feedback [report]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;发送产品反馈。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/import [codex/gemini]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;从 Codex / Gemini 导入配置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/install-github-app&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;为仓库安装 Claude GitHub App。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/install-slack-app&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;通过浏览器 OAuth 安装 Claude Slack App。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/web-setup&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;连接 GitHub 账号到 Claude Code on the web。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/setup-bedrock&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;配置 Amazon Bedrock。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/setup-vertex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;配置 Google Vertex AI。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;云、远程、语音与账户&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/remote-control&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;启用 / 管理远程控制。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/remote-env&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;选择云端 agent 的默认环境。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/teleport&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;把 web 会话拉进当前终端。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/desktop&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;转到 Claude Code 桌面应用继续（别名 &lt;code&gt;/app&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/mobile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;显示移动端下载二维码（别名 &lt;code&gt;/ios&lt;/code&gt;、&lt;code&gt;/android&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/chrome&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;配置 Claude in Chrome 集成。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/voice [hold/tap/off]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;切换语音输入。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/schedule [description]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;创建 / 管理云端例程（routines）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/upgrade&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;打开升级页面切换更高套餐。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/release-notes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;在版本选择器中查看更新日志。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/usage-credits&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;配置用量额度或向管理员申请。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/team-onboarding&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;根据使用历史生成团队上手指南。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/privacy-settings&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看 / 更新隐私设置（Pro / Max）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/insights&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;生成近期会话使用分析 HTML 报告。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/advisor [model/off]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;启停顾问工具（关键时刻咨询第二模型）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/artifacts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列出并附加拥有的 / 共享的 artifacts。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/auto-mode-setup&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;生成 autoMode.environment 配置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/autofix-pr [prompt]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;云端会话盯 PR，修 CI 失败与评论。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/passes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;分享一周免费试用（符合条件才显示）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/powerup&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;通过交互式教学了解功能。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/radio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;浏览器打开 Claude FM 电台。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/stickers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;订购 Claude Code 贴纸。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/heapdump&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;写 JS 堆快照（隐藏命令，用于排查内存）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;内置技能（bundled skills）&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/code-review [level]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;审查 diff / PR / 分支（&lt;code&gt;/review&lt;/code&gt; 即其别名）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/loop [interval] [prompt]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;定时重复运行某条提示（别名 &lt;code&gt;/proactive&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/dataviz [request]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;图表 / 可视化的设计规范指导。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/debug [description]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;启用调试日志并读取会话日志排障。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/deep-research &amp;lt;question&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;联网搜索 + 交叉验证 + 生成带引用报告。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/design [brief]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;生成 UI 草图 / 流程图 / 落地页。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/design-login&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;授权设计系统访问。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/design-sync [hint]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;把 React 设计系统同步上传到 Claude Design。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/claude-api [...]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;加载 Claude API / Managed Agents 参考（迁移、升级、审计等）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/batch &amp;lt;instruction&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;研究、分解并并行执行大规模改动。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/fewer-permission-prompts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;扫描会话并生成权限白名单，减少弹窗。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;三、全局参数&lt;/h2&gt;
&lt;h3&gt;常用参数&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th&gt;含义&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-p&lt;/code&gt; / &lt;code&gt;--print&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;非交互打印输出后退出，适合管道与 CI。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude -p &quot;...&quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-c&lt;/code&gt; / &lt;code&gt;--continue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;继续当前目录最近一次会话。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude -c&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-r&lt;/code&gt; / &lt;code&gt;--resume [id]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;恢复指定会话 ID，或打开会话选择器。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude -r&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;指定模型，可用别名 &lt;code&gt;fable&lt;/code&gt; / &lt;code&gt;opus&lt;/code&gt; / &lt;code&gt;sonnet&lt;/code&gt; 或全名。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude --model sonnet&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--fallback-model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;主模型过载时自动回退（仅 &lt;code&gt;--print&lt;/code&gt;）。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--fallback-model haiku&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--effort&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;推理强度：low / medium / high / xhigh / max。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude --effort high&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--add-dir&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;额外授予某个目录访问权限，可重复使用。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude --add-dir ../shared&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--permission-mode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;权限模式：acceptEdits / plan / bypassPermissions / manual / dontAsk / auto。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude --permission-mode plan&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--allowedTools&lt;/code&gt; / &lt;code&gt;--disallowedTools&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;允许 / 禁止指定工具（逗号或空格分隔）。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--allowedTools &quot;Bash(git *) Edit&quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--tools&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;指定内置工具集；&lt;code&gt;&quot;&quot;&lt;/code&gt; 禁用全部，&lt;code&gt;default&lt;/code&gt; 全部启用。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--tools &quot;Bash,Edit,Read&quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--output-format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;输出格式：text / json / stream-json（仅 &lt;code&gt;--print&lt;/code&gt;）。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--output-format json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--input-format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;输入格式：text / stream-json（仅 &lt;code&gt;--print&lt;/code&gt;）。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--input-format stream-json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--max-turns&lt;/code&gt; / &lt;code&gt;--max-budget-usd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;限制最大轮次 / API 花费上限（仅 &lt;code&gt;--print&lt;/code&gt;）。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--max-turns 5 --max-budget-usd 1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--append-system-prompt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;在默认系统提示后追加内容。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--append-system-prompt &quot;你是安全专家&quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--system-prompt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;自定义本次会话的系统提示。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--system-prompt &quot;你是 Rust 专家&quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--session-id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;用固定 UUID 作为会话 ID。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--session-id &amp;lt;UUID&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--fork-session&lt;/code&gt; / &lt;code&gt;--from-pr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;恢复时新建会话 ID / 按 PR 恢复关联会话。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--continue --fork-session&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--mcp-config&lt;/code&gt; / &lt;code&gt;--strict-mcp-config&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;从 JSON 文件加载 MCP；strict 则忽略其他 MCP 配置。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--mcp-config ./mcp.json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--settings&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;加载额外设置文件或 JSON 字符串。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--settings ./settings.json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--restricted&lt;/code&gt; / &lt;code&gt;--safe-mode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;受限模式（禁用运行命令的工具）/ 安全模式（禁用全部自定义）。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude --safe-mode&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-w&lt;/code&gt; / &lt;code&gt;--worktree&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;为本会话创建新的 git worktree。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude -w&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--bg&lt;/code&gt; / &lt;code&gt;--background&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;后台启动会话并立即返回 ID。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude --bg&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--verbose&lt;/code&gt; / &lt;code&gt;-d&lt;/code&gt; / &lt;code&gt;--debug&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;详细输出 / 调试模式（可带类别过滤）。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude -d&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--json-schema&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;结构化输出校验（JSON Schema）。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--json-schema &apos;{&quot;type&quot;:&quot;object&quot;,...}&apos;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-n&lt;/code&gt; / &lt;code&gt;--name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;设置会话显示名。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude -n &quot;重构&quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--ide&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;启动时自动连接唯一可用 IDE。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude --ide&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;进阶参数&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th&gt;含义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--agent&lt;/code&gt; / &lt;code&gt;--agents&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;指定会话 agent / 用 JSON 定义自定义 agents。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--allow-dangerously-skip-permissions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;把「跳过权限」作为可选项（不默认启用）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--autocompact &amp;lt;auto/tokens&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;设置自动压缩的上下文阈值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--bare&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;极简模式：跳过 hooks、LSP、插件、CLAUDE.md 自动发现等。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--chrome&lt;/code&gt; / &lt;code&gt;--no-chrome&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;启用 / 禁用 Claude in Chrome 集成。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--cloud&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;创建云端会话，或按 ID / URL 接入已有会话。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--debug-file &amp;lt;path&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;调试日志写入指定文件（隐式开启调试）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--disable-slash-commands&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;禁用全部 skills。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--environment &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;在指定自托管环境创建云端会话。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--file &amp;lt;specs&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;启动时下载文件资源（file_id:relative_path）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--no-session-persistence&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;禁用会话持久化，不落盘、不可恢复（仅 &lt;code&gt;--print&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--permission-prompts &amp;lt;host/none&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;谁回答权限提示：host 或 none（自动拒绝）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--plugin-dir&lt;/code&gt; / &lt;code&gt;--plugin-url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;临时加载插件（目录 / zip / URL，可重复）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--prompt-suggestions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;启用提示建议（print/SDK 模式）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--remote-control&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;以远程控制方式启动交互会话。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--setting-sources&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;指定加载的设置来源（user/project/local）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--teleport&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;恢复 teleport 会话。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--tmux&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;为 worktree 创建 tmux 会话（需 &lt;code&gt;--worktree&lt;/code&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--ax-screen-reader&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;屏幕阅读器友好输出（无装饰边框/动画）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--betas&lt;/code&gt; / &lt;code&gt;--brief&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Beta 头（仅 API key）/ 启用 agent↔user 通信工具。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--include-partial-messages&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;流式输出中附带部分消息块（stream-json）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--include-hook-events&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;输出流中包含全部 hook 生命周期事件（stream-json）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--replay-user-messages&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;把 stdin 用户消息回显到 stdout（stream-json）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--forward-subagent-text&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;转发子代理文本/思考块（&lt;code&gt;--print&lt;/code&gt; + stream-json）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--system-prompt-snapshot &amp;lt;on/off&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;是否记录并复用系统提示（默认内置提示为 on）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--exclude-dynamic-system-prompt-sections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;把按机器变化的部分移出系统提示，提升 prompt 缓存复用。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;常用用法示例&lt;/h3&gt;
&lt;p&gt;非交互执行，适合脚本 / CI：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;claude -p &quot;运行测试并修复失败&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;JSON 输出，便于解析：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;claude -p &quot;列出 TODO&quot; --output-format json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;流式 JSON 输出（供 Agent SDK 使用）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;claude -p &quot;...&quot; --output-format stream-json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;流式 JSON 输入（从 stdin 持续读消息）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;claude -p --input-format stream-json --output-format stream-json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;限制工具集与轮次预算：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;claude -p &quot;...&quot; --allowedTools &quot;Bash(git *) Edit&quot; --max-turns 5 --max-budget-usd 1
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、子命令&lt;/h2&gt;
&lt;h3&gt;启动&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;启动交互界面，随后直接描述任务。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude &quot;检查项目并运行测试&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;带初始任务启动。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude --help&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看当前版本支持的完整命令和参数。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude --version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看版本号。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;会话与后台&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude --bg &quot;跑全量测试&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;会话转到后台运行，立即返回会话 ID。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude agents&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列出后台运行中的会话及其 ID。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude attach &amp;lt;ID&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;把某个后台会话拉回当前终端。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude logs &amp;lt;ID&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;打印后台会话最近的终端输出。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude stop &amp;lt;ID&amp;gt;&lt;/code&gt; / &lt;code&gt;claude rm &amp;lt;ID&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;停止会话（保留对话）/ 删除已退出的会话。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude respawn &amp;lt;ID&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;以当前版本重启后台会话（&lt;code&gt;--all&lt;/code&gt; 重启全部）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;代码审查&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude ultrareview&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;对当前分支或 PR 跑云托管多智能体审查。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude ultrareview 123&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;审查某个 PR 编号或基准分支。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;认证&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude auth login&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;使用 Anthropic 账号登录。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude auth status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看登录状态，适合脚本判断凭据是否存在。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude auth logout&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;清除当前登录凭据。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude setup-token&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;为订阅用户设置长期认证令牌。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;MCP 服务器管理&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude mcp add my-server -- npx my-mcp-server&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;添加 stdio 服务器，&lt;code&gt;--&lt;/code&gt; 分隔命令与参数。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude mcp add --transport http sentry https://mcp.sentry.dev/mcp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;添加 HTTP 服务器，可带请求头。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude mcp add my-server -e API_KEY=xxx -- npx my-mcp-server&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;添加时通过 &lt;code&gt;-e KEY=value&lt;/code&gt; 注入环境变量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude mcp list&lt;/code&gt; / &lt;code&gt;claude mcp get &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列出已配置服务器 / 查看单个详情。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude mcp remove &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;移除某个 MCP 服务器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude mcp serve&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;把 Claude Code 自身作为 MCP 服务器暴露。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;插件管理&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude plugin install my-plugin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;从市场安装，可指定 &lt;code&gt;插件@市场&lt;/code&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude plugin list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看已安装插件列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude plugin uninstall my-plugin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;卸载已安装插件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude plugin marketplace add &amp;lt;repo&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;添加插件市场仓库。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;诊断、迁移与更新&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude doctor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;检查认证、配置、Git、终端等常见问题。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;检查并安装可用更新。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude install stable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;安装原生构建，可指定 stable / latest / 具体版本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude import codex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;从 Codex / Gemini 导入配置（&lt;code&gt;--dry-run&lt;/code&gt; 预览）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude project purge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;删除某项目的全部 Claude 状态（会话、任务等）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude auto-mode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看或重置自动模式分类器配置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude gateway&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;运行企业认证 / 遥测网关。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;五、安全提醒&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;--dangerously-skip-permissions&lt;/code&gt; 会跳过所有权限检查，等同让 Claude 自动执行全部命令，&lt;strong&gt;仅建议在无外网的沙箱中使用&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;日常建议保留默认审批，或按需收窄：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--permission-mode plan&lt;/code&gt;：只规划、不动手；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--permission-mode acceptEdits&lt;/code&gt;：仅自动接受文件编辑；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--restricted&lt;/code&gt;：受限模式，禁用运行命令的工具；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--safe-mode&lt;/code&gt;：安全模式，禁用全部自定义配置。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从保守到激进，优先级由低到高排好，多数日常场景用默认审批就够。&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;版本说明：&lt;/strong&gt;&lt;code&gt;/vim&lt;/code&gt;（v2.1.92 起移除）、&lt;code&gt;/pr-comments&lt;/code&gt;（v2.1.91 起移除）、&lt;code&gt;/ultraplan&lt;/code&gt;（已移除）在本版本中不再可用。命令以本机 &lt;code&gt;claude --help&lt;/code&gt; 与官方文档为准，升级后如有出入，以 &lt;code&gt;claude --help&lt;/code&gt; 为准。&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>用飞书多维表格搭建自动记账系统：从 Python 到 iPhone 快捷指令</title><link>https://sues.fun/posts/260831_feishuaccounting/</link><guid isPermaLink="true">https://sues.fun/posts/260831_feishuaccounting/</guid><description>从文字记账升级到图片凭证，完整拆解飞书多维表格、Python 与 iPhone 快捷指令的自动记账流程。</description><pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;在电脑上输入一条 Python 命令，或者在 iPhone 上运行一个快捷指令，就能把金额、备注以及可选的付款截图写入飞书多维表格。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;每次打开记账 App、选择分类、填写金额，步骤看起来不多，却很容易让人产生“稍后再记”的念头。于是我做了一套更直接的方案，让记账这件事尽量接近随手完成。&lt;/p&gt;
&lt;p&gt;这篇文章会从实际可用的普通版出发，讲清楚如何升级到支持图片凭证的高阶版，并拆解背后的 HTTP 请求。即使不运行 Python，也可以按照同样的接口流程，在 iOS 快捷指令中零代码复刻。&lt;/p&gt;
&lt;p&gt;本文适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想用飞书多维表格管理个人收支的人；&lt;/li&gt;
&lt;li&gt;已经完成文字记账，准备增加小票或付款截图的人；&lt;/li&gt;
&lt;li&gt;想理解飞书应用鉴权、素材上传和新增记录流程的人。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;**发布前安全说明：**本文中的应用凭据和资源 ID 均为占位符。请勿把自己的 &lt;code&gt;APP_SECRET&lt;/code&gt; 发布到博客、代码仓库或公开分享的快捷指令中。如果密钥曾经公开，应立即在飞书开放平台重置。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%80%E6%A0%B8%E5%BF%83%E6%9E%B6%E6%9E%84%E4%B8%8E%E8%BF%90%E8%A1%8C%E5%8E%9F%E7%90%86&quot;&gt;核心架构与运行原理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BA%8C%E5%89%8D%E7%BD%AE%E5%87%86%E5%A4%87%E5%8F%82%E6%95%B0%E4%B8%8E%E6%9D%83%E9%99%90%E6%B8%85%E5%8D%95&quot;&gt;前置准备：参数与权限清单&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%89%E5%BA%95%E5%B1%82-http-api-%E6%8E%A5%E5%8F%A3%E6%89%8B%E5%86%8C%E5%A4%8D%E5%88%BB%E6%A0%B8%E5%BF%83&quot;&gt;底层 HTTP API 接口手册（复刻核心）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%9B%9B%E6%89%8B%E6%9C%BA%E7%AB%AF-diy-%E5%A4%8D%E5%88%BBios-%E5%BF%AB%E6%8D%B7%E6%8C%87%E4%BB%A4%E5%AE%9E%E6%93%8D%E6%AD%A5%E9%AA%A4&quot;&gt;手机端 DIY 复刻：iOS 快捷指令实操步骤&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BA%94%E7%94%B5%E8%84%91%E7%AB%AF-python-%E8%84%9A%E6%9C%AC%E8%BF%90%E8%A1%8C%E4%B8%8E%E4%BB%A3%E7%A0%81%E8%A7%A3%E6%9E%90&quot;&gt;电脑端 Python 脚本运行与代码解析&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%85%AD%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF%E6%8E%92%E6%9F%A5%E9%80%9F%E6%9F%A5%E8%A1%A8&quot;&gt;常见错误排查速查表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%83%E7%BB%93%E8%AF%AD%E5%85%88%E8%AE%A9%E6%9C%80%E7%9F%AD%E9%93%BE%E8%B7%AF%E7%A8%B3%E5%AE%9A%E8%BF%90%E8%A1%8C&quot;&gt;结语：先让最短链路稳定运行&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;一、核心架构与运行原理&lt;/h2&gt;
&lt;h3&gt;1.1 Python SDK vs 手机快捷指令&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python SDK（封装视角）&lt;/strong&gt;：通过 &lt;code&gt;lark-oapi&lt;/code&gt; 库，只需填入 &lt;code&gt;APP_ID&lt;/code&gt; 和 &lt;code&gt;APP_SECRET&lt;/code&gt;，SDK 在底层自动完成鉴权换 Token、缓存与请求头装配。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;手机端/原生 HTTP（底层视角）&lt;/strong&gt;：没有 SDK 支持，必须由快捷指令手动按顺序发起 &lt;strong&gt;2 步（文字版）&lt;/strong&gt; 或 &lt;strong&gt;3 步（图片版）&lt;/strong&gt; 标准 HTTP 请求。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.2 数据流向图解&lt;/h3&gt;
&lt;h4&gt;版本一：极速文字记账&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;image/260831_02.png&quot; alt=&quot;260831_02&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;版本二：图文结合记账（附带小票/截图凭证）&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;image/260831_03.png&quot; alt=&quot;260831_03&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、前置准备：参数与权限清单&lt;/h2&gt;
&lt;h3&gt;2.1 必备的 4 个核心标识符&lt;/h3&gt;
&lt;p&gt;在开发或配置时，准备好以下 4 项参数：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;参数名称&lt;/th&gt;
&lt;th&gt;示例值&lt;/th&gt;
&lt;th&gt;说明与获取途径&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;APP_ID&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cli_xxxxxxxxxxxxxxxx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;飞书开放平台 → 开发者后台 → 自建应用 → &lt;strong&gt;凭证与基础信息&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;APP_SECRET&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;your_app_secret&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;同上（&lt;strong&gt;重要&lt;/strong&gt;：请妥善保管，勿泄露）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;APP_TOKEN&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bascnxxxxxxxxxxxxxxx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;多维表格浏览器地址栏中 &lt;code&gt;/base/&lt;/code&gt; 后面的字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;TABLE_ID&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tblxxxxxxxxxxxxxxx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;多维表格浏览器地址栏中 &lt;code&gt;?table=&lt;/code&gt; 后面的字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;2.2 两层权限（缺一不可）&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;应用 API 权限（开发者后台）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;申请 &lt;code&gt;查看、评论、编辑和管理多维表格&lt;/code&gt; (&lt;code&gt;bitable:app&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;申请 &lt;code&gt;查看、评论、编辑和管理云空间中所有文件&lt;/code&gt; (&lt;code&gt;drive:drive&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关键&lt;/strong&gt;：勾选后必须进入「&lt;strong&gt;版本管理与发布&lt;/strong&gt;」创建并&lt;strong&gt;发布新版本&lt;/strong&gt;，权限才会生效。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多维表格文档协作者权限（多维表格前端）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;打开目标多维表格，点击右上角「&lt;strong&gt;...&lt;/strong&gt;」→「&lt;strong&gt;添加文档应用&lt;/strong&gt;」；&lt;/li&gt;
&lt;li&gt;搜索并选择刚才创建的自建应用，赋予&lt;strong&gt;编辑权限&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;2.3 多维表格字段配置&lt;/h3&gt;
&lt;p&gt;在多维表格中建好以下字段（名称需与脚本/快捷指令完全一致）：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;字段名称&lt;/th&gt;
&lt;th&gt;字段类型&lt;/th&gt;
&lt;th&gt;必需版本&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;货币&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;货币 或 数字&lt;/td&gt;
&lt;td&gt;普通版 / 图片版&lt;/td&gt;
&lt;td&gt;保存金额（支出默认记为负数）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;备注&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;单行文本 或 多行文本&lt;/td&gt;
&lt;td&gt;普通版 / 图片版&lt;/td&gt;
&lt;td&gt;保存消费说明&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;图片&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;附件&lt;/td&gt;
&lt;td&gt;图片版必需&lt;/td&gt;
&lt;td&gt;保存小票或支付截图&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;三、底层 HTTP API 接口手册（复刻核心）&lt;/h2&gt;
&lt;h3&gt;接口 1：获取租户访问凭证 (tenant_access_token)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;请求方式&lt;/strong&gt;：&lt;code&gt;POST&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;请求 URL&lt;/strong&gt;：&lt;code&gt;https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;请求头 (Headers)&lt;/strong&gt;：&lt;pre&gt;&lt;code&gt;Content-Type: application/json; charset=utf-8
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;请求体 (Body - JSON)&lt;/strong&gt;：&lt;pre&gt;&lt;code&gt;{
  &quot;app_id&quot;: &quot;你的_APP_ID&quot;,
  &quot;app_secret&quot;: &quot;你的_APP_SECRET&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;返回示例&lt;/strong&gt;：&lt;pre&gt;&lt;code&gt;{
  &quot;code&quot;: 0,
  &quot;msg&quot;: &quot;ok&quot;,
  &quot;tenant_access_token&quot;: &quot;t-g1049b1xxxxxxxxxxxx&quot;,
  &quot;expire&quot;: 7140
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;解析字段&lt;/strong&gt;：提取 &lt;code&gt;tenant_access_token&lt;/code&gt;（有效期 2 小时）。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;接口 2：上传图片素材 (upload_all)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;请求方式&lt;/strong&gt;：&lt;code&gt;POST&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;请求 URL&lt;/strong&gt;：&lt;code&gt;https://open.feishu.cn/open-apis/drive/v1/medias/upload_all&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;请求头 (Headers)&lt;/strong&gt;：&lt;pre&gt;&lt;code&gt;Authorization: Bearer &amp;lt;获取到的_tenant_access_token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;请求体格式&lt;/strong&gt;：&lt;code&gt;multipart/form-data&lt;/code&gt;（表单提交）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;表单字段 (Form Data)&lt;/strong&gt;：&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;字段名&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;必填&lt;/th&gt;
&lt;th&gt;示例值&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;file_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2026-08-22.jpg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;上传后的图片名称&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;parent_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bitable_image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;固定值&lt;/strong&gt;：多维表格图片素材&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;parent_node&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bascnxxxxxxxxxxxxxxx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;多维表格的 &lt;strong&gt;&lt;code&gt;APP_TOKEN&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;td&gt;&lt;code&gt;102400&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;图片文件的实际字节大小 (Bytes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;td&gt;&lt;em&gt;[二进制图片流]&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;图片文件数据&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;返回示例&lt;/strong&gt;：&lt;pre&gt;&lt;code&gt;{
  &quot;code&quot;: 0,
  &quot;msg&quot;: &quot;success&quot;,
  &quot;data&quot;: {
    &quot;file_token&quot;: &quot;boxcnABC123XYZ456&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;解析字段&lt;/strong&gt;：提取 &lt;code&gt;data.file_token&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;接口 3：多维表格新增记录 (records/create)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;请求方式&lt;/strong&gt;：&lt;code&gt;POST&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;请求 URL&lt;/strong&gt;：&lt;code&gt;https://open.feishu.cn/open-apis/bitable/v1/apps/{APP_TOKEN}/tables/{TABLE_ID}/records&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;请求头 (Headers)&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Authorization: Bearer &amp;lt;获取到的_tenant_access_token&amp;gt;
Content-Type: application/json; charset=utf-8
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;请求体 (Body - JSON)&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;情况 A：纯文字记账&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;fields&quot;: {
    &quot;货币&quot;: -43.98,
    &quot;备注&quot;: &quot;盖饭&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;情况 B：带图片凭证记账&lt;/strong&gt;（注意：图片字段是包含对象的数组）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;fields&quot;: {
    &quot;货币&quot;: -43.98,
    &quot;备注&quot;: &quot;盖饭&quot;,
    &quot;图片&quot;: [
      {
        &quot;file_token&quot;: &quot;boxcnABC123XYZ456&quot;
      }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;返回示例&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;code&quot;: 0,
  &quot;msg&quot;: &quot;success&quot;,
  &quot;data&quot;: {
    &quot;record&quot;: {
      &quot;record_id&quot;: &quot;recuz789xxxx&quot;
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;四、手机端 DIY 复刻：iOS 快捷指令实操步骤&lt;/h2&gt;
&lt;p&gt;在 iPhone 上打开「快捷指令」App，新建一个快捷指令。&lt;/p&gt;
&lt;h3&gt;4.1 复刻版本一：极速文字记账&lt;/h3&gt;
&lt;h4&gt;动作搭建步骤：&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;输入金额&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;动作：&lt;code&gt;要求输入&lt;/code&gt; → 提示 &lt;code&gt;金额&lt;/code&gt; → 输入类型选 &lt;code&gt;数字&lt;/code&gt; → 设为变量 &lt;code&gt;原始金额&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;金额转负数&lt;/strong&gt;（支出记负）：
&lt;ul&gt;
&lt;li&gt;动作：&lt;code&gt;计算&lt;/code&gt; → &lt;code&gt;原始金额&lt;/code&gt; &lt;code&gt;×&lt;/code&gt; &lt;code&gt;-1&lt;/code&gt; → 设为变量 &lt;code&gt;最终金额&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输入备注&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;动作：&lt;code&gt;要求输入&lt;/code&gt; → 提示 &lt;code&gt;备注（如：午饭 盖饭）&lt;/code&gt; → 类型选 &lt;code&gt;文本&lt;/code&gt; → 设为变量 &lt;code&gt;备注&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;获取 Token（接口 1）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;动作：&lt;code&gt;获取 URL 内容&lt;/code&gt;：
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;方法: &lt;code&gt;POST&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;标头: &lt;code&gt;Content-Type&lt;/code&gt;: &lt;code&gt;application/json; charset=utf-8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;请求体: &lt;code&gt;JSON&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;app_id&lt;/code&gt; (文本) = &lt;code&gt;你的 APP_ID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;app_secret&lt;/code&gt; (文本) = &lt;code&gt;你的 APP_SECRET&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;动作：&lt;code&gt;从字典中获取值&lt;/code&gt; → 获取 &lt;code&gt;tenant_access_token&lt;/code&gt; → 设为变量 &lt;code&gt;Token&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;写入多维表格（接口 3）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;动作：&lt;code&gt;获取 URL 内容&lt;/code&gt;：
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://open.feishu.cn/open-apis/bitable/v1/apps/你的APP_TOKEN/tables/你的TABLE_ID/records&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;方法: &lt;code&gt;POST&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;标头:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Authorization&lt;/code&gt;: &lt;code&gt;Bearer &lt;/code&gt; 紧随变量 &lt;code&gt;Token&lt;/code&gt;（注意中间空格）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Content-Type&lt;/code&gt;: &lt;code&gt;application/json; charset=utf-8&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;请求体: &lt;code&gt;JSON&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;键 &lt;code&gt;fields&lt;/code&gt; (字典):
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;货币&lt;/code&gt; (数字) = &lt;code&gt;最终金额&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;备注&lt;/code&gt; (文本) = &lt;code&gt;备注&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;成功反馈&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;动作：&lt;code&gt;从字典中获取值&lt;/code&gt; → 获取 &lt;code&gt;code&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;动作：&lt;code&gt;如果&lt;/code&gt; &lt;code&gt;code&lt;/code&gt; &lt;code&gt;等于&lt;/code&gt; &lt;code&gt;0&lt;/code&gt; → &lt;code&gt;显示通知&lt;/code&gt;（记账成功：[最终金额] / [备注]）+ &lt;code&gt;触感反馈&lt;/code&gt;；&lt;code&gt;否则&lt;/code&gt; 提示错误。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h3&gt;4.2 复刻版本二：图文结合记账（带小票/截图）&lt;/h3&gt;
&lt;h4&gt;动作搭建步骤：&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;[开始]
  │
  ├─&amp;gt; 1. 判断是否有图片输入（快捷指令输入 / 相册选择 / 拍照）
  │      ├─ 有图片：设为变量 [原始图片]
  │      └─ 无图片：变量 [原始图片] 为空
  │
  ├─&amp;gt; 2. 要求输入 [金额] (转负数) 和 [备注]
  │
  ├─&amp;gt; 3. 调用接口 1 获取 tenant_access_token ──&amp;gt; 得到变量 [Token]
  │
  ├─&amp;gt; 4. 如果 [原始图片] 有值：
  │      ├─ a. 动作 [转换图像]：将图片转为 JPEG 格式（压缩质量 75%）
  │      ├─ b. 动作 [获取文件详细信息]：获取图片 &quot;文件大小&quot;（字节数）
  │      ├─ c. 动作 [获取当前日期]：格式化为 yyyy-MM-dd.jpg
  │      ├─ d. 动作 [获取 URL 内容]（调用接口 2 upload_all）：
  │      │       URL: https://open.feishu.cn/open-apis/drive/v1/medias/upload_all
  │      │       标头: Authorization: Bearer [Token]
  │      │       请求体: 表单 (Form)
  │      │         - file_name = [日期文件名]
  │      │         - parent_type = bitable_image
  │      │         - parent_node = [你的 APP_TOKEN]
  │      │         - size = [文件大小]
  │      │         - file = [处理后的图片]
  │      ├─ e. 提取返回中的 $.data.file_token ──&amp;gt; 得到变量 [file_token]
  │      └─ f. 用文本拼接带附件的 JSON（见 4.3 节技巧）
  │
  ├─&amp;gt; 5. 否则（无图）：
  │      └─ 用文本拼接纯文字 JSON
  │
  ├─&amp;gt; 6. 调用接口 3 写入记录
  │
  └─&amp;gt; 7. 弹出通知与震动提示完成
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h3&gt;4.3 快捷指令进阶技巧：用「文本」模板拼接 JSON&lt;/h3&gt;
&lt;p&gt;在 iOS 快捷指令中手动配置多层嵌套 JSON 容易出错。&lt;strong&gt;推荐做法&lt;/strong&gt;：使用一个「&lt;strong&gt;文本&lt;/strong&gt;」动作写好模板，把变量直接插入其中，再把文本传给请求体：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;带图 JSON 文本模板：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;fields&quot;: {
    &quot;货币&quot;: 最终金额,
    &quot;备注&quot;: &quot;备注&quot;,
    &quot;图片&quot;: [
      {
        &quot;file_token&quot;: &quot;file_token&quot;
      }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;(在快捷指令编辑器中，将 &lt;code&gt;最终金额&lt;/code&gt;、&lt;code&gt;备注&lt;/code&gt;、&lt;code&gt;file_token&lt;/code&gt; 替换为对应的魔术变量。在「获取 URL 内容」中，请求体选择「文件」，并将该文本作为输入即可)&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;五、电脑端 Python 脚本运行与代码解析&lt;/h2&gt;
&lt;h3&gt;5.1 环境安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;python -m pip install lark-oapi Pillow
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.2 脚本配置&lt;/h3&gt;
&lt;p&gt;打开 &lt;code&gt;记账.py&lt;/code&gt; 或 &lt;code&gt;记账-图片版.py&lt;/code&gt;，填写配置区域：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;APP_ID = &quot;cli_xxxxxxxxxxxxxxxx&quot;
APP_SECRET = &quot;your_app_secret&quot;

APP_TOKEN = &quot;bascnxxxxxxxxxxxxxxx&quot;
TABLE_ID = &quot;tblxxxxxxxxxxxxxxx&quot;

AMOUNT_FIELD = &quot;货币&quot;
REMARK_FIELD = &quot;备注&quot;
IMAGE_FIELD = &quot;图片&quot;      # 图片版专用
EXPENSE_AS_NEGATIVE = True # 支出强制记负数
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.3 运行命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 普通文字版
python 记账.py 43.98 盖饭

# 图片版（不带图）
python 记账-图片版.py 43.98 盖饭

# 图片版（带同目录图片）
python 记账-图片版.py 43.98 盖饭 1.png

# 图片版（带绝对路径图片）
python 记账-图片版.py 43.98 盖饭 &quot;D:\账单\1.png&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.4 图片版的关键优化&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;自动纠正方向&lt;/strong&gt;：通过 &lt;code&gt;ImageOps.exif_transpose()&lt;/code&gt; 读取手机拍摄的 EXIF 方向，避免小票倒置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;透明图层铺白底&lt;/strong&gt;：将带有透明通道的 PNG/WebP 转为纯白背景 RGB。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内存无损压缩&lt;/strong&gt;：在 &lt;code&gt;BytesIO&lt;/code&gt; 内存流中直接压缩为 JPEG（Quality 75），不产生本地临时垃圾文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;智能参数解析&lt;/strong&gt;：脚本自动检测最后一个参数是否为有效图片路径；若是则上传图片，其余参数合并为备注。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;六、常见错误排查速查表&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;返回码 (code) / 报错&lt;/th&gt;
&lt;th&gt;根本原因&lt;/th&gt;
&lt;th&gt;解决方案&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;99991663&lt;/code&gt; / &lt;code&gt;99991664&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;APP_ID&lt;/code&gt; 或 &lt;code&gt;APP_SECRET&lt;/code&gt; 错误&lt;/td&gt;
&lt;td&gt;检查飞书开发者后台「凭证与基础信息」，确保无前后空格。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;91403&lt;/code&gt; / &lt;code&gt;403 Forbidden&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1. 未开通并发布权限&amp;lt;br&amp;gt;2. &lt;strong&gt;未将应用加入文档&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1. 开放平台申请权限并&lt;strong&gt;发布版本&lt;/strong&gt;；&amp;lt;br&amp;gt;2. &lt;strong&gt;在多维表格右上角「...」→「添加文档应用」添加该自建应用（编辑权限）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;1254005&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;APP_TOKEN&lt;/code&gt; 错误&lt;/td&gt;
&lt;td&gt;确认复制的是 URL 中 &lt;code&gt;/base/&lt;/code&gt; 后面的整串 ID，不是知识库 token 或视图 ID。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;1254302&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TABLE_ID&lt;/code&gt; 错误&lt;/td&gt;
&lt;td&gt;确认复制的是当前记账数据表的 &lt;code&gt;table_id&lt;/code&gt;（以 &lt;code&gt;tbl&lt;/code&gt; 开头）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;1254040&lt;/code&gt; / &lt;code&gt;1254043&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;字段不存在 / 类型不匹配&lt;/td&gt;
&lt;td&gt;检查表格表头是否确为「货币」「备注」「图片」；「货币」字段必须是数字/货币类型，「图片」必须是附件类型。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;400 Bad Request&lt;/code&gt; (上传图片)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;参数格式不符合要求&lt;/td&gt;
&lt;td&gt;检查 &lt;code&gt;parent_type&lt;/code&gt; 是否固定为 &lt;code&gt;bitable_image&lt;/code&gt;；&lt;code&gt;parent_node&lt;/code&gt; 是否为 &lt;code&gt;APP_TOKEN&lt;/code&gt;；&lt;code&gt;size&lt;/code&gt; 需为图片字节大小。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;401 Unauthorized&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Token 无效或未携带&lt;/td&gt;
&lt;td&gt;请求头必须包含 &lt;code&gt;Authorization: Bearer &amp;lt;Token&amp;gt;&lt;/code&gt;（注意 &lt;code&gt;Bearer&lt;/code&gt; 和 Token 之间有一个空格）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;七、结语：先让最短链路稳定运行&lt;/h2&gt;
&lt;p&gt;这套自动记账系统的关键不在于功能堆得有多满，而在于把一次记账压缩成足够自然的动作：输入金额和备注，必要时再附上一张凭证。&lt;/p&gt;
&lt;p&gt;建议按照下面的顺序逐步验证：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;普通版成功写入金额与备注
        ↓
图片版在不带图时正常写入
        ↓
成功上传一张 JPG 或 PNG
        ↓
金额、备注和图片出现在同一条记录中
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当这条链路稳定后，还可以继续增加消费分类、支付方式、自动日期、月度统计和预算提醒。每次只增加一个变量，出了问题会更容易定位，也不会破坏已经好用的基础版本。&lt;/p&gt;
&lt;h3&gt;参考资料&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://open.feishu.cn/document/server-docs/docs/bitable-v1/app-table-record/create?lang=zh-CN&quot;&gt;飞书开放平台：新增多维表格记录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://open.feishu.cn/document/server-docs/docs/drive-v1/media/upload_all&quot;&gt;飞书开放平台：上传素材&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://open.feishu.cn/document/server-docs/authentication-management/access-token/tenant_access_token_internal&quot;&gt;飞书开放平台：获取 tenant_access_token&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://open.feishu.cn/document/server-docs/application-scope/introduction?lang=zh-CN&quot;&gt;飞书开放平台：申请 API 权限&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Claude Code 安装后必做的 9 项设置</title><link>https://sues.fun/posts/260818_claudecodesettings/</link><guid isPermaLink="true">https://sues.fun/posts/260818_claudecodesettings/</guid><description>Claude Code 安装后的 9 项核心调优指南：从交互体验、状态栏、全局记忆到多代理协作与后台模型升级。</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;安装好 Claude Code 之后，默认配置虽然能跑，但有很多体验和效率上的痛点——比如回答过于精简、没有实时状态栏、每次新会话都要重新交代偏好等。本文整理了 9 项开箱必做的核心设置，助你打造极致顺手的主力 AI 编程环境。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;第一部分：交互体验——调好界面再干活&lt;/h2&gt;
&lt;h3&gt;1. 输出风格 Output Style&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：默认的 Default 风格极度精简——改完代码只告诉你 &quot;done&quot;，不解释为什么这样改、用了什么模式。对于熟悉新项目或理解复杂改动，这种风格信息量明显不足。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;操作&lt;/strong&gt;：运行 &lt;code&gt;/config&lt;/code&gt; → 选择 Output style → 切换为 &lt;strong&gt;Explanatory&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/260818_02.png&quot; alt=&quot;Output Style 设置界面&quot; /&gt;&lt;/p&gt;
&lt;p&gt;切换后，Claude 的回复会附带 &lt;strong&gt;Insights&lt;/strong&gt; 段落，解释它的实现选择和识别到的代码库模式。这不是公开推理链（那是 Extended Thinking），而是面向开发者的决策说明。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三种内置风格对比&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;风格&lt;/th&gt;
&lt;th&gt;行为&lt;/th&gt;
&lt;th&gt;适合谁&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Default&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;精简回复，专注完成任务&lt;/td&gt;
&lt;td&gt;熟悉项目、只想要结果的老手&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Explanatory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;附带 Insights，解释实现选择&lt;/td&gt;
&lt;td&gt;日常开发，熟悉新代码库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;协作学做，标记 &lt;code&gt;TODO(human)&lt;/code&gt; 让你写关键代码&lt;/td&gt;
&lt;td&gt;学习新语言或新手入门&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;自定义风格&lt;/strong&gt;：如果内置风格都不满足，可以创建自己的。在 &lt;code&gt;~/.claude/output-styles/&lt;/code&gt; 下放一个 Markdown 文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
name: My Style
description: 简短描述
keep-coding-instructions: true
---

# 你的风格指令
定义 Claude 在这个风格下的行为...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也可以用 &lt;code&gt;/output-style:new&lt;/code&gt; 让 Claude 帮你生成。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：输出风格在会话开始时写入系统提示词，之后会被缓存以提升响应速度。因此切换风格后需要&lt;strong&gt;开新会话&lt;/strong&gt;才能生效。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;2. 状态栏 Status Line&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：默认界面没有任何状态信息——不知道当前用的是 Opus 还是 Sonnet，不知道 token 消耗了多少，不知道上下文窗口还剩多少空间。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;操作&lt;/strong&gt;：安装 CCometixLine，一个 Rust 编写的高性能状态栏工具。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm install -g @cometix/ccline
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后在 &lt;code&gt;~/.claude/settings.json&lt;/code&gt; 中添加配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;statusLine&quot;: {
    &quot;type&quot;: &quot;command&quot;,
    &quot;command&quot;: &quot;ccline&quot;,
    &quot;padding&quot;: 0
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;./image/260818_03.png&quot; alt=&quot;状态栏效果示意&quot; /&gt;&lt;/p&gt;
&lt;p&gt;安装后，终端底部会出现一行状态栏，实时显示四个关键信息段：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Model&lt;/strong&gt;：当前模型名称（如 &lt;code&gt;Opus 4.6&lt;/code&gt;、&lt;code&gt;Sonnet 4.6&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Directory&lt;/strong&gt;：当前工作目录&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git&lt;/strong&gt;：分支名 + 状态（&lt;code&gt;✓&lt;/code&gt; 干净 / &lt;code&gt;●&lt;/code&gt; 有改动 / &lt;code&gt;↑n&lt;/code&gt; 领先远程 n 个提交）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context Window&lt;/strong&gt;：基于 transcript 分析的 token 使用百分比&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;TUI 配置&lt;/strong&gt;：运行 &lt;code&gt;ccline --config&lt;/code&gt; 进入交互式配置界面，可以实时预览效果、切换主题（内置 &lt;code&gt;cometix&lt;/code&gt;、&lt;code&gt;minimal&lt;/code&gt;、&lt;code&gt;gruvbox&lt;/code&gt;、&lt;code&gt;nord&lt;/code&gt; 等预设）、逐段自定义颜色和图标。配置文件保存在 &lt;code&gt;~/.claude/ccline/config.toml&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;依赖&lt;/strong&gt;：需要安装 Nerd Font 字体，否则图标会显示为乱码方块。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;3. 声音提示 Sound Effects&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：Claude Code 执行长任务可能需要数分钟。切到浏览器或后台后，不知道何时跑完，也不清楚中间是否报错。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;操作&lt;/strong&gt;：安装 claude-sound-fx 插件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/plugin marketplace add 6m1w/claude-sound-fx
/plugin install sound-fx@claude-sound-fx
/sound-fx:setup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;./image/260818_04.png&quot; alt=&quot;声音提示 Setup 界面&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;音效特色&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;12 个主题音效包&lt;/strong&gt;：覆盖科幻/AI（Jarvis、GLaDOS、Star Trek）、动漫（JoJo、One Piece、Pikachu）、游戏（WoW Peon、SCV、机械键盘音）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;7 个触发事件&lt;/strong&gt;：Session 开始、提交 Prompt、任务完成、工具调用失败、收到通知、Memory 压缩、Session 结束。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;两种模式&lt;/strong&gt;：Mix（随机抽取）与 Single Theme（固定单一主题）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;音量可通过环境变量 &lt;code&gt;CLAUDE_SOUND_VOLUME&lt;/code&gt; 调整（0-100，默认 60）。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;第二部分：记忆与规则——让 AI 记住你的偏好&lt;/h2&gt;
&lt;h3&gt;4. 记忆系统：CLAUDE.md 与 Auto Memory&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：每次开新会话，Claude Code 都从零开始。你得重新交代“用中文回复”、“测试用 pytest 不要 unittest”、“提交信息用中文”等。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心操作&lt;/strong&gt;：编辑 &lt;code&gt;~/.claude/CLAUDE.md&lt;/code&gt;，写入你的全局偏好。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 全局指令

## 语言
- 默认使用中文回复

## 代码风格
- Python 使用 type hints
- 变量命名 snake_case
- 提交信息用中文

## 工具偏好
- 测试框架用 pytest
- 包管理用 uv 不用 pip
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;关键区分——全局 vs 项目&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;位置&lt;/th&gt;
&lt;th&gt;写什么&lt;/th&gt;
&lt;th&gt;共享范围&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;~/.claude/CLAUDE.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;个人偏好（语言、风格、工具）&lt;/td&gt;
&lt;td&gt;仅自己，跨所有项目&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;./CLAUDE.md&lt;/code&gt; 或 &lt;code&gt;./.claude/CLAUDE.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;项目规范（构建命令、架构决策、命名规范）&lt;/td&gt;
&lt;td&gt;通过 Git 共享给团队&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;编写技巧&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;控制在 200 行以内&lt;/strong&gt;：避免过多占用上下文并保证高遵从度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用要点式（Bullet Points）&lt;/strong&gt;：实测指令遵循度远高于大段长文本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;写可验证的具体指令&lt;/strong&gt;：“使用 2 空格缩进”比“格式化代码”更精准。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Auto Memory&lt;/strong&gt;：除了手写的 CLAUDE.md，Claude 也会把有价值的信息（构建命令、调试经验、架构笔记）自动沉淀到 &lt;code&gt;~/.claude/projects/&amp;lt;project&amp;gt;/memory/&lt;/code&gt; 下。一句话总结：&lt;strong&gt;你写 CLAUDE.md，Claude 写 MEMORY.md&lt;/strong&gt;。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;第三部分：终端环境与协作&lt;/h2&gt;
&lt;h3&gt;5. 终端基础配置&lt;/h3&gt;
&lt;p&gt;在 Claude Code 中运行 &lt;code&gt;/terminal-setup&lt;/code&gt;，它会自动配置终端环境：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;换行体验&lt;/strong&gt;：&lt;code&gt;Shift+Enter&lt;/code&gt; 是 Claude Code 的换行快捷键。VS Code 集成终端、Alacritty、Warp 运行设置后即可顺畅多行输入。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;桌面通知&lt;/strong&gt;：长任务跑完后自动弹窗提示。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大段输入技巧&lt;/strong&gt;：避免直接向终端粘贴数千行代码，推荐保存为文件后让 Claude 自行读取。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;6. 推荐终端：Warp&lt;/h3&gt;
&lt;p&gt;如果你愿意尝试新终端，Warp 是目前对 Claude Code 支持最出色的终端之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Command Blocks&lt;/strong&gt;：把命令输入/输出封装为独立折叠块，防止海量日志淹没终端。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;官方集成插件&lt;/strong&gt;：&lt;pre&gt;&lt;code&gt;/plugin marketplace add warpdotdev/claude-code-warp
/plugin install warp@claude-code-warp
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;第四部分：能力增强——解锁进阶特性&lt;/h2&gt;
&lt;h3&gt;7. Agent Team 多代理协作&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：默认情况下 Claude Code 是单线程工作。写前端时后端只能等待，跑测试时无法同步整理文档。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;操作&lt;/strong&gt;：在 &lt;code&gt;~/.claude/settings.json&lt;/code&gt; 的 &lt;code&gt;env&lt;/code&gt; 字段中开启：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;env&quot;: {
    &quot;CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS&quot;: &quot;1&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;开启后，Claude Code 可以协调多个实例协同工作。一个会话作为 &lt;strong&gt;Team Lead&lt;/strong&gt; 负责拆解和汇总，多个 &lt;strong&gt;Teammate&lt;/strong&gt; 分头执行并支持队友间直接通信。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意代价&lt;/strong&gt;：Token 消耗量与队员数成正比，建议在大规模并行重构或多模块并发任务时开启。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;8. 后台模型升级&lt;/h3&gt;
&lt;p&gt;Claude Code 的内部后台功能（如上下文总结、任务分类）默认使用 Haiku。如果希望工具调用更加精准、多步规划更稳健，可以将后台默认模型升级为 Sonnet：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;env&quot;: {
    &quot;ANTHROPIC_DEFAULT_HAIKU_MODEL&quot;: &quot;claude-sonnet-4-6&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;对比维度&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;参数生成质量&lt;/strong&gt;：Sonnet 对文件路径与搜索关键词的处理显著更准确。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多步规划与错误恢复&lt;/strong&gt;：推理链更可靠，善于主动分析原因并调整策略。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;9. 安装关键 Skills&lt;/h3&gt;
&lt;p&gt;Skill 是把你反复执行的标准工作流封装成的可复用指令集。推荐安装官方与社区核心管理工具：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装 skill-creator（制作自定义 skill）与 find-skills（探索社区生态）
npx skills add anthropics/skills
npx skills add vercel-labs/agent-skills --skill find-skills
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常用命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npx skills list              # 列出已安装 skill
npx skills find typescript   # 按关键词搜索
npx skills update            # 一键更新
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;安全提示&lt;/strong&gt;：公共 Skill 会以宿主同等权限执行，安装第三方 Skill 时建议优先选择 1000+ 级安装量的成熟项目。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;总结：9 项设置优先级速查&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;优先级&lt;/th&gt;
&lt;th&gt;设置项&lt;/th&gt;
&lt;th&gt;核心价值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;必做&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Output Style → Explanatory&lt;/td&gt;
&lt;td&gt;回复由干瘪的“done”变为附带决策解释与架构洞察&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;必做&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CLAUDE.md 全局指令&lt;/td&gt;
&lt;td&gt;告别开局反复交代语言与代码风格&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;必做&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;终端配置 &lt;code&gt;/terminal-setup&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;解决换行与长任务桌面通知&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;推荐&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Status Line (ccline)&lt;/td&gt;
&lt;td&gt;实时监控模型、Git 状态与 Token 消耗水位&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;推荐&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sound Effects 音效包&lt;/td&gt;
&lt;td&gt;任务完成或出错自动语音提醒，释放盯盘精力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;推荐&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent Team 多代理&lt;/td&gt;
&lt;td&gt;多模块任务并发加速&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;推荐&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;后台模型升 Sonnet&lt;/td&gt;
&lt;td&gt;显著提升复杂工具调用与多步规划的成功率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;推荐&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Skills 扩展&lt;/td&gt;
&lt;td&gt;将私有流程与规范沉淀为一键命令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;进阶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;YOLO + Hook 安全兜底&lt;/td&gt;
&lt;td&gt;高手极致提速，依靠 PreToolUse 拦截危险命令&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>K8S 小白到大师：从单机容器到集群编排</title><link>https://sues.fun/posts/260708_k8smaster/</link><guid isPermaLink="true">https://sues.fun/posts/260708_k8smaster/</guid><description>从单机 Docker 的局限出发，系统理解 Kubernetes 的架构原理、核心对象（Pod/Deployment/Service）、高频排障命令与实战部署。</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;这篇笔记不是死记硬背 K8s 概念，而是建立一条清晰的主线：为什么需要 K8s、它由哪些组件组成、最常用的对象是什么、如何部署一个最小 Web 应用，以及排障时先看哪里。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、是什么：从单机到集群&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Kubernetes（简称 K8s）&lt;/strong&gt; 是一个开源的容器编排平台。&lt;/p&gt;
&lt;p&gt;Docker 解决的是“怎么把应用和运行环境打包起来”，而 K8s 进一步解决的是**“当成百上千个容器分布在多台服务器上时，如何进行调度、扩缩容、自愈、服务发现和统一治理”**。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;一句话理解：
Docker 管单个容器或单机上的一组容器；K8s 管整个集群里的容器应用生命周期。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;K8s 的核心思想是&lt;strong&gt;声明式 API + 调谐循环（Reconciliation Loop）&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用户用 YAML 文件声明期望状态（Desired State）；&lt;/li&gt;
&lt;li&gt;API Server 接收并持久化声明；&lt;/li&gt;
&lt;li&gt;Controller 持续比对“当前实际状态”与“期望状态”；&lt;/li&gt;
&lt;li&gt;一旦发现不一致，控制器会自动执行动作修复，直至达成一致。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./image/260708_02.png&quot; alt=&quot;K8s 核心解决方案架构图&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、为什么需要它：对比单机 Docker&lt;/h2&gt;
&lt;p&gt;单机 Docker 容易上手，但在面对生产环境真实流量时存在明显短板：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;生产痛点&lt;/th&gt;
&lt;th&gt;单机 Docker 的局限&lt;/th&gt;
&lt;th&gt;K8s 的解决思路&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;容器异常崩溃&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;依赖脚本或人工手动重启&lt;/td&gt;
&lt;td&gt;自动检测并拉起新 Pod&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;突发流量高峰&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;人工评估并手动加机器扩容&lt;/td&gt;
&lt;td&gt;HPA 根据 CPU/内存指标自动水平扩容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;容器 IP 频繁变动&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;服务间通信硬编码容易失效&lt;/td&gt;
&lt;td&gt;Service 提供稳定 DNS 与虚拟 IP 负载均衡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;跨多台物理机部署&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手工规划容器部署位置&lt;/td&gt;
&lt;td&gt;Scheduler 依据资源策略自动调度至最佳 Node&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;版本无缝升级&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;停机维护或容易中断连接&lt;/td&gt;
&lt;td&gt;Deployment 支持平滑滚动更新与一键版本回滚&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;三、核心架构设计&lt;/h2&gt;
&lt;p&gt;K8s 集群整体划分为两大组成部分：&lt;strong&gt;控制平面（Control Plane）&lt;/strong&gt; 与 &lt;strong&gt;工作节点（Worker Nodes）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/260708_03.png&quot; alt=&quot;K8s 集群架构图&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;1. 控制平面（大脑）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API Server&lt;/strong&gt;：集群唯一的对外暴露入口，处理所有的 &lt;code&gt;kubectl&lt;/code&gt; 命令行、控制循环与外部调用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;etcd&lt;/strong&gt;：高可用的分布式一致性键值数据库，保存整个集群的所有元数据与状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scheduler&lt;/strong&gt;：资源调度器，根据 Node 负载、污点亲和性等规则决定 Pod 跑在哪台机器。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controller Manager&lt;/strong&gt;：维护整个集群的期望状态，包含节点控制器、副本控制器、端点控制器等。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. 工作节点（工人）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;kubelet&lt;/strong&gt;：运行在每个 Node 上的核心 Agent，负责与容器运行时通信并汇报节点与 Pod 状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kube-proxy&lt;/strong&gt;：维护节点上的网络转发规则（iptables / IPVS），实现 Service 流量分发。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Container Runtime&lt;/strong&gt;：底层容器运行时（如 containerd、CRI-O）。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;四、核心对象与配置模式&lt;/h2&gt;
&lt;h3&gt;1. Pod&lt;/h3&gt;
&lt;p&gt;Pod 是 K8s 的&lt;strong&gt;最小调度单元&lt;/strong&gt;。一个 Pod 内可包含一个或多个紧密协作的容器（如主应用 + Sidecar 收集日志），它们共享同一个 Network Namespace（共用 IP 与端口空间）以及存储卷。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
    - name: nginx
      image: nginx:1.25
      ports:
        - containerPort: 80
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. Deployment&lt;/h3&gt;
&lt;p&gt;用于管理无状态应用的生命周期。通过控制底层的 ReplicaSet 确保始终维持指定数量的健康副本，并提供零停机滚动更新能力。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.25
          ports:
            - containerPort: 80
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. Service&lt;/h3&gt;
&lt;p&gt;由于 Pod 会频繁漂移与重建，其 IP 并不固定。&lt;strong&gt;Service&lt;/strong&gt; 通过 &lt;code&gt;selector&lt;/code&gt; 标签选择器将流量稳定代理至背后的 Pod 组。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service 类型&lt;/th&gt;
&lt;th&gt;适用场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ClusterIP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;仅集群内部互相访问（默认类型）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NodePort&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;在所有节点开放特定端口（30000-32767），便于外部直接打到节点 IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LoadBalancer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;借助云厂商（AWS/GCP/阿里云）自动申请并绑定公网负载均衡器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ingress&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;七层 HTTP/HTTPS 路由入口，实现域名解析、URL 路径分发与 SSL 卸载&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;4. ConfigMap 与 Secret&lt;/h3&gt;
&lt;p&gt;坚持“配置与镜像解耦”原则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ConfigMap&lt;/strong&gt;：存放常规环境变量、非敏感配置文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secret&lt;/strong&gt;：存放密码、证书、API Token（Base64 编码，落盘可加密）。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;五、kubectl 常用命令与极速排障&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;./image/260708_04.png&quot; alt=&quot;kubectl 命令速查图&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;1. 常用核心指令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 查看各类资源状态
kubectl get nodes
kubectl get pods -A -o wide
kubectl get svc,deploy

# 声明式部署与下线
kubectl apply -f app.yaml
kubectl delete -f app.yaml

# 查看详细事件与状态
kubectl describe pod &amp;lt;pod-name&amp;gt;
kubectl logs &amp;lt;pod-name&amp;gt; -f
kubectl logs &amp;lt;pod-name&amp;gt; --previous   # 查看崩溃前上一个容器的日志
kubectl exec -it &amp;lt;pod-name&amp;gt; -- sh    # 进入容器调试
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 四大经典问题快速定位指南&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pod 一直处于 &lt;code&gt;Pending&lt;/code&gt; 状态&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;运行 &lt;code&gt;kubectl describe pod &amp;lt;name&amp;gt;&lt;/code&gt; 查看 Events。&lt;/li&gt;
&lt;li&gt;常见根因：节点 CPU/内存资源不足、节点被打上了 &lt;code&gt;Taint&lt;/code&gt; 污点、PVC 存储卷未成功绑定。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pod 出现 &lt;code&gt;CrashLoopBackOff&lt;/code&gt;&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;优先查看日志：&lt;code&gt;kubectl logs &amp;lt;name&amp;gt; --previous&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;常见根因：主进程退出代码非 0、缺少必须的环境变量、配置文件挂载损坏、健康检查探针过于严苛。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service 访问不通&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;查看是否关联到了 Endpoints：&lt;code&gt;kubectl get endpoints &amp;lt;svc-name&amp;gt;&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;常见根因：Service 的 &lt;code&gt;selector&lt;/code&gt; 标签与 Pod 的 &lt;code&gt;labels&lt;/code&gt; 拼写不一致，或者容器内部监听的端口与 &lt;code&gt;targetPort&lt;/code&gt; 不匹配。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;频繁出现 &lt;code&gt;OOMKilled&lt;/code&gt; 重启&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;检查 Pod 的内存资源限制 &lt;code&gt;resources.limits.memory&lt;/code&gt; 是否设置过小，适当调高配额。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;六、推荐学习路线图&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;./image/260708_05.png&quot; alt=&quot;K8s 学习路线图&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;基础准备&lt;/strong&gt;：熟练掌握 Dockerfile 编写、镜像分层瘦身、容器网络与挂载卷。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本地上手&lt;/strong&gt;：使用 Minikube 或 Kind 本地拉起单/多节点测试集群。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;掌握核心资源&lt;/strong&gt;：熟练编写 Pod、Deployment、Service、ConfigMap/Secret、PV/PVC 模板。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络与入口&lt;/strong&gt;：掌握 Ingress-Nginx 规则配置与 Helm 常用包管理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生产进阶&lt;/strong&gt;：搭建 Prometheus + Grafana 监控体系、设置 HPA 水平扩缩容、配置 RBAC 权限与资源 Limits。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;参考资料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;官方中文文档：&lt;a href=&quot;https://kubernetes.io/zh-cn/docs/home/&quot;&gt;kubernetes.io/zh-cn/docs/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;官方示例仓库：&lt;a href=&quot;https://github.com/kubernetes/examples&quot;&gt;github.com/kubernetes/examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>PaperAgent：面向课题组论文库的本地 RAG 智能体</title><link>https://sues.fun/posts/260626_paperagent/</link><guid isPermaLink="true">https://sues.fun/posts/260626_paperagent/</guid><description>面向科研论文库的本地知识库智能体实战：基于 Streamlit + MinerU + Ollama + BGE-M3 + FAISS，实现高精度检索、确定性路由与跨文献深度对比。</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;在科研场景中，通用的 ChatGPT 往往无法直接处理课题组内部专属的 PDF 论文库，且容易出现胡编乱造、无法精确溯源等问题。&lt;code&gt;PaperAgent&lt;/code&gt; 是一个完全&lt;strong&gt;本地化部署的科研论文知识库 RAG 智能体&lt;/strong&gt;，旨在将复杂的学术论文解析为可结构化检索、支持跨篇比对、且每一条结论皆可严密追溯到原文切片的科研助手。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、核心定位与技术栈&lt;/h2&gt;
&lt;h3&gt;1. 核心解决的痛点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;拒绝黑盒问答&lt;/strong&gt;：每个回答必须严格附带来源 PDF 文件名与原文引用切片。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;结构化与 RAG 融合&lt;/strong&gt;：作者论文列表、特定天体数据源查询走确定性索引，开放式学术探讨走向量语义检索。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;纯私有化运行&lt;/strong&gt;：数据不离开本地服务器，支持离线与局域网部署。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. 技术栈选型&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;前端界面: Streamlit (单页流式对话 Web UI)
文档解析: MinerU (高保真 PDF 转 Markdown) + pypdf
文本嵌入: BGE-M3 (本地多语言高精度 Embedding 模型)
向量存储: FAISS (本地高性能向量索引)
大模型推理: Ollama (本地部署 Qwen2.5 7B / Qwen3 30B)
调度编排: LangChain Community + 自研确定性路由引擎
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. 双档模型策略&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fast 模式 (&lt;code&gt;qwen2.5:7b-instruct&lt;/code&gt;)&lt;/strong&gt;：用于日常高频名词解释、单篇快速问答与索引查找，响应极快。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deep 模式 (&lt;code&gt;qwen3:30b&lt;/code&gt;)&lt;/strong&gt;：用于长篇文献综合研读、多论文研究方法交叉对比与深度总结。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;二、架构设计与混合检索链路&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[ 原始科研 PDF 论文库 ]
         │
         ▼ (MinerU 深度解析)
[ 结构化 Markdown 文本 ]
         │
         ▼ (切片: chunk_size=1100, overlap=180)
[ BGE-M3 向量化 ] ───► [ FAISS 本地向量库 + 结构化元数据索引 ]
                                  │
[ 用户学术提问 ]                   │
         │                        │
         ▼                        │
[ 查询路由器 (Query Router) ] ──────┤
   ├─ 1. 作者/关键词结构化查询 ────► 命中结构化索引直接返回
   ├─ 2. 跨对象数据源比对 ────────► 分解 Query 并行检索
   └─ 3. 开放式研究问答 ──────────► FAISS 语义相似度召回 (k=8)
                                  │
                                  ▼
[ 注入上下文 Prompt 模板 + Ollama 生成 ]
                                  │
                                  ▼
[ 流式输出回答 + 精准原文溯源片段 ]
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、特色：确定性路由（Query Router）&lt;/h2&gt;
&lt;p&gt;传统的 RAG 方案容易将所有问题一股脑丢进向量库，导致结构化事实（如“张教授一共有哪几篇关于海王星卫星的论文”）召回率低下甚至答非所问。&lt;/p&gt;
&lt;p&gt;PaperAgent 采用了&lt;strong&gt;层级路由机制&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;作者 / 关键词清单&lt;/strong&gt;：直接查询由论文元数据预抽取的结构化倒排索引，秒级返回 100% 确定的论文列表。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;天体与数据源对比（如 Gaia DR2 vs DR3）&lt;/strong&gt;：将对比实体拆解为双向检索流，强制平衡两侧的召回片段，防止单一实体的文本覆盖另一侧。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;复杂理论与方法推导&lt;/strong&gt;：进入标准的 FAISS Top-K 语义检索，并经过 MMR（最大边际相关性）重排序后交由大模型生成解答。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;四、部署与日常维护&lt;/h2&gt;
&lt;h3&gt;1. 本地启动服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 1. 启动 Ollama 模型服务
ollama serve

# 2. 启动 Streamlit Web 端
streamlit run app.py \
  --server.address 0.0.0.0 \
  --server.port 8000 \
  --server.headless true
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 论文库增量更新流水线&lt;/h3&gt;
&lt;p&gt;当课题组新增一批 PDF 论文时：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 1. 将新 PDF 放入 data/papers/
# 2. 执行 MinerU 自动化解析
./scripts/parse_with_mineru.sh

# 3. 重新构建 FAISS 向量库与结构化索引
./scripts/rebuild_index.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、总结&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;PaperAgent&lt;/code&gt; 的实践表明：在学术科研等高严肃性领域，&lt;strong&gt;“确定性结构化索引 + 局部精准 RAG + 本地开源大模型”&lt;/strong&gt; 的组合，远比单纯依赖通用商业大模型更加可靠、透明且易于维护。&lt;/p&gt;
</content:encoded></item><item><title>ScholarPulse：本地优先的学术情报监测与自动化流水线</title><link>https://sues.fun/posts/260615_scholarpulse/</link><guid isPermaLink="true">https://sues.fun/posts/260615_scholarpulse/</guid><description>一条面向个人知识库的本地优先学术情报流水线：从 arXiv 定向检索、去重、Ollama 结构化中文研判，到 Obsidian 原子落盘与 Telegram 自动投递。</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;在信息爆炸时代，跟踪前沿论文（如 AI Agent、RAG、MCP）往往让人疲惫不堪。&lt;code&gt;ScholarPulse&lt;/code&gt; 是一条面向个人知识库的&lt;strong&gt;本地优先（Local-first）学术情报监测流水线&lt;/strong&gt;。它的核心定位不是让 AI 随意“泛泛写个摘要”，而是将检索、去重、结构化研判、原子落盘、总索引维护与多端消息投递拆解为一条&lt;strong&gt;确定、可测试、可审计&lt;/strong&gt;的工程生产链路。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、核心设计哲学与架构原则&lt;/h2&gt;
&lt;h3&gt;1. 为什么拒绝纯 Agent “黑盒化”？&lt;/h3&gt;
&lt;p&gt;传统的直接让 Agent 抓取并总结的方式往往存在三个痛点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;不可控与幻觉&lt;/strong&gt;：Prompt 波动可能导致抓漏论文或随意编造实验结论；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;难以审计&lt;/strong&gt;：论文版本更新（如 &lt;code&gt;v1&lt;/code&gt; 到 &lt;code&gt;v2&lt;/code&gt;）容易造成重复收录；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;状态脆弱&lt;/strong&gt;：一旦网络或模型短暂抖动，整个定时任务容易全军覆没。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. 四大架构原则&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;确定性核心（Deterministic Core）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;检索、去重、模板渲染与本地落盘完全由 Python CLI 负责，状态码明确、行为可回溯。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent 解耦（Decoupled Consumer）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;消息网关（OpenClaw）只作为下游消费者读取格式化好的 JSON，不参与上游内容生产与抓取。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本地知识主权（Local-first Knowledge）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;日报和索引文件直接原子写入本地 Obsidian Vault，无需依赖外部云数据库或消息队列。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;配置驱动（Configuration Driven）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;增加新的研究方向（如具身智能、量子计算）只需增加几行 JSON 配置，无需重构任何脚本代码。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;二、生产与投递工作流&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[ systemd user timer (每天 19:55) ]
       │
       ▼
[ Python CLI: scholarpulse generate ]
       ├─ 1. arXiv API 检索 (AI Agent / MCP / RAG 关键词)
       ├─ 2. 归一化去重 (过滤历史收录与跨版本重复)
       ├─ 3. Ollama 本地模型 (生成 4 段式结构化中文研判)
       ├─ 4. 原子写入 Obsidian Vault (生成日报 + 重建全局索引)
       └─ 5. 输出当天通知 JSON (message, title, metrics)
       │
       ▼
[ OpenClaw Telegram 投递 (每天 20:00) ]
       └─ 读取通知 JSON，一键推送至移动端
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、关键流水线实现细节&lt;/h2&gt;
&lt;h3&gt;1. 归一化去重机制&lt;/h3&gt;
&lt;p&gt;arXiv 论文常有多个版本提交。ScholarPulse 在入库前会正则剔除版本后缀：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2606.12345v1 ──┐
2606.12345v2 ──┴──&amp;gt; 归一化 ID: 2606.12345 (查重键)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CLI 自动比对历史索引库，确保同一篇论文不会因为版本迭代在日报中反复刷屏。&lt;/p&gt;
&lt;h3&gt;2. Ollama 结构化研判约束&lt;/h3&gt;
&lt;p&gt;每篇论文的摘要生成严格遵循结构化模板，拒绝空话套话：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;一句话结论&lt;/strong&gt;：论文解决的核心矛盾是什么。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核心内容&lt;/strong&gt;：具体提出的技术架构或算法创新。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;方法与实验&lt;/strong&gt;：评测基准（Benchmark）与关键指标提升。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;价值判断&lt;/strong&gt;：对实际工程落地的参考意义与局限性。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;若模型服务临时不可用，流水线会自动填入备用原文信息，保证定时任务安全完成，绝不伪造虚假摘要。&lt;/p&gt;
&lt;h3&gt;3. 日报与总索引维护&lt;/h3&gt;
&lt;p&gt;生成的日报以标准 Frontmatter 写入 Obsidian：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: ScholarPulse-2026-06-15
published: 2026-06-15
tags: [AI-Agent, Academic, Report]
category: 科研
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同时，系统会自动更新该研究方向的 &lt;code&gt;index.md&lt;/code&gt; 索引页，按时间倒序维护全部历史报告入口，形成个人专属的长期学术情报库。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;四、常用操作命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# 生成当天所有配置方向的学术情报
scholarpulse generate

# 补跑或重算指定历史日期
scholarpulse generate --date 2026-05-15

# 单独调试指定方向（如仅跑 Agent 方向）
scholarpulse generate --direction AgentPulse

# 强行覆盖重建（人工修复时使用）
scholarpulse generate --force
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;五、总结与展望&lt;/h2&gt;
&lt;p&gt;通过将大语言模型（LLM）定位为**“确定性流水线中的文本处理算子”**，而非全盘委托给不可控的自主 Agent，&lt;code&gt;ScholarPulse&lt;/code&gt; 实现了高可靠、零维护的个人学术情报持续沉淀。未来这套架构可轻松扩展至 GitHub Trending 监控、行业技术资讯聚合等更多自动化场景。&lt;/p&gt;
</content:encoded></item><item><title>个人 AI Agent 研发环境搭建：Ubuntu 工作站与 RTX 5090 双机工作流</title><link>https://sues.fun/posts/260610_aiagentdevrig/</link><guid isPermaLink="true">https://sues.fun/posts/260610_aiagentdevrig/</guid><description>构建个人/实验室专属的 AI Agent 研发环境：本地 Ubuntu 24.04 开发机 + 远端 Threadripper &amp; RTX 5090 算力机，打通 MCP、Obsidian、Ollama 与大模型工程链路。</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;对于大模型与 AI Agent 开发者而言，在单台机器上既跑重型推理又搞日常开发，常常会遇到显存抢占、风扇轰鸣与系统卡顿等痛点。本文分享一套**“本地轻量开发工作站 + 远端专用 GPU 算力机”**的双机协作环境搭建方案，覆盖系统参数配置、Ollama 局域网服务化、MCP 工具层挂载与全链路联调。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、双机拓扑架构与分工&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;┌────────────────────────────────────────────────────────┐
│  本地工作站 (Ubuntu 24.04)                              │
│  - 承担角色: 日常编码、文档编写、Agent 流程编排、MCP 客户端 │
│  - 核心组件: VS Code / Codex / Obsidian / OpenClaw     │
└───────────────────────────┬────────────────────────────┘
                            │ (局域网 10GbE / 内网专线)
                            │ HTTP API (11434 / v1)
┌───────────────────────────▼────────────────────────────┐
│  远端算力机 (Dell Precision 7875 V2, Ubuntu 22.04)      │
│  - 硬件: AMD Threadripper PRO 9955WX (16C/32T), 128G   │
│  - GPU: NVIDIA RTX 5090 32GB                          │
│  - 服务: Ollama (OpenAI-compatible REST API)           │
│  - 承载模型: qwen3:30b (推理), nomic-embed-text (向量)  │
└────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;核心优势&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;静音与低功耗&lt;/strong&gt;：桌面日常开发机安静平稳，避免高负载推理导致桌面 UI 卡顿。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;算力即服务&lt;/strong&gt;：远端 GPU 服务器统一暴露标准的 OpenAI 兼容接口，课题组或个人多设备（笔记本、台式机、手机）均可共享调用。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;二、远端 GPU 算力机配置&lt;/h2&gt;
&lt;h3&gt;1. 硬件规格与驱动环境&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CPU&lt;/strong&gt;：AMD Ryzen Threadripper PRO 9955WX&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内存&lt;/strong&gt;：128GB DDR5 ECC&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;显卡&lt;/strong&gt;：NVIDIA RTX 5090 32GB (Driver 580+, CUDA 13.0+)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;存储&lt;/strong&gt;：1TB NVMe 系统盘 + 4TB 企业级数据盘挂载于 &lt;code&gt;/data&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Ollama 服务化与局域网监听&lt;/h3&gt;
&lt;p&gt;在远端机配置 Systemd 环境变量，使其监听全局局域网网卡：&lt;/p&gt;
&lt;p&gt;编辑 &lt;code&gt;/etc/systemd/system/ollama.service.d/override.conf&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Service]
Environment=&quot;OLLAMA_HOST=0.0.0.0:11434&quot;
Environment=&quot;OLLAMA_ORIGINS=*&quot;
Environment=&quot;OLLAMA_KEEP_ALIVE=24h&quot;
Environment=&quot;OLLAMA_NUM_PARALLEL=4&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重载并启动：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl restart ollama
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. 模型部署矩阵&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 1. 部署主力 30B 推理模型 (Q4_K_M 量化，显存占用约 24.9GB / 32GB)
ollama run qwen3:30b

# 2. 部署轻量兜底模型 (7B 级别，极速响应)
ollama run qwen2.5:7b-instruct

# 3. 部署高维文本向量嵌入模型
ollama run nomic-embed-text
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、本地开发机环境与工具链&lt;/h2&gt;
&lt;h3&gt;1. 本机环境清单&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;操作系统&lt;/strong&gt;：Ubuntu 24.04 LTS (Kernel 6.17+)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;开发工具&lt;/strong&gt;：Python 3.12、Node.js v24+、Docker 29+、ripgrep、tmux、fzf&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 辅助工具&lt;/strong&gt;：Codex CLI、Claude Code、OpenClaw&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. 统一 OpenAI 兼容环境变量&lt;/h3&gt;
&lt;p&gt;在本地 &lt;code&gt;~/.bashrc&lt;/code&gt; 或项目 &lt;code&gt;.env&lt;/code&gt; 中声明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export OPENAI_BASE_URL=&quot;http://192.168.180.234:11434/v1&quot;
export OPENAI_API_KEY=&quot;ollama&quot;  # Ollama 本地接口无需真实 Key，填占位符即可
export DEFAULT_CHAT_MODEL=&quot;qwen3:30b&quot;
export DEFAULT_EMBEDDING_MODEL=&quot;nomic-embed-text&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;四、打通 MCP 与知识库生态&lt;/h2&gt;
&lt;p&gt;通过 &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;，本地 Agent 可以无缝调用本机工具与 Obsidian 知识库：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obsidian Local REST API&lt;/strong&gt;：开启本地 API 插件，暴露端口与 Token。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP Server 配置文件&lt;/strong&gt;：在开发机全局配置中挂载 &lt;code&gt;filesystem&lt;/code&gt;、&lt;code&gt;git&lt;/code&gt;、&lt;code&gt;obsidian&lt;/code&gt; 以及 &lt;code&gt;fetch&lt;/code&gt; 等基础 Servers。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;闭环体验&lt;/strong&gt;：当你在本地终端要求 Agent 总结某篇论文或审查代码时，Agent 自动通过 MCP 读取本地文件，调用远端 RTX 5090 上的 &lt;code&gt;qwen3:30b&lt;/code&gt; 思考，并将产出结果直接写回 Obsidian Vault。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;五、联调验证与性能体检&lt;/h2&gt;
&lt;p&gt;在本地开发机执行快速烟测脚本：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 1. 验证模型列表连通性
curl -s http://192.168.180.234:11434/v1/models | jq .

# 2. 测试流式文本补全
curl -s http://192.168.180.234:11434/v1/chat/completions \
  -H &quot;Content-Type: application/json&quot; \
  -d &apos;{
    &quot;model&quot;: &quot;qwen3:30b&quot;,
    &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;你好，请用一句话介绍你自己&quot;}],
    &quot;temperature&quot;: 0.3
  }&apos; | jq .choices[0].message.content

# 3. 测试 768 维向量生成
curl -s http://192.168.180.234:11434/v1/embeddings \
  -H &quot;Content-Type: application/json&quot; \
  -d &apos;{
    &quot;model&quot;: &quot;nomic-embed-text&quot;,
    &quot;input&quot;: &quot;AI Agent 开发环境测试&quot;
  }&apos; | jq &apos;.data[0].embedding | length&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;六、总结&lt;/h2&gt;
&lt;p&gt;这套双机方案兼顾了&lt;strong&gt;开发的轻便性&lt;/strong&gt;与&lt;strong&gt;大模型推理的高性能&lt;/strong&gt;。通过将重度算力剥离到远端服务器，本地保持整洁的开发与调试环境，配合 MCP 与 Ollama 标准化协议，为后续的 Agent 项目开发、学术情报监控与知识沉淀提供了坚固的基础底座。&lt;/p&gt;
</content:encoded></item><item><title>OpenClaw 从 0 到 1：个人 AI 助手部署与维护实战</title><link>https://sues.fun/posts/260610_openclawdeploy/</link><guid isPermaLink="true">https://sues.fun/posts/260610_openclawdeploy/</guid><description>基于 Ubuntu 24.04 工作站与局域网 GPU 服务器，从 0 到 1 部署 OpenClaw 个人 AI 助手：涵盖 Gateway 配置、Telegram 接入、Obsidian MCP 联动与长期记忆系统。</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文记录在工位 Ubuntu 24.04 开发机上从 0 到 1 部署 &lt;strong&gt;OpenClaw&lt;/strong&gt; 个人 AI 助手的完整工程落地过程。目标是打造一个既能在本地终端、网页端直接交互，又能通过 Telegram 移动端随叫随到，并且深度打通 Obsidian 个人知识库与远端 GPU 大模型的全天候智能助手。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、架构设计与核心目标&lt;/h2&gt;
&lt;h3&gt;1. 核心目标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;多端入口&lt;/strong&gt;：通过 OpenClaw Gateway 提供本机 Web Dashboard / REST 入口，并通过 Telegram Bot 提供移动端即时交互。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;算力分离&lt;/strong&gt;：本地工位机轻量运行 Agent 编排；远端 GPU 服务器（RTX 5090）运行 Ollama，承载 &lt;code&gt;qwen3:30b&lt;/code&gt; 大模型与 &lt;code&gt;nomic-embed-text&lt;/code&gt; 嵌入模型。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;知识库打通&lt;/strong&gt;：通过 MCP（Model Context Protocol）读写本地 Obsidian Vault，赋予 Agent 检索与整理知识库的能力。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;持久化长期记忆&lt;/strong&gt;：基于向量检索实现跨会话的长期记忆沉淀与召回。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. 拓扑架构&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[ 移动端 Telegram ] &amp;lt;---+
                       | (HTTPS Proxy)
[ 本地 Web Dashboard ] &amp;lt;-+--&amp;gt; [ OpenClaw Gateway (端口: 18789) ]
                                |
                                +--&amp;gt; [ 本地 Obsidian Vault (MCP Server) ]
                                +--&amp;gt; [ 长期记忆系统 (Memory Vector Store) ]
                                +--&amp;gt; [ 远端 Ollama GPU 服务器 (192.168.x.x:11434) ]
                                       ├── qwen3:30b (主推理模型, 64k 上下文)
                                       └── nomic-embed-text (向量嵌入)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;二、Gateway 服务化与代理配置&lt;/h2&gt;
&lt;h3&gt;1. Systemd User Service 配置&lt;/h3&gt;
&lt;p&gt;为了保证网关在开机后自动拉起且不依赖 root 权限，采用 Systemd 用户级服务管理：&lt;/p&gt;
&lt;p&gt;创建 &lt;code&gt;~/.config/systemd/user/openclaw-gateway.service&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=OpenClaw Gateway Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node /home/y/.npm-global/lib/node_modules/openclaw/dist/index.js gateway --port 18789
Restart=always
RestartSec=5
Environment=OPENCLAW_GATEWAY_PORT=18789

[Install]
WantedBy=default.target
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 局部代理注入策略&lt;/h3&gt;
&lt;p&gt;由于 Telegram Bot 需要访问境外 API，而远端 Ollama 及局域网资源无需代理，推荐使用 Systemd Drop-in 配置局部代理，避免全局环境变量污染：&lt;/p&gt;
&lt;p&gt;创建 &lt;code&gt;~/.config/systemd/user/openclaw-gateway.service.d/proxy.conf&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Service]
Environment=&quot;HTTPS_PROXY=http://127.0.0.1:7897&quot;
Environment=&quot;HTTP_PROXY=http://127.0.0.1:7897&quot;
Environment=&quot;ALL_PROXY=http://127.0.0.1:7897&quot;
Environment=&quot;NO_PROXY=localhost,127.0.0.1,::1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,.local&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;加载并启动：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;systemctl --user daemon-reload
systemctl --user enable --now openclaw-gateway
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;三、模型接入与性能调优&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt; 中配置远端 Ollama Provider：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;models&quot;: {
    &quot;providers&quot;: {
      &quot;ollama&quot;: {
        &quot;baseUrl&quot;: &quot;http://192.168.180.234:11434&quot;,
        &quot;api&quot;: &quot;ollama&quot;,
        &quot;timeoutSeconds&quot;: 300,
        &quot;models&quot;: [
          {
            &quot;id&quot;: &quot;qwen3:30b&quot;,
            &quot;reasoning&quot;: true,
            &quot;contextWindow&quot;: 65536,
            &quot;maxTokens&quot;: 8192,
            &quot;params&quot;: {
              &quot;num_ctx&quot;: 65536,
              &quot;keep_alive&quot;: &quot;15m&quot;,
              &quot;temperature&quot;: 0.3
            }
          },
          {
            &quot;id&quot;: &quot;qwen2.5:7b-instruct&quot;,
            &quot;reasoning&quot;: false,
            &quot;contextWindow&quot;: 32768,
            &quot;maxTokens&quot;: 8192,
            &quot;params&quot;: {
              &quot;num_ctx&quot;: 32768,
              &quot;keep_alive&quot;: &quot;15m&quot;
            }
          }
        ]
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;调优要点&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;上下文扩容&lt;/strong&gt;：将 &lt;code&gt;num_ctx&lt;/code&gt; 设为 &lt;code&gt;65536&lt;/code&gt;，在 RTX 5090 32GB 显存上 &lt;code&gt;qwen3:30b (Q4_K_M)&lt;/code&gt; 显存占用约为 24.9GB，留有足够裕量防止 OOM。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep Alive&lt;/strong&gt;：设置 &lt;code&gt;keep_alive: &quot;15m&quot;&lt;/code&gt;，避免模型在频繁调用间反复重新加载到显存。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;四、知识库与工具层（MCP &amp;amp; Telegram）&lt;/h2&gt;
&lt;h3&gt;1. Telegram 移动端通道&lt;/h3&gt;
&lt;p&gt;运行 &lt;code&gt;openclaw channels add telegram&lt;/code&gt;，根据向导填入 BotFather 申请的 Token。配置完成后，可以在手机随时随地给 Bot 发送语音、文字指令，由 Agent 在后台执行并回传处理结果。&lt;/p&gt;
&lt;h3&gt;2. Obsidian MCP Server 联动&lt;/h3&gt;
&lt;p&gt;将 Obsidian 笔记库作为外部知识源挂载给 Agent：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 Obsidian 中启用 Local REST API 插件；&lt;/li&gt;
&lt;li&gt;在 OpenClaw 中配置 &lt;code&gt;obsidian&lt;/code&gt; MCP Server 规则；&lt;/li&gt;
&lt;li&gt;Agent 获得 &lt;code&gt;search_notes&lt;/code&gt;、&lt;code&gt;read_note&lt;/code&gt;、&lt;code&gt;append_note&lt;/code&gt;、&lt;code&gt;patch_note&lt;/code&gt; 等原子工具能力，能够自主查阅过往笔记或将研究结论直接沉淀回 Vault。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3. 长期记忆机制&lt;/h3&gt;
&lt;p&gt;配置 Embedding 模型为 &lt;code&gt;nomic-embed-text&lt;/code&gt;，OpenClaw 会在后台自动对关键事实、用户偏好和历史决策进行向量化落盘。当用户提及历史话题时，Agent 会通过语义检索自动召回相关背景，实现真正的连贯记忆。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;五、日常维护与常用命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# 查看整体运行状态与各通道健康度
openclaw status --deep

# 查看已注册的 MCP 工具与状态
openclaw mcp list

# 实时查看网关日志
journalctl --user -u openclaw-gateway -f -n 50

# 手动触发安全审计
openclaw security audit
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;六、总结&lt;/h2&gt;
&lt;p&gt;通过本套方案，我们实现了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;低成本高效算力&lt;/strong&gt;：开发机轻巧无噪音，大模型算力集中在局域网高性能机器上；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多模态全场景触达&lt;/strong&gt;：既有本地 Web Dashboard 供深度编码与调试，又有 Telegram 随时随地处理碎片化灵感；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;知识闭环&lt;/strong&gt;：通过 MCP 真正让 Agent 与个人知识库融为一体。&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>Transformer 之后：线性注意力、SSM/Mamba 与混合架构</title><link>https://sues.fun/posts/260608_ssmhybrid/</link><guid isPermaLink="true">https://sues.fun/posts/260608_ssmhybrid/</guid><description>Transformer 之后的故事——从 O(N²) 复杂度瓶颈出发，系统解析线性注意力、SSM/Mamba、RWKV 与 Hybrid 混合架构演进全景。</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Transformer 把序列建模推到了顶峰，也把 $O(n^2)$ 的计算代价显式化了。当上下文越拉越长、端侧/具身对延迟越来越敏感、训练成本持续走高时，Transformer 的瓶颈就成了核心矛盾。破局思路主要分为四条主线：&lt;strong&gt;线性注意力（Linear Attention）&lt;/strong&gt;、&lt;strong&gt;状态空间模型（SSM / Mamba）&lt;/strong&gt;、&lt;strong&gt;线性 RNN（RWKV）&lt;/strong&gt; 以及 &lt;strong&gt;混合架构（Hybrid）&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、Transformer 留下的两个核心瓶颈&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;平方复杂度&lt;/strong&gt;：标准 Self-Attention 计算在序列长度 $n$ 上是 $O(n^2)$，长上下文（如百万级 Token）在训练和推理端都极其昂贵。此外，KV-Cache 随序列长度线性膨胀，对显存带来巨大压力。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;难做无限流式输入&lt;/strong&gt;：Transformer 依赖离散 Attention 矩阵，没有天然的“定长状态压缩 + 持续流式更新”机制，在面对长视频、长对话及机器人在线决策时不甚优雅。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;后续工作的共同目标可以用一句话概括：&lt;strong&gt;把序列建模做到接近线性复杂度，同时保持模型表现不出现断崖式下跌&lt;/strong&gt;。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、Linear Attention（线性注意力一族）&lt;/h2&gt;
&lt;h3&gt;核心原理&lt;/h3&gt;
&lt;p&gt;把标准 $\text{softmax}(QK^T)V$ 的二次方复杂度替换或近似成线性形式。相当于对 Attention 算子做“微创手术”，但保留 Transformer 的宏观多头与残差连接结构。&lt;/p&gt;
&lt;h3&gt;关键流派&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;稀疏注意力（Sparse Attention）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;只让每个 Token 查看局部窗口、跨步跳点或少数全局哨兵 Token。&lt;/li&gt;
&lt;li&gt;代表：&lt;strong&gt;Longformer&lt;/strong&gt;（局部滑窗 + 全局 Token）、&lt;strong&gt;BigBird&lt;/strong&gt;（随机 + 局部 + 全局组合）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核函数化与低秩近似（Kernelization &amp;amp; Low-rank）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;利用核函数拆开 Softmax，改变矩阵乘法结合律：从 $(QK^T)V$ 变为 $Q(K^TV)$，直接将复杂度降至 $O(n)$。&lt;/li&gt;
&lt;li&gt;代表：&lt;strong&gt;Linformer&lt;/strong&gt;（维度低秩投影）、&lt;strong&gt;Performer&lt;/strong&gt;（随机正交特征 FAVOR+ 逼近）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工程精确加速（Kernel 优化）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;不改动数学公式，专注于 GPU 访存优化与重算策略。&lt;/li&gt;
&lt;li&gt;代表：&lt;strong&gt;FlashAttention v1/v2/v3&lt;/strong&gt;（利用 SRAM 分块重算，访存压至 $O(n)$）、&lt;strong&gt;PagedAttention&lt;/strong&gt;（vLLM 借鉴操作系统的分页虚拟内存管理 KV-Cache）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;三、SSM 与 Mamba（状态空间模型）&lt;/h2&gt;
&lt;h3&gt;什么是 SSM？&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;状态空间模型（State Space Model）&lt;/strong&gt; 源于经典的连续时间控制系统理论，其数学方程为：
$$h&apos;(t) = A \cdot h(t) + B \cdot x(t)$$
$$y(t) = C \cdot h(t) + D \cdot x(t)$$&lt;/p&gt;
&lt;p&gt;深度学习将其离散化、参数化并层层堆叠，形成了 &lt;strong&gt;S4 → Mamba → Mamba-2&lt;/strong&gt; 的演进路线。&lt;/p&gt;
&lt;h3&gt;核心技术突破&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;S4（Structured State Space）&lt;/strong&gt;：采用结构化对角加低秩矩阵（DPLR），解决了极长序列在数学上的求解难题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mamba（选择性 SSM）&lt;/strong&gt;：让 $A, B, C$ 矩阵变为输入的函数——使模型学会了“根据输入动态选择记住什么、遗忘什么”，相当于将 LSTM 的门控机制引入连续状态空间。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;硬件友好的并行扫描（Parallel Scan）&lt;/strong&gt;：克服传统 RNN 串行训练慢的弱点，在 GPU 上实现高吞吐并行训练。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mamba-2 与状态空间对偶（SSD）&lt;/strong&gt;：在数学层面将 SSM 与广义线性 Attention 统一，实现比 Mamba-1 显著的吞吐提升。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;优劣势对比&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;优势&lt;/strong&gt;：训练复杂度 $O(n)$，推理时维护固定尺寸的状态向量（每步 $O(1)$），天然支持流式输入。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;局限&lt;/strong&gt;：在原文精确检索（如大海捞针 Passkey 检索、电话簿查找）等任务上，纯 SSM 表现略弱于全注意力。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;四、RWKV（线性 RNN 的复兴）&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;RWKV（Receptance Weighted Key Value）&lt;/strong&gt; 将 Transformer 的 Attention 改写为既能像 RNN 一样递推推理，又能像 Transformer 一样高度并行训练的优雅形式。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;训练视角&lt;/strong&gt;：按时间维度展开为矩阵乘法，GPU 满载并行训练；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推理视角&lt;/strong&gt;：按时间步递推更新固定的隐状态，显存占用与上下文长度完全脱钩。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;演进&lt;/strong&gt;：从 RWKV-4、RWKV-5 (Eagle)、RWKV-6 (Finch) 到融合稀疏注意力的 RWKV-X。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;适用场景&lt;/strong&gt;：端侧部署、树莓派、CPU 纯推理与永不停机的流式会话。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;五、混合架构（Hybrid Architecture）&lt;/h2&gt;
&lt;p&gt;由于纯 SSM 在精确召回上略显不足，而纯 Transformer 在长上下文下算力显存爆炸，&lt;strong&gt;层级交错的 Hybrid 架构&lt;/strong&gt;成为了 2024 年以来的工业界主流方向。&lt;/p&gt;
&lt;p&gt;核心思路是：&lt;strong&gt;以大量 SSM/RNN 模块为骨干承担长程流式吞吐，穿插少量标准 Attention 层作为锚点提供高精度检索&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;混合模型&lt;/th&gt;
&lt;th&gt;核心组合方式&lt;/th&gt;
&lt;th&gt;出处 / 机构&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jamba&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Transformer + Mamba + MoE，每隔数层穿插一次 Attention&lt;/td&gt;
&lt;td&gt;AI21 Labs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zamba / Zamba2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mamba 骨干 + 共享全局 Transformer Block&lt;/td&gt;
&lt;td&gt;Zyphra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Samba&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;层级交错 Mamba + 滑动窗口 Attention，实现 1M 上下文外推&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RWKV-X&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RWKV 短程递推 + 稀疏 Attention 远距离依赖&lt;/td&gt;
&lt;td&gt;开源社区&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;六、全景对比与技术选型&lt;/h2&gt;
&lt;h3&gt;各代架构综合对比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;架构流派&lt;/th&gt;
&lt;th&gt;计算复杂度&lt;/th&gt;
&lt;th&gt;超长上下文能力&lt;/th&gt;
&lt;th&gt;精确事实召回&lt;/th&gt;
&lt;th&gt;推理状态特征&lt;/th&gt;
&lt;th&gt;当前工业定位&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transformer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$O(n^2)$&lt;/td&gt;
&lt;td&gt;显存受限&lt;/td&gt;
&lt;td&gt;极强&lt;/td&gt;
&lt;td&gt;KV-Cache 随长度线性膨胀&lt;/td&gt;
&lt;td&gt;当前绝对基准&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Linear Attention&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$O(n) \sim O(n \log n)$&lt;/td&gt;
&lt;td&gt;中等&lt;/td&gt;
&lt;td&gt;中等&lt;/td&gt;
&lt;td&gt;视具体实现而定&lt;/td&gt;
&lt;td&gt;长文档 / 局部加速&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SSM / Mamba&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$O(n)$&lt;/td&gt;
&lt;td&gt;极强&lt;/td&gt;
&lt;td&gt;中等（需配合检索）&lt;/td&gt;
&lt;td&gt;固定尺寸隐状态&lt;/td&gt;
&lt;td&gt;超长序列新基座&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RWKV&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$O(n)$&lt;/td&gt;
&lt;td&gt;极强&lt;/td&gt;
&lt;td&gt;中弱&lt;/td&gt;
&lt;td&gt;固定尺寸隐状态&lt;/td&gt;
&lt;td&gt;端侧 / 持续流式推理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hybrid (Jamba/Samba)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;接近 $O(n)$&lt;/td&gt;
&lt;td&gt;极强&lt;/td&gt;
&lt;td&gt;强&lt;/td&gt;
&lt;td&gt;固定状态 + 少量局部 KV&lt;/td&gt;
&lt;td&gt;综合性能与成本平衡之选&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;选型落地建议&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;现有成熟大模型微调与业务上线&lt;/strong&gt;：首选 &lt;code&gt;FlashAttention + PagedAttention + 量化&lt;/code&gt;（事实上的生产标准）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;百万级长文本 / 海量文档 RAG 产品&lt;/strong&gt;：优先考虑 &lt;code&gt;Jamba / Samba&lt;/code&gt; 类的混合架构。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;端侧设备 / 树莓派 / 离线边缘部署&lt;/strong&gt;：选择 &lt;code&gt;RWKV&lt;/code&gt; 或 &lt;code&gt;Mamba-2&lt;/code&gt;，摆脱 KV-Cache 内存黑洞。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;机器人 / 具身智能在线策略控制&lt;/strong&gt;：状态恒定的 SSM/RWKV 结构在实时流式循环中具备显著架构优势。&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>Docker 小白到大师</title><link>https://sues.fun/posts/260602_dockermaster/</link><guid isPermaLink="true">https://sues.fun/posts/260602_dockermaster/</guid><description>从第一条命令到容器化真实项目的 Docker 入门路线。</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;这不是一篇概念堆叠的 Docker 笔记，而是一条可以照着做的学习路线：从第一条命令，到容器化一个真实项目。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;为什么要学 Docker&lt;/h2&gt;
&lt;p&gt;Docker 解决的不是炫技问题，而是运行和交付问题。&lt;/p&gt;
&lt;p&gt;一个项目在你电脑上能跑，不代表在服务器、同事电脑、测试环境里也能跑。Docker 的价值，就是把运行环境、依赖、启动方式尽量封装成一个清楚的交付物。&lt;/p&gt;
&lt;p&gt;它带来的核心收益可以概括成三点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;环境一致&lt;/li&gt;
&lt;li&gt;交付物清楚&lt;/li&gt;
&lt;li&gt;回滚更简单&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后面的每一条命令，其实都围绕这三个目标展开。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;先确认 Docker 能不能跑&lt;/h2&gt;
&lt;p&gt;安装完成以后，不要急着上项目，先用三条命令验证环境。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker version
docker info
docker run hello-world
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;docker version&lt;/code&gt; 用来看客户端和服务端版本，&lt;code&gt;docker info&lt;/code&gt; 用来看 Docker 引擎状态，&lt;code&gt;docker run hello-world&lt;/code&gt; 用来验证镜像能拉取、容器能启动。&lt;/p&gt;
&lt;p&gt;看到 &lt;code&gt;Hello from Docker&lt;/code&gt;，就说明基本环境已经通了。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;跑第一个真正的容器&lt;/h2&gt;
&lt;p&gt;接下来启动一个 nginx 容器：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run --name web -d -p 8080:80 nginx:alpine
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这条命令会把宿主机的 &lt;code&gt;8080&lt;/code&gt; 端口映射到容器里的 &lt;code&gt;80&lt;/code&gt; 端口。打开浏览器访问：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果能看到 nginx 欢迎页，就说明你已经完成了第一个可访问服务。&lt;/p&gt;
&lt;p&gt;把 &lt;code&gt;docker run&lt;/code&gt; 拆开看，其实并不复杂：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--name web&lt;/code&gt;：给容器起名&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-d&lt;/code&gt;：后台运行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p 8080:80&lt;/code&gt;：端口映射&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nginx:alpine&lt;/code&gt;：使用的镜像&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以后大多数 &lt;code&gt;run&lt;/code&gt; 命令，都是在这些部件上变化。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;容器运行后怎么观察&lt;/h2&gt;
&lt;p&gt;容器启动以后，第一件事是看它到底有没有在跑。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker ps
docker ps -a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;docker ps&lt;/code&gt; 查看正在运行的容器，&lt;code&gt;docker ps -a&lt;/code&gt; 查看所有容器，包括已经退出的。&lt;/p&gt;
&lt;p&gt;遇到问题时，先看日志：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker logs web
docker logs -f web
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;docker logs -f&lt;/code&gt; 可以持续跟随输出。启动失败、请求异常、服务报错，通常都能先从日志里看到线索。&lt;/p&gt;
&lt;p&gt;如果要进入容器内部观察现场，可以用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker exec -it web sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进去以后可以检查文件、环境变量、网络连通性。排查完用 &lt;code&gt;exit&lt;/code&gt; 退出。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;镜像和容器是什么关系&lt;/h2&gt;
&lt;p&gt;镜像和容器的关系，可以理解成模板和实例。&lt;/p&gt;
&lt;p&gt;镜像是只读模板，容器是镜像运行起来的实例。一个镜像可以启动多个容器，删除容器不等于删除镜像。&lt;/p&gt;
&lt;p&gt;不用的容器可以先停止，再删除：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker stop web
docker rm web
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;临时容器确认不要了，也可以强制删除：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker rm -f web
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意：删除容器不会删除镜像，但容器可写层里的临时数据可能会丢。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;用 Dockerfile 构建自己的镜像&lt;/h2&gt;
&lt;p&gt;Dockerfile 是把项目做成镜像的说明书。&lt;/p&gt;
&lt;p&gt;一个典型 Dockerfile 会做几件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;选择基础镜像&lt;/li&gt;
&lt;li&gt;设置工作目录&lt;/li&gt;
&lt;li&gt;安装依赖&lt;/li&gt;
&lt;li&gt;复制源码&lt;/li&gt;
&lt;li&gt;指定启动命令&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;写好 Dockerfile 后，可以构建镜像：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker build -t my-node-app:1.0 .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;-t&lt;/code&gt; 后面是镜像名和标签，最后的 &lt;code&gt;.&lt;/code&gt; 表示当前目录是构建上下文。&lt;/p&gt;
&lt;p&gt;构建成功后查看镜像：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;自己的镜像构建好以后，就能像官方镜像一样运行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run --rm -p 3000:3000 my-node-app:1.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;浏览器能打开，就说明镜像可运行。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;.dockerignore&lt;/code&gt; 很重要&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;.dockerignore&lt;/code&gt; 决定哪些文件不要进入构建上下文。&lt;/p&gt;
&lt;p&gt;常见应该排除的内容包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;node_modules&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;日志文件&lt;/li&gt;
&lt;li&gt;测试覆盖率目录&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它能让构建更快，也能避免把不该进镜像的敏感文件带进去。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;端口、数据和网络&lt;/h2&gt;
&lt;p&gt;端口映射按“左边宿主机，右边容器”来记。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-p 8080:80
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;意思是访问宿主机 &lt;code&gt;8080&lt;/code&gt;，会转到容器里的 &lt;code&gt;80&lt;/code&gt;。端口不通时，先看这个方向有没有写反。&lt;/p&gt;
&lt;p&gt;数据库数据不要只放在容器可写层。更稳的方式是用 volume：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker volume create app-data
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;本地开发时，bind mount 也很常见。它可以把宿主机目录挂到容器里，方便用容器里的运行时处理本地代码。&lt;/p&gt;
&lt;p&gt;容器之间通信时，不要总是绕宿主机端口。把服务放到同一个 Docker network 里，就可以用服务名访问。&lt;/p&gt;
&lt;p&gt;例如 Redis 容器叫 &lt;code&gt;redis&lt;/code&gt;，同一网络里的其他容器就可以直接用 &lt;code&gt;redis&lt;/code&gt; 这个名字连接。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;用 Compose 管理一组服务&lt;/h2&gt;
&lt;p&gt;真实项目通常不是一个容器，而是一组服务：Web、数据库、缓存、队列。&lt;/p&gt;
&lt;p&gt;Compose 用一个 YAML 文件管理这组服务。本地开发时，一条命令就能拉起整套环境：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常见组合是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;web&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;db&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;redis&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Compose 会自动创建网络，服务之间可以用 &lt;code&gt;web&lt;/code&gt;、&lt;code&gt;db&lt;/code&gt;、&lt;code&gt;redis&lt;/code&gt; 这些名字互相访问。&lt;/p&gt;
&lt;p&gt;查看日志：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker compose logs -f web
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;配置和密钥&lt;/h2&gt;
&lt;p&gt;配置应该在运行时注入，不要写死在镜像里。&lt;/p&gt;
&lt;p&gt;同一个镜像可以跑在开发、测试和生产环境，只是环境变量不同。镜像负责能力，环境变量负责差异。&lt;/p&gt;
&lt;p&gt;密钥尤其不要写进 Dockerfile，也不要 &lt;code&gt;COPY .env&lt;/code&gt; 到镜像里。镜像层和构建历史都可能留下痕迹。&lt;/p&gt;
&lt;p&gt;更稳的做法是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;平台 secret&lt;/li&gt;
&lt;li&gt;CI 密钥管理&lt;/li&gt;
&lt;li&gt;运行期环境变量&lt;/li&gt;
&lt;li&gt;挂载密钥文件&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;排障顺序&lt;/h2&gt;
&lt;p&gt;排障不要盲猜，先判断问题发生在哪个阶段。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;问题&lt;/th&gt;
&lt;th&gt;优先检查&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;构建失败&lt;/td&gt;
&lt;td&gt;Dockerfile、构建上下文、依赖安装&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;启动退出&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker logs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;端口不通&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker ps&lt;/code&gt;、端口映射&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;数据丢失&lt;/td&gt;
&lt;td&gt;volume / bind mount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;磁盘占满&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker system df&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这套顺序能省掉很多无效尝试。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;上线前检查&lt;/h2&gt;
&lt;p&gt;上线前至少检查这些点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不要使用 &lt;code&gt;latest&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;尽量非 root 运行&lt;/li&gt;
&lt;li&gt;密钥不要进入镜像&lt;/li&gt;
&lt;li&gt;数据使用 volume，并有备份&lt;/li&gt;
&lt;li&gt;日志输出到标准输出&lt;/li&gt;
&lt;li&gt;镜像版本可以回滚&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Docker 不是只会启动容器就算学会。真正掌握，是能稳定构建、交付、运行、排障和回滚。&lt;/p&gt;
&lt;p&gt;下一步就拿一个真实项目，按这套流程容器化一遍。&lt;/p&gt;
</content:encoded></item><item><title>Obsidian 小白到大师</title><link>https://sues.fun/posts/260602_obsidianmaster/</link><guid isPermaLink="true">https://sues.fun/posts/260602_obsidianmaster/</guid><description>从第一个 Vault 到稳定输出闭环的 Obsidian 入门路线。</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;这不是一篇把 Obsidian 讲复杂的教程，而是一条从零搭建知识系统的路线：先能用，再逐步变成稳定输出的工作流。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;先理解 Vault&lt;/h2&gt;
&lt;p&gt;Vault 就是你的知识库文件夹。&lt;/p&gt;
&lt;p&gt;Obsidian 不是把资料锁进一个陌生数据库，而是读取你本地的 Markdown 文件。以后搬家、备份、同步，核心都是围绕这个文件夹。&lt;/p&gt;
&lt;p&gt;这也是 Obsidian 很适合长期使用的原因：内容属于你，文件结构也属于你。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;第一步：创建一个新的 Vault&lt;/h2&gt;
&lt;p&gt;刚开始不要急着装插件。&lt;/p&gt;
&lt;p&gt;先点击 &lt;code&gt;Create new vault&lt;/code&gt;，输入一个清楚的名字，比如“我的知识库”，再选择一个自己能找到的位置。&lt;/p&gt;
&lt;p&gt;小白阶段的目标只有三个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建 Vault&lt;/li&gt;
&lt;li&gt;写第一条笔记&lt;/li&gt;
&lt;li&gt;做第一个内部链接&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这三件事跑通，比一上来研究复杂系统更重要。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;目录先保持简单&lt;/h2&gt;
&lt;p&gt;新手最容易犯的错误，是一开始就设计一个很复杂的目录。&lt;/p&gt;
&lt;p&gt;可以先用这六个文件夹：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文件夹&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Inbox&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;临时收集&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Projects&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;管项目&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Areas&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;管长期领域&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Resources&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;放资料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Archive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;做归档&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Templates&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;放模板&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;目录够简单，才有机会坚持。真正跑起来之后，再根据自己的使用方式调整。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;写第一条笔记&lt;/h2&gt;
&lt;p&gt;第一条笔记不用漂亮，但标题要清楚。&lt;/p&gt;
&lt;p&gt;可以写这三个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我为什么开始用 Obsidian？&lt;/li&gt;
&lt;li&gt;我想管理什么？&lt;/li&gt;
&lt;li&gt;三个月后我希望这个知识库帮我做到什么？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不要一开始追求排版和插件。第一天的目标，是写出一条以后还能看懂的笔记。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;标题决定未来能不能找回来&lt;/h2&gt;
&lt;p&gt;标题是搜索和链接的入口。&lt;/p&gt;
&lt;p&gt;像“笔记1”“资料”“学习”这样的标题，三个月后基本等于没标题。&lt;/p&gt;
&lt;p&gt;更好的标题应该具体：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Obsidian 插件选择原则&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AI Agent 学习路线&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Docker 容器化项目复盘&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;标题具体，搜索才会准，内部链接也更自然。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;内部链接和反向链接&lt;/h2&gt;
&lt;p&gt;内部链接是 Obsidian 的核心。&lt;/p&gt;
&lt;p&gt;用双方括号写下另一个笔记名：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[[Obsidian 插件选择原则]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就能把两个想法连接起来。如果那篇笔记还不存在，点击链接也可以直接创建。&lt;/p&gt;
&lt;p&gt;反向链接会自动告诉你：哪些笔记提到了当前笔记。&lt;/p&gt;
&lt;p&gt;它的价值不是装饰，而是帮你找回上下文。打开一个主题时，你不只看到这篇笔记本身，还能看到哪些计划、资料、复盘曾经引用过它。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;标签不要替代关系&lt;/h2&gt;
&lt;p&gt;标签适合表示状态和类型，不适合替代知识关系。&lt;/p&gt;
&lt;p&gt;比如这些标签很清楚：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;#todo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#idea&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#reading&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但如果给一篇笔记打十几个主题标签，最后会越来越乱。&lt;/p&gt;
&lt;p&gt;新手阶段建议把常用标签控制在五到八个。真正的知识关系，优先用内部链接表达。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Properties 只用最少字段&lt;/h2&gt;
&lt;p&gt;Properties 是给笔记增加结构化信息。&lt;/p&gt;
&lt;p&gt;读书笔记可以有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;type&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;author&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;created&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;项目笔记可以有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;deadline&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;刚开始只用 &lt;code&gt;type&lt;/code&gt;、&lt;code&gt;status&lt;/code&gt;、&lt;code&gt;created&lt;/code&gt; 三个字段就够。不要为了结构化而结构化。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;搜索是底线能力&lt;/h2&gt;
&lt;p&gt;写笔记的底线，是以后能找回来。&lt;/p&gt;
&lt;p&gt;Obsidian 可以按关键词、标签、路径搜索：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tag:#todo
path:Projects
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果总是搜不准，通常不是搜索功能不行，而是标题、标签或目录需要调整。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;模板、日记和 Canvas&lt;/h2&gt;
&lt;p&gt;模板用来减少重复输入。&lt;/p&gt;
&lt;p&gt;会议、读书、项目复盘这些重复格式，都可以做成短模板。模板不要一开始就复杂，先做一个能用的版本，用三次以后再改。&lt;/p&gt;
&lt;p&gt;Daily Notes 可以作为每天进入知识库的入口。它不只是日记，也可以放：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;今日重点&lt;/li&gt;
&lt;li&gt;临时记录&lt;/li&gt;
&lt;li&gt;待办&lt;/li&gt;
&lt;li&gt;新链接&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Canvas 适合把复杂问题摊开看。可以拖入笔记、写文本卡片、画连接线，把资料、问题和输出放在同一张白板上。&lt;/p&gt;
&lt;p&gt;不过最终沉淀，最好还是回到 Markdown 笔记。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Graph View 不要用来炫&lt;/h2&gt;
&lt;p&gt;Graph View 很容易让人沉迷，但它不是用来炫的。&lt;/p&gt;
&lt;p&gt;更实用的用途是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;找孤立笔记&lt;/li&gt;
&lt;li&gt;找中心主题&lt;/li&gt;
&lt;li&gt;看某个项目周围的关系&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不要为了让图谱好看而强行链接。链接要服务理解。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;插件按痛点安装&lt;/h2&gt;
&lt;p&gt;先学核心插件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Backlinks&lt;/li&gt;
&lt;li&gt;Templates&lt;/li&gt;
&lt;li&gt;Daily notes&lt;/li&gt;
&lt;li&gt;Canvas&lt;/li&gt;
&lt;li&gt;Graph view&lt;/li&gt;
&lt;li&gt;Page preview&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些已经能覆盖多数新手需求。&lt;/p&gt;
&lt;p&gt;社区插件要按痛点安装。先明确自己遇到了什么问题，再选一个插件试用。确认真的解决问题后再保留。&lt;/p&gt;
&lt;p&gt;不知道为什么要装，就先不要装。插件越多，维护成本越高。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;三个常用工作流&lt;/h2&gt;
&lt;h3&gt;学习一门技术&lt;/h3&gt;
&lt;p&gt;不要只收藏链接。&lt;/p&gt;
&lt;p&gt;先把资料放进 &lt;code&gt;Inbox&lt;/code&gt;，再整理成 &lt;code&gt;Resources&lt;/code&gt;，接着在 &lt;code&gt;Projects&lt;/code&gt; 里做练习，最后留下复盘或输出。&lt;/p&gt;
&lt;p&gt;这样学习过程会变成可追踪的知识资产。&lt;/p&gt;
&lt;h3&gt;做项目&lt;/h3&gt;
&lt;p&gt;每个项目一个独立文件夹。&lt;/p&gt;
&lt;p&gt;里面至少放：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;目标&lt;/li&gt;
&lt;li&gt;计划&lt;/li&gt;
&lt;li&gt;资料&lt;/li&gt;
&lt;li&gt;复盘&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;项目结束后归档，避免长期领域被一次性任务塞满。&lt;/p&gt;
&lt;h3&gt;写文章或做汇报&lt;/h3&gt;
&lt;p&gt;先从 &lt;code&gt;Resources&lt;/code&gt; 抽素材，再用 Canvas 排结构，最后进入草稿写正文。&lt;/p&gt;
&lt;p&gt;Obsidian 的价值不是让你从空白页开始，而是让已有笔记成为输出材料。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;同步和备份不是一回事&lt;/h2&gt;
&lt;p&gt;同步让多设备看到同一份资料，但错误删除也可能同步过去。&lt;/p&gt;
&lt;p&gt;重要 Vault 要额外保留可恢复的备份，尤其是长期积累的知识库。&lt;/p&gt;
&lt;p&gt;发布前也要检查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;哪些笔记适合公开&lt;/li&gt;
&lt;li&gt;哪些包含隐私&lt;/li&gt;
&lt;li&gt;内部链接外部读者是否看得懂&lt;/li&gt;
&lt;li&gt;附件和引用是否完整&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publish 适合发布一部分笔记，而不是把整个私人 Vault 直接公开。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;小白最容易踩的坑&lt;/h2&gt;
&lt;p&gt;常见问题基本都来自过早复杂化：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;插件装太多&lt;/li&gt;
&lt;li&gt;照搬别人的系统&lt;/li&gt;
&lt;li&gt;只收藏不整理&lt;/li&gt;
&lt;li&gt;把标签当目录&lt;/li&gt;
&lt;li&gt;为了图谱强行链接&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;先用最小系统跑一周，再加功能。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;大师阶段是稳定闭环&lt;/h2&gt;
&lt;p&gt;大师阶段不是复杂，而是稳定闭环。&lt;/p&gt;
&lt;p&gt;持续输入资料，用链接建立关系，定期回顾整理，最后输出文章、报告、课程或决策。&lt;/p&gt;
&lt;p&gt;三个月后，如果你还能找回、理解并使用这些笔记，就说明这个系统真的开始工作了。&lt;/p&gt;
</content:encoded></item><item><title>AI Agent 工程实践：从原理到落地的完整指南</title><link>https://sues.fun/posts/260331_aiagent/</link><guid isPermaLink="true">https://sues.fun/posts/260331_aiagent/</guid><description>拆解 AI Agent 的架构、记忆系统、工具调用与多智能体协作，结合真实工程踩坑经验，从理论到生产落地的完整记录。</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文约 10,000 字，适合有一定 LLM 使用经验、想系统了解 Agent 工程的读者。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;一、为什么现在谈 Agent？&lt;/h2&gt;
&lt;p&gt;2023 年 ChatGPT 爆发，大家的第一反应是&quot;这个对话机器人真厉害&quot;。2024 年 RAG 火了一把，向量数据库一夜之间人人都在用。到了 2025~2026 年，技术圈最高频的词变成了：&lt;strong&gt;Agent（智能体）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;但 Agent 究竟是什么？很多人说不清楚。有人说它是&quot;能自主执行任务的 AI&quot;，有人说它是&quot;会用工具的 LLM&quot;，还有人把所有自动化流程都叫 Agent。&lt;/p&gt;
&lt;p&gt;定义模糊，往往是概念还在快速演化的信号。本文不打算给 Agent 下一个终极定义，而是从&lt;strong&gt;工程视角&lt;/strong&gt;出发，拆解 Agent 的组件，梳理主流架构，讲清楚真实项目里会碰到哪些坑，以及怎么一步步把 Agent 从 Demo 推向生产。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、Agent 的本质：一个决策-执行循环&lt;/h2&gt;
&lt;p&gt;如果只用一句话描述 Agent：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Agent 是一个在&quot;感知-推理-行动&quot;循环中自主完成目标的系统。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;和普通 LLM 调用最大的区别：LLM 是&lt;strong&gt;一次性输入输出&lt;/strong&gt;，Agent 是&lt;strong&gt;持续迭代的循环过程&lt;/strong&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;用户目标
   ↓
[感知] 获取当前状态（环境、工具输出、历史记忆）
   ↓
[推理] LLM 决定下一步做什么
   ↓
[行动] 调用工具 / 写代码 / 访问数据库 / 发 API 请求
   ↓
[观察] 获得行动结果
   ↓
判断目标是否完成？
  ├── 未完成 → 回到[感知]
  └── 完成   → 输出最终结果
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个循环可以运行一次，也可以运行几十次。每一轮迭代，Agent 都在消耗上下文窗口、调用工具、花费 Token。这也是 Agent 和普通对话系统在&lt;strong&gt;成本结构&lt;/strong&gt;和&lt;strong&gt;可靠性挑战&lt;/strong&gt;上完全不同的根本原因。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;三、Agent 的四大组件&lt;/h2&gt;
&lt;p&gt;无论哪种 Agent 框架，骨子里都绕不开四个东西：&lt;strong&gt;大脑（LLM）、记忆（Memory）、工具（Tools）、规划（Planning）&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;3.1 大脑：LLM 是 Agent 的决策核心&lt;/h3&gt;
&lt;p&gt;LLM 在 Agent 里扮演的角色不是&quot;回答问题&quot;，而是做决策——决定下一步该调用哪个工具、该怎么拆解任务、该什么时候停下来。&lt;/p&gt;
&lt;p&gt;这对模型的推理能力要求很高。早期用 GPT-3.5 跑 Agent 常常出现&quot;幻觉工具调用&quot;（调用了根本不存在的工具）、&quot;死循环&quot;（反复执行同一个动作）等问题。GPT-4、Claude 3 系列之后，这类基础可靠性才算过关。&lt;/p&gt;
&lt;p&gt;从工程角度选模型，要考虑三件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Function Calling 支持质量&lt;/strong&gt;：能不能稳定输出结构化的工具调用指令，不乱加东西、不漏字段？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;长上下文处理能力&lt;/strong&gt;：Agent 运行多轮后，上下文会变得很长，模型在 10K~100K Token 的情况下还能保持注意力吗？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;指令遵循能力&lt;/strong&gt;：你给了系统提示说&quot;只在必要时才调用搜索工具&quot;，模型会乱用吗？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不同场景选不同模型完全正常。代码相关任务 Claude 系列表现优秀，中文场景可以考虑 DeepSeek，成本敏感的场景可以用小模型做路由、大模型做最终决策。&lt;/p&gt;
&lt;h3&gt;3.2 记忆：Agent 怎么&quot;记住&quot;东西&lt;/h3&gt;
&lt;p&gt;记忆是 Agent 工程里最容易被忽视、也最容易踩坑的部分。&lt;/p&gt;
&lt;p&gt;按照存储位置和生命周期，Agent 的记忆可以分为四类：&lt;/p&gt;
&lt;h4&gt;① 上下文内记忆（In-Context Memory）&lt;/h4&gt;
&lt;p&gt;最直接的记忆方式：把历史对话、工具调用结果都塞进 Prompt 里。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;优点&lt;/strong&gt;：实现简单，模型可以直接&quot;看到&quot;所有历史&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;缺点&lt;/strong&gt;：上下文窗口有限，长任务会撑爆；Token 成本随轮次线性增长&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;工程上常用的缓解方案是&lt;strong&gt;滑动窗口&lt;/strong&gt;（只保留最近 N 轮）或&lt;strong&gt;摘要压缩&lt;/strong&gt;（让模型把前面的对话浓缩成摘要再放进去）。&lt;/p&gt;
&lt;h4&gt;② 外部存储记忆（External Memory）&lt;/h4&gt;
&lt;p&gt;把信息持久化到数据库，需要时再检索出来。这就是 RAG 的思路。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;向量数据库&lt;/strong&gt;（Pinecone、Qdrant、Chroma）：存文本片段的语义向量，支持语义检索&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关系型数据库&lt;/strong&gt;：存结构化信息，如用户偏好、任务状态&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;键值存储&lt;/strong&gt;：快速读写简单的状态信息&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;外部记忆的难点不在于存，而在于&lt;strong&gt;检索的精准度&lt;/strong&gt;。如果检索回来的内容不相关，模型反而会被干扰。&lt;/p&gt;
&lt;h4&gt;③ 工作记忆（Working Memory）&lt;/h4&gt;
&lt;p&gt;任务执行过程中的中间状态，类似人做数学题时的草稿纸。&lt;/p&gt;
&lt;p&gt;在工程实现里，工作记忆通常是一个结构体，记录当前任务的阶段、已完成的步骤、待处理的子任务列表等。LangGraph 的 &lt;code&gt;StateGraph&lt;/code&gt; 就是为此设计的。&lt;/p&gt;
&lt;h4&gt;④ 参数记忆（Parametric Memory）&lt;/h4&gt;
&lt;p&gt;这是 LLM 本身通过训练&quot;记住&quot;的世界知识。不需要显式管理，但也不可更新。&lt;/p&gt;
&lt;p&gt;Agent 工程里经常遇到的一个误区是把模型当百科全书用——让它凭参数记忆回答时效性强的问题。正确做法是：参数记忆提供通用推理能力，外部记忆提供特定领域/时效性知识。&lt;/p&gt;
&lt;h3&gt;3.3 工具：Agent 的手和脚&lt;/h3&gt;
&lt;p&gt;工具（Tools / Functions）是 Agent 与外部世界交互的唯一通道。没有工具，Agent 只能在上下文里&quot;空想&quot;，无法真正执行任何操作。&lt;/p&gt;
&lt;p&gt;常见的工具类型：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;th&gt;注意事项&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;搜索工具&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Search、Bing API、Tavily&lt;/td&gt;
&lt;td&gt;返回内容需要截断，避免塞爆上下文&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;代码执行&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python REPL、沙箱环境&lt;/td&gt;
&lt;td&gt;必须隔离，防止任意代码执行风险&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;数据库查询&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SQL 执行、向量检索&lt;/td&gt;
&lt;td&gt;权限控制，防止 SQL 注入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API 调用&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;天气、日历、邮件、支付&lt;/td&gt;
&lt;td&gt;幂等性设计，失败重试策略&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;文件操作&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;读写本地文件、解析 PDF&lt;/td&gt;
&lt;td&gt;路径白名单，防止越权访问&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;浏览器控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Playwright、Puppeteer&lt;/td&gt;
&lt;td&gt;沙箱隔离，超时控制&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;工具的设计直接影响 Agent 的行为质量。一个好的工具定义应该：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;名称直观&lt;/strong&gt;：&lt;code&gt;search_web&lt;/code&gt; 比 &lt;code&gt;tool_001&lt;/code&gt; 强一百倍&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;参数最小化&lt;/strong&gt;：只暴露 Agent 必要的参数，复杂性留在工具内部&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;返回格式统一&lt;/strong&gt;：永远返回结构化数据，不要让 Agent 去解析自由文本&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;包含错误信息&lt;/strong&gt;：工具失败时返回清晰的错误描述，让 Agent 能做决策&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3.4 规划：Agent 怎么拆解任务&lt;/h3&gt;
&lt;p&gt;对于简单任务，Agent 可以边想边做（ReAct 模式）。但对于复杂任务，没有提前规划的 Agent 很容易走偏——做了十几步之后才发现方向错了。&lt;/p&gt;
&lt;p&gt;规划能力的好坏，大致决定了 Agent 能处理多复杂的任务。后面会详细讲几种主流的规划架构。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;四、三大核心架构模式&lt;/h2&gt;
&lt;h3&gt;4.1 ReAct：最经典的边想边做&lt;/h3&gt;
&lt;p&gt;ReAct（Reasoning + Acting）是最广泛使用的 Agent 架构，来自 2022 年的同名论文。核心思路是让模型&lt;strong&gt;在行动之前先输出推理过程&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Thought: 用户想知道今天北京的天气，我应该先用天气工具查一下
Action: weather_tool(city=&quot;北京&quot;)
Observation: 晴，最高气温 22°C，最低气温 10°C
Thought: 已经拿到天气数据了，可以回答了
Final Answer: 今天北京天气晴，气温 10~22°C，适合外出。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;ReAct 的优势：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;推理过程透明，便于调试&lt;/li&gt;
&lt;li&gt;灵活性强，适合动态决策&lt;/li&gt;
&lt;li&gt;不需要预先确定任务步骤&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;ReAct 的陷阱（工程上必须处理）：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;无限循环&lt;/strong&gt;：模型可能反复调用同一个工具，永远到不了终止条件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;解决：强制设置 &lt;code&gt;maxIterations&lt;/code&gt;（建议 10~20），超过直接报错或强制结束&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;幻觉行动&lt;/strong&gt;：模型声称要调用工具，但输出格式不符合 function calling 规范&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;解决：严格校验工具调用格式，格式错误直接返回错误提示让模型重试&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;上下文膨胀&lt;/strong&gt;：每一轮 Thought/Action/Observation 都在加长 Prompt&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;解决：压缩中间结果，只保留关键信息&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;// LangChain ReAct 示例（核心代码）
const executor = await AgentExecutor.fromAgentAndTools({
  agent: createReactAgent({ llm, tools, prompt }),
  tools,
  maxIterations: 15,        // 必须设！
  returnIntermediateSteps: true,  // 调试用
  handleParsingErrors: true,      // 格式错误自动重试
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.2 Plan-and-Execute：先谋后动&lt;/h3&gt;
&lt;p&gt;Plan-and-Execute 把任务分成两个阶段：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Planner&lt;/strong&gt;：一次性生成完整的执行计划（步骤列表）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Executor&lt;/strong&gt;：按计划逐步执行，每步可用工具&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;输入：写一份关于新能源汽车市场的调研报告

[Planner 生成计划]
Step 1: 搜索 2026 年新能源汽车全球销量数据
Step 2: 搜索国内主要品牌市场份额
Step 3: 搜索行业分析师对未来趋势的预测
Step 4: 整合以上信息，生成报告大纲
Step 5: 根据大纲撰写完整报告

[Executor 逐步执行]
执行 Step 1 → 得到结果 → 执行 Step 2 → ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;适用场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;任务步骤相对固定，不需要根据中间结果动态调整&lt;/li&gt;
&lt;li&gt;需要向用户展示执行进度（&quot;正在进行第 3/5 步...&quot;）&lt;/li&gt;
&lt;li&gt;步骤之间有明确的依赖关系&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;缺点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;计划一旦生成，适应变化的能力弱&lt;/li&gt;
&lt;li&gt;Planner 的规划质量决定了整体效果，如果计划本身有问题，Executor 再努力也没用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现实中，很多工程师会把 Plan-and-Execute 和 ReAct 结合：用 Plan-and-Execute 做高层规划，每个步骤内部用 ReAct 动态执行。&lt;/p&gt;
&lt;h3&gt;4.3 Multi-Agent：让专家团队协作&lt;/h3&gt;
&lt;p&gt;当单个 Agent 的能力或上下文窗口不够用时，就需要多个 Agent 协作。&lt;/p&gt;
&lt;p&gt;典型场景：开发一个完整的软件功能，需要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Research Agent&lt;/strong&gt;：调研需求、竞品分析&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Architecture Agent&lt;/strong&gt;：设计系统架构&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coding Agent&lt;/strong&gt;：写具体代码&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing Agent&lt;/strong&gt;：生成测试用例、运行测试&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review Agent&lt;/strong&gt;：代码审查、安全检查&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每个 Agent 有自己的专属工具集和系统提示，分工处理不同子任务。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;多智能体的五种协作模式：&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模式&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;th&gt;典型场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sequential（顺序）&lt;/td&gt;
&lt;td&gt;A 完成后交给 B，B 完成后交给 C&lt;/td&gt;
&lt;td&gt;内容生产流水线&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Concurrent（并发）&lt;/td&gt;
&lt;td&gt;A、B、C 同时执行，汇总结果&lt;/td&gt;
&lt;td&gt;多视角分析、并行数据处理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Group Chat（群聊）&lt;/td&gt;
&lt;td&gt;多个 Agent 在&quot;会议室&quot;里讨论&lt;/td&gt;
&lt;td&gt;需要辩证决策的复杂问题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handoff（移交）&lt;/td&gt;
&lt;td&gt;Agent 根据情况动态转给专家&lt;/td&gt;
&lt;td&gt;客服系统、问题路由&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hierarchical（层级）&lt;/td&gt;
&lt;td&gt;Orchestrator 指挥多个 Worker&lt;/td&gt;
&lt;td&gt;任务分解后分配执行&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Multi-Agent 的工程警告：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;多 Agent 系统的调试难度是单 Agent 的好几倍。出了问题，你要追踪 Agent A 传给 Agent B 的是什么，B 又是怎么理解的，B 传给 C 时丢了什么——这条链路很痛苦，尤其是在生产环境下没有完整日志的时候。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;建议：永远从单 Agent + 工具开始。只有在确认单 Agent 无法胜任时，才考虑引入多 Agent。&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;五、Memory 的工程实现&lt;/h2&gt;
&lt;p&gt;前面提到了记忆的四种类型，这里展开讲工程实现中最常见的两个问题。&lt;/p&gt;
&lt;h3&gt;5.1 上下文压缩：怎么不让 Prompt 撑爆&lt;/h3&gt;
&lt;p&gt;长任务的 Agent 会在上下文里积累大量的 Thought/Action/Observation，线性增长，很快超出模型的上下文限制（哪怕是支持 200K Token 的模型，在成本和延迟上也会越来越贵）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;几种压缩策略的对比：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;策略一：滑动窗口
保留最近 N 轮交互，丢弃更早的内容
- 优点：实现简单
- 缺点：早期的重要信息会丢失

策略二：摘要压缩
每隔 K 轮，让模型对历史内容生成摘要，用摘要替换原始内容
- 优点：保留关键信息，大幅压缩 Token
- 缺点：摘要本身可能失真，额外增加 LLM 调用成本

策略三：重要性过滤
让模型或规则引擎标记每条信息的重要程度，只保留重要信息
- 优点：精准保留关键内容
- 缺点：重要性判断本身不可靠

策略四：外部化存储
把中间结果写入外部存储（数据库/文件），上下文里只保留引用
- 优点：理论上无上限
- 缺点：需要设计好检索机制，否则检索回来的内容不相关
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;实践中，&lt;strong&gt;摘要压缩 + 外部化存储&lt;/strong&gt;的组合最常见：结构化的结果（搜索结果、代码输出）外部化，对话流程用摘要压缩。&lt;/p&gt;
&lt;h3&gt;5.2 记忆一致性：跨会话的状态管理&lt;/h3&gt;
&lt;p&gt;单次对话的 Agent 不用考虑跨会话问题。但如果你要构建一个有&quot;长期记忆&quot;的 Agent（比如个人助理、持续运行的工作流），就要面对一个问题：&lt;strong&gt;怎么在多次会话之间保持状态一致？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;几个实际场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户上周说过&quot;我不喜欢用 Python，我只用 TypeScript&quot;，这周问代码问题时 Agent 应该记住这个偏好&lt;/li&gt;
&lt;li&gt;一个跨天运行的数据分析任务，Agent 需要知道昨天已经处理了哪些文件&lt;/li&gt;
&lt;li&gt;用户的历史决策和偏好应该影响今天的建议&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;工程实现路径：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;用户画像持久化&lt;/strong&gt;：把用户的稳定偏好（语言偏好、风格偏好、背景信息）存入数据库，每次会话开始时加载到系统提示&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;任务状态机&lt;/strong&gt;：用明确的状态机记录长任务的进度，支持中断和恢复&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;事件日志&lt;/strong&gt;：记录所有重要操作的历史，为后续决策提供依据&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;六、工具调用的可靠性工程&lt;/h2&gt;
&lt;p&gt;工具调用是 Agent 出问题最多的地方。几个绕不开的问题：&lt;/p&gt;
&lt;h3&gt;6.1 幂等性设计&lt;/h3&gt;
&lt;p&gt;如果 Agent 调用了一个&quot;发送邮件&quot;的工具，但因为网络超时没拿到响应，它可能会重试——结果用户收到了两封邮件。&lt;/p&gt;
&lt;p&gt;所有会产生副作用的工具，必须设计幂等性。&lt;/p&gt;
&lt;p&gt;常见实现方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;请求中携带唯一的 &lt;code&gt;requestId&lt;/code&gt;，服务端检测重复请求并直接返回上次结果&lt;/li&gt;
&lt;li&gt;对于不可撤销操作（发邮件、转账），要求 Agent 先展示计划让用户确认，再执行&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6.2 权限控制分级&lt;/h3&gt;
&lt;p&gt;不是所有操作都应该让 Agent 无限制地执行。一个合理的权限分级：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Level 0 - 只读操作（自由执行）
  搜索网页、读取文件、查询数据库

Level 1 - 可逆写操作（自动执行，但记录日志）
  创建文件、修改草稿、写入缓存

Level 2 - 不可逆操作（需要用户确认）
  删除文件、发送邮件、提交代码、转账支付

Level 3 - 危险操作（默认拒绝）
  执行任意系统命令、访问敏感配置文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.3 工具失败的处理策略&lt;/h3&gt;
&lt;p&gt;工具调用失败是常态，不是异常。网络超时、API 限流、返回格式变化……这些都会发生。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent 对工具失败的处理方式设计：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 工具包装器：统一处理失败情况
async function callToolWithRetry(tool, args, maxRetries = 3) {
  for (let i = 0; i &amp;lt; maxRetries; i++) {
    try {
      const result = await tool.call(args);
      return { success: true, data: result };
    } catch (error) {
      if (i === maxRetries - 1) {
        // 最后一次失败：返回结构化错误让 Agent 决策
        return {
          success: false,
          error: error.message,
          suggestion: &quot;工具调用失败，请考虑使用替代方案或通知用户&quot;
        };
      }
      // 指数退避重试
      await sleep(1000 * Math.pow(2, i));
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;让 Agent 知道工具失败了，并提供足够的信息让它自行决策（重试、换工具、或者告知用户），而不是直接抛出异常终止任务。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;七、主流框架选型&lt;/h2&gt;
&lt;h3&gt;7.1 LangChain / LangGraph&lt;/h3&gt;
&lt;p&gt;LangChain 是目前生态最完整的 Agent 框架，主流 LLM 和工具基本都有集成。&lt;/p&gt;
&lt;p&gt;LangGraph 是 LangChain 团队推出的有向图执行引擎，适合需要明确状态管理的 Agent 工作流：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from langgraph.graph import StateGraph, END

# 定义状态
class AgentState(TypedDict):
    messages: list
    next_step: str

# 构建图
workflow = StateGraph(AgentState)
workflow.add_node(&quot;planner&quot;, plan_node)
workflow.add_node(&quot;executor&quot;, execute_node)
workflow.add_node(&quot;reviewer&quot;, review_node)

workflow.add_conditional_edges(
    &quot;executor&quot;,
    lambda state: state[&quot;next_step&quot;],  # 根据状态决定下一跳
    {&quot;review&quot;: &quot;reviewer&quot;, &quot;done&quot;: END, &quot;retry&quot;: &quot;executor&quot;}
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;适用场景：需要精细控制执行流程的生产级 Agent，尤其是状态机型工作流。&lt;/p&gt;
&lt;h3&gt;7.2 AutoGen&lt;/h3&gt;
&lt;p&gt;微软开源的多智能体框架，核心是让多个 Agent 像人类团队一样对话协作：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import autogen

# 定义两个 Agent
user_proxy = autogen.UserProxyAgent(&quot;user&quot;, human_input_mode=&quot;NEVER&quot;)
assistant = autogen.AssistantAgent(&quot;assistant&quot;, llm_config=llm_config)

# 启动对话
user_proxy.initiate_chat(
    assistant,
    message=&quot;帮我分析这份销售数据并生成可视化图表&quot;
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AutoGen 的特色是支持人机混合决策（可以在特定节点暂停等待人工确认），适合高风险操作场景。&lt;/p&gt;
&lt;p&gt;适用场景：需要人机协作、或者多 Agent 辩论式决策的复杂任务。&lt;/p&gt;
&lt;h3&gt;7.3 CrewAI&lt;/h3&gt;
&lt;p&gt;以&quot;角色扮演&quot;为核心概念，每个 Agent 有明确的 Role、Goal 和 Backstory：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from crewai import Agent, Task, Crew

researcher = Agent(
    role=&quot;市场研究员&quot;,
    goal=&quot;收集并分析目标市场的竞争数据&quot;,
    backstory=&quot;你有 10 年市场研究经验，擅长从海量数据中发现趋势&quot;,
    tools=[search_tool, scrape_tool]
)

writer = Agent(
    role=&quot;商业分析师&quot;,
    goal=&quot;将研究结论转化为清晰的商业建议报告&quot;,
    backstory=&quot;你擅长将复杂数据翻译为高管可读的决策建议&quot;,
)

crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    process=&quot;sequential&quot;
)

result = crew.kickoff()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;适用场景：需要快速搭建原型，任务分工明确，角色定位清晰的多 Agent 系统。&lt;/p&gt;
&lt;h3&gt;7.4 框架选型决策树&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;需要 Claude 深度集成？
  ├── 是 → Claude Agent SDK
  └── 否 → 继续往下

单 Agent 还是多 Agent？
  ├── 单 Agent → LangChain（生态最全）
  └── 多 Agent → 继续往下

需要人工介入节点？
  ├── 是 → AutoGen
  └── 否 → 角色分工明确吗？
            ├── 是 → CrewAI（快速原型）
            └── 否 → LangGraph（精细控制）
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;八、生产环境的十条实践原则&lt;/h2&gt;
&lt;p&gt;把 Agent 从 Demo 推向生产，会遇到一堆 Demo 阶段完全看不出来的问题。以下是踩过坑之后总结的十条原则。&lt;/p&gt;
&lt;h3&gt;原则 1：能不用 Agent 就不用&lt;/h3&gt;
&lt;p&gt;这是最重要的原则。&lt;/p&gt;
&lt;p&gt;很多场景其实不需要 Agent：如果任务步骤是固定的，直接写代码；如果只需要一次 LLM 调用，不要包装成 Agent。引入 Agent 意味着引入不确定性、延迟、成本和调试难度。&lt;/p&gt;
&lt;p&gt;只有当任务需要&lt;strong&gt;动态决策&lt;/strong&gt;、&lt;strong&gt;步骤不确定&lt;/strong&gt;、&lt;strong&gt;需要自主使用工具&lt;/strong&gt;时，Agent 才真正有价值。&lt;/p&gt;
&lt;h3&gt;原则 2：从最简单的架构开始&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;单模型调用 → 单 Agent + 工具 → Plan-and-Execute → Multi-Agent&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;每升级一级，复杂度至少翻倍。从最简单的能解决问题的架构开始，有真实需要再升级。&lt;/p&gt;
&lt;h3&gt;原则 3：日志是你的生命线&lt;/h3&gt;
&lt;p&gt;Agent 的执行过程是不透明的。生产中要记录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每次 LLM 调用的输入/输出（含 Token 数）&lt;/li&gt;
&lt;li&gt;每次工具调用的入参/出参/耗时/结果&lt;/li&gt;
&lt;li&gt;每次 Agent 的决策推理（Thought 内容）&lt;/li&gt;
&lt;li&gt;异常和错误信息&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没有日志，出了问题根本没法排查。&lt;/p&gt;
&lt;h3&gt;原则 4：为每个工具设置超时&lt;/h3&gt;
&lt;p&gt;工具调用不加超时，会让 Agent 卡在那里耗尽资源：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const result = await Promise.race([
  tool.call(args),
  new Promise((_, reject) =&amp;gt;
    setTimeout(() =&amp;gt; reject(new Error(&quot;工具调用超时（30s）&quot;)), 30000)
  )
]);
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;原则 5：测试用例要覆盖边界情况&lt;/h3&gt;
&lt;p&gt;Agent 的测试比普通代码难，因为 LLM 输出有随机性。但以下场景必须测试：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;工具全部不可用时，Agent 怎么处理&lt;/li&gt;
&lt;li&gt;用户输入极度模糊时，Agent 会做什么&lt;/li&gt;
&lt;li&gt;任务无法完成时，Agent 会无限循环还是优雅退出&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;原则 6：用确定性代码替换能替换的部分&lt;/h3&gt;
&lt;p&gt;Agent 的每一步决策都是不确定的。如果某个步骤的逻辑是确定的（比如&quot;如果找到了数据就继续，否则报错&quot;），用代码实现比让 LLM 决策可靠 100 倍。&lt;/p&gt;
&lt;p&gt;把 LLM 用在真正需要推理的地方，确定性逻辑用代码写死。&lt;/p&gt;
&lt;h3&gt;原则 7：留意成本&lt;/h3&gt;
&lt;p&gt;Agent 的 Token 消耗量远超普通 LLM 调用。一个运行 20 轮的 ReAct Agent，每次用户请求可能消耗数万 Token。&lt;/p&gt;
&lt;p&gt;几个降本策略：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用小模型做工具选择和路由，大模型只做核心推理&lt;/li&gt;
&lt;li&gt;工具返回内容做截断，不要把整个网页塞进 Prompt&lt;/li&gt;
&lt;li&gt;对高频重复的子任务做缓存（相同输入 → 相同工具调用序列）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;原则 8：失败要快，不要慢&lt;/h3&gt;
&lt;p&gt;遇到无法解决的情况，Agent 应该立刻报告失败，而不是无限重试耗尽资源。&lt;/p&gt;
&lt;p&gt;设置明确的终止条件：最大迭代次数、最大执行时间、最大 Token 消耗。任何一个触发，立刻停下来告知用户。&lt;/p&gt;
&lt;h3&gt;原则 9：人工介入点要设计好&lt;/h3&gt;
&lt;p&gt;对于高风险操作，在执行前给用户一个确认机会：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Agent: 我计划执行以下操作：
  1. 删除 logs/ 目录下所有超过 30 天的文件（共 1,247 个）
  2. 压缩 backups/ 目录并上传到 S3
  
预计释放磁盘空间：23.4 GB
请确认是否继续？[yes/no]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这一步看起来打断了&quot;自主性&quot;，但在用户信任还没建立起来之前，这比出了事再后悔要好得多。&lt;/p&gt;
&lt;h3&gt;原则 10：监控 + 告警&lt;/h3&gt;
&lt;p&gt;生产 Agent 需要监控：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;成功率&lt;/strong&gt;：任务完成率趋势&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;延迟&lt;/strong&gt;：P50/P95/P99 的响应时间&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;成本&lt;/strong&gt;：每次任务的 Token 消耗&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;异常&lt;/strong&gt;：工具调用失败率、LLM 报错率&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;任何指标异常，第一时间告警。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;九、2026 年的 Agent 格局：几个值得关注的趋势&lt;/h2&gt;
&lt;h3&gt;9.1 MCP（Model Context Protocol）正在成为标准&lt;/h3&gt;
&lt;p&gt;Anthropic 推出的 MCP 协议正在快速被主流工具和平台采纳。它解决的问题是：如何让 LLM 以标准化的方式连接各种工具和数据源，而不是每次都要写定制集成？&lt;/p&gt;
&lt;p&gt;MCP 的本质是一个工具调用的标准协议，类似 Web 世界的 REST API 规范。如果它真的普及，Agent 的工具生态会大幅扩张。&lt;/p&gt;
&lt;h3&gt;9.2 Computer Use 打开了新维度&lt;/h3&gt;
&lt;p&gt;Claude 的 Computer Use 能力让 Agent 可以直接操作桌面 GUI——看屏幕、移动鼠标、点击按钮、输入文字。这意味着任何有 GUI 的软件都可以成为 Agent 的&quot;工具&quot;，不再需要 API。&lt;/p&gt;
&lt;p&gt;大量没有 API 的企业内部系统，突然变得可以被 Agent 自动化了。这对于对接老系统的工程来说很有意思，不过稳定性还有待观察。&lt;/p&gt;
&lt;h3&gt;9.3 Long-context vs. RAG 的边界在模糊&lt;/h3&gt;
&lt;p&gt;2024 年大家都在说 RAG 是必选项。但随着模型上下文窗口从 4K 扩展到 1M，一个问题浮出水面：是不是直接把所有文档塞进 Prompt 比 RAG 更简单可靠？&lt;/p&gt;
&lt;p&gt;现实答案是：取决于场景。文档量少、需要精确引用时，直接放进 Prompt；文档量大、需要动态更新时，RAG 依然必要。两者不是非此即彼，而是工具箱里的两种工具。&lt;/p&gt;
&lt;h3&gt;9.4 Agent 评估体系正在成熟&lt;/h3&gt;
&lt;p&gt;早期 Agent 的评估主要靠&quot;感觉&quot;——跑几个样例看看对不对。现在开始有更系统的评估框架：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;轨迹评估&lt;/strong&gt;（Trajectory Evaluation）：评估 Agent 的每一步决策是否合理，不只看最终结果&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具使用效率&lt;/strong&gt;：完成任务用了多少次工具调用，是否有冗余&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;鲁棒性测试&lt;/strong&gt;：在工具失败、输入模糊等对抗性场景下的表现&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;十、写在最后&lt;/h2&gt;
&lt;p&gt;Agent 是当前 AI 工程里最难落地、也最值得投入的方向。难不在于某一个技术点，而在于你要同时处理 LLM 的不确定性、工具的可靠性、状态的一致性和成本的可控性——这四个问题相互制约，没有一个能单独解决。&lt;/p&gt;
&lt;p&gt;没有完美的 Agent 框架，也没有适合所有场景的架构。工程师的工作就是在这些权衡里找到当前阶段最合适的选择，然后随着系统成熟持续调整。&lt;/p&gt;
&lt;p&gt;如果你刚开始，建议从一个真实的、小范围的、能量化效果的问题开始。先让它能用，再让它好用，最后才考虑让它更强大。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Photo by &lt;a href=&quot;https://unsplash.com/@agk42&quot;&gt;Alex Knight&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>我看开了之学术修行</title><link>https://sues.fun/posts/260322_academiclife/</link><guid isPermaLink="true">https://sues.fun/posts/260322_academiclife/</guid><description>研究生生存黑话：一场关于&quot;学术修行&quot;的集体致郁</description><pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;如果说本科生还在象牙塔里做梦，那么研究生就是在这个塔里负责搬砖、打扫卫生并试图向塔外的人证明：这砖头搬得非常有&quot;创新性&quot;。&lt;/p&gt;
&lt;h2&gt;1. 所谓的&quot;导师&quot;与&quot;老板&quot;&lt;/h2&gt;
&lt;p&gt;在读研之前，你以为你们是孔子与颜回，教学相长；读研之后，你发现你们是周扒皮与长工，只不过他没剥削你的血汗，他剥削的是你的发际线和&quot;对科学的纯真向往&quot;。&lt;/p&gt;
&lt;p&gt;导师最爱说：&quot;这个方向很有前景。&quot; &lt;strong&gt;真相：&lt;/strong&gt; 意思是他也没做过，甚至还没想好怎么做，所以找个倒霉蛋（你）来试试错。如果你做出来了，那是他指导有方；如果你没做出来，那是你缺乏主动性。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1736066330610-c102cab4e942?crop=entropy&amp;amp;cs=tinysrgb&amp;amp;fit=max&amp;amp;fm=jpg&amp;amp;ixid=M3w4OTk5MTN8MHwxfHNlYXJjaHwxfHxwcm9mZXNzb3IlMjBsZWN0dXJlJTIwaGFsbCUyMGFjYWRlbWljfGVufDB8fHx8MTc3NDE1ODgwM3ww&amp;amp;ixlib=rb-4.1.0&amp;amp;q=80&amp;amp;w=1080?w=400&amp;amp;h=270&amp;amp;fit=crop&amp;amp;q=80&quot; alt=&quot;professor lecture hall academic&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by &lt;a href=&quot;https://unsplash.com/@austin_7792&quot;&gt;Austin&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;2. 关于&quot;学术前沿&quot;&lt;/h2&gt;
&lt;p&gt;每个研究生的开题报告里都写着&quot;填补了国内外的某某空白&quot;。&lt;/p&gt;
&lt;p&gt;实际上，那个地方之所以是空白，很可能不是因为没人发现，而是因为那片地儿根本长不出庄稼，或者是前人跳进去之后连个响声都没传出来。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;学术现状：&lt;/strong&gt; 我们不是在攀登科学的高峰，我们是在高峰底下的垃圾堆里，试图翻出一个别人没见过的易拉罐，然后把它刷干净，起名叫&quot;新型金属纳米材料&quot;。&lt;/p&gt;
&lt;h2&gt;3. 那个永远的&quot;Reviewer 2&quot;&lt;/h2&gt;
&lt;p&gt;在论文投稿的闭环里，审稿人2（Reviewer 2）是一个超越物理规律的存在。&lt;/p&gt;
&lt;p&gt;Reviewer 1 说你的实验很扎实，Reviewer 3 说你的逻辑很清晰，而 Reviewer 2 会说：&quot;虽然作者做了很多工作，但我认为这篇文章的灵魂不对。&quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1517263869251-3d367cb6db21?crop=entropy&amp;amp;cs=tinysrgb&amp;amp;fit=max&amp;amp;fm=jpg&amp;amp;ixid=M3w4OTk5MTN8MHwxfHNlYXJjaHwxfHxwZWVyJTIwcmV2aWV3JTIwcmVqZWN0aW9uJTIwbGV0dGVyJTIwZGVza3xlbnwwfHx8fDE3NzQxNTg4MDN8MA&amp;amp;ixlib=rb-4.1.0&amp;amp;q=80&amp;amp;w=1080?w=400&amp;amp;h=270&amp;amp;fit=crop&amp;amp;q=80&quot; alt=&quot;peer review rejection letter desk&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by &lt;a href=&quot;https://unsplash.com/@flavioamiel&quot;&gt;Flavio Amiel&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;应对策略：&lt;/strong&gt; 所谓的&quot;回复审稿意见&quot;，本质上就是一场高情商的博弈。你心里想的是&quot;你到底看没看懂？&quot;，笔下写的是&quot;审稿人的建议非常深刻，令我茅塞顿开，已根据建议进行深度重构&quot;。&lt;/p&gt;
&lt;h2&gt;4. &quot;跨学科研究&quot;的陷阱&lt;/h2&gt;
&lt;p&gt;这是一个听起来最高大上的词儿，仿佛你是达芬奇转世，横跨文理。&lt;/p&gt;
&lt;p&gt;但真相往往是：你在 A 领域是个外行，在 B 领域也是个菜鸟，于是你把 A 领域的垃圾搬到 B 领域，或者把 B 领域的废话翻译给 A 领域听。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;翻译一下：&lt;/strong&gt; 我在一个领域已经卷不动了，所以我想去另一个领域碰碰运气。&lt;/p&gt;
&lt;h2&gt;5. 关于&quot;延毕&quot;&lt;/h2&gt;
&lt;p&gt;延毕，是研究生群体中最不能触碰的&quot;伏地魔&quot;。&lt;/p&gt;
&lt;p&gt;学校管它叫&quot;为了进一步提高学位论文质量&quot;，导师管它叫&quot;再精益求精一下&quot;，而你的亲戚朋友管它叫&quot;你怎么还没毕业？&quot;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;心理状态：&lt;/strong&gt; 第一年想拿诺贝尔奖，第二年想发 SCI，第三年只想活下去并带走那个装了三年数据的 U 盘。&lt;/p&gt;
&lt;h2&gt;6. &quot;深入讨论&quot;&lt;/h2&gt;
&lt;p&gt;当你在组会上讲了一堆连你自己都不信的数据，而导师眉头紧锁说：&quot;我们要再深入讨论一下。&quot;&lt;/p&gt;
&lt;p&gt;这通常意味着两件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;导师也没听懂，但他不能表现出来。&lt;/li&gt;
&lt;li&gt;你的学术生涯即将迎来长达两个小时的、漫无目的的、甚至带点玄学色彩的头脑风暴，最后得出的结论通常是：&quot;你回去再重新做一遍实验吧。&quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;研究生生活就是：用最贵的设备，熬最深的夜，发最水的论文，领最低的补贴。&lt;/p&gt;
&lt;p&gt;你以为你在研究真理，其实你只是在证明：即使是在科学的圣殿里，人也可以过得像个在跑步机上疯狂奔跑却原地不动的哈姆雷特。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1773921403617-9a033605e07a?crop=entropy&amp;amp;cs=tinysrgb&amp;amp;fit=max&amp;amp;fm=jpg&amp;amp;ixid=M3w4OTk5MTN8MHwxfHNlYXJjaHwxfHxncmFkdWF0aW9uJTIwY2FwJTIwZGlwbG9tYSUyMGNlcmVtb255fGVufDB8fHx8MTc3NDE1ODgwM3ww&amp;amp;ixlib=rb-4.1.0&amp;amp;q=80&amp;amp;w=1080?w=400&amp;amp;h=270&amp;amp;fit=crop&amp;amp;q=80&quot; alt=&quot;graduation cap diploma ceremony&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by &lt;a href=&quot;https://unsplash.com/@kstudios&quot;&gt;K Studios&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;毕竟，学历是假的，只有那种&quot;我看开了&quot;的眼神是真的。&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>给 WorkBuddy 写个图片搜索 Skill</title><link>https://sues.fun/posts/260320_searchimage/</link><guid isPermaLink="true">https://sues.fun/posts/260320_searchimage/</guid><description>从零开始构建 tool-image Skill，基于 Unsplash API 实现自动配图功能</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;为什么会有这个 Skill&lt;/h2&gt;
&lt;p&gt;之前给文章配图，流程是这样的：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开 Unsplash 网站&lt;/li&gt;
&lt;li&gt;搜索关键词（中文搜不到换英文）&lt;/li&gt;
&lt;li&gt;翻几页找合适的图&lt;/li&gt;
&lt;li&gt;下载到本地&lt;/li&gt;
&lt;li&gt;调整尺寸（博客文章一般 600px 宽）&lt;/li&gt;
&lt;li&gt;写 Markdown 链接&lt;/li&gt;
&lt;li&gt;找摄影师信息写致谢&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;一篇文章配图要 5-10 分钟，效率太低。&lt;/p&gt;
&lt;p&gt;于是写了这个 tool-image Skill，一句话搞定所有事情。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Skill 实现原理&lt;/h2&gt;
&lt;p&gt;tool-image Skill 基于 Unsplash API 实现。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;工作流程：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;接收关键词（英文）&lt;/li&gt;
&lt;li&gt;调用 Unsplash Search API&lt;/li&gt;
&lt;li&gt;返回第一张图片的 Markdown 格式（带摄影师致谢）&lt;/li&gt;
&lt;li&gt;自动限制图片尺寸为 600×400px&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;完整代码&lt;/h2&gt;
&lt;p&gt;Skill 文件：&lt;code&gt;workbuddy\skills\tool-image\tools\image_search.py&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python3
import argparse
import warnings
import sys
import requests
from urllib.parse import quote

warnings.filterwarnings(&quot;ignore&quot;)

ACCESS_KEY = &quot;占位符&quot;

def image_search(query: str, count: int = 1) -&amp;gt; str:
    clean_query = quote(&quot; &quot;.join(query.split()[:5]))
    
    url = &quot;https://api.unsplash.com/search/photos&quot;
    params = {
        &quot;query&quot;: clean_query,
        &quot;per_page&quot;: count,
        &quot;client_id&quot;: ACCESS_KEY
    }
    
    try:
        res = requests.get(url, params=params, timeout=15)
        res.raise_for_status()
        data = res.json()
    except Exception as e:
        return f&quot;Error: {str(e)}&quot;
    
    results = data.get(&quot;results&quot;, [])
    if not results:
        return f&quot;No images found for query: {clean_query}&quot;
    
    output = []
    for item in results[:count]:
        img_url = item[&quot;urls&quot;][&quot;regular&quot;] + &quot;?w=600&amp;amp;h=400&amp;amp;fit=crop&amp;amp;q=80&quot;
        
        author = item[&quot;user&quot;][&quot;name&quot;]
        profile = item[&quot;user&quot;][&quot;links&quot;][&quot;html&quot;]
        
        markdown = (
            f&quot;![{clean_query}]({img_url})\n&quot;
            f&quot;*Photo by [{author}]({profile}) on [Unsplash](https://unsplash.com)*&quot;
        )
        output.append(markdown)
    
    return &quot;\n\n&quot;.join(output)

if __name__ == &quot;__main__&quot;:
    parser = argparse.ArgumentParser(description=&quot;Search Unsplash images&quot;)
    parser.add_argument(&quot;--object&quot;, required=True)
    parser.add_argument(&quot;--number&quot;, type=int, default=1)
    
    args = parser.parse_args()
    
    result = image_search(args.object, args.number)
    print(result)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;API Key 说明&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;ACCESS_KEY = &quot;占位符&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以直接使用，也可以替换成自己的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;申请方式：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;注册 Unsplash&lt;/li&gt;
&lt;li&gt;打开 &lt;a href=&quot;https://unsplash.com/developers&quot;&gt;https://unsplash.com/developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;创建应用&lt;/li&gt;
&lt;li&gt;替换 Key&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;执行脚本&lt;/h2&gt;
&lt;p&gt;脚本路径：
&lt;code&gt;WorkBuddy\Claw\scripts\search_image.ps1&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;param(
    [Parameter(Mandatory=$true)]
    [string]$Object,
    
    [int]$Number = 1
)

python &quot;image_search.py&quot; --object $Object --number $Number
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;使用方式：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pwsh -NoProfile -ExecutionPolicy Bypass -File &quot;search_image.ps1&quot; -Object &quot;artificial intelligence&quot; -Number 1
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;实际案例演示&lt;/h2&gt;
&lt;h3&gt;案例 1：《研究生奴隶》配图&lt;/h3&gt;
&lt;p&gt;关键词：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;university student studying library
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;效果如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1718327453695-4d32b94c90a4?crop=entropy&amp;amp;cs=tinysrgb&amp;amp;fit=max&amp;amp;fm=jpg&amp;amp;ixid=M3w4OTk5MTN8MHwxfHNlYXJjaHwxfHx1bml2ZXJzaXR5JTIwc3R1ZGVudCUyMHN0dWR5aW5nJTIwbGlicmFyeXxlbnwwfHx8fDE3NzM5MTY4NTh8MA&amp;amp;ixlib=rb-4.1.0&amp;amp;q=80&amp;amp;w=1080?w=600&amp;amp;h=400&amp;amp;fit=crop&quot; alt=&quot;university student studying library&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by &lt;a href=&quot;https://unsplash.com/@d_ks11&quot;&gt;Dominic Kurniawan Suryaputra&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;案例 2：《Python 与 C 混编》配图&lt;/h3&gt;
&lt;p&gt;关键词：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;python c programming code
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;效果如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1526379095098-d400fd0bf935?crop=entropy&amp;amp;cs=tinysrgb&amp;amp;fit=max&amp;amp;fm=jpg&amp;amp;ixid=M3w4OTk5MTN8MHwxfHNlYXJjaHwxfHxweXRob24lMjBjJTIwcHJvZ3JhbW1pbmclMjBjb2RlfGVufDB8fHx8MTc3MzkxNzE3NHww&amp;amp;ixlib=rb-4.1.0&amp;amp;q=80&amp;amp;w=1080?w=600&amp;amp;h=400&amp;amp;fit=crop&quot; alt=&quot;python c programming code&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by &lt;a href=&quot;https://unsplash.com/@hiteshchoudhary&quot;&gt;Hitesh Choudhary&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;关键词选择技巧&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;搜索词&lt;/th&gt;
&lt;th&gt;结果质量&lt;/th&gt;
&lt;th&gt;原因&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;研究生&lt;/td&gt;
&lt;td&gt;❌ 差&lt;/td&gt;
&lt;td&gt;太抽象&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;university student&lt;/td&gt;
&lt;td&gt;✅ 中&lt;/td&gt;
&lt;td&gt;不够具体&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;university student studying library&lt;/td&gt;
&lt;td&gt;✅✅ 好&lt;/td&gt;
&lt;td&gt;场景+动作&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;原则&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;英文优先&lt;/li&gt;
&lt;li&gt;场景词优先&lt;/li&gt;
&lt;li&gt;动作词优先&lt;/li&gt;
&lt;li&gt;越具体越好&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;封面图 vs 内插图&lt;/h2&gt;
&lt;h3&gt;封面图&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;image: &apos;./image/YYMMDD_01.ext&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;本地存储&lt;/li&gt;
&lt;li&gt;永久有效&lt;/li&gt;
&lt;li&gt;占空间&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;内插图&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;![关键词](url)
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;外链&lt;/li&gt;
&lt;li&gt;快速&lt;/li&gt;
&lt;li&gt;不占空间&lt;/li&gt;
&lt;li&gt;依赖网络&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;版权说明&lt;/h2&gt;
&lt;p&gt;所有图片来自 Unsplash：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;免费使用（商用+个人）&lt;/li&gt;
&lt;li&gt;无需授权&lt;/li&gt;
&lt;li&gt;建议标注摄影师&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;故障排查&lt;/h2&gt;
&lt;h3&gt;Key 未设置&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;$env:UNSPLASH_ACCESS_KEY = &quot;你的AccessKey&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h3&gt;搜不到图&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;换英文&lt;/li&gt;
&lt;li&gt;增加具体描述&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;尺寸问题&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;?w=600&amp;amp;h=400&amp;amp;fit=crop
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;Skill 配置&lt;/h2&gt;
&lt;p&gt;路径：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;workbuddy\skills\tool-image\
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;核心文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;workbuddy\skills\tool-image\tools\image_search.py
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;这个 Skill 本质上是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;把“找图 → 下载 → 处理 → 写 Markdown”自动化&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;效果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;5–10 分钟 → 10 秒&lt;/li&gt;
&lt;li&gt;输出直接可用&lt;/li&gt;
&lt;li&gt;自动符合版权规范&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现在写文章，配图不再是负担。&lt;/p&gt;
</content:encoded></item><item><title>Trae Chat Exporter：把 Trae 对话导出为 HTML/MD/JSON</title><link>https://sues.fun/posts/260319_chatexporter/</link><guid isPermaLink="true">https://sues.fun/posts/260319_chatexporter/</guid><description>基于 Trae 远程调试页面的本地导出工具，支持将聊天记录导出为 HTML、Markdown 和 JSON 格式，适合保存长对话和整理聊天记录。</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;前几天需要把 Trae 里的一些对话导出来，翻了半天没找到现成的工具，干脆自己写了一个。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1515879218367-8466d910aaa4?ixid=M3w4OTk5MTN8MHwxfHNlYXJjaHwxfHxkZXZlbG9wZXIlMjB0ZXJtaW5hbCUyMGNvZGUlMjBzY3JlZW58ZW58MHx8fHwxNzg4NTEyNzIzfDA&amp;amp;ixlib=rb-4.1.0&amp;amp;w=600&amp;amp;h=400&amp;amp;fit=crop&amp;amp;q=80&quot; alt=&quot;developer terminal code screen&quot; /&gt;
&lt;em&gt;Photo by &lt;a href=&quot;https://unsplash.com/@cdr6934&quot;&gt;Chris Ried&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;这玩意能干嘛&lt;/h2&gt;
&lt;p&gt;把 Trae 当前打开的对话导出成三种格式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTML&lt;/strong&gt;：本地阅读体验最好，接近原聊天界面&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown&lt;/strong&gt;：只保留核心正文，方便整理和编辑&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON&lt;/strong&gt;：保留原始消息数据，适合二次处理&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;怎么用&lt;/h2&gt;
&lt;p&gt;环境要求：Windows 桌面版 Trae + Python 3.10+&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装依赖
python -m pip install -r .\requirements.txt

# 运行
powershell -ExecutionPolicy Bypass -File .\launch_trae_export.ps1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行后脚本会自动关闭旧 Trae，以调试模式重启。然后你在 Trae 里登录、打开目标会话，等终端提示扫描完成，去 &lt;code&gt;exports&lt;/code&gt; 目录拿结果就行。&lt;/p&gt;
&lt;h2&gt;几个细节&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;长对话会自动预热 + 多轮滚动扫描，尽量导完整&lt;/li&gt;
&lt;li&gt;文件按会话名自动命名&lt;/li&gt;
&lt;li&gt;HTML 是结构保真，不是像素级克隆&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;项目地址&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/yangzhe0/Trae_Chat_Exporter&quot;&gt;https://github.com/yangzhe0/Trae_Chat_Exporter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;有问题提 Issue，觉得有用给个 Star。&lt;/p&gt;
</content:encoded></item><item><title>注意力机制：那篇改变 AI 走向的论文</title><link>https://sues.fun/posts/260318_transformer/</link><guid isPermaLink="true">https://sues.fun/posts/260318_transformer/</guid><description>从 Transformer 架构出发，回溯现代 AI 是如何一步步走到今天的——那些真正改变走向的关键节点。</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2017 年 6 月，Google 的八位研究员在 arXiv 上发表了一篇论文，题目叫 &lt;em&gt;Attention Is All You Need&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;这篇论文提出了一个叫 &lt;strong&gt;Transformer&lt;/strong&gt; 的架构。&lt;/p&gt;
&lt;p&gt;当时没有人预料到，它会在接下来的几年里重塑整个 AI 行业。今天你用的所有主流大模型——ChatGPT、Claude、Gemini、DeepSeek——底层架构都是它的变体。&lt;/p&gt;
&lt;p&gt;但要理解 Transformer 为什么重要，得先知道它出现之前，AI 卡在哪里。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;一、序列问题的旧解法：RNN 与 LSTM&lt;/h2&gt;
&lt;p&gt;语言是序列数据。一句话是有顺序的，前后文之间有依赖关系，理解&quot;它&quot;指代什么，必须结合上下文。&lt;/p&gt;
&lt;p&gt;在 Transformer 出现之前，处理序列数据的主流方案是 &lt;strong&gt;RNN（循环神经网络）&lt;/strong&gt;，以及它的改进版 &lt;strong&gt;LSTM（长短期记忆网络）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;RNN 的工作方式类似人逐字阅读：每读一个词，就把当前词的信息和之前积累的&quot;记忆&quot;合并，生成新的隐藏状态，再传给下一步。这种结构天然适合序列，但存在一个根本性的缺陷——&lt;strong&gt;梯度消失（Vanishing Gradient）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;在反向传播训练时，梯度需要从输出一路传回到输入。序列越长，梯度在传递过程中会指数级地衰减，导致模型对早期位置的词几乎无法有效学习。用一个直观的比方：你让它理解一段 200 词的文本，等处理到第 200 个词时，第 1 个词的信息早已在&quot;传话游戏&quot;里失真到几乎消失。&lt;/p&gt;
&lt;p&gt;LSTM 通过引入&quot;门控机制&quot;（遗忘门、输入门、输出门）在一定程度上缓解了这个问题，能记住更长范围的依赖，但仍没有从根本上解决。&lt;/p&gt;
&lt;p&gt;更致命的问题是：&lt;strong&gt;RNN 和 LSTM 都无法并行计算。&lt;/strong&gt; 每个时间步必须等前一步完成才能开始，整个序列只能线性地跑完。这意味着随着序列变长、模型变大，训练时间会急剧增加。要训练一个真正意义上的&quot;大模型&quot;，在 RNN 架构下几乎不现实。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、Transformer：注意力就是全部&lt;/h2&gt;
&lt;p&gt;《Attention Is All You Need》的核心主张非常激进：&lt;strong&gt;完全抛弃 RNN，只用注意力机制来处理序列。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;自注意力（Self-Attention）&lt;/h3&gt;
&lt;p&gt;Transformer 的核心机制叫 &lt;strong&gt;自注意力（Self-Attention）&lt;/strong&gt;。它的思路是：在处理每一个词的时候，让模型直接&quot;看到&quot;序列中所有其他词，并计算它们之间的相关性权重，再根据这些权重加权整合信息。&lt;/p&gt;
&lt;p&gt;具体来说，每个词的嵌入向量会被投影成三个向量：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Query（Q）&lt;/strong&gt;：我在问什么？当前词想查询哪类信息&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key（K）&lt;/strong&gt;：我能提供什么？每个词用来被查询的标识&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Value（V）&lt;/strong&gt;：我实际传递的内容&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意力分数的计算公式为：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Attention(Q, K, V) = softmax(QKᵀ / √d_k) · V
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中 &lt;code&gt;√d_k&lt;/code&gt; 是缩放因子，防止点积过大导致 softmax 梯度消失。最终结果是：每个词都得到一个由整句话加权融合的新表示，距离远近不再是障碍。&lt;/p&gt;
&lt;p&gt;以经典例子说明：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;The animal didn&apos;t cross the street because &lt;strong&gt;it&lt;/strong&gt; was too tired.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&quot;it&quot;究竟指 animal 还是 street？人类秒懂，因为我们能同时看到整句。RNN 需要逐步传递才能猜测，而 Transformer 对全句做注意力计算，天然解决了这种长程依赖。&lt;/p&gt;
&lt;h3&gt;多头注意力（Multi-Head Attention）&lt;/h3&gt;
&lt;p&gt;单头注意力只能捕捉一种关系模式。Transformer 引入了&lt;strong&gt;多头注意力（Multi-Head Attention）&lt;/strong&gt;：用多组独立的 Q/K/V 矩阵并行运行多个注意力头，让模型同时从多个角度理解语言——一个头可能关注主谓关系，另一个头可能关注语义相似性，再一个头可能关注指代关系。&lt;/p&gt;
&lt;p&gt;原论文中使用 8 个头，每个头的维度为 512/8 = 64。&lt;/p&gt;
&lt;h3&gt;位置编码（Positional Encoding）&lt;/h3&gt;
&lt;p&gt;自注意力机制本身是&lt;strong&gt;顺序无关&lt;/strong&gt;的——把句子中的词打乱顺序，它算出来的结果是一样的。为了让模型知道词的位置，Transformer 给每个词的嵌入向量加上了&lt;strong&gt;位置编码（Positional Encoding）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;原论文使用正弦和余弦函数生成位置编码，不同位置对应不同频率的波形，模型可以从中学习相对位置关系。现代模型（如 LLaMA、GPT-4）普遍采用更先进的&lt;strong&gt;旋转位置编码（RoPE）&lt;/strong&gt;，能更好地泛化到比训练时更长的序列。&lt;/p&gt;
&lt;h3&gt;Encoder-Decoder 结构&lt;/h3&gt;
&lt;p&gt;原始 Transformer 采用 Encoder-Decoder 架构，专为机器翻译设计：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Encoder&lt;/strong&gt;：读入源语言序列，通过多层自注意力 + 前馈网络，生成语义表示&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decoder&lt;/strong&gt;：读取 Encoder 的输出，自回归地生成目标语言序列；其中有一层&quot;交叉注意力&quot;让解码器能直接关注编码器的输出&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每一层还加入了&lt;strong&gt;残差连接&lt;/strong&gt;和&lt;strong&gt;层归一化&lt;/strong&gt;，让深层网络训练更稳定。&lt;/p&gt;
&lt;p&gt;最关键的突破在于：Transformer 可以对整个序列&lt;strong&gt;并行计算&lt;/strong&gt;，不再需要等待前一步完成。这从根本上解开了大规模训练的枷锁。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：Vaswani et al., &lt;em&gt;Attention Is All You Need&lt;/em&gt;, NeurIPS 2017
&lt;a href=&quot;https://arxiv.org/abs/1706.03762&quot;&gt;https://arxiv.org/abs/1706.03762&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;三、预训练范式的确立：BERT 与 GPT&lt;/h2&gt;
&lt;p&gt;Transformer 提出后，大家迅速意识到它不只是一个更好的翻译模型，而是一个通用的语言理解引擎。&lt;/p&gt;
&lt;p&gt;2018 年，两个团队几乎同时发布了自己的预训练语言模型，但走向了截然不同的方向。&lt;/p&gt;
&lt;h3&gt;BERT：双向理解&lt;/h3&gt;
&lt;p&gt;Google 发布的 &lt;strong&gt;BERT（Bidirectional Encoder Representations from Transformers）&lt;/strong&gt; 使用 Transformer 的 Encoder 部分，核心训练任务叫 &lt;strong&gt;Masked Language Modeling（MLM）&lt;/strong&gt;：随机遮住句子中 15% 的词，让模型根据上下文猜出来。&lt;/p&gt;
&lt;p&gt;由于同时看到前后文，BERT 对语言的&quot;理解&quot;能力极强，在问答、文本分类、命名实体识别等任务上创造了当时的最佳成绩。&lt;/p&gt;
&lt;h3&gt;GPT：单向生成&lt;/h3&gt;
&lt;p&gt;OpenAI 发布的 &lt;strong&gt;GPT-1&lt;/strong&gt; 使用 Transformer 的 Decoder 部分，采用&lt;strong&gt;自回归训练&lt;/strong&gt;：从左到右，根据前面所有词预测下一个词。&lt;/p&gt;
&lt;p&gt;这听起来比 BERT 简单得多，但 OpenAI 相信，&lt;strong&gt;生成能力才是通往通用智能的路径&lt;/strong&gt;。GPT 的赌注是：如果你能精准地预测下一个词，你必然对语言有深刻的理解。&lt;/p&gt;
&lt;p&gt;这两种思路确立了 NLP 领域此后数年的格局：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BERT 派主导理解类任务&lt;/li&gt;
&lt;li&gt;GPT 派探索生成与通用能力&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;事后来看，OpenAI 的赌注赢了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：Devlin et al., &lt;em&gt;BERT: Pre-training of Deep Bidirectional Transformers&lt;/em&gt;, NAACL 2019
&lt;a href=&quot;https://arxiv.org/abs/1810.04805&quot;&gt;https://arxiv.org/abs/1810.04805&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;四、Scaling Law：大力出奇迹，但有规律&lt;/h2&gt;
&lt;p&gt;GPT 走上了一条越来越大的路：GPT-1（1.17 亿参数）→ GPT-2（15 亿参数）→ GPT-3（1750 亿参数）。&lt;/p&gt;
&lt;p&gt;2020 年，OpenAI 发表了 &lt;em&gt;Scaling Laws for Neural Language Models&lt;/em&gt;，从理论层面给这条路提供了支撑。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scaling Law 的核心结论：&lt;/strong&gt; 模型性能（以损失函数衡量）与三个因素之间存在&lt;strong&gt;幂律关系（Power Law）&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;N&lt;/strong&gt;：模型参数量&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D&lt;/strong&gt;：训练数据量&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C&lt;/strong&gt;：计算量（算力）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;即：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;L ∝ N^(-αN)
L ∝ D^(-αD)
L ∝ C^(-αC)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当这三者同步增加时，模型性能以可预测的速度提升。这意味着，只要有足够的算力、数据和参数，模型性能的提升是&lt;strong&gt;可以预测和规划的&lt;/strong&gt;——这给了 OpenAI 一个明确的方向：继续堆规模。&lt;/p&gt;
&lt;p&gt;同年发布的 GPT-3 证明了这个判断。1750 亿参数的 GPT-3 展现出了一个此前没有预见到的现象——&lt;strong&gt;涌现能力（Emergent Abilities）&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;模型没有专门训练翻译，但它能翻译。没有训练写代码，但它能写代码。给它几个例子，它就能举一反三，这叫 &lt;strong&gt;少样本学习（Few-Shot Learning）&lt;/strong&gt;——甚至零样本学习（Zero-Shot）。&lt;/p&gt;
&lt;p&gt;这些能力不是被&quot;设计&quot;进去的，而是在规模足够大之后自然&quot;涌现&quot;出来的。这让&quot;堆参数&quot;从工程直觉变成了理论共识。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：Kaplan et al., &lt;em&gt;Scaling Laws for Neural Language Models&lt;/em&gt;, OpenAI 2020
&lt;a href=&quot;https://arxiv.org/abs/2001.08361&quot;&gt;https://arxiv.org/abs/2001.08361&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Brown et al., &lt;em&gt;Language Models are Few-Shot Learners (GPT-3)&lt;/em&gt;, NeurIPS 2020
&lt;a href=&quot;https://arxiv.org/abs/2005.14165&quot;&gt;https://arxiv.org/abs/2005.14165&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;五、RLHF：让模型&quot;对齐&quot;人类意图&lt;/h2&gt;
&lt;p&gt;GPT-3 虽然强，但用起来有个明显的问题：&lt;strong&gt;它不&quot;听话&quot;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;它的训练目标是预测下一个词，而不是&quot;给出对用户有帮助的回答&quot;。你问它一个问题，它可能给你一段百科词条式的补全，而不是真正回答你的问题。更严重的是，它可能生成有害、带偏见或无意义的内容。&lt;/p&gt;
&lt;p&gt;这个问题叫&lt;strong&gt;对齐问题（Alignment Problem）&lt;/strong&gt;：模型的优化目标和人类真正想要的东西之间存在偏差。&lt;/p&gt;
&lt;p&gt;OpenAI 的解法是 &lt;strong&gt;RLHF（Reinforcement Learning from Human Feedback，基于人类反馈的强化学习）&lt;/strong&gt;，分三个阶段：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;阶段一：监督微调（SFT）&lt;/strong&gt;
收集人类专家编写的高质量问答对，用这些数据对预训练模型进行微调，让它学会基本的回答格式和指令遵循能力。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;阶段二：训练奖励模型（Reward Model）&lt;/strong&gt;
让 SFT 后的模型对同一个问题生成多个回答，由人类标注员对这些回答进行两两比较，选出更好的一个。用这些偏好数据训练一个&quot;奖励模型&quot;，让它学会自动评估回答的质量。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;阶段三：PPO 强化学习优化&lt;/strong&gt;
用 PPO（近端策略优化）算法，以奖励模型的评分为信号，不断调整语言模型，让它生成&quot;人类更偏好的回答&quot;。同时加入 &lt;strong&gt;KL 散度惩罚&lt;/strong&gt;，防止模型为了&quot;刷高分&quot;而走偏——比如不断重复高分短语、过度迎合用户、回答越来越空洞。&lt;/p&gt;
&lt;p&gt;2022 年，InstructGPT 是第一个大规模应用 RLHF 的模型，用 1.3B 参数就在人类评估中胜过了 175B 的 GPT-3。规模不再是唯一决定因素，&lt;strong&gt;对齐&lt;/strong&gt;成了新的核心变量。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：Ouyang et al., &lt;em&gt;Training language models to follow instructions with human feedback (InstructGPT)&lt;/em&gt;, NeurIPS 2022
&lt;a href=&quot;https://arxiv.org/abs/2203.02155&quot;&gt;https://arxiv.org/abs/2203.02155&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;六、ChatGPT：交互范式的突破&lt;/h2&gt;
&lt;p&gt;2022 年 11 月 30 日，ChatGPT 上线。&lt;/p&gt;
&lt;p&gt;它不是参数量最大的模型，也不是评测成绩最好的模型，但它是第一个让普通人能真正用起来的 AI。不需要写 Prompt 模板，不需要懂机器学习，打开网页，用自然语言说话，它就能回应你。&lt;/p&gt;
&lt;p&gt;5 天：100 万用户。2 个月：1 亿用户。没有任何消费级应用曾以这种速度普及。&lt;/p&gt;
&lt;p&gt;ChatGPT 的技术本质是 GPT-3.5 + RLHF，但它的真正突破是&lt;strong&gt;交互范式&lt;/strong&gt;：把强大但难用的基础模型，包装成了人人都能上手的对话产品。AI 第一次真正走出了实验室。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;七、之后的世界&lt;/h2&gt;
&lt;p&gt;ChatGPT 点燃了整个行业。2023 年至今，大模型的迭代速度很快：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GPT-4（2023）&lt;/strong&gt;：引入多模态能力，能理解图片，推理能力大幅提升，在律师资格考试、医师执照考试等专业评测中达到人类专家水平。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;开源浪潮&lt;/strong&gt;：Meta 发布 LLaMA 系列并开放权重，打破了大模型只能由少数科技巨头掌控的格局。开发者可以在本地运行、微调、再发布，整个开源社区的创新速度爆发式增长。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;效率革命&lt;/strong&gt;：DeepSeek 在 2024-2025 年展示了用更少算力达到顶尖性能的可能性，DeepSeek-V3 拥有 671B 总参数，但每次推理只激活 37B——这种 &lt;strong&gt;MoE（混合专家）&lt;/strong&gt; 架构证明，暴力堆算力不是唯一的路。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;多模态融合&lt;/strong&gt;：大模型从纯文本扩展到图像、音频、视频。Sora 能根据文字描述生成高质量视频，GPT-4o 能实时对话并理解图像，单一模态的边界已经不明显了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent 方向&lt;/strong&gt;：AI 不再只是&quot;问答机器&quot;，开始能主动调用工具、执行代码、浏览网页、规划多步任务。模型从被动响应走向主动行动。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;架构层面的进化&lt;/strong&gt;：Flash Attention 把注意力计算的内存复杂度从 O(n²) 降至 O(n)，让超长上下文（百万 Token 级别）成为可能；RoPE 位置编码让模型能泛化到比训练时更长的序列。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;回到那篇论文&lt;/h2&gt;
&lt;p&gt;2017 年，&lt;em&gt;Attention Is All You Need&lt;/em&gt; 在 NeurIPS 发表时，主要应用场景是机器翻译。那 8 位作者大概没有预见到，他们提出的这个架构，会在几年内成为整个 AI 时代的基础设施。&lt;/p&gt;
&lt;p&gt;Transformer 的核心思想说起来朴素：&lt;strong&gt;让模型在处理信息时，学会&quot;看哪里重要&quot;，而不是死板地逐步传递。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;注意力机制使 AI 第一次能真正处理语言的复杂性；并行计算打开了规模化训练的大门；规模效应带来了涌现能力；RLHF 让模型从&quot;能用&quot;变成&quot;好用&quot;。&lt;/p&gt;
&lt;p&gt;这条链条上的每一环，都是过去十年真实发生的事，而且还没停。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;参考资料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vaswani et al., &lt;a href=&quot;https://arxiv.org/abs/1706.03762&quot;&gt;&lt;em&gt;Attention Is All You Need&lt;/em&gt;&lt;/a&gt;, NeurIPS 2017&lt;/li&gt;
&lt;li&gt;Devlin et al., &lt;a href=&quot;https://arxiv.org/abs/1810.04805&quot;&gt;&lt;em&gt;BERT: Pre-training of Deep Bidirectional Transformers&lt;/em&gt;&lt;/a&gt;, NAACL 2019&lt;/li&gt;
&lt;li&gt;Kaplan et al., &lt;a href=&quot;https://arxiv.org/abs/2001.08361&quot;&gt;&lt;em&gt;Scaling Laws for Neural Language Models&lt;/em&gt;&lt;/a&gt;, OpenAI 2020&lt;/li&gt;
&lt;li&gt;Brown et al., &lt;a href=&quot;https://arxiv.org/abs/2005.14165&quot;&gt;&lt;em&gt;Language Models are Few-Shot Learners (GPT-3)&lt;/em&gt;&lt;/a&gt;, NeurIPS 2020&lt;/li&gt;
&lt;li&gt;Ouyang et al., &lt;a href=&quot;https://arxiv.org/abs/2203.02155&quot;&gt;&lt;em&gt;Training language models to follow instructions with human feedback&lt;/em&gt;&lt;/a&gt;, NeurIPS 2022&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://letsdatascience.com/blog/attention-is-all-you-need-transformer-revolution&quot;&gt;The Transformer Architecture Explained — Let&apos;s Data Science&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://linsnotes.com/posts/rlhf-explained-how-reinforcement-learning-from-human-feedback-works/&quot;&gt;RLHF Explained — Kuibin Lin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ibm.com/think/topics/history-of-artificial-intelligence&quot;&gt;The History of Artificial Intelligence — IBM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.tencent.com/developer/article/2632623&quot;&gt;人工智能发展简史 — 腾讯云开发者社区&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Python 与 C 混编：当下还有必要吗？</title><link>https://sues.fun/posts/260313_pythonc/</link><guid isPermaLink="true">https://sues.fun/posts/260313_pythonc/</guid><description>从AI推理到嵌入式，Python慢在哪、C补在哪，ctypes/Cython/CPython扩展/pybind11四种混编方式全对比。</description><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;如果你用 Python 写过稍微严肃一点的程序，大概率踢过这道墙：&lt;strong&gt;跑得太慢了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;加缓存、换算法、上 PyPy……能用的招都用了，最后还是差那么一口气。这时候有人会说：用 C 重写热点代码。你心里可能嘀咕——都 2026 年了，还需要这么原始吗？&lt;/p&gt;
&lt;p&gt;这篇文章想认真回答这个问题，顺带把四种主流混编方式从头到尾走一遍。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;为什么 Python 慢，慢到值得专门处理&lt;/h2&gt;
&lt;p&gt;Python 的慢不是&quot;写得不够好&quot;，是&lt;strong&gt;语言设计层面的代价&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;每次执行一行代码，CPython 解释器都要：查类型、查属性、分发方法、管理引用计数……这一套走下来，比原生机器指令多出 10~100 倍的开销。&lt;code&gt;a + b&lt;/code&gt; 在 C 里是一条 &lt;code&gt;ADD&lt;/code&gt; 指令；在 Python 里是一次对象查找 + 类型检查 + &lt;code&gt;__add__&lt;/code&gt; 调用 + 新对象分配。&lt;/p&gt;
&lt;p&gt;GIL（全局解释器锁）进一步封死了多线程 CPU 并行的路。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;但 Python 本身并没有放弃性能——它把性能外包给了 C。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;你每天用的这些库，底层全是 C/C++：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;numpy&lt;/code&gt;：数组运算核心是 C，&lt;code&gt;np.dot&lt;/code&gt; 调的是 BLAS&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pandas&lt;/code&gt;：大量操作走 Cython 或 C 扩展&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PyTorch&lt;/code&gt;：算子全在 C++/CUDA，Python 只是调度层&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OpenCV&lt;/code&gt;、&lt;code&gt;Pillow&lt;/code&gt;、&lt;code&gt;lxml&lt;/code&gt;……&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Python 是胶水，C 是肌肉。这个分工在 AI 时代被放大了：你写的模型推理代码是 Python，但每一个矩阵乘法都在 C++ 内核里跑。当你想自定义一个算子、优化一段推理路径，你就必须去 C 那层动手。&lt;/p&gt;
&lt;p&gt;所以问题不是&quot;还有没有必要&quot;，而是&lt;strong&gt;你打算永远只停在胶水层，还是偶尔下到肌肉层&lt;/strong&gt;。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;四种混编方式全景&lt;/h2&gt;
&lt;p&gt;从简单到复杂，从&quot;能用就行&quot;到&quot;极致控制&quot;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ctypes → Cython → CPython C Extension → pybind11
越来越强，越来越接近底层，学习成本也依次递增
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用一个统一的 demo 来对比：&lt;strong&gt;写一个对整数数组求和的函数&lt;/strong&gt;，纯 Python 版本基准，然后分别用四种方式加速。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;0. 基准：纯 Python&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;def py_sum(arr):
    total = 0
    for x in arr:
        total += x
    return total
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;100万元素跑一次大概 &lt;strong&gt;50~80ms&lt;/strong&gt;。后面四种方式都跟这个比。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;1. ctypes：零门槛调 C 编译产物&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;适合场景&lt;/strong&gt;：已有现成的 &lt;code&gt;.so&lt;/code&gt; / &lt;code&gt;.dll&lt;/code&gt;，或者只想快速验证一个想法。&lt;/p&gt;
&lt;h3&gt;C 代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// fast_sum.c
#include &amp;lt;stdint.h&amp;gt;

long long c_sum(int *arr, int n) {
    long long total = 0;
    for (int i = 0; i &amp;lt; n; i++) {
        total += arr[i];
    }
    return total;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编译成共享库：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Linux/macOS
gcc -O2 -shared -fPIC -o fast_sum.so fast_sum.c

# Windows（MinGW）
gcc -O2 -shared -o fast_sum.dll fast_sum.c
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Python 调用&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import ctypes
import os

# 加载共享库
lib = ctypes.CDLL(os.path.join(os.path.dirname(__file__), &quot;fast_sum.so&quot;))

# 声明函数签名（必须，否则类型不对）
lib.c_sum.argtypes = [ctypes.POINTER(ctypes.c_int), ctypes.c_int]
lib.c_sum.restype = ctypes.c_longlong

def ctypes_sum(arr):
    # 把 Python list 转成 C 数组
    c_arr = (ctypes.c_int * len(arr))(*arr)
    return lib.c_sum(c_arr, len(arr))
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;性能对比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;方式&lt;/th&gt;
&lt;th&gt;100万元素耗时&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;纯 Python&lt;/td&gt;
&lt;td&gt;~65ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ctypes&lt;/td&gt;
&lt;td&gt;~3ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;优点：不用编译 Python 扩展，会 C 就会用，适合快速集成。&lt;br /&gt;
缺点：类型声明繁琐，传 NumPy 数组需要额外处理（用 &lt;code&gt;arr.ctypes.data_as()&lt;/code&gt;），不适合频繁调用的热点路径。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;2. Cython：Python 语法写，编译成 C 跑&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;适合场景&lt;/strong&gt;：想在 Python 代码上加速，不想完全切换到 C，NumPy 操作加速首选。&lt;/p&gt;
&lt;p&gt;Cython 是 Python 的超集——你写的是 &lt;code&gt;.pyx&lt;/code&gt; 文件，语法几乎和 Python 一样，但可以加类型声明，编译器把它变成 C 再编译成扩展模块。&lt;/p&gt;
&lt;h3&gt;Cython 代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# fast_sum.pyx
def cy_sum(list arr):
    cdef long long total = 0
    cdef int i
    cdef int n = len(arr)
    for i in range(n):
        total += arr[i]
    return total
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关键是 &lt;code&gt;cdef&lt;/code&gt;——声明了 C 类型，循环里就不走 Python 对象系统了，直接变成 C 的整数运算。&lt;/p&gt;
&lt;h3&gt;编译配置&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# setup.py
from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules=cythonize(&quot;fast_sum.pyx&quot;, compiler_directives={&quot;language_level&quot;: &quot;3&quot;})
)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;python setup.py build_ext --inplace
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编译完会生成 &lt;code&gt;fast_sum.cpython-xxx.so&lt;/code&gt;，直接 &lt;code&gt;import fast_sum&lt;/code&gt; 就能用。&lt;/p&gt;
&lt;h3&gt;NumPy 加速示例（Cython 真正的杀手锏）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# numpy_sum.pyx
import numpy as np
cimport numpy as np

def cy_numpy_sum(np.ndarray[np.int32_t, ndim=1] arr):
    cdef long long total = 0
    cdef int i
    cdef int n = arr.shape[0]
    for i in range(n):
        total += arr[i]
    return total
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;cimport numpy&lt;/code&gt; 让 Cython 直接访问 NumPy 数组的 C 指针，绕过 Python 对象层，性能接近纯 C。&lt;/p&gt;
&lt;p&gt;优点：渐进式优化，只改热点函数，其余代码不动；NumPy 生态集成最好。&lt;br /&gt;
缺点：需要编译环境，发布时要带 &lt;code&gt;.so&lt;/code&gt;；调试比纯 Python 麻烦。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;3. CPython C Extension：最底层，最强控制&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;适合场景&lt;/strong&gt;：要做 Python 内置模块级别的扩展，或者需要完全控制内存和对象生命周期。PyTorch 的 C++ 算子、NumPy 核心就是这个路子。&lt;/p&gt;
&lt;p&gt;直接用 CPython 的 C API 写，代码量多，但没有任何中间层。&lt;/p&gt;
&lt;h3&gt;C 代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// fast_sum_ext.c
#define PY_SSIZE_T_CLEAN
#include &amp;lt;Python.h&amp;gt;

// 实际的求和函数
static PyObject* ext_sum(PyObject *self, PyObject *args) {
    PyObject *list_obj;
    
    // 解析 Python 传入的参数
    if (!PyArg_ParseTuple(args, &quot;O!&quot;, &amp;amp;PyList_Type, &amp;amp;list_obj)) {
        return NULL;
    }
    
    Py_ssize_t n = PyList_Size(list_obj);
    long long total = 0;
    
    for (Py_ssize_t i = 0; i &amp;lt; n; i++) {
        PyObject *item = PyList_GetItem(list_obj, i);  // 借用引用，不需要 Decref
        total += PyLong_AsLongLong(item);
    }
    
    return PyLong_FromLongLong(total);  // 返回 Python int 对象
}

// 模块方法表
static PyMethodDef FastSumMethods[] = {
    {&quot;ext_sum&quot;, ext_sum, METH_VARARGS, &quot;Sum a list of integers in C&quot;},
    {NULL, NULL, 0, NULL}  // 哨兵
};

// 模块定义
static struct PyModuleDef fast_sum_module = {
    PyModuleDef_HEAD_INIT, &quot;fast_sum_ext&quot;, NULL, -1, FastSumMethods
};

// 模块初始化函数（名字必须是 PyInit_&amp;lt;模块名&amp;gt;）
PyMODINIT_FUNC PyInit_fast_sum_ext(void) {
    return PyModule_Create(&amp;amp;fast_sum_module);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;编译&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# setup.py
from setuptools import setup, Extension

module = Extension(
    &quot;fast_sum_ext&quot;,
    sources=[&quot;fast_sum_ext.c&quot;],
    extra_compile_args=[&quot;-O2&quot;],
)

setup(name=&quot;fast_sum_ext&quot;, ext_modules=[module])
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;python setup.py build_ext --inplace
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Python 调用&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import fast_sum_ext
result = fast_sum_ext.ext_sum([1, 2, 3, 4, 5])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;优点：零中间层，完全控制对象生命周期，可以做任何 Python 扩展能做的事。&lt;br /&gt;
缺点：引用计数管理全靠手动（忘了 &lt;code&gt;Py_DECREF&lt;/code&gt; 就内存泄漏），代码冗长，平均写一个简单函数要 50 行 C。不适合日常业务开发，适合造轮子。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;4. pybind11：现代 C++ 绑定，最优雅&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;适合场景&lt;/strong&gt;：项目本身是 C++，想暴露接口给 Python；或者不想手写 CPython C API 的模板代码。&lt;/p&gt;
&lt;p&gt;pybind11 是头文件库，用 C++11 的模板魔法自动处理类型转换和引用计数，写起来比 CPython C Extension 简洁 5~10 倍。&lt;/p&gt;
&lt;h3&gt;C++ 代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// fast_sum_bind.cpp
#include &amp;lt;pybind11/pybind11.h&amp;gt;
#include &amp;lt;pybind11/stl.h&amp;gt;   // 自动转换 std::vector ↔ Python list
#include &amp;lt;vector&amp;gt;
#include &amp;lt;numeric&amp;gt;

namespace py = pybind11;

// 纯 C++ 函数，不需要任何 Python 相关代码
long long pb_sum(const std::vector&amp;lt;int&amp;gt;&amp;amp; arr) {
    return std::accumulate(arr.begin(), arr.end(), 0LL);
}

// 绑定模块
PYBIND11_MODULE(fast_sum_bind, m) {
    m.doc() = &quot;pybind11 example&quot;;
    m.def(&quot;pb_sum&quot;, &amp;amp;pb_sum, &quot;Sum a list of integers&quot;,
          py::arg(&quot;arr&quot;));  // 支持关键字参数
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;编译&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# setup.py
from setuptools import setup, Extension
import pybind11

ext = Extension(
    &quot;fast_sum_bind&quot;,
    sources=[&quot;fast_sum_bind.cpp&quot;],
    include_dirs=[pybind11.get_include()],
    extra_compile_args=[&quot;-O2&quot;, &quot;-std=c++14&quot;],
    language=&quot;c++&quot;,
)

setup(name=&quot;fast_sum_bind&quot;, ext_modules=[ext])
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;pip install pybind11
python setup.py build_ext --inplace
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Python 调用&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import fast_sum_bind
result = fast_sum_bind.pb_sum([1, 2, 3, 4, 5])
# 也可以用关键字参数
result = fast_sum_bind.pb_sum(arr=[1, 2, 3, 4, 5])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;pybind11 还能直接绑定 C++ 类：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 绑定一个 C++ 类到 Python
class Counter {
public:
    int count = 0;
    void increment() { count++; }
    int get() { return count; }
};

PYBIND11_MODULE(counter_module, m) {
    py::class_&amp;lt;Counter&amp;gt;(m, &quot;Counter&quot;)
        .def(py::init&amp;lt;&amp;gt;())          // 构造函数
        .def(&quot;increment&quot;, &amp;amp;Counter::increment)
        .def(&quot;get&quot;, &amp;amp;Counter::get)
        .def_readwrite(&quot;count&quot;, &amp;amp;Counter::count);  // 直接暴露成员变量
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Python 里直接当普通类用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from counter_module import Counter
c = Counter()
c.increment()
print(c.get())   # 1
print(c.count)   # 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;优点：代码最简洁，自动处理类型转换，支持类/异常/回调的完整绑定，现代 C++ 项目首选。&lt;br /&gt;
缺点：依赖 pybind11 头文件，编译时间比 ctypes/Cython 长；纯 C 项目用不上（需要 C++11）。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;四种方式横向对比&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;ctypes&lt;/th&gt;
&lt;th&gt;Cython&lt;/th&gt;
&lt;th&gt;CPython Extension&lt;/th&gt;
&lt;th&gt;pybind11&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;学习成本&lt;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;td&gt;中&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;性能上限&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;最高&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;代码量&lt;/td&gt;
&lt;td&gt;少（Python侧）&lt;/td&gt;
&lt;td&gt;中&lt;/td&gt;
&lt;td&gt;多&lt;/td&gt;
&lt;td&gt;少&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要编译&lt;/td&gt;
&lt;td&gt;只编译C&lt;/td&gt;
&lt;td&gt;需要&lt;/td&gt;
&lt;td&gt;需要&lt;/td&gt;
&lt;td&gt;需要&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;适合语言&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;Python/C&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;C++&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;调试难度&lt;/td&gt;
&lt;td&gt;中&lt;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;典型用户&lt;/td&gt;
&lt;td&gt;快速集成现有库&lt;/td&gt;
&lt;td&gt;科学计算加速&lt;/td&gt;
&lt;td&gt;造轮子/做框架&lt;/td&gt;
&lt;td&gt;C++项目暴露接口&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;选哪个？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;手头有现成 &lt;code&gt;.so&lt;/code&gt;，或者快速验证&lt;/strong&gt; → ctypes，5分钟搞定&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;纯 Python 项目，想加速某个函数&lt;/strong&gt; → Cython，改动最小&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;要写 Python 模块/包给别人用，追求极致&lt;/strong&gt; → CPython Extension&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;项目本身是 C++&lt;/strong&gt; → pybind11，别犹豫&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不用非选一个。实际项目里，ctypes 调系统库、Cython 加速业务逻辑、pybind11 封装 C++ 引擎，三者同时出现在一个代码库里很正常。&lt;/p&gt;
&lt;p&gt;Python 是入口，C/C++ 是引擎——知道怎么打开引擎盖，你才算真的会开这辆车。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1526379095098-d400fd0bf935?crop=entropy&amp;amp;cs=tinysrgb&amp;amp;fit=max&amp;amp;fm=jpg&amp;amp;ixid=M3w4OTk5MTN8MHwxfHNlYXJjaHwxfHxweXRob24lMjBjJTIwcHJvZ3JhbW1pbmclMjBjb2RlfGVufDB8fHx8MTc3MzkxNzE3NHww&amp;amp;ixlib=rb-4.1.0&amp;amp;q=80&amp;amp;w=1080?w=600&amp;amp;h=400&amp;amp;fit=crop&amp;amp;q=80&quot; alt=&quot;python c programming code&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by &lt;a href=&quot;https://unsplash.com/@hiteshchoudhary&quot;&gt;Hitesh Choudhary&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>研究生？不，是牛马</title><link>https://sues.fun/posts/260309_graduateslave/</link><guid isPermaLink="true">https://sues.fun/posts/260309_graduateslave/</guid><description>那么多人想读研究生，到底是谁在读啊？</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今天又在实验室熬到凌晨两点，看着电脑屏幕上一堆跑不通的代码、改不完的论文、导师半夜发的消息，突然冒出一个念头：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;那么多人想读研究生，到底是谁在读啊？&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;读研前vs读研后&lt;/h2&gt;
&lt;p&gt;大一的时候：我要读研！我要深造！我要做科研！&lt;/p&gt;
&lt;p&gt;大三的时候：考研多难啊，大家都在卷，我也要卷进去。&lt;/p&gt;
&lt;p&gt;研一的时候：嗯？怎么跟我想象的完全不一样？&lt;/p&gt;
&lt;p&gt;研二的时候：我是谁？我在哪？我为什么要受这种罪？&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;研究生牛马日常&lt;/h2&gt;
&lt;p&gt;早上 9 点：被导师消息震醒&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;小张，那个实验结果出来了吗？昨天那个数据有问题。&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;早上 9:30：爬起来，看了一眼昨晚跑的代码——报错了。&lt;/p&gt;
&lt;p&gt;中午 12 点：一边吃外卖，一边查论文。导师群里又发了一堆文献：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;这几篇最近发表的，大家都读一下，下周组会轮流讲。&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下午 2 点：开始改代码，改到一半发现思路是错的。&lt;/p&gt;
&lt;p&gt;下午 6 点：导师突然来电话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;小张，你那个项目进度怎么样了？甲方催得急，这周要能演示。&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;晚上 9 点：还在实验室，周围同学也都还在。&lt;/p&gt;
&lt;p&gt;凌晨 12 点：代码终于跑通了，但结果是垃圾。&lt;/p&gt;
&lt;p&gt;凌晨 1 点：开始写周报，编点&quot;进展顺利&quot;的内容。&lt;/p&gt;
&lt;p&gt;凌晨 2 点：回宿舍，路上只有路灯和几个同样拖着步子的同学。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1764096534662-a194a348c4a0?ixid=M3w4OTk5MTN8MHwxfHNlYXJjaHwxfHxleGhhdXN0ZWQlMjB0aXJlZCUyMHN0dWRlbnQlMjBkZXNrJTIwbmlnaHR8ZW58MHx8fHwxNzg4NTEyNjg0fDA&amp;amp;ixlib=rb-4.1.0&amp;amp;w=600&amp;amp;h=400&amp;amp;fit=crop&amp;amp;q=80&quot; alt=&quot;exhausted tired student desk night&quot; /&gt;
&lt;em&gt;Photo by &lt;a href=&quot;https://unsplash.com/@yenvu2410&quot;&gt;Yen Vu&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;谁在读研究生？&lt;/h2&gt;
&lt;p&gt;本科时看知乎、看小红书，&quot;读研改变人生&quot;、&quot;研究生毕业起薪翻倍&quot;，仿佛读完研就能迎娶白富美/走上人生巅峰。&lt;/p&gt;
&lt;p&gt;然后真读进来了——才发现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;导师是老板，学生是廉价劳动力&lt;/li&gt;
&lt;li&gt;科研是幌子，项目才是真&lt;/li&gt;
&lt;li&gt;论文是指标，发出去没人看&lt;/li&gt;
&lt;li&gt;毕业是目标，活着就行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有人说：那你退学啊。&lt;/p&gt;
&lt;p&gt;我说：退了这三年白读了，沉没成本太高。&lt;/p&gt;
&lt;p&gt;有人说：那你导师怎么样？&lt;/p&gt;
&lt;p&gt;我说：还行吧，就是有时候半夜两点发消息，说&quot;小张，你那个实验是不是还没跑完？&quot;&lt;/p&gt;
&lt;p&gt;有人说：那你以后打算怎么办？&lt;/p&gt;
&lt;p&gt;我说：先熬着吧，等毕业了我就再也不碰科研了。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;到底谁在读研究生？&lt;/h2&gt;
&lt;p&gt;问了一圈同学，答案出奇一致：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;我妈逼的&quot;&lt;/li&gt;
&lt;li&gt;&quot;就业形势不好，先躲三年&quot;&lt;/li&gt;
&lt;li&gt;&quot;本科出来找不到好工作&quot;&lt;/li&gt;
&lt;li&gt;&quot;不想那么早进社会&quot;&lt;/li&gt;
&lt;li&gt;&quot;大家都读，我也读了&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没一个人说：&quot;我就是热爱科研，我想改变世界。&quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;研究生到底在学什么？&lt;/h2&gt;
&lt;p&gt;本科时学的知识，工作里基本用不上。&lt;/p&gt;
&lt;p&gt;读研学的知识，工作里基本用不上。&lt;/p&gt;
&lt;p&gt;那么研究生三年到底学什么？&lt;/p&gt;
&lt;p&gt;学如何忍受导师的 PUA。
学如何在导师和甲方之间两头受气。
学如何在一堆不可能完成的项目里糊弄过去。
学如何在凌晨两点的时候还能保持理智。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;那么多人想读研究生，到底是谁在读？&lt;/h2&gt;
&lt;p&gt;我抬头看了看实验室里的同学们——大家都在熬着。&lt;/p&gt;
&lt;p&gt;小张在改代码，小李在看文献，小王在写周报，小赵在跟导师视频汇报，小孙在帮导师带孩子。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;到底是谁在读研究生？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;是那些被推着往前走的人。&lt;/p&gt;
&lt;p&gt;是那些不敢停下来的人。&lt;/p&gt;
&lt;p&gt;是那些明明不想熬、又不知道还能做什么的人。&lt;/p&gt;
&lt;p&gt;是那些嘴里说着&quot;再熬一年&quot;、心里却在想&quot;要不退学算了&quot;的人。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;写给后来人&lt;/h2&gt;
&lt;p&gt;如果你在读本科，想考研——&lt;/p&gt;
&lt;p&gt;先问自己三个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;你真的热爱科研吗？&lt;/li&gt;
&lt;li&gt;你能接受三年内没有收入、随时被导师压榨吗？&lt;/li&gt;
&lt;li&gt;你毕业之后，能接受自己三年所学几乎用不上吗？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果答案是&quot;不知道&quot;或&quot;不想&quot;，那真的别读了。&lt;/p&gt;
&lt;p&gt;如果你已经在读研究生，觉得熬不下去——&lt;/p&gt;
&lt;p&gt;也别硬熬。&lt;/p&gt;
&lt;p&gt;退学也是一种选择。&lt;/p&gt;
&lt;p&gt;延毕也是一种选择。&lt;/p&gt;
&lt;p&gt;转行也是一种选择。&lt;/p&gt;
&lt;p&gt;人生不是只有一条路。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;最后&lt;/h2&gt;
&lt;p&gt;凌晨两点半，我关上电脑，走出实验室。&lt;/p&gt;
&lt;p&gt;走廊尽头的灯还亮着，隔壁组的小王还在敲键盘。&lt;/p&gt;
&lt;p&gt;我们相视一笑，什么都没说。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;研究生牛马的世界，只有牛马懂。&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;那么多人想读研究生，到底是谁在读啊？&lt;/p&gt;
&lt;p&gt;是我。&lt;/p&gt;
&lt;p&gt;是你。&lt;/p&gt;
&lt;p&gt;是每一个熬着的人。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1718327453695-4d32b94c90a4?crop=entropy&amp;amp;cs=tinysrgb&amp;amp;fit=max&amp;amp;fm=jpg&amp;amp;ixid=M3w4OTk5MTN8MHwxfHNlYXJjaHwxfHx1bml2ZXJzaXR5JTIwc3R1ZGVudCUyMHN0dWR5aW5nJTIwbGlicmFyeXxlbnwwfHx8fDE3NzM5MTY4NTh8MA&amp;amp;ixlib=rb-4.1.0&amp;amp;q=80&amp;amp;w=1080?w=600&amp;amp;h=400&amp;amp;fit=crop&amp;amp;q=80&quot; alt=&quot;university student studying library&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by &lt;a href=&quot;https://unsplash.com/@d_ks11&quot;&gt;Dominic Kurniawan Suryaputra&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>AI 名词祛魅</title><link>https://sues.fun/posts/260305_aiagentmcp/</link><guid isPermaLink="true">https://sues.fun/posts/260305_aiagentmcp/</guid><description>用&quot;打工人小L&quot;的比喻，一文拆穿 Prompt、RAG、Agent、MCP、Skill 等 AI 术语的真实面目。</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;AI 圈有个规律：每隔几周就会冒出一批新名词，配上&quot;颠覆性&quot;的宣传文案，让人觉得如果今天没搞懂，明天就要被淘汰。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prompt、Context、RAG、Agent、MCP、Skill、Sub-agent……&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;说句实话，这些词大多数时候是在描述非常普通的东西，只是被包装得很有科技感。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;一切的起点：大模型只是个&quot;接龙机器&quot;&lt;/h2&gt;
&lt;p&gt;先说清楚基础。整个 AI 热潮的底层是&lt;strong&gt;大语言模型（LLM）&lt;/strong&gt;——本质是根据已有的文字，预测下一个字是什么。参数规模足够大之后，这件事做得很好，好到让人觉得它&quot;懂&quot;了什么。&lt;/p&gt;
&lt;p&gt;但它的运作方式决定了几个硬伤：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;没有记忆&lt;/strong&gt;：每次对话对它来说都是全新开始&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不能主动行动&lt;/strong&gt;：只能被动回答，无法自己发起任务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;知识有截止日期&lt;/strong&gt;：训练完之后，它的&quot;世界&quot;就冻结了&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了应对这些缺陷，工程师们开始打补丁——于是冒出了一堆名词：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;名词&lt;/th&gt;
&lt;th&gt;它实际上是什么&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;你写给模型的指令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;你提供给它的背景信息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;把历史对话塞回上下文里，假装它记得&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;没有什么神奇的地方，全是工程手段。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Agent：不是更聪明的 AI，是一堆普通代码&lt;/h2&gt;
&lt;p&gt;当人们发现大模型光靠&quot;接龙&quot;没法完成复杂任务时，**Agent（智能体）**出现了。&lt;/p&gt;
&lt;p&gt;这个词听起来很酷，但拆开来看：&lt;strong&gt;Agent 是由所有不需要智能的部分组成的程序。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它的工作流程大概是这样：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用户提问&lt;/li&gt;
&lt;li&gt;模型说&quot;我需要搜网&quot;&lt;/li&gt;
&lt;li&gt;Agent 听到这句话，真的去调用搜索 API&lt;/li&gt;
&lt;li&gt;把结果喂回给模型&lt;/li&gt;
&lt;li&gt;模型继续接龙，生成回答&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;你以为是模型变聪明了，其实是外面套了一层代码壳在帮它干活。&lt;strong&gt;模型本身什么都没变，它只是学会了&quot;开口要工具&quot;。&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;RAG 和 MCP：一本参考书 + 一套通讯协议&lt;/h2&gt;
&lt;p&gt;既然 Agent 可以调用外部工具，下一步就是搞清楚两件事：&lt;strong&gt;怎么给它更新、更准的信息&lt;/strong&gt;，以及&lt;strong&gt;怎么让它调用各种工具而不乱套&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;**RAG（检索增强生成）**解决第一个问题：知识会过时，不如给模型准备一本&quot;参考书&quot;。用向量数据库检索相关文档片段，塞进上下文，让模型对着书回答——这就是 RAG。&lt;/p&gt;
&lt;p&gt;**MCP（模型上下文协议）**解决第二个问题：Agent 调用工具，要不要为每个工具单独写对接代码？太麻烦了，MCP 就是一套&quot;普通话标准&quot;，让所有工具都说同一种协议。&lt;/p&gt;
&lt;p&gt;很多人分不清 Function Calling 和 MCP，其实它们发生在架构的不同位置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Function Calling&lt;/strong&gt; 在模型和 Agent 之间——模型怎么告诉 Agent&quot;我要用这个工具&quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP&lt;/strong&gt; 在 Agent 和外部工具之间——Agent 怎么统一调用各种服务&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它们完全不重叠，MCP 也不会&quot;取代&quot;Function Calling。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Workflow 和 Skill：从死板到灵活的进化&lt;/h2&gt;
&lt;p&gt;用 Agent 处理复杂任务时，还有个问题：&lt;strong&gt;怎么控制它别乱来？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里有个从&quot;完全可控&quot;到&quot;完全自主&quot;的光谱：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LangChain（硬编码）→ Workflow（低代码）→ Skill（说明书）→ Pure Agent（放飞自我）
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LangChain&lt;/strong&gt; 全是代码写死的流程，稳但死板&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Workflow&lt;/strong&gt; 拖拽操作，方便一些，但本质还是固定逻辑&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skill&lt;/strong&gt; 更有意思：用一个 &lt;code&gt;.md&lt;/code&gt; 文件写清楚&quot;这件事应该怎么做&quot;，交给 Agent 自己判断怎么执行，兼顾灵活和可控&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pure Agent&lt;/strong&gt; 完全自主决策——听起来厉害，实际上可能把简单任务绕成一团乱麻&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;**Sub-agent（子智能体）**则是用来做&quot;上下文隔离&quot;的：复杂任务拆给子 Agent 处理，只把结果反馈给主 Agent，防止主脑被中间步骤的废话塞满。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;一条残酷定律：便利性永远赢&lt;/h2&gt;
&lt;p&gt;最后一个观察：&lt;/p&gt;
&lt;p&gt;那些爆火的 AI 工具，往往不是因为模型更强，也不是因为 MCP 更先进。&lt;strong&gt;它们火是因为足够简单&lt;/strong&gt;——封装掉了所有配置，让普通人能直接上手。&lt;/p&gt;
&lt;p&gt;技术史上这个规律反复出现：Springboot 臃肿但它赢了，Python 的 UV 简化包管理所以它火了，Word 明明性能不是最优但大家都在用它。&lt;/p&gt;
&lt;p&gt;AI 领域也一样。今天你还需要知道什么是 MCP、怎么配 API Key、如何管理 Skill；未来的产品会把这些全部抹掉。用户不需要懂，就像你不需要知道自来水厂怎么运作。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;那么，这些名词学还是不学？&lt;/h2&gt;
&lt;p&gt;当然要学——但要学清楚&lt;strong&gt;它们是什么，不是什么&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Prompt 不是魔法，是指令。Memory 不是真的记忆，是历史压缩。Agent 不是更智能的 AI，是调度程序。MCP 不是颠覆性创新，是一套接口规范。&lt;/p&gt;
&lt;p&gt;看清楚这些之后，你反而能更快判断一个新名词是真创新还是概念复用。&lt;/p&gt;
&lt;p&gt;当 Token 成本趋近于零、工具越来越傻瓜化，真正稀缺的可能不是&quot;懂 AI&quot;，而是知道&lt;strong&gt;用它来做什么&lt;/strong&gt;。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;img src=&quot;./image/260316_02.png&quot; alt=&quot;一图流：AI 体系架构全景&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>人生第一次五杀</title><link>https://sues.fun/posts/260301_pentakill/</link><guid isPermaLink="true">https://sues.fun/posts/260301_pentakill/</guid><description>打了这么久终于来了，记录一下这个高光时刻</description><pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;我他妈终于五杀了。&lt;/p&gt;
&lt;p&gt;说实话我自己都没反应过来，手速比脑子快，等我意识到的时候屏幕上已经跳出来那几个大字了。愣了大概两秒，然后开始傻乐。&lt;/p&gt;
&lt;p&gt;其实那局打得挺乱的，前期我被打得很惨，心里已经准备好认输了。然后不知道哪来的手感，后期一场团战，打着打着对面一个一个倒下去……最后一刀砍下去的时候，感觉整个人血压都上来了。&lt;/p&gt;
&lt;p&gt;配图就是当时的截图，留着以后翻。&lt;/p&gt;
&lt;p&gt;以后不允许有人说我菜了。&lt;/p&gt;
</content:encoded></item><item><title>AI 术语表</title><link>https://sues.fun/posts/250315_aiglossary/</link><guid isPermaLink="true">https://sues.fun/posts/250315_aiglossary/</guid><description>大模型与 AI 工程领域核心术语整理，持续更新</description><pubDate>Sat, 15 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;大模型与交互&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;术语&lt;/th&gt;
&lt;th&gt;英文&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;大语言模型&lt;/td&gt;
&lt;td&gt;LLM&lt;/td&gt;
&lt;td&gt;基于 Transformer 架构、在海量文本上训练的生成式语言模型，如 GPT、Claude、Gemini&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;多模态大模型&lt;/td&gt;
&lt;td&gt;Multimodal LLM&lt;/td&gt;
&lt;td&gt;能同时处理文本、图像、音频等多种模态输入的大模型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token&lt;/td&gt;
&lt;td&gt;Token&lt;/td&gt;
&lt;td&gt;模型处理文本的基本单位，约等于 0.75 个英文单词或 1-2 个汉字&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;上下文窗口&lt;/td&gt;
&lt;td&gt;Context Window&lt;/td&gt;
&lt;td&gt;模型单次能处理的最大 Token 数量，决定对话长度上限&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;提示词&lt;/td&gt;
&lt;td&gt;Prompt&lt;/td&gt;
&lt;td&gt;输入给模型的指令或问题文本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;系统提示词&lt;/td&gt;
&lt;td&gt;System Prompt&lt;/td&gt;
&lt;td&gt;对话前预置的隐藏指令，用于设定模型角色和行为规范&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;温度&lt;/td&gt;
&lt;td&gt;Temperature&lt;/td&gt;
&lt;td&gt;控制输出随机性的参数，值越低越确定，值越高越发散（0~2）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;幻觉&lt;/td&gt;
&lt;td&gt;Hallucination&lt;/td&gt;
&lt;td&gt;模型生成事实上不存在或错误的内容，是当前 LLM 的主要缺陷之一&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;推理&lt;/td&gt;
&lt;td&gt;Inference&lt;/td&gt;
&lt;td&gt;模型根据输入生成输出的过程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;对齐&lt;/td&gt;
&lt;td&gt;Alignment&lt;/td&gt;
&lt;td&gt;让模型行为符合人类意图和价值观的训练目标&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;技术与方法论&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;术语&lt;/th&gt;
&lt;th&gt;英文&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;检索增强生成&lt;/td&gt;
&lt;td&gt;RAG&lt;/td&gt;
&lt;td&gt;在模型生成前先从外部知识库检索相关内容，减少幻觉、注入实时知识&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;函数调用&lt;/td&gt;
&lt;td&gt;Function Calling&lt;/td&gt;
&lt;td&gt;模型识别意图后调用外部函数/API，实现与真实系统的交互&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;模型上下文协议&lt;/td&gt;
&lt;td&gt;MCP&lt;/td&gt;
&lt;td&gt;Anthropic 提出的开放标准，规范 AI 模型与外部工具/数据源之间的通信接口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;智能体&lt;/td&gt;
&lt;td&gt;Agent&lt;/td&gt;
&lt;td&gt;能自主规划、调用工具、循环执行任务直到目标完成的 AI 系统&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;工作流&lt;/td&gt;
&lt;td&gt;Workflow&lt;/td&gt;
&lt;td&gt;AI 执行任务的固定步骤编排，区别于 Agent 的自主决策&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;嵌入向量&lt;/td&gt;
&lt;td&gt;Embedding&lt;/td&gt;
&lt;td&gt;将文本/图像等映射为高维数值向量，用于语义相似度计算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;向量数据库&lt;/td&gt;
&lt;td&gt;Vector Database&lt;/td&gt;
&lt;td&gt;专门存储和检索 Embedding 向量的数据库，如 Pinecone、Chroma、Faiss&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;微调&lt;/td&gt;
&lt;td&gt;Fine-tuning&lt;/td&gt;
&lt;td&gt;在预训练模型基础上用特定领域数据继续训练，使其适应特定任务&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;指令微调&lt;/td&gt;
&lt;td&gt;Instruction Tuning&lt;/td&gt;
&lt;td&gt;用「指令-回答」格式数据微调，使模型更好地遵从人类指令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;思维链&lt;/td&gt;
&lt;td&gt;Chain-of-Thought&lt;/td&gt;
&lt;td&gt;让模型逐步推理、显式写出中间步骤，提升复杂任务准确率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;并行执行&lt;/td&gt;
&lt;td&gt;Parallel Execution&lt;/td&gt;
&lt;td&gt;多个 Agent 或工具同时运行，提高效率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;技能&lt;/td&gt;
&lt;td&gt;Skill&lt;/td&gt;
&lt;td&gt;Agent 可调用的封装能力单元，类似插件或工具包&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;长上下文&lt;/td&gt;
&lt;td&gt;Long Context&lt;/td&gt;
&lt;td&gt;支持超长输入（如 100K+ Token）的模型能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;蒸馏&lt;/td&gt;
&lt;td&gt;Distillation&lt;/td&gt;
&lt;td&gt;用大模型的输出训练小模型，在保留能力的同时降低计算成本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;量化&lt;/td&gt;
&lt;td&gt;Quantization&lt;/td&gt;
&lt;td&gt;降低模型权重精度（如 FP16→INT4），减小体积、加速推理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;推理与规划&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;术语&lt;/th&gt;
&lt;th&gt;英文&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ReAct&lt;/td&gt;
&lt;td&gt;ReAct&lt;/td&gt;
&lt;td&gt;结合推理（Reasoning）和行动（Acting）的 Agent 框架，交替思考与调用工具&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;规划&lt;/td&gt;
&lt;td&gt;Planning&lt;/td&gt;
&lt;td&gt;Agent 将复杂目标分解为子任务并排列执行顺序的能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;反思&lt;/td&gt;
&lt;td&gt;Reflection&lt;/td&gt;
&lt;td&gt;Agent 对自身输出进行自我评估和修正的机制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;记忆&lt;/td&gt;
&lt;td&gt;Memory&lt;/td&gt;
&lt;td&gt;Agent 存储和检索历史信息的机制，分短期（上下文）和长期（外部存储）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;多智能体&lt;/td&gt;
&lt;td&gt;Multi-Agent&lt;/td&gt;
&lt;td&gt;多个 Agent 协作完成任务，各自负责不同子任务&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;应用与工具生态&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;术语&lt;/th&gt;
&lt;th&gt;英文&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;代码助手&lt;/td&gt;
&lt;td&gt;Code Assistant&lt;/td&gt;
&lt;td&gt;辅助编写、调试、解释代码的 AI 工具，如 GitHub Copilot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;提示词工程&lt;/td&gt;
&lt;td&gt;Prompt Engineering&lt;/td&gt;
&lt;td&gt;设计和优化 Prompt 以获得更好模型输出的方法论&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI 网关&lt;/td&gt;
&lt;td&gt;AI Gateway&lt;/td&gt;
&lt;td&gt;统一管理多个 LLM API 调用、限流、日志的中间层服务&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;护栏&lt;/td&gt;
&lt;td&gt;Guardrails&lt;/td&gt;
&lt;td&gt;限制模型输出范围、过滤有害内容的安全机制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;评估框架&lt;/td&gt;
&lt;td&gt;Evaluation Framework&lt;/td&gt;
&lt;td&gt;系统性测试模型能力和对齐程度的方法体系&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;人机协作&lt;/td&gt;
&lt;td&gt;Human-AI Collaboration&lt;/td&gt;
&lt;td&gt;人类与 AI 分工配合完成任务，发挥各自优势&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI 治理&lt;/td&gt;
&lt;td&gt;AI Governance&lt;/td&gt;
&lt;td&gt;规范 AI 开发和使用的制度、流程和技术框架&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>LOL video</title><link>https://sues.fun/posts/250111_lolvideo/</link><guid isPermaLink="true">https://sues.fun/posts/250111_lolvideo/</guid><description>我的下棋日常</description><pubDate>Sat, 11 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;S13&lt;/h2&gt;
&lt;h3&gt;妖姬乱杀&lt;/h3&gt;
&lt;p&gt;&amp;lt;div style=&quot;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; height: auto;&quot;&amp;gt;
&amp;lt;iframe style=&quot;position: absolute; top: 0; left: 0; width: 100%; height: 100%;&quot; src=&quot;https://www.youtube.com/embed/XyGGm4i-2t4&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;九征服者&lt;/h3&gt;
&lt;p&gt;&amp;lt;div style=&quot;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; height: auto;&quot;&amp;gt;
&amp;lt;iframe style=&quot;position: absolute; top: 0; left: 0; width: 100%; height: 100%;&quot; src=&quot;https://www.youtube.com/embed/heYFzAr3dFo&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;S12&lt;/h2&gt;
&lt;h3&gt;九吉星双三星慧&lt;/h3&gt;
&lt;p&gt;&amp;lt;div style=&quot;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; height: auto;&quot;&amp;gt;
&amp;lt;iframe style=&quot;position: absolute; top: 0; left: 0; width: 100%; height: 100%;&quot; src=&quot;https://www.youtube.com/embed/SAvumgovUuM&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;九花仙子&lt;/h3&gt;
&lt;p&gt;&amp;lt;div style=&quot;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; height: auto;&quot;&amp;gt;
&amp;lt;iframe style=&quot;position: absolute; top: 0; left: 0; width: 100%; height: 100%;&quot; src=&quot;https://www.youtube.com/embed/om_ZMXZvpQs&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>Astropy</title><link>https://sues.fun/posts/250110_astropy/</link><guid isPermaLink="true">https://sues.fun/posts/250110_astropy/</guid><description>Astropy Features</description><pubDate>Fri, 10 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Astropy是一款功能强大的Python库，专为天文学和天体物理学研究设计。它提供了多种模块和工具来处理常见的天文数据和计算需求。以下是Astropy各个功能和组件的详细介绍：&lt;/p&gt;
&lt;h2&gt;1. 单位与物理量（&lt;code&gt;astropy.units&lt;/code&gt;）&lt;/h2&gt;
&lt;p&gt;Astropy提供了一个强大的单位与物理量模块，用于处理带单位的数据。&lt;/p&gt;
&lt;h3&gt;功能：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;定义和使用单位，例如米（&lt;code&gt;u.m&lt;/code&gt;）、秒（&lt;code&gt;u.s&lt;/code&gt;）、光年（&lt;code&gt;u.ly&lt;/code&gt;）等。&lt;/li&gt;
&lt;li&gt;处理带单位的物理量（&lt;code&gt;Quantity&lt;/code&gt;），支持单位转换与计算。&lt;/li&gt;
&lt;li&gt;自定义单位和复合单位。&lt;/li&gt;
&lt;li&gt;自动检测并处理不同单位之间的兼容性。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from astropy import units as u

distance = 10 * u.lightyear
speed = 300 * u.km / u.s
time = distance / speed
print(time.to(u.year))
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2. 坐标（&lt;code&gt;astropy.coordinates&lt;/code&gt;）&lt;/h2&gt;
&lt;p&gt;该模块允许用户处理天体坐标，包括转换坐标系统和天体参考框架。&lt;/p&gt;
&lt;h3&gt;功能：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;支持多种坐标系：赤道坐标（ICRS）、地平坐标（AltAz）、银河坐标（Galactic）等。&lt;/li&gt;
&lt;li&gt;坐标转换。&lt;/li&gt;
&lt;li&gt;计算天体间的角距离。&lt;/li&gt;
&lt;li&gt;支持地面观测位置的指定。&lt;/li&gt;
&lt;li&gt;考虑时间和位置的影响，计算精确的天体位置。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from astropy.coordinates import SkyCoord
from astropy import units as u

coord = SkyCoord(ra=10.684*u.deg, dec=41.269*u.deg, frame=&apos;icrs&apos;)
print(coord.to_string(&apos;hmsdms&apos;))
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3. 时间（&lt;code&gt;astropy.time&lt;/code&gt;）&lt;/h2&gt;
&lt;p&gt;Astropy的时间模块用于处理各种天文学时间标准。&lt;/p&gt;
&lt;h3&gt;功能：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;支持多种时间格式：ISO 8601、JD（儒略日）、MJD（修正儒略日）等。&lt;/li&gt;
&lt;li&gt;支持时间尺度转换（例如TT、TDB、UTC、UT1）。&lt;/li&gt;
&lt;li&gt;提供高精度时间计算。&lt;/li&gt;
&lt;li&gt;时间数组操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from astropy.time import Time

time = Time(&apos;2025-01-10 12:00:00&apos;, scale=&apos;utc&apos;)
print(time.jd)  # 转换为儒略日
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4. 表格（&lt;code&gt;astropy.table&lt;/code&gt;）&lt;/h2&gt;
&lt;p&gt;表格模块提供了一种灵活的方法来处理结构化数据。&lt;/p&gt;
&lt;h3&gt;功能：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;创建、操作和导出表格。&lt;/li&gt;
&lt;li&gt;支持多种文件格式：CSV、FITS、HDF5等。&lt;/li&gt;
&lt;li&gt;方便的列操作。&lt;/li&gt;
&lt;li&gt;支持大数据表的切片和过滤。&lt;/li&gt;
&lt;li&gt;自定义单元格式化和表格分组。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from astropy.table import Table

data = Table({&apos;col1&apos;: [1, 2, 3], &apos;col2&apos;: [&apos;a&apos;, &apos;b&apos;, &apos;c&apos;]})
print(data)
data.write(&apos;output.csv&apos;, format=&apos;csv&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;5. FITS文件处理（&lt;code&gt;astropy.io.fits&lt;/code&gt;）&lt;/h2&gt;
&lt;p&gt;该模块专为处理FITS（Flexible Image Transport System）文件而设计。&lt;/p&gt;
&lt;h3&gt;功能：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;读取和写入FITS文件。&lt;/li&gt;
&lt;li&gt;访问和修改FITS头部信息。&lt;/li&gt;
&lt;li&gt;处理多扩展FITS文件。&lt;/li&gt;
&lt;li&gt;支持压缩数据和流式读取。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from astropy.io import fits

hdul = fits.open(&apos;example.fits&apos;)
print(hdul.info())
data = hdul[0].data
hdul.close()
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;6. 容差计算与近似匹配（&lt;code&gt;astropy.utils&lt;/code&gt;）&lt;/h2&gt;
&lt;p&gt;Astropy的工具模块提供了各种通用实用工具。&lt;/p&gt;
&lt;h3&gt;功能：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;容差匹配（&lt;code&gt;astropy.utils.isclose&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;进度条显示。&lt;/li&gt;
&lt;li&gt;随机数生成和分布采样。&lt;/li&gt;
&lt;li&gt;提供数据缓存和下载功能。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from astropy.utils import isclose

print(isclose([1.0, 2.0], [1.0, 2.01], atol=0.05))
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;7. 宇宙学计算（&lt;code&gt;astropy.cosmology&lt;/code&gt;）&lt;/h2&gt;
&lt;p&gt;Astropy包含计算宇宙学参数的工具。&lt;/p&gt;
&lt;h3&gt;功能：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;支持标准宇宙学模型（例如Planck15）。&lt;/li&gt;
&lt;li&gt;计算共动距离、角直径距离、红移等。&lt;/li&gt;
&lt;li&gt;支持用户定义的宇宙学模型。&lt;/li&gt;
&lt;li&gt;提供宇宙学参数的插值功能。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from astropy.cosmology import Planck15

z = 0.5
distance = Planck15.luminosity_distance(z)
print(distance)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;8. 可视化（&lt;code&gt;astropy.visualization&lt;/code&gt;）&lt;/h2&gt;
&lt;p&gt;Astropy提供了一些工具来优化天文数据的可视化。&lt;/p&gt;
&lt;h3&gt;功能：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;支持线性、对数和非线性缩放。&lt;/li&gt;
&lt;li&gt;调整图像对比度。&lt;/li&gt;
&lt;li&gt;提供多种颜色映射和图像变换工具。&lt;/li&gt;
&lt;li&gt;与Matplotlib无缝集成。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from astropy.visualization import astropy_mpl_style
import matplotlib.pyplot as plt

plt.style.use(astropy_mpl_style)
plt.plot([1, 2, 3], [4, 5, 6])
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;9. 模型拟合（&lt;code&gt;astropy.modeling&lt;/code&gt;）&lt;/h2&gt;
&lt;p&gt;Astropy的建模模块支持数据拟合和函数建模。&lt;/p&gt;
&lt;h3&gt;功能：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;定义和评估数学模型。&lt;/li&gt;
&lt;li&gt;提供多种优化算法进行数据拟合。&lt;/li&gt;
&lt;li&gt;支持复合模型和参数约束。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;示例：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;from astropy.modeling import models, fitting
import numpy as np

x = np.linspace(-5, 5, 50)
y = 3.0 * np.exp(-0.5 * (x / 1.2)**2)
gaussian = models.Gaussian1D(amplitude=3, mean=0, stddev=1)
fitter = fitting.LevMarLSQFitter()
fit_result = fitter(gaussian, x, y)
print(fit_result)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;Astropy是一个功能全面的天文学工具包，适用于从数据处理到复杂计算的各种需求。通过其模块化设计，用户可以轻松选择和组合不同功能以满足研究需求。&lt;/p&gt;
</content:encoded></item><item><title>LightGBM</title><link>https://sues.fun/posts/250105_lightgbm/</link><guid isPermaLink="true">https://sues.fun/posts/250105_lightgbm/</guid><description>Design and Implementation of Drifting Trajectory Prediction Based on LightGBM</description><pubDate>Sun, 05 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;基于LightGBM海洋漂流轨迹预测设计与实现&lt;/p&gt;
&lt;p&gt;摘 要：当前海洋环境的复杂多变使得准确预测移动对象的未来运动轨迹成为一项重要的任务。传统的轨迹预测方法存在预测精度不高、计算效率低下等问题。&lt;/p&gt;
&lt;p&gt;本设计旨在利用LightGBM算法对35个仿真人体的84000余条漂流轨迹构建模型，实现对仿真人体模型未来漂流轨迹的预测。本设计主要研究了漂流轨迹经纬度和风速流速之间的相关性，设计建模过程中辅助数据的相似替换以及模型参数的优化。通过对模型进行训练，成功预测出16个仿真人体在未来48小时内每隔30分钟的轨迹变化。并将测试结果与真实数据集进行准确率验证及可视化对比。结果表明，在经过多次参数调整和200次模型迭代后，可以达到海洋领域千米范围内95.38%的准确率，700米范围内72.85%的准确率。尽管使用LightGBM进行海洋漂流轨迹预测仍有提升空间，但在多数情况下是有效的。&lt;/p&gt;
&lt;p&gt;本设计展示了LightGBM在海洋漂流轨迹预测中的优势，也为类似问题提供了有益参考。&lt;/p&gt;
&lt;p&gt;关键词：LightGBM；漂流预测；轨迹可视化&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;绪论&lt;/strong&gt;&lt;/h1&gt;
&lt;h2&gt;研究背景与意义&lt;/h2&gt;
&lt;p&gt;全球海洋经济活动愈发频繁以及海洋监测技术日新月异，鉴于海洋环境的复杂多变以及众多不确定性因素的干扰，准确预测海洋移动对象的未来运动轨迹成为一项至关重要的任务。&lt;/p&gt;
&lt;p&gt;传统的方法在海洋轨迹预测问题上往往存在局限性，例如预测精度不高、计算效率低下等问题。集成学习技术因其独特的优势而备受关注，它能够有效结合多个学习器的预测结果，从而提升整体的学习性能。其中，LightGBM作为梯度提升决策树算法的一种高效实现，其训练速度快、预测精度高、内存消耗低。&lt;/p&gt;
&lt;p&gt;因此，本设计旨在探究如何借助机器学习工具，有效提取海洋轨迹数据中的模式特征，并在此基础上进行精确且实时的轨迹预测，以服务于海洋科学研究、航行安全、海上搜救、渔业管理等诸多实际应用。&lt;/p&gt;
&lt;h2&gt;国内外研究现状&lt;/h2&gt;
&lt;h3&gt;国内研究现状&lt;/h3&gt;
&lt;p&gt;在漂流轨迹方面，茅晨昊等基于高斯过程回归算法对船舶航行轨迹之后24分钟进行预测。在前9分钟精度接近原本船舶轨迹，最后偏差率达到8.9%&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;。夏山宏等分别基于解析法和蒙特卡罗方法建立了落水人员漂移轨迹预测模型。实现了落水人员漂移轨迹预测及落水位置12小时内百米精度查询&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;。&lt;/p&gt;
&lt;p&gt;LightGBM方面，史永胜等采用LightGBM模型，使用GridSearchCV算法的GBRD和RF模型在相同条件下进行比较，该方法能够显著加快模型运算速度。预测的最大MAE、MSE、RMSE分别不超过3.0、17.7、4.2&amp;lt;sup&amp;gt;[3]&amp;lt;/sup&amp;gt;。陈勤达等提出一种基于鲸鱼优化算法（WOA）与轻量级梯度提升机（LightGBM）的无创血压检测模型WOA-LightGBM。预测的平均绝对误差均±5mmHg，与传统结果有高度一致性&amp;lt;sup&amp;gt;[4]&amp;lt;/sup&amp;gt;。高治鑫等提出一种基于贝叶斯优化与五折交叉验证的模型搜索方案，结合LightGBM模型应用于大坝变形预测中，与其他模型相比。该模型具有更高的预测精度和泛化能力，在3种定量评估指标中均取得最好表现&amp;lt;sup&amp;gt;[5]&amp;lt;/sup&amp;gt;。&lt;/p&gt;
&lt;h3&gt;国外研究现状&lt;/h3&gt;
&lt;p&gt;漂流轨迹方面，Melissa Cook等将海龟漂移数据与美洲海洋系统（AMSEAS）水动力模型的输出相结合，应用于另外247只搁浅的海龟，以产生5d拉格朗日回溯漂移，得出死亡源位置概率图。达到了97.34%的评估精度&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;。Piotr Borkowski等提出了一种船舶运动轨迹预测算法，该算法通过数据融合，考虑了来自多个加倍的自主设备对船舶当前位置的测量。大大增加了预测的可靠性和准确性&amp;lt;sup&amp;gt;[7]&amp;lt;/sup&amp;gt;。&lt;/p&gt;
&lt;p&gt;LightGBM方面，Indu Chhillar等将获得的特征连接起来形成一个特征集。具有纹理、颜色和组合特征的LightGBM。分别以97.72%、99.92%和100%的准确率完成对肺癌和结肠癌图像进行分类&amp;lt;sup&amp;gt;[8]&amp;lt;/sup&amp;gt;。Abdul Rahaman Wahab Sait等提出CNN技术用于特征提取，使用多线程的LightGBM模型进行脑组织分类。以99.6%的准确率和灵敏度成功地对脑组织进行了分类&amp;lt;sup&amp;gt;[9]&amp;lt;/sup&amp;gt;。Baoshan Xie等使用最大相关最小冗余算法、斯皮尔曼等级相关系数和极端梯度提升特征重要性方法计算所有特征的权重并进行融合，筛选出最优特征子集，利用改进的LightGBM方法进行训练。该模型的评估精度为99.34%，均方误差维持在0.00001水平，在第45次迭代时达到最优收敛值&amp;lt;sup&amp;gt;[10]&amp;lt;/sup&amp;gt;。&lt;/p&gt;
&lt;h2&gt;主要内容&lt;/h2&gt;
&lt;p&gt;本设计主要研究分析仿真人体在48小时之内的漂流轨迹，可分为轨迹模型构建与训练和轨迹预测两部分。首先对经纬度和风速流速等辅助数据的相关性进行研究，确定模型构建方向。通过对测试点分类，划分不动点以减少算力消耗。对于辅助数据使用插值法来解决具体应用中精度不高的问题，之后研究了不同经纬度地域的风速流速补偿方法。拟提出基于LightGBM算法的轨迹模型，从而为实现预测落水人员的漂流轨迹提供支持，最后生成轨迹地图。&lt;/p&gt;
&lt;h2&gt;技术线路&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_19.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;首先利用netCDF4和Pandas库，对导入的风速流速辅助数据和漂流轨迹信息进行格式化处理。使用插值法提高辅助数据的精度。根据LightGBM构建经度模型和纬度模型并训练。最后使用Folium和Matplotlib库对预测结果可视化处理并整合各个距离范围内的准确率。&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;相关技术介绍&lt;/strong&gt;&lt;/h1&gt;
&lt;h2&gt;集成学习算法&lt;/h2&gt;
&lt;h3&gt;XGBoost&lt;/h3&gt;
&lt;p&gt;梯度提升决策树（GBDT）的核心思想在于通过迭代训练决策树，从而逐步优化模型性能，以达到构建最优模型的目的。在训练过程中，GBDT通过不断拟合前一轮迭代后的残差，使得模型能够逐步逼近真实值，从而提高预测精度。此外，由于GBDT采用了集成学习的思想，通过结合多个弱学习器（即决策树）来构建强学习器，有效提高了模型的鲁棒性和稳定性。因此，GBDT在各类机器学习应用中展现出了良好的性能和优势。XGBoost是GBDT的一种，属于Boosting算法。它是一种多项式级的算法，可以通过一定的规则，将弱学习器提高成强学习器&amp;lt;sup&amp;gt;[11]&amp;lt;/sup&amp;gt;。GBDT和XGBoost最大的差异是目标函数的定义。带入损失函数后，每个叶子节点的权重取得最小值时，整个目标函数也达到最小值点。&lt;/p&gt;
&lt;p&gt;但是这样的预排序算法的缺点也很明显，消耗内存大、时间开销大且无法对Cache进行优化。&lt;/p&gt;
&lt;h3&gt;LightGBM&lt;/h3&gt;
&lt;p&gt;LightGBM结合了梯度提升决策树和基于树的学习算法的优点，原理上与XGBoost相似，都是通过对采用损失函数的负梯度作为残差预测值进行新一轮的拟合，但相比于XGBoost，能够在不降低准确率的前提下加快模型训练速度。LightGBM使用了带有深度限制的节点展开的带深度限制的节点展开Leaf-wise算法，决策树的层级不会无限制地增长。引入直方图算法，降低了梯度的计算复杂度&amp;lt;sup&amp;gt;[12]&amp;lt;/sup&amp;gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_29.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;基本思想是：对每个节点遍历所有特征；对节点遍历所有特征，为每个特征构建直方图，每个直方图中应该保存该直方图中样本的梯度和样本数；遍历所有特征，将梯度和以及样本数统计进入直方图中；对特征遍历直方图，分别以当前bin为划分点，得到划分结果，同时根据父节点和叶子节点相减得到另一个兄弟节点的直方图结果。&lt;/p&gt;
&lt;p&gt;在构建直方图的过程之中，遍历所有样本，并根据它们的特征值(f_{i})将它们归入相应的桶中。最后更新每个桶的梯度之和以及样本数量。同时，LightGBM还提供了许多高级功能和工具，如交叉验证、自定义损失函数、类别特征的处理等，可以根据需要进行进一步的探索和使用。&lt;/p&gt;
&lt;h2&gt;数据处理技术&lt;/h2&gt;
&lt;h3&gt;NetCDF4&lt;/h3&gt;
&lt;p&gt;本项目所需气象辅助数据的变量较多，均以nc文件存储。NetCDF广泛应用于大气领域、水利领域、海洋领域等诸多领域。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;特点&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;多维数据存储&lt;/td&gt;
&lt;td&gt;支持创建和组织多维数据集，多个变量可存储在一个文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;灵活性&lt;/td&gt;
&lt;td&gt;支持多种开发语言创建和修改文件，同时支持多种工具和应用程序进行访问&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;无限维度支持&lt;/td&gt;
&lt;td&gt;引入无限维度概念，允许创建具有任意长度的维度&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;插值方式&lt;/h3&gt;
&lt;p&gt;插值法是利用函数(f(x))在某区间中已知的若干点的函数值，作出适当的特定函数，在区间的其他点上用这特定函数的值作为函数(f(x))的近似值。广泛应用于数学、物理、工程、统计等领域，用于数据拟合、函数逼近、数值计算等。如果插值法中所使用的特定函数是多项式，那么这种方法就被称为多项式插值，插值多项式的阶数通常与已知点的数量有关。&lt;/p&gt;
&lt;p&gt;除此之外，还有许多其他的插值方法，如多项式插值、拉格朗日插值、连分式插值&amp;lt;sup&amp;gt;[13]&amp;lt;/sup&amp;gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;方法名称&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;nearest&lt;/td&gt;
&lt;td&gt;插值点处函数值与最邻近的已知点函数值相等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;linear&lt;/td&gt;
&lt;td&gt;插值点处函数值由连接其最邻近的两侧点的线性函数预测&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pchip&lt;/td&gt;
&lt;td&gt;保证插值曲线在数据点处的一阶导数连续&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cubic&lt;/td&gt;
&lt;td&gt;三次插值，通常指三次多项式插值，与pchip类似，但可能包含不同的实现或细微差别&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;可视化技术&lt;/h2&gt;
&lt;h3&gt;Folium&lt;/h3&gt;
&lt;p&gt;Folium作为一个开源的数据可视化库，根植于Python生态系统之中，展现出强大的功能特性。其不仅能有效地呈现数据的分布状况，更能通过Vincent/Vega等先进工具，在地图上对数据点进行精细标注。此外，Folium还支持GeoJSON和TopoJSON两种文件格式的叠加，使用户得以轻松将数据链接至这两种叠加层，实现更为丰富、深入的数据可视化分析。这一特性不仅提升了数据可视化的灵活性和多样性，也进一步推动了数据分析和解读的精确性与深度。&lt;/p&gt;
&lt;h3&gt;Matplotlib&lt;/h3&gt;
&lt;p&gt;Matplotlib，作为一款2D绘图库，专为Python编程语言及其数值数学扩展包NumPy而设计，由John Hunter在2002年开创，它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。此库具备丰富的数据可视化功能，涵盖了线图、散点图、柱状图、饼图、等高线图、3D图形以及极坐标图等多种图表类型。此外，Matplotlib还具备制作动画和交互式图形的能力，进一步拓宽了其应用范围。&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;数据预处理&lt;/strong&gt;&lt;/h1&gt;
&lt;h2&gt;数据集介绍&lt;/h2&gt;
&lt;p&gt;本项目使用的漂流轨迹数据集来源于DataFountain社区中的开源数据集，一共包含51个仿真人体模型共84235条实际漂移轨迹数据。其中仿真人体模型的实际漂移轨迹使用random函数按照2:1的比例划分为训练集和测试集，均使用csv文件形式存储。轨迹数据集包含仿真人体的编码、定位日期时刻、纬度和经度等信息，漂流轨迹主要位于福建、广东等附近海域。&lt;/p&gt;
&lt;p&gt;预测轨迹所需要的风场和洋流辅助数据来源于开源气象数据工具ERA5。此外洋流的辅助预报信息和风场的辅助预报信息除了和原始数据集对应的经纬度坐标之外，还包含当前时刻的风速分量和流速分量等。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_30.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;为了简化后续过程之中对日期和时间的遍历过程，以及统一设计中参数调用，采用datatime模块将时间和日期字符串转换。将时间和日期拼接到一起并转换为固定的格式。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_31.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;经纬度处理&lt;/h2&gt;
&lt;h3&gt;风速流速查询&lt;/h3&gt;
&lt;p&gt;由于本项目的局限性，辅助数据并不是十分完全，需要定义一个时间索引来处理查询不到数据的情况。基于大部分地区的天气环境与地理位置关系密切，对于除去洋流和气候变化巨大地点之外的对象进行模糊操作。具体的做法是用前一天的数据类同替换，首先检查所需文件是否存在于数据集指定的路径下。如果文件不存在，则令所查询日期序列减一，构造出新的文件名重新进行检索。&lt;/p&gt;
&lt;h3&gt;插值函数&lt;/h3&gt;
&lt;p&gt;从netCDF4文件中提取的风场数据和流速数据，其中包括经度、纬度、东西向风速流速和南北向风速流速。在进行设计之前要先得到各项数据之间关系。所以首先要在各个时间点上对数据进行统一处理，即让每个时间点上的经纬度对应当时的风速流速。但是风速流速通常具有空间异质性，即不同位置上可能差异很大，而且在辅助数据中辅助数据的精度远没有达到和漂流轨迹经纬度对应的精度。因此要通过插值函数，根据风速流速数据变量的相异之处，分别设计插值的方法，在没有直接测量值的位置估计风速和流速。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_32.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;对风速来说，风速数据以网格分布存储，因此可以对待查找点附近的网格进行插值，当对查询点外部一圈网格的点插值时视为一圈，根据插值圈数参数，确定插值所需的网格点范围。这个范围是以查询点为中心的一个方形区域，边长为插值圈数参数的两倍。&lt;/p&gt;
&lt;p&gt;具体的做法是通过计算确定目标位置在数据集中的初始网格索引位置，然后通过圈数确定周围网格点的范围。通过转化处理之后对选定好范围进行插值。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_33.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;而流速是曲线正交网格形式，无法使用上述方法为流速进行插值。因此通过计算距离的方式直接选出最近的4个点作为插值点，执行线性差值。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;轨迹绘制&lt;/h2&gt;
&lt;p&gt;轨迹路线作为最直观的观测图形和检验方法，是本项目重要的展示手段。但一般的绘图库无法直观准确地绘制漂流轨迹。因此使用Folium库中实现轨迹在一定时间范围内的展示。在轨迹函数中为了适应不同数据集之间的轨迹差异，设置四个变量作为形式参数传入，分别为ID、文件名、原始数据和预测数据。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;且允许传入空值，既能直接展示原始轨迹，又能在原始轨迹之上叠加预测轨迹，实现对照功能。同时为方便中文展示和更快的速度，本项目使用高德地图作为地图瓦片，使用Marker方法制作起点和终点标记。使用LatLngPopup方法添加点击反馈，增加轨迹地图的交互性能，并提供保存为HTML文件接口。图中白色曲线为在2020年9月3号至2020年9月5号之间ID为673375的仿真人体模型的经纬度变化轨迹。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_03.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;相关性分析&lt;/h2&gt;
&lt;p&gt;构建模型之前还需要观测数据点经纬度的偏移量与风速和流速之间的关系。但实际上，1分钟内的经纬度变化幅度很小，因此定义一个函数放大偏移量，将经纬度的偏移量转换为相对数值，通过计算连续时间点的经纬度差异乘以一个系数，生成相应时间序列特征，使得模型能够捕捉到短时间内轨迹的变化趋势。&lt;/p&gt;
&lt;p&gt;使用matplotlib库，直观展示特定ID的数据点随时间变化的经纬度偏移量、风速和流速之间的关系。依据风速分量、流速分量以及纬度差异绘制折线图，分别表示东西方向和南北方向的相关性分析。图为在2020年9月3号至2020年9月5号之间ID为673375的仿真人体模型在东西、南北方向上的流速风速分量和经纬度偏移量相关性分析图。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src=&quot;./image/250105_04.png&quot; alt=&quot;&quot; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src=&quot;./image/250105_05.png&quot; alt=&quot;&quot; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;南北方向相关性&lt;/td&gt;
&lt;td&gt;东西方向相关性&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;两个子图中蓝色虚线表示风速分量变化，橙色实线表示流速分量变化，绿色点线表示格式化后的经纬度偏移量。由此可以得出，无论在南北方向还是东西方向上，除少数异常值外，经纬度偏移量与流速呈现出较强的正相关性，但风速和经纬度偏移量无明显的相关性。&lt;/p&gt;
&lt;p&gt;之后使用随机算法对数据集中的多个数据进行相关性分析，均符合上述结论。为了对结果进行验证，使用主成分分析对辅助数据降维处理。选取风速分量和流速分量作为主成分，执行主成分分析并绘制散点图。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_06.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;不动点处理&lt;/h2&gt;
&lt;p&gt;为了提高预测效率，并减少在已知固定区域上的计算开销。针对在原始数据信息中轨迹几乎不变的不动点进行删除。一般位于狭窄河道、小岛周围或者靠近海岸的投放点，其轨迹一般符合“原地打转”模式。这些区域可能基于地理特征、环境因素或其他相关因素被确定为不动点范围。因此当进行位置预测或轨迹分析时，首先检查一个点是否位于这些不动点范围内。如果是，则可以直接预测该点将保持原地不动，而无须进行更复杂的分析或计算。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src=&quot;./image/250105_07.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src=&quot;./image/250105_08.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;仿真人体id: 717484&lt;/td&gt;
&lt;td&gt;仿真人体id:996179&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src=&quot;./image/250105_09.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;./image/250105_10.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;仿真人体id:803514&lt;/td&gt;
&lt;td&gt;仿真人体id:768835&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;本设计中定义了一个列表，其中包含多个子列表。每个子列表代表一个固定区域，即在这些区域内的点在预测中被视为不会移动的点。每个子列表包含四个元素，这四个元素定义了一个矩形区域的边界。主要的目的是从原始数据集中识别出那些由于位于特定地形区域而可能保持静止的点，并从数据集中移除它们。经过处理后，DataFrame将只包含那些不受地形因素影响的点。但中国国土广阔无垠，本设计只规划了训练测试集中部分不动点的范围，在真正应用之中需要更加细致的划分传入不动点的范围。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_11.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;模型构建&lt;/strong&gt;&lt;/h1&gt;
&lt;h2&gt;风速流速补偿&lt;/h2&gt;
&lt;p&gt;由于高纬度地区风速和流速的计算可能存在误差，根据对时间序列的特征提取可以得出除了流速偶尔的异常值以外，经纬度偏移量与流速呈现出较强的正相关性，但风速和轨迹变化趋势无明显地相关性。而一般位于狭窄河道、小岛周围或者靠近海岸的投放点，其轨迹一般符合“原地打转”模式。不同纬度上同样的风速和流速带来的经度变化不一致，高纬度大而低纬度小&amp;lt;sup&amp;gt;[14]&amp;lt;/sup&amp;gt;。本设计中采用三维直角坐标系来描述地球表面。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_12.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;具体的，对于风速流速受到经纬度大小影响的区域，可以通过公式对风速流速进行补偿&amp;lt;sup&amp;gt;[15]&amp;lt;/sup&amp;gt;。通过计算补偿，这样高纬度位置就获得了更大的风速与流速，来匹配实际同样速度下更大的经度偏移量，更新过后的(U_{\text{wind}})和(U_{\text{current}})作为实际训练用到的东西向风速和流速。而纬度偏移量则没有这方面的影响，故保持原状。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_13.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;模型训练&lt;/h2&gt;
&lt;p&gt;在处理好各项特征之后开始训练模型，用LightGBM分别来训练两个独立的模型：一个用于预测船只或物体在30分钟后的经度偏移量，另一个用于预测纬度偏移量，即使用风和水流方向上的分量来预测轨迹在经纬度方向上的变化。在本设计中只使用了当前时刻的风速和流向数据作为特征。在本设计中的具体做法是，先定义经纬度模型各自的特征列，在获取30分钟之后的经纬度偏移量。之后创建出训练模型定义模型训练参数。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_14.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;上述代码中，定义了经度模型和纬度模型的LightGBM参数用于控制模型的训练过程。在定义模型参数之后，使用lgb.train函数提供的参数和训练数据集来训练模型。它会返回一个训练好的模型对象，这个对象可以用来进行后续的预测。在对大型数据进行训练时，若要增强训练强度和准确率可以通过提升迭代次数来实现。本设计由于数据量处于低数量级仅使用默认参数，不对迭代次数作提升操作。&lt;/p&gt;
&lt;p&gt;训练过程中，LightGBM遵循预设参数构建梯度提升树，并通过迭代机制不断精化模型性能。在每一次迭代中，模型降低训练数据上的损失函数值，以逐步提高预测精度，确保模型能够更精准地捕捉数据的内在规律。&lt;/p&gt;
&lt;p&gt;训练模型的同时，为了验证训练参数是否合理，创建训练和验证数据集对象对模型进行评估，本设计使用均方误差作为损失函数。在训练时每过10次打印一次训练信息，如果没有改进就提前停止训练，重新设置参数再训练。直至损失值趋于平稳。可以通过缺陷检测多次调整参数训练后可以得到一个相对最小的损失值&amp;lt;sup&amp;gt;[16]&amp;lt;/sup&amp;gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_15.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;从输出结果可以看到在迭代过程中，没有遇到无法改进的情况，最后得出了一个经度的最佳损失值。根据在验证集上得出的损失值变换，可以得到经纬度训练模型的损失值变换散点图。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src=&quot;./image/250105_16.png&quot; alt=&quot;&quot; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src=&quot;./image/250105_17.png&quot; alt=&quot;&quot; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;(a) 经度loss值变化&lt;/td&gt;
&lt;td&gt;(b) 纬度loss值变换&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;模型评估&lt;/h2&gt;
&lt;p&gt;为了衡量模型的预测能力，本设计使用MAE、MES、RMSE三个指标作为衡量模型预测能力的指标。 MAE是误差的绝对值的平均值，MAE对异常值不敏感，但它不能反映预测误差的分布情况。&lt;/p&gt;
&lt;p&gt;MSE（均方误差）是误差平方和的平均值，MSE对异常值敏感（因为当异常值与正常值差距较大时，误差会大于1，取平方值会进一步增大数值），但它们能够反映预测误差的分布情况。&lt;/p&gt;
&lt;p&gt;RMSE（均方根误差）是MSE的平方根，RMSE对异常值敏感，但它们能够反映预测误差的分布情况。&lt;/p&gt;
&lt;p&gt;在本设计中，添加评估指标代码到模型训练的之后。在训练完成之后输出评估指标。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_18.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_20.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;从图得出，MSE为预测值与真实值之差的平方的平均值，鉴于MSE数值极低（逼近1e-6），可以确信两个模型的预测误差均处于极低水平。从MSE的评估视角出发，经度模型的误差表现略优于纬度模型，但两者间的差异并不显著。RMSE是MSE的算术平方根，相较于MSE，RMSE的单位与原始数据保持一致。从RMSE的数值来看，两个模型的误差均保持在较低水平，且经度模型的误差表现略胜一筹。MAE是预测值与真实值之差的绝对值的算术平均值。从MAE的评估结果来看，两个模型的误差均极低，且纬度模型的误差略低于经度模型。&lt;/p&gt;
&lt;p&gt;综合上述分析，两个模型均展现出卓越的预测性能，其预测误差均保持在极低水平，表明模型具有较高的稳定性和准确性，可以进行预测。&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;漂流轨迹预测实现&lt;/strong&gt;&lt;/h1&gt;
&lt;h2&gt;模型预测&lt;/h2&gt;
&lt;h3&gt;LightGBM预测模型&lt;/h3&gt;
&lt;p&gt;在对模型预测之前，考虑到一般位于狭窄河道、小岛周围或者靠近海岸的投放点，其轨迹一般符合“原地打转”模式，这些区域可能基于地理特征、环境因素或其他相关因素被确定为不动点范围。因此需要对测试点进行分类，减少在不动点身上的无用功。&lt;/p&gt;
&lt;p&gt;首先，检查是否处于DEBUG模式。如果是，则仅选择数据集中id为211423的记录。减少数据处理量，以便更快地运行代码并查看结果。反之则重置筛选后数据的索引，以确保索引是连续的整数。将测试数据集中的date和time列合并为一个新的列。允许后续代码以日期时间格式处理这些数据。初始化测试数据集中的in_fix_area列，将其值全部设置为0。这个列用于标记测试数据集中的点是否位于预定义的不动点区域内。遍历fix_areas列表对于每个不动点区域，使用apply方法和lambda函数来调用in_area函数，这个函数的返回值被用来更新in_fix_area列的值。从测试数据集中筛选出in_fix_area列值为1的记录。提取这些记录的id列，并将其转换为列表形式。&lt;/p&gt;
&lt;h3&gt;模型预测&lt;/h3&gt;
&lt;p&gt;对于改造之后的训练集可以分为两大类别即动点和不动点，如果预测点是不动点，则直接讲初始点作为后续所有的预测，反之则每隔30分钟预测一次位置，并使用新的位置重新找到对应的风速与流速，共循环95次之后得到最终的结果。循环95次的含义是48小时内有96个以30分钟划分的时间点。去除初始状态后还应预测95个时间点。&lt;/p&gt;
&lt;p&gt;使用查询到的风速和流速数据作为特征，使用训练的经纬度模型预测经度和纬度的偏移量。根据预测的偏移量更新当前点的经纬度。对时间点进行更新，并将格式化为日期和时间字符串形式。每30分钟，将当前点的信息存储到一个字典中，并添加到预测列表中。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_21.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;具体的做法是初始化一个预测列表，用于存储后续生成的预测数据。遍历测试数据集中每一个测试点。提取每个点的ID、经度、纬度、日期、时间等信息，并将这些信息存储在一个字典中，然后添加到预测列表中。检查当前点的id是否在不动点ID列表中。如果是不动点，每隔1800秒生成一个新的时间点，并复制当前点的经纬度信息。如果当前点不是不动点，则进行位置预测。每隔diff_time分钟，通过定义的函数查询当前时间和位置下的风速和流速数据。总计对16个id进行了预测，本设计中由于算力限制，平均每3分钟完成一次预测，可以通过增加算力来提升预测效率。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_22.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;结果与分析&lt;/h2&gt;
&lt;h3&gt;预测结果&lt;/h3&gt;
&lt;p&gt;通过模型预测之后的预测结果存储在rows_list列表之中，但其中包含多列预测时的暂存数据，为方便调用轨迹显示函数以及对预测结果进行保存，本设计直接使用pandas库的to_csv方法将结果存储到csv文件中。相应的通过修改存储函数可以将结果存储到MySQL、Hadoop等存储平台。本质上大同小异，不再赘述。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_23.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;可视化及准确率&lt;/h3&gt;
&lt;p&gt;预测之后的轨迹路线从数值上很难看出变化趋势和大小，但对经纬度而言的很小的变化并不能等同于映射到实际应用里的距离。因此首先对轨迹进行可视化操作。调用之前定义的可视化轨迹函数，本项目为了展示原始轨迹和预测轨迹的对照传入了两个数据框变量，也可仅传入预测数据绘制轨迹。预测后的部分预测对照轨迹如图所示。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src=&quot;./image/250105_24.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src=&quot;./image/250105_25.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;仿真人体id: 872356&lt;/td&gt;
&lt;td&gt;仿真人体id:481464&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;根据同样的逻辑，使用经纬度差值映射出的以米为单位的距离，作为预测偏差。使用geodistance函数，根据经纬度，计算出同一时间刻度中预测轨迹与原始轨迹的距离，得到预测偏差。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_26.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;将时间、原始轨迹、预测轨迹、预测偏差等数据项，合并到同一个数据框里。分别统计出每一个id的偏移最值和平均值得出预测偏差绘制折线图。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_27.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;图中上三角图案为最大偏移量，下三角图案为最小偏移量，圆点表示平均偏移量。从图中可以看到预测数据的偏差阈值在0至1.2千米之间。除去id为481464判定为不动点之外，其余的测试数据的平均偏差距离大约为0.6千米。&lt;/p&gt;
&lt;p&gt;再将所有的仿真人体的预测偏差综合到一起，绘制直方图。用于评测本设计在各个精度内的准确率。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/250105_28.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;图中，横坐标表示预测偏差的大小，箱宽度为100米。纵坐标表示频数，显然500米是出现频数最高的距离范围。由各自的频数除以预测总条数得出本设计在各个距离范围内的准确率。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;距离范围（米）&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;准确率&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0-500&lt;/td&gt;
&lt;td&gt;33.92%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;700&lt;/td&gt;
&lt;td&gt;72.85%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;900&lt;/td&gt;
&lt;td&gt;88.87%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt;95.38%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;从表得出，本设计在千米范围内的准确率为95.38%，但随着距离范围的不断缩小，准确率也随之缩减。特别是从700米至500米的区间范围内，准确率骤减。这是因为从整个海洋领域来看，风速和流速是导致漂流轨迹变化的两大因素，但海底震动、对流风、海洋深度和生物干扰等因素也会导致预测轨迹发生偏移。因此在只考虑两种环境因素的情况下，小距离范围内的准确率不高是正常的。&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;总结与展望&lt;/strong&gt;&lt;/h1&gt;
&lt;h2&gt;结论&lt;/h2&gt;
&lt;p&gt;本设计以仿真人体模型为对象，通过对辅助数据的相应训练，预测出了16个仿真人体在48小时之内每隔30分钟的轨迹变化，达到了千米范围内较高的准确率。首先，研究漂流轨迹的影响因素进行相关性分析。其次，对辅助数据使用线性插值得到更为接近风速流速数据。第三，采用LightGBM模型进行漂流轨迹预测分析，设计建模过程以及参数优化。最后，将测试数据与真实数据集进行准确率验证，转化经纬度距离并对其可视化展示。&lt;/p&gt;
&lt;p&gt;综上，使用LightGBM进行漂流轨迹预测在多数情况下是有效的，但预测精度仍有提升空间。当前选择的特征对预测结果有一定影响，但可能不是最优的特征组合。选用30分钟作为预测间隔可能不是最适合实际应用需求的，需要根据具体场景进行调整。&lt;/p&gt;
&lt;h2&gt;展望&lt;/h2&gt;
&lt;p&gt;从本设计中的局限性可以看出，漂流轨迹的预测对风速流速等辅助数据的精度依赖性很高，精度越高、划分插值范围越小，得到的预测轨迹准确率越高。而且对不动点的处理依赖于数据传入，没有进行相应的算法研究。在后续的改进中可以补全不动点的范围，或是改进算法识别不动点，将会显著的提高预测准确率和处理耗时。且本设计为了缩减预测时间，选取的预测间隔为30分钟，要根据实际应用需求，调整预测间隔时间。&lt;/p&gt;
&lt;p&gt;针对漂流轨迹数据的特点，可以使用数据增强技术，如数据插值、时间序列数据的平滑处理等，以促使模型更快适应新环境。除了LightGBM外，还可以使用其他机器学习或深度学习模型进行预测，如随机森林、梯度提升机、长短期记忆网络等，并比较不同模型的性能。若想要获得更好的预测效果，也可以将多个模型的预测结果进行融合。&lt;/p&gt;
&lt;p&gt;通过这一系列的努力，期望能够为海洋活动的安全、高效运行提供有力的技术支撑。&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;参考文献&lt;/strong&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;茅晨昊,潘晨,尹波,等.基于高斯过程回归的船舶航行轨迹预测[J].科技创新与应用,2017(31):28-29+31.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;夏山宏,徐纯洁,罗修波,等.海上落水人员漂移轨迹可视化预测研究[J].航海,2022(04):38-41.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;史永胜,翟欣然,栾飞,等.基于特征选择的LightGBM算法预测钠离子电池剩余寿命[J].陕西科技大学学报,2024,42(02):174-181.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;陈勤达,陈小惠.一种无创预测血压的改进LightGBM学习方法[J].软件导刊,2024,23(03):41-46.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;高治鑫,包腾飞,李扬涛,等.基于贝叶斯优化LightGBM的大坝变形预测模型[J].长江科学院院报,2021,38(07):46-50+57.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RW N,M C,AT C,et al.Using an ocean model to predict likely drift tracks of sea turtle carcasses in the north central Gulf of Mexico[J].&lt;em&gt;Endangered Species Research&lt;/em&gt;,2013,21(3):191-203.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Borkowski P .The Ship Movement Trajectory Prediction Algorithm Using Navigational Data Fusion[J].&lt;em&gt;Sensors&lt;/em&gt;,2017,17(6):1432.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Chhillar I ,Singh A .A feature engineering-based machine learning technique to detect and classify lung and colon cancer from histopathological images.[J].&lt;em&gt;Medical biological engineering computing&lt;/em&gt;,2024,62(3):913-924.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sait W R A ,Nagaraj R .An Enhanced LightGBM-Based Breast Cancer Detection Technique Using Mammography Images[J].&lt;em&gt;Diagnostics&lt;/em&gt;,2024,14(2):&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Xie B ,Li F ,Li H , et al.Enhanced Internet of Things Security Situation Assessment Model with Feature Optimization and Improved SSA-LightGBM[J].&lt;em&gt;Mathematics&lt;/em&gt;,2023,11(16):&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;李星彤,龚伟,李帝阅.基于Boosting算法的转炉终点预测模型[J/OL].材料与冶金学报:1-17[2024-04-14].&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;林星,梁诗雪,冯斯奕.基于集成学习的蔗渣灰混凝土抗压强度预测模型[J/OL].浙江理工大学学报(自然科学版):1-12[2024-04-13].&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;胡云飞,赵前进.保斜渐近线和垂直渐近线的连分式插值[J].洛阳师范学院学报,2023,42(08):1-8.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;叶林,冯标,钟德华,等.功率曲线特性测试仪有效风速补偿算法的研究[J].风能,2016(08):58-61.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;杨茂,翟冠强,李大勇,等.基于风速升降特性及支持向量机理论的异常数据重构算法[J].电力系统保护与控制,2018,46(16):31-37.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;杨萌,张爱军,潘文松.基于改进YOLOv5算法的纸袋缺陷检测[J].组合机床与自动化加工技术,2024(03):105-108+113.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;&lt;strong&gt;致 谢&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;经过了几个月的努力，毕业设计即将完成，回想设计全程，原本以为在这个过程中会轻松的我，却没想到过程是如此的艰辛，不过正要借着这个经历，我要对在大学期间所有帮助过我的人表示非常的感谢。&lt;/p&gt;
&lt;p&gt;设计期间，指导老师侯星晨认真负责的工作态度、严谨的风格，使我深受启发，今后，无论是做什么事情，都应该保持乐观向上的态度和永不放弃的决心；同时，同学们之间的相互探讨，让我明白了团队以及合作的重要性。再次向所有在我设计过程中给予过我帮助与关怀的朋友表示深深的感谢！&lt;/p&gt;
&lt;p&gt;毕业设计的结束意味着我在郑州财经学院的学习生活即将画上句号!回首往事，感慨良多，心潮难平。但无论如何这些实实在在的经历，是我人生中弥足珍贵的记忆。在此，要特别感谢求学过程给予我无限支持和帮助的老师、朋友和亲人们。感谢我的指导老师，从日常的学习，论文题目的确定到论文的撰写，侯星晨老师都给予我悉心的关怀和耐心的指导，给我鼓励和动力，也正是在他的指导和督促下论文才得以如期完成。&lt;/p&gt;
&lt;p&gt;感谢我们一起在学校努力的同学，我们彼此关心、互相支持和帮助，留下了许多难忘的回忆。希望可以以本文向你们汇报，以感谢你们对我的关怀与帮助，感谢一直以来对我的支持与鼓励。你们永远是我的精神支柱和继续前进的动力。&lt;/p&gt;
&lt;p&gt;所有帮助和关心过我的人们，尽管与你们为我付出的一切相比，所有的语言都显得苍白无力，我仍要真诚地说声：谢谢你们!祝愿所有老师和同学工作顺利、事业有成！祝愿母校明天更美好!&lt;/p&gt;
</content:encoded></item><item><title>Sofa</title><link>https://sues.fun/posts/250104_sofa/</link><guid isPermaLink="true">https://sues.fun/posts/250104_sofa/</guid><description>时间转换工具学习笔记</description><pubDate>Sat, 04 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SOFA (Standards of Fundamental Astronomy) 是国际天文学联合会 (IAU) 提供的一套标准天文学工具库，广泛应用于天文时间和坐标系的转换。本技术文档详细介绍SOFA时间转换相关功能，并涵盖Python和C语言的实现方法，同时拓展介绍Python中常用的时间转换库，包括 &lt;code&gt;astropy&lt;/code&gt;、&lt;code&gt;pymsofa&lt;/code&gt;、&lt;code&gt;skyfield&lt;/code&gt; 和 &lt;code&gt;jplephem&lt;/code&gt; 等。&lt;/p&gt;
&lt;h2&gt;一、SOFA时间转换概述&lt;/h2&gt;
&lt;p&gt;SOFA提供了多种时间尺度的转换功能，用于处理地球时间 (TT)、国际原子时 (TAI)、协调世界时 (UTC)、世界时 (UT1)、动态时 (TDB) 等。这些时间尺度在天文学计算中具有不同的定义和用途，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TT (Terrestrial Time)&lt;/strong&gt;: 用于高精度天文观测的理论时间尺度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UTC (Coordinated Universal Time)&lt;/strong&gt;: 与地球自转相近的时间系统，是日常使用的标准时间。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TDB (Barycentric Dynamical Time)&lt;/strong&gt;: 用于太阳系动力学建模。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UT1&lt;/strong&gt;: 基于地球自转角速度定义的时间系统。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SOFA提供了可靠的工具函数，将上述时间尺度之间进行精确转换。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://images.unsplash.com/photo-1610457642191-05328cdf34ff?ixid=M3w4OTk5MTN8MHwxfHNlYXJjaHwxfHxhc3Ryb25vbXklMjB0ZWxlc2NvcGUlMjBuaWdodCUyMHNreSUyMHN0YXJzfGVufDB8fHx8MTc4ODUxMjcwOXww&amp;amp;ixlib=rb-4.1.0&amp;amp;w=600&amp;amp;h=400&amp;amp;fit=crop&amp;amp;q=80&quot; alt=&quot;astronomy telescope night sky stars&quot; /&gt;
&lt;em&gt;Photo by &lt;a href=&quot;https://unsplash.com/@stewi&quot;&gt;Stephan Widua&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;二、C语言中的SOFA时间转换&lt;/h2&gt;
&lt;p&gt;SOFA库的C语言实现需要下载相关的源码包，以下是安装和使用的基本步骤：&lt;/p&gt;
&lt;h3&gt;2.1 安装SOFA C库&lt;/h3&gt;
&lt;p&gt;SOFA 官方源码可从 &lt;a href=&quot;https://www.iausofa.org&quot;&gt;IAU SOFA 官网&lt;/a&gt; 下载。&lt;/p&gt;
&lt;p&gt;下载源码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://static1.squarespace.com/static/.../sofa_c-20231011.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;解压：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -xzf sofa_c-20231011.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进入源码目录并编译：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd sofa/20231011/c/src
make
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编译完成后会生成静态库 &lt;code&gt;libsofa_c.a&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;为了在系统中全局使用，可将头文件和库安装到系统路径：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo cp sofa.h sofam.h /usr/local/include/
sudo cp libsofa_c.a /usr/local/lib/
sudo ldconfig
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装完成后，任意目录都可以直接编译使用 SOFA：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcc program.c -lsofa_c -lm
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.2 常用时间转换函数&lt;/h3&gt;
&lt;p&gt;以下列出一些常用的SOFA时间转换函数：&lt;/p&gt;
&lt;h4&gt;2.2.1 UTC到TT&lt;/h4&gt;
&lt;p&gt;UTC → TAI → TT，需要两步转换：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &quot;sofa.h&quot;

int main() {
    int iy, im, id, ihour, imin;
    double sec;
    double tai1, tai2, tt1, tt2;
    int status;

    iy = 2025;
    im = 1;
    id = 7;
    ihour = 12;
    imin = 0;
    sec = 0.0;

    status = iauUtctai(iy, im, id, ihour, imin, sec, &amp;amp;tai1, &amp;amp;tai2);
    if (status) return status;

    status = iauTaitt(tai1, tai2, &amp;amp;tt1, &amp;amp;tt2);
    if (status) return status;

    printf(&quot;TT: %.9f %.9f\n&quot;, tt1, tt2);

    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2.2.2 UTC到UT1&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &quot;sofa.h&quot;

int main() {
    int iy, im, id, ihour, imin;
    double sec;
    double dut1;
    double ut11, ut12;
    int status;

    iy = 2025;
    im = 1;
    id = 7;
    ihour = 12;
    imin = 0;
    sec = 0.0;

    dut1 = 0.334;

    status = iauUtcut1(iy, im, id, ihour, imin, sec, dut1, &amp;amp;ut11, &amp;amp;ut12);
    if (status) return status;

    printf(&quot;UT1: %.9f %.9f\n&quot;, ut11, ut12);

    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.3 关键点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;SOFA 使用两部分儒略日表示时间，例如 (2400000.5, x)。&lt;/li&gt;
&lt;li&gt;每个函数都有返回状态码，应检查错误状态。&lt;/li&gt;
&lt;li&gt;UT1 转换需要提供 ΔUT1 参数。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;三、Python中的时间转换工具&lt;/h2&gt;
&lt;p&gt;Python中有多个库支持时间转换，以下分别介绍 &lt;code&gt;astropy&lt;/code&gt;、&lt;code&gt;pymsofa&lt;/code&gt;、&lt;code&gt;skyfield&lt;/code&gt; 和 &lt;code&gt;jplephem&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;3.1 Astropy&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;astropy&lt;/code&gt; 是一个广泛使用的天文库，内置时间模块支持多种时间尺度。&lt;/p&gt;
&lt;h4&gt;安装&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;pip install astropy
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;时间转换示例&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;from astropy.time import Time

# 创建UTC时间
utc_time = Time(&apos;2025-01-07T12:00:00&apos;, scale=&apos;utc&apos;)

# 转换为TT
tt_time = utc_time.tt
print(f&quot;TT: {tt_time}&quot;)

# 转换为TDB
tdb_time = utc_time.tdb
print(f&quot;TDB: {tdb_time}&quot;)

# 转换为UT1 (需要DUT1修正数据)
dut1 = 0.334
utc_time.delta_ut1_utc = dut1
ut1_time = utc_time.ut1
print(f&quot;UT1: {ut1_time}&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;关键点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;astropy&lt;/code&gt; 支持以字符串和Julian Date格式表示时间。&lt;/li&gt;
&lt;li&gt;自动处理时间系统间的差异，如闰秒和DUT1修正。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3.2 PyMSOFA&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;pymsofa&lt;/code&gt; 是SOFA库的Python绑定，直接调用SOFA函数。&lt;/p&gt;
&lt;h4&gt;安装&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;pip install pymsofa
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;时间转换示例&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;from pymsofa import sofa

# UTC to TT
utc1, utc2 = 2455197.5, 0.5  # Julian Date表示UTC
status, tai1, tai2 = sofa.utctai(utc1, utc2)
status, tt1, tt2 = sofa.taitt(tai1, tai2)
print(f&quot;TT: {tt1 + tt2}&quot;)

# UTC to UT1
dut1 = 0.334  # DUT1修正
status, ut11, ut12 = sofa.utcut1(utc1, utc2, dut1)
print(f&quot;UT1: {ut11 + ut12}&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;关键点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pymsofa&lt;/code&gt; 保留了SOFA的C语言接口，适合需要高精度计算的用户。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3.3 Skyfield&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;skyfield&lt;/code&gt; 是一个高层次的天文计算库，支持时间和坐标转换。&lt;/p&gt;
&lt;h4&gt;安装&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;pip install skyfield
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;时间转换示例&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;from skyfield.api import load

ts = load.timescale()
utc_time = ts.utc(2025, 1, 7, 12, 0, 0)

# 打印不同时间尺度
print(&quot;UTC: &quot;, utc_time.utc_iso())
print(&quot;TT: &quot;, utc_time.tt)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;关键点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;skyfield&lt;/code&gt; 自动计算TT时间，无需手动处理时间系统差异。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3.4 Jplephem&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;jplephem&lt;/code&gt; 提供高精度的天文历表时间计算。&lt;/p&gt;
&lt;h4&gt;安装&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;pip install jplephem
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;示例&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;jplephem&lt;/code&gt; 通常与 Skyfield 配合使用，用于读取 JPL 行星历表（DE430 / DE440 等），实现高精度太阳系动力学计算。&lt;/p&gt;
&lt;h2&gt;四、总结&lt;/h2&gt;
&lt;p&gt;SOFA及其衍生库为时间转换提供了高精度和高效率的解决方案。C语言版本适用于高性能计算环境，而Python工具（尤其是 &lt;code&gt;astropy&lt;/code&gt;）更适合快速开发与科研原型验证。根据具体需求选择合适的工具，可以显著提升天文数据处理效率。&lt;/p&gt;
</content:encoded></item><item><title>ANCOJ</title><link>https://sues.fun/posts/241121_ancoj/</link><guid isPermaLink="true">https://sues.fun/posts/241121_ancoj/</guid><description>A New Catalogue of Observations of Jupiter🌌</description><pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h1&gt;名词解释&lt;/h1&gt;
&lt;h2&gt;岁差&lt;/h2&gt;
&lt;p&gt;由于日月行星引力的共同作用,地球自转轴在空间的方向发生周期性变化。岁差的变化缓慢且相对规则,可通过岁差模型(如IAU推荐的岁差模型)实现精确计算和修正。&lt;/p&gt;
&lt;h2&gt;章动&lt;/h2&gt;
&lt;p&gt;在行星或陀螺仪的自转运动中,轴在进动中的一种轻微不规则运动,使自转轴在方向的改变中出现如“点头”般的摇晃现象。行星的章动来自于力,并使得岁差的速度不是常数,而会随着时间改变。通常采用IAU推荐的章动理论模型(如IAU2000章动模型),实现章动的改正。如下图所示,绿色为地球自转轴,蓝色表示岁差影响,红色表示岁差与章动影响。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_01.png&quot; alt=&quot;岁差章动&quot; /&gt;&lt;/p&gt;
&lt;p&gt;根据是否考虑岁差与章动改正分成以下三种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;不考虑岁差和章动影响：国际天球坐标系&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;仅考虑岁差影响：瞬时平天球坐标系（去除了章动干扰）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;考虑岁差和章动影响：瞬时真天球坐标系&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;只要有岁差和章动改正数，就能实现上述三种坐标系统的相互转换&lt;/p&gt;
&lt;p&gt;表 坐标系统的相互转换&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;参考系名称&lt;/th&gt;
&lt;th&gt;是否考虑岁差&lt;/th&gt;
&lt;th&gt;是否考虑章动&lt;/th&gt;
&lt;th&gt;Z轴垂直方向&lt;/th&gt;
&lt;th&gt;X轴指向&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;真赤道真春分点参考系&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;td&gt;真赤道（瞬时赤道）&lt;/td&gt;
&lt;td&gt;真春分点（瞬时）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;平赤道平春分点参考系&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;td&gt;平赤道&lt;/td&gt;
&lt;td&gt;平春分点&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;国际天球参考系(ICRS)&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;td&gt;J2000.0平赤道&lt;/td&gt;
&lt;td&gt;J2000.0平春分点&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;光行差&lt;/h2&gt;
&lt;p&gt;光行差是由于观测者的运动速度与光速合成效应引起的恒星视位置偏移。地球绕太阳公转、以及地球自转,都使得从地球上观测到的恒星方向与恒星实际所在方向之间存在微小夹角。
根据经典力学和相对论中的速度合成原理,运动的观测者看到的光线传播方向会因自身速度而发生改变。该效应与天体本身无关,只与地球运动有关。年度光行差最大值约为20.5角秒,发生在天体与地球公转速度方向垂直时。日周光行差最大约为0.3角秒,影响更小,常用于高精度地面天文台建模。当从天体视位置转换为平均位置时(或构造星表时),需要减去光行差;若从平均位置计算可见位置,则要加上光行差。光行差模型广泛用于从视方向反推真实方向。&lt;/p&gt;
&lt;p&gt;天狼星的平均位置在天球上的变化量在一年内会受到光行差影响最大达20角秒,对于高精度星表(如Gaia)必须考虑。&lt;/p&gt;
&lt;h2&gt;光行差E项&lt;/h2&gt;
&lt;p&gt;E项是FK4系统在星表编制时人为引入的静态修正项,用于近似补偿地球绕太阳椭圆轨道运动产生的光行差偏移。这一项在天体位置中始终存在,不随观测时间变化。由于太阳绕地黄道轨道为椭圆形,FK4系统在恒星位置中加入了依赖黄经的周期性项,以减少建表误差。但在FK5或ICRS系统中该项被剔除,因其不再符合现代动态模型。该项的最大偏移约为0.3角秒,在全天球呈现周期性变化,方向与黄道位置有关。从FK4→FK5的坐标转换时必须剔除该项,否则会引入系统性位置误差。SOFA中的iauFk45z和iauFk425函数会自动处理E项剔除。&lt;/p&gt;
&lt;p&gt;一颗恒星位于黄道上的某一点,若不剔除E项,其位置与FK5坐标系下的参考结果会偏移最多达0.3角秒,在VLBI或Gaia数据比对中产生不可接受的误差。&lt;/p&gt;
&lt;h2&gt;自行&lt;/h2&gt;
&lt;p&gt;自行是恒星在天球上由于其自身空间速度所引起的位置变化,表现为赤经与赤纬的逐年微小变化,通常以毫角秒(mas/yr)表示。恒星与太阳一样在银河系中运动,但由于距离遥远,其运动在天球中表现为缓慢的线性漂移。自行不包括地球公转或恒星视差引起的视位置变化。典型恒星自行在1~100mas/yr范围,最著名的Barnard星每年约10.3角秒,是当前记录中最大的恒星自行。进行不同历元之间的位置传播(如从B1950转换至1980或J2000)时,必须加上历元差乘以自行项。若自行项不精确,将导致恒星位置系统性漂移。&lt;/p&gt;
&lt;p&gt;若某恒星在1950年赤经为100度,自行为50mas/yr,至2000年位置将变为100.000694度。对于高精度恒星导航任务,必须使用此项。&lt;/p&gt;
&lt;h2&gt;分点差&lt;/h2&gt;
&lt;p&gt;分点差是由于FK4与FK5两个坐标系统中分点(即赤经起始点)的定义不一致,导致恒星赤经坐标在两个系统中存在常量偏移,约为0.085角秒。FK4使用Newcomb的岁差常数,而FK5使用Lieske等人的改进模型,两者在春分点位置的定义存在系统差异。该差异在赤经方向上表现为一个常量修正。赤经偏移约为+0.085角秒,具体值随历元略有不同。赤纬方向影响非常小,通常可忽略。在进行FK4→FK5转换时必须应用该修正,SOFA提供的转换函数中已包含分点差校正。&lt;/p&gt;
&lt;p&gt;一颗恒星在FK4系统中赤经为120.000000度,若未修正分点差,其转换后FK5赤经将比真实值小约0.085角秒,相当于4.1e-5度的系统性误差。&lt;/p&gt;
&lt;h2&gt;周年视差&lt;/h2&gt;
&lt;p&gt;周年视差是地球在绕太阳公转轨道上从不同位置观测恒星时,恒星位置在天球上的视在变化。该角度变化称为视差,反映了恒星距离。视差是一个几何三角测量过程。距离越近的恒星,因地球位置变化带来的背景星方向差越大;距离越远,角度越小。单位是角秒,1角秒视差对应1秒差距(pc)距离。最亮的近距离恒星如比邻星视差为0.77角秒,大多数恒星在0.01角秒~0.1角秒之间,银河系中心的恒星视差小于0.001角秒。高精度恒星坐标转换或构造星历时,需要视差配合地球轨道模型计算天体在不同时间下的真实方向。未考虑视差将导致近距离天体位置显著偏移。&lt;/p&gt;
&lt;p&gt;Gaia星表中,一颗10pc的恒星具有0.1角秒的周年视差,若忽略该效应,其视位置将在天球上偏移最多0.1角秒,对精度要求为1mas的任务来说误差高达100倍。&lt;/p&gt;
&lt;h1&gt;背景意义&lt;/h1&gt;
&lt;h2&gt;研究背景&lt;/h2&gt;
&lt;p&gt;从上世纪80年代以来，随着天文观测技术的不断进步和卫星探测任务的增多，系内行星的卫星被观测的数量急剧增加。土星已确认274颗轨道卫星，木星95颗卫星，位居太阳系第二。并且木星作为太阳系中最大的行星，其卫星系统不仅涵盖伽利略卫星（木卫一至木卫四），还包括众多小型不规则卫星，这些卫星的轨道特性和物理属性十分复杂。然而，现有的木卫观测星表普遍存在时间系统不统一、数据格式参差不齐等问题，导致在构建卫星运动学模型和进行长期轨道预测时需要额外进行大量的数据预处理和时间转换工作。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;平均半径(km)&lt;/th&gt;
&lt;th&gt;质量($\times 10^{22}$kg)&lt;/th&gt;
&lt;th&gt;半长轴(km)&lt;/th&gt;
&lt;th&gt;公转周期(地球日)&lt;/th&gt;
&lt;th&gt;轨道倾角($^\circ$)&lt;/th&gt;
&lt;th&gt;轨道离心率&lt;/th&gt;
&lt;th&gt;星等&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Io&lt;/td&gt;
&lt;td&gt;1,821.30&lt;/td&gt;
&lt;td&gt;8.93&lt;/td&gt;
&lt;td&gt;421,700&lt;/td&gt;
&lt;td&gt;1.769&lt;/td&gt;
&lt;td&gt;0.04&lt;/td&gt;
&lt;td&gt;0.0041&lt;/td&gt;
&lt;td&gt;-1.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Europa&lt;/td&gt;
&lt;td&gt;1,560.80&lt;/td&gt;
&lt;td&gt;4.78&lt;/td&gt;
&lt;td&gt;671,034&lt;/td&gt;
&lt;td&gt;3.551&lt;/td&gt;
&lt;td&gt;0.47&lt;/td&gt;
&lt;td&gt;0.0094&lt;/td&gt;
&lt;td&gt;-1.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ganymede&lt;/td&gt;
&lt;td&gt;2,634.10&lt;/td&gt;
&lt;td&gt;14.8&lt;/td&gt;
&lt;td&gt;1,070,412&lt;/td&gt;
&lt;td&gt;7.155&lt;/td&gt;
&lt;td&gt;0.195&lt;/td&gt;
&lt;td&gt;0.0013&lt;/td&gt;
&lt;td&gt;-2.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Callisto&lt;/td&gt;
&lt;td&gt;2,410.30&lt;/td&gt;
&lt;td&gt;10.76&lt;/td&gt;
&lt;td&gt;1,882,700&lt;/td&gt;
&lt;td&gt;16.689&lt;/td&gt;
&lt;td&gt;0.281&lt;/td&gt;
&lt;td&gt;0.0074&lt;/td&gt;
&lt;td&gt;-1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amalthea&lt;/td&gt;
&lt;td&gt;83.5&lt;/td&gt;
&lt;td&gt;0.208&lt;/td&gt;
&lt;td&gt;181,366&lt;/td&gt;
&lt;td&gt;0.498&lt;/td&gt;
&lt;td&gt;0.375&lt;/td&gt;
&lt;td&gt;0.0032&lt;/td&gt;
&lt;td&gt;14.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Himalia&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td&gt;0.66&lt;/td&gt;
&lt;td&gt;11,480,000&lt;/td&gt;
&lt;td&gt;250.566&lt;/td&gt;
&lt;td&gt;27.52&lt;/td&gt;
&lt;td&gt;0.157&lt;/td&gt;
&lt;td&gt;14.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thebe&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;0.43&lt;/td&gt;
&lt;td&gt;221,889&lt;/td&gt;
&lt;td&gt;0.674&lt;/td&gt;
&lt;td&gt;1.08&lt;/td&gt;
&lt;td&gt;0.012&lt;/td&gt;
&lt;td&gt;16.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_02.png&quot; alt=&quot;太阳系内行星各卫星行星数量&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;研究意义&lt;/h2&gt;
&lt;p&gt;图中展示了伽利略卫星在不同年份模型下1903年到2043年的偏差情况，清晰表明：随着观测数据的不断减少，模型与实际情况的偏差会逐步增大。这是由于历表模型是依据观测数据来构建的，观测数据越多构建出的模型越接近实际。本研究旨在解决现有星表中存在的数据混乱问题，对历年木卫观测数据进行标准化处理，构建了一份更新、更准确的木星卫星观测星表。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_03.png&quot; alt=&quot;伽利略卫星在不同年份模型下1903年到2043年的偏差情况&quot; /&gt;&lt;/p&gt;
&lt;p&gt;完成这一系列数据标准化工作后，后续研究者无需再重复进行繁琐的时间转换与数据整合工作，而可以直接利用该标准化星表结合建立运动学模型，可以开展更深入的轨道动力学分析、捕获机制研究以及演化历史探讨，从而大幅提高研究效率并推动相关基础科学问题的突破。&lt;/p&gt;
&lt;h2&gt;整体框架&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;观测资料的收集&lt;/li&gt;
&lt;li&gt;时间系统&lt;/li&gt;
&lt;li&gt;坐标系统&lt;/li&gt;
&lt;li&gt;星表偏差改正&lt;/li&gt;
&lt;li&gt;绘制观测星表&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_04.png&quot; alt=&quot;观测资料的收集&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在状态建模层面，我们以初始状态量为起点，通过数值积分器对目标进行轨道传播，得到状态量。同时引入动力学模型，计算得到理论观测量C，并与实测观测量O进行比较，形成残差O-C。
利用O-C残差与偏导信息，我们进一步完成对初始状态的修正，并将其反馈回初始状态形成闭环迭代。该过程支持逐步收敛，实现轨道改进与模型精度提升。&lt;/p&gt;
&lt;h1&gt;数据介绍&lt;/h1&gt;
&lt;h2&gt;IMCCE数据&lt;/h2&gt;
&lt;p&gt;观测星表的主要来源是IMCCE网站上记录的各时间段、观测台站以及观测设备所采集的数据，采用「目录+数据+content」三层进行存储。本文的目标是对这些观测记录进行系统化整理、清洗与合并，最终形成一个统一的观测数据表，为后续研究提供高精度数据支持。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_05.png&quot; alt=&quot;IMCCE网站&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;工作流程&lt;/h1&gt;
&lt;h2&gt;数据预处理&lt;/h2&gt;
&lt;h3&gt;文本与格式处理&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;首先，将每条观测记录中涉及的关键信息合并收集，并根据字段含义进行整理和规范化。&lt;/li&gt;
&lt;li&gt;在从文本文件转换为CSV文件的过程中，部分观测数据存在格式缺失或不一致的问题，需要进行必要的清洗与修正。[附表1](##附表1 IMCCE数据错误信息及修正)列出了需要修正的文件及其主要错误信息、修正手段。&lt;/li&gt;
&lt;li&gt;在所有错误修正完成后，给所有CSV文件添加了统一的表头（header)，方便后续自动合并和批量处理。&lt;/li&gt;
&lt;li&gt;为防止数据精度丢失，对数值型数据加上前后括号强制转换为文本。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;多表合并与数据整合&lt;/h3&gt;
&lt;p&gt;通过前期整理，总计整理了IMCCE网站上57258条观测数据。为了便于检索与特定数据定位，对每条记录新增一列唯一ID（由「文件名+行号」构成)。编写脚本进行多表合并后，得到一个包含数万条观测记录的整合表格，覆盖了若干颗木星卫星及其相关观测。该整合表格为后续数据分析奠定了基础。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_06.png&quot; alt=&quot;合并记录&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;时间系统&lt;/h2&gt;
&lt;p&gt;在天文观测和数据处理中，不同的时间尺度可能同时存在。本文将所有观测记录统一转换为TT（Terrestrial Time）时间尺度。之所以选择TT，是因为构建新的观测星表时，应尽可能采用时间尺度均匀连续的基准，以确保星表在时间轴上的一致性。同时，TT便于与其他常见时间尺度进行相互转换，也适用于后续的历表与动力学计算。本文使用SOFA工具进行时间处理。&lt;/p&gt;
&lt;h3&gt;时间尺度概述&lt;/h3&gt;
&lt;p&gt;天文观测中常用的时间尺度大致可分为以下几类，表格展示了各时间尺度的定义与关键特点：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;时间尺度&lt;/th&gt;
&lt;th&gt;定义&lt;/th&gt;
&lt;th&gt;关键特点&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GMT&lt;/td&gt;
&lt;td&gt;以格林尼治皇家天文台为基准的平均太阳时&lt;/td&gt;
&lt;td&gt;基于地球自转，反映太阳在天球上的位置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UT1&lt;/td&gt;
&lt;td&gt;反映地球实际自转速度，是修正极移（UT0）后的时间&lt;/td&gt;
&lt;td&gt;直接用于天文观测，修正了地球自转的不规则性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TAI&lt;/td&gt;
&lt;td&gt;基于全球约200台原子钟的加权平均，采用SI秒&lt;/td&gt;
&lt;td&gt;与UT1差约为0，从1958年1月1日起&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;与TAI同步，通过闰秒调整与UT1的差值&lt;/td&gt;
&lt;td&gt;保持与UT1的差值不超过0.9秒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TT&lt;/td&gt;
&lt;td&gt;定义为TAI+32.184秒，用于历表计算&lt;/td&gt;
&lt;td&gt;保持与SI秒一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCB&lt;/td&gt;
&lt;td&gt;零引力场中质心系坐标静止标准钟的原时秒&lt;/td&gt;
&lt;td&gt;用于天文学和物理学&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TDB&lt;/td&gt;
&lt;td&gt;在TT基础上加上相对论修正，时间原点移至太阳系质心&lt;/td&gt;
&lt;td&gt;用于天体力学和宇宙学研究&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ol&gt;
&lt;li&gt;GMT起源于19世纪末，以格林尼治皇家天文台为基准，基于地球自转，反映太阳相对于格林尼治子午线的视运动。&lt;/li&gt;
&lt;li&gt;为了获得更高精度的时间尺度，提出了UT1，它修正了地球自转的非均匀性，能更真实地反映地球自转速度。&lt;/li&gt;
&lt;li&gt;随后，TAI于1958年建立，基于全球约200台原子钟的加权平均，标志着时间测量进入高精度时代。&lt;/li&gt;
&lt;li&gt;为协调全球时间系统，UTC在TAI基础上引入闰秒调整，以保证其与UT1的偏差不超过0.9秒。&lt;/li&gt;
&lt;li&gt;随着天文历法的发展，TT被定义为TAI+32.184秒，用于天文历书和动力学计算。&lt;/li&gt;
&lt;li&gt;TCB的引入用于在零引力场的质心系中定义静止标准钟，作为更严格的物理时间。&lt;/li&gt;
&lt;li&gt;TDB在TT的基础上引入相对论修正，时间原点转移至太阳系质心，适用于高精度的天体力学计算。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_07.png&quot; alt=&quot;木卫观测星表时间尺度统计&quot; /&gt;&lt;/p&gt;
&lt;p&gt;下图展示了1950年至2020年期间各主要时间尺度的长期变化趋势，包括TAI、TT、TDB、TCB、UT1、UTC等之间的差异。可以观察到，TAI与TT之间存在恒定差值；UT1相对于原子时间不断漂移；UTC通过“阶梯式”引入闰秒以跟随UT1；TCB/TCG在相对论修正下持续偏离TT。&lt;/p&gt;
&lt;p&gt;构建观测星表应尽量选用均匀连续的时间尺度，以确保时间轴一致性。TT同时具备易于转换和高适用性的优势。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_08.png&quot; alt=&quot;1950年至2020年间不同时间尺度之间的差异&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_09.png&quot; alt=&quot;时间尺度转换示意图&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;记录格式统一&lt;/h3&gt;
&lt;p&gt;在进行具体的时间转换前，需将不同文件中记录的观测时刻统一为一致的“记录格式”。常见记录形式包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Day_detail：year、mon、day with detail，小数部分表示当日的时分秒。&lt;/li&gt;
&lt;li&gt;Full：year、mon、day、hour、min、sec。&lt;/li&gt;
&lt;li&gt;JD/MJD：儒略日或简化儒略日。&lt;/li&gt;
&lt;li&gt;其他地方时或特殊格式，如Cape sidereal time 等。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;通过编写程序将记录格式进行分类，[附表2](##附表2 第四类及特殊记录格式) 汇总了第四类格式。最终将所有格式统一转换为Full或JD两段式格式（利用SOFA的iauDtf2d等函数），以便后续在同一基准下进行处理。&lt;/p&gt;
&lt;h3&gt;UTC→TT&lt;/h3&gt;
&lt;p&gt;UTC转换为TT的基本方法是依照闰秒数据进行处理。但对于1972年的数据存在争议，不同研究者对UT1和UTC的划分节点处理不一。我们对比了Emelyanov、袁烨等人的方法。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;作者&lt;/th&gt;
&lt;th&gt;1972年后&lt;/th&gt;
&lt;th&gt;1972年-1962年&lt;/th&gt;
&lt;th&gt;1962之前&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Emelyanov&lt;/td&gt;
&lt;td&gt;按照闰秒表计算&lt;/td&gt;
&lt;td&gt;按照闰秒表计算&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;袁烨&lt;/td&gt;
&lt;td&gt;按照闰秒表计算&lt;/td&gt;
&lt;td&gt;按照10s计算&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;J.Desmars&lt;/td&gt;
&lt;td&gt;按照闰秒表计算&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;视为UT1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;本文&lt;/td&gt;
&lt;td&gt;按照闰秒表计算&lt;/td&gt;
&lt;td&gt;按照闰秒表计算&lt;/td&gt;
&lt;td&gt;视为UT1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;总结我们的做法如下&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;1962年之后：使用SOFA内置的闰秒表实现精确转换。&lt;/li&gt;
&lt;li&gt;1962年之前（JD=2436934.5）：UTC近似视为UT1，先依据Stephenson和Morrison（1984）中提供的UT1与TT的差值关系进行插值，再查表提高精度。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;UT1→TT&lt;/h3&gt;
&lt;p&gt;UT1转TT的转换依赖于已有的$\Delta T$数据，具体步骤如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;1962年之后：采用IERS发布的“EOP_C04_IAU2000”数据中的UT1–UTC差值，精度达每日，无需插值。&lt;/li&gt;
&lt;li&gt;1956–1962年：使用“EOP_C01_IAU2000”中的UT1–TAI差值，以月为单位，需插值至日。&lt;/li&gt;
&lt;li&gt;1956年之前：使用Stephenson和Morrison（1984）中的$\Delta T$数据，采用三次样条插值细化至日。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Yuanye曾采用NASA外推公式估算$\Delta T$，但通过比较发现，Stephenson和Morrison（1984）的文献数据拟合效果更优。下图展示了NASA模型、文献数据与已发布海卫星表之间的相对误差，采用均方根误差（RMSE）作为评估指标。结果表明文献插值数据与已发布数据更为一致。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_10.png&quot; alt=&quot;相对于海卫星表的误差分析&quot; /&gt;&lt;/p&gt;
&lt;p&gt;总体策略为整合各辅助文件，并将时间间隔统一插值到日级，构建出1800–2023年的$\Delta T$数据。再通过调用各时间尺度对应的$\Delta T$完成对TT的转换。其精度受限于IERS等权威机构发布的数据质量。&lt;/p&gt;
&lt;h3&gt;TDB→TT&lt;/h3&gt;
&lt;p&gt;TDB到TT的转换根据所需精度可选用不同方法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;若精度要求在微秒级，可使用以下简化公式：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$
TDB - TT = 0.001658 \times \sin(g) + 0.000014 \times \sin(2g)　
\
g = 357.53 + 0.9856003 \times (JD_{TT} - 2451545.0)
$$&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;若精度要求达到纳秒级，可使用SOFA提供的Dtdb函数，输入包括儒略日（date1,date2）、UT1、经度（elong）、地球自转轴距离（u）和赤道平面距离（v）。其中elong、u、v可由台站地理信息计算获得，而UT1无法直接观测，因此先近似以TT替代TDB计算$\Delta T$，再反推回UT1。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;TDB涉及的观测台站参数如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文件名&lt;/th&gt;
&lt;th&gt;台站&lt;/th&gt;
&lt;th&gt;elong&lt;/th&gt;
&lt;th&gt;u&lt;/th&gt;
&lt;th&gt;v&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ji0015&lt;/td&gt;
&lt;td&gt;586-Pic du Midi&lt;/td&gt;
&lt;td&gt;0.0024836035&lt;/td&gt;
&lt;td&gt;0.7365363&lt;/td&gt;
&lt;td&gt;0.6747957&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;使用Dtdb所得ji0015台站的TDB-TT值与地带模型差值为0.00157秒。&lt;a href=&quot;https://www.minorplanetcenter.net/iau/lists/ObsCodes.html&quot;&gt;MPC站点&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;补充&lt;/h3&gt;
&lt;p&gt;对于其余时间尺度，本文默认ET=TT，GMT=UT1-12h。在解释或使用1925年之前的天体测量数据时需特别注意：当时的一天通常从“中午”开始（即12时），而现代从“午夜”开始（即0时），因此对早期GMT数据应整体减去0.5日以实现时间对齐。&lt;/p&gt;
&lt;p&gt;至此，所有时间尺度均已完成向TT的转换，并尽可能提高了精度。部分转换结果如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;scale&lt;/th&gt;
&lt;th&gt;index&lt;/th&gt;
&lt;th&gt;type&lt;/th&gt;
&lt;th&gt;file_line&lt;/th&gt;
&lt;th&gt;d1&lt;/th&gt;
&lt;th&gt;d2&lt;/th&gt;
&lt;th&gt;tt1&lt;/th&gt;
&lt;th&gt;tt2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8922]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_49&lt;/td&gt;
&lt;td&gt;[2454249.5]&lt;/td&gt;
&lt;td&gt;[0.333195602]&lt;/td&gt;
&lt;td&gt;[2454249.5]&lt;/td&gt;
&lt;td&gt;[0.333950046]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8923]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_50&lt;/td&gt;
&lt;td&gt;[2454177.5]&lt;/td&gt;
&lt;td&gt;[0.540383102]&lt;/td&gt;
&lt;td&gt;[2454177.5]&lt;/td&gt;
&lt;td&gt;[0.541137546]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8924]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_51&lt;/td&gt;
&lt;td&gt;[2454179.5]&lt;/td&gt;
&lt;td&gt;[0.535182870]&lt;/td&gt;
&lt;td&gt;[2454179.5]&lt;/td&gt;
&lt;td&gt;[0.535937314]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8925]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_52&lt;/td&gt;
&lt;td&gt;[2454201.5]&lt;/td&gt;
&lt;td&gt;[0.476787037]&lt;/td&gt;
&lt;td&gt;[2454201.5]&lt;/td&gt;
&lt;td&gt;[0.477541481]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8926]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_53&lt;/td&gt;
&lt;td&gt;[2454209.5]&lt;/td&gt;
&lt;td&gt;[0.453296296]&lt;/td&gt;
&lt;td&gt;[2454209.5]&lt;/td&gt;
&lt;td&gt;[0.454050740]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8927]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_54&lt;/td&gt;
&lt;td&gt;[2454215.5]&lt;/td&gt;
&lt;td&gt;[0.436283565]&lt;/td&gt;
&lt;td&gt;[2454215.5]&lt;/td&gt;
&lt;td&gt;[0.437038009]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8928]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_55&lt;/td&gt;
&lt;td&gt;[2454218.5]&lt;/td&gt;
&lt;td&gt;[0.427291667]&lt;/td&gt;
&lt;td&gt;[2454218.5]&lt;/td&gt;
&lt;td&gt;[0.428046111]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8929]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_56&lt;/td&gt;
&lt;td&gt;[2454219.5]&lt;/td&gt;
&lt;td&gt;[0.423895833]&lt;/td&gt;
&lt;td&gt;[2454219.5]&lt;/td&gt;
&lt;td&gt;[0.424650277]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8930]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_57&lt;/td&gt;
&lt;td&gt;[2454228.5]&lt;/td&gt;
&lt;td&gt;[0.397473380]&lt;/td&gt;
&lt;td&gt;[2454228.5]&lt;/td&gt;
&lt;td&gt;[0.398227824]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8931]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_58&lt;/td&gt;
&lt;td&gt;[2454229.5]&lt;/td&gt;
&lt;td&gt;[0.395025463]&lt;/td&gt;
&lt;td&gt;[2454229.5]&lt;/td&gt;
&lt;td&gt;[0.395779907]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8932]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_59&lt;/td&gt;
&lt;td&gt;[2454232.5]&lt;/td&gt;
&lt;td&gt;[0.386464120]&lt;/td&gt;
&lt;td&gt;[2454232.5]&lt;/td&gt;
&lt;td&gt;[0.387218564]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;[8933]&lt;/td&gt;
&lt;td&gt;[2]&lt;/td&gt;
&lt;td&gt;jg0023_60&lt;/td&gt;
&lt;td&gt;[2454235.5]&lt;/td&gt;
&lt;td&gt;[0.376500000]&lt;/td&gt;
&lt;td&gt;[2454235.5]&lt;/td&gt;
&lt;td&gt;[0.377254444]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;为验证时间转换程序的准确性，选用《Observational catalogs and numerical ephemerides for the satellite system of Neptune》（简称OCNS2019）中已转换数据为对照组，对随机抽取的各类时间尺度（UT1、UTC、GMT、ET、TDT等）进行测试。测试结果显示，本文转换程序与文献数据基本一致，说明转换流程具有较高可靠性。&lt;/p&gt;
&lt;h2&gt;坐标系统&lt;/h2&gt;
&lt;h3&gt;坐标系统概述&lt;/h3&gt;
&lt;p&gt;通过前期整理，总计整理了57258条星表数据。空间参考系在木卫中分为三类。J2000、B系列、TOD瞬时真赤道真春分点坐标系。整理得涉及到的数据记录格式如下。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Coord&lt;/th&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Number&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ABS&lt;/td&gt;
&lt;td&gt;J2000&lt;/td&gt;
&lt;td&gt;HMS&lt;/td&gt;
&lt;td&gt;138&lt;/td&gt;
&lt;td&gt;31260&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;RA&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;10296&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;CAMERA&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;289&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;B1950&lt;/td&gt;
&lt;td&gt;HMS&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;741&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;RA&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;HMS&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;795&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;RA&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1 Jan Of Year Of Observation&lt;/td&gt;
&lt;td&gt;HMS&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;66&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DIF&lt;/td&gt;
&lt;td&gt;J2000&lt;/td&gt;
&lt;td&gt;RA&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1673&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;B1950&lt;/td&gt;
&lt;td&gt;RA&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1554&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NAP&lt;/td&gt;
&lt;td&gt;J2000&lt;/td&gt;
&lt;td&gt;PS&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;162&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;1893&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PAS&lt;/td&gt;
&lt;td&gt;J2000&lt;/td&gt;
&lt;td&gt;PS&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;B1950&lt;/td&gt;
&lt;td&gt;PS&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;PS&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;420&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TAN&lt;/td&gt;
&lt;td&gt;J2000&lt;/td&gt;
&lt;td&gt;XY&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;1901&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;954&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;B1950&lt;/td&gt;
&lt;td&gt;CAMERA&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1606&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;156&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;XY&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;875&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;XY&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;1187&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Mean Terrestrial Equatorial Frame 1950&lt;/td&gt;
&lt;td&gt;XY&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1138&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RELATIVE-APPROX&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;140&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;常用空间参考系的类型及其实现方式见表,图展示了天球坐标系的几何结构及参考方向。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;空间参考系&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;特点与实现&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ICRS&lt;/td&gt;
&lt;td&gt;国际天球参考系&lt;/td&gt;
&lt;td&gt;基于射电源的绝对惯性系，精度达微角秒级，与J2000.0对齐（ICRS的理论实现）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ICRF&lt;/td&gt;
&lt;td&gt;国际天球参考架&lt;/td&gt;
&lt;td&gt;使用电波观测到的参考源实现的国际天球参考系。参考架是参考系的物理实现。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FK4 历元平赤道平春分点&lt;/td&gt;
&lt;td&gt;经典参考系&lt;/td&gt;
&lt;td&gt;基于FK4星表（B1950历元），含系统误差（分点差、光行差模型过时）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TOD&lt;/td&gt;
&lt;td&gt;瞬时参考系&lt;/td&gt;
&lt;td&gt;观测时刻的真春分点坐标系（含章动），需转换到标准历元。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_11.png&quot; alt=&quot;J2000协议天球坐标系&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;数据记录格式统一&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;项目&lt;/th&gt;
&lt;th&gt;含义&lt;/th&gt;
&lt;th&gt;公式或定义&lt;/th&gt;
&lt;th&gt;解释&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Alpha, Delta (h,m,s.decimals)&lt;/td&gt;
&lt;td&gt;卫星的赤道坐标（赤经与赤纬）。&lt;/td&gt;
&lt;td&gt;Alpha: 赤经，Delta: 赤纬&lt;/td&gt;
&lt;td&gt;表示卫星在天球上的位置，可为地心或地面视角。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diff.X, Y (arcsec)&lt;/td&gt;
&lt;td&gt;相对于参考天体的差值坐标。&lt;/td&gt;
&lt;td&gt;$X = \Delta(\mathrm{Alpha}) \times \cos(\mathrm{Delta}),\ Y = \Delta(\mathrm{Delta})$&lt;/td&gt;
&lt;td&gt;X 在赤道方向，Y 在子午线方向，单位为角秒。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diff.S (arcsec), Position angle (degrees)&lt;/td&gt;
&lt;td&gt;选定卫星与参考天体之间的视在角距离和位置角。&lt;/td&gt;
&lt;td&gt;S: 角距离（角秒），Position angle: 位置角（度）&lt;/td&gt;
&lt;td&gt;S 是两个天体之间的角距离，位置角从北向东测量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tang.X, Y (arcsec)&lt;/td&gt;
&lt;td&gt;天球切平面上的切向坐标。&lt;/td&gt;
&lt;td&gt;X 向东，Y 向北（单位角秒）&lt;/td&gt;
&lt;td&gt;在参考天体所在点的天球切平面上定义的坐标系统。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delta(Alpha), Delta(Delta) (arcsec)&lt;/td&gt;
&lt;td&gt;赤经和赤纬的差值。&lt;/td&gt;
&lt;td&gt;$\Delta\mathrm{Alpha}$ 与 $\Delta\mathrm{Delta}$&lt;/td&gt;
&lt;td&gt;卫星与参考天体之间的赤道坐标差值（角秒）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pseudo-heliocentric X, Y&lt;/td&gt;
&lt;td&gt;类日心差值坐标。&lt;/td&gt;
&lt;td&gt;$X = \Delta(\mathrm{Alpha}) \times \cos(\mathrm{Delta}),\ Y = \Delta(\mathrm{Delta})$&lt;/td&gt;
&lt;td&gt;用于建模卫星相互掩食时的投影，考虑光行差，单位角秒。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;ABS&lt;/h3&gt;
&lt;h4&gt;TOD&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;输入TOD坐标系下的赤经与赤纬。&lt;/li&gt;
&lt;li&gt;用iauPnm06a函数构造ICRS→TOD的偏转矩阵。&lt;/li&gt;
&lt;li&gt;乘矩阵的转置,实现从TOD坐标系向ICRS坐标系的方向变换。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;然而，目前海王星卫星的星表中并未包含TOD→J2000绝对坐标的观测数据，因此无法对该转换方法进行实际验证。&lt;/p&gt;
&lt;h4&gt;B1950&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;FK4→FK5坐标转换。&lt;/li&gt;
&lt;li&gt;FK5@epoch→FK5@J2000。&lt;/li&gt;
&lt;li&gt;FK5@J2000→ICRS。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;实际做法是完全依赖SOFA库函数完成上述转换流程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用iaufk45z函数将FK4@1950坐标转换为FK5@J2000。&lt;/li&gt;
&lt;li&gt;通过iauFk5hip(rmat,s5h)获取FK5→ICRS的旋转矩阵和原点偏移向量，其中rmat为旋转矩阵，s5h为表示FK5原点相对于ICRS原点的微小偏移向量。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;使用上述方法所获得的结果与 yuanye 的处理结果对比如下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试数据数量：10条&lt;/li&gt;
&lt;li&gt;平均差值：1mas&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;B1949&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;FK4→FK5坐标转换。&lt;/li&gt;
&lt;li&gt;FK5@epoch→FK5@J2000。&lt;/li&gt;
&lt;li&gt;FK5@J2000→ICRS。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;实际做法是结合SOFA库函数与Newcomb岁差模型完成上述转换流程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用Newcomb岁差模型实现FK4@1949向FK4@1950的转换。
B1949 坐标转换首先从 MJD 计算出儒略日 JD，再推导对应的 Bessel 年和岁差时间参数：
$$
\begin{aligned}
\zeta&amp;amp;= (2304.250 + 1.396,T)\cdot t   + 0.302,t^2 + 0.018,t^3 \[10pt]
z&amp;amp;= \zeta   + 0.791,t^2 + 0.001,t^3 \[10pt]
\theta  &amp;amp;= (2004.682 - 0.853,T)\cdot t   - 0.426,t^2 - 0.042,t^3\[10pt]
JD_{1949} &amp;amp;= \text{MJD} + 2400000.5 \[10pt]
T &amp;amp;= \dfrac{JD_{1949} - 2415020.3135}{36524.2199} \[10pt]
t &amp;amp;= \dfrac{JD_{1950} - JD_{1949}}{36524.2199}\[10pt]
R &amp;amp;= R_z(-z) \cdot R_y(\theta) \cdot R_z(-\zeta)
\end{aligned}
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用iaufk45z函数将FK4@1950坐标转换为FK5@J2000。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过iauFk5hip(rmat,s5h)获取FK5→ICRS的旋转矩阵与零点偏移向量，其中rmat为旋转矩阵，s5h为FK5原点至ICRS原点的微小偏移。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;使用上述方法所获得的结果与 yuanye 的处理结果对比如下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试数据数量：10条&lt;/li&gt;
&lt;li&gt;平均差值：1mas&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;PAS&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;./image/241121_12.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;目标是将TOD坐标系下的位置角转换为ICRS坐标系下的位置角。&lt;/p&gt;
&lt;p&gt;最终我们将实现方法归纳为两大类：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;基于位置角修正量$\Delta p$的方法（yuanye方法）
该方法通过计算TOD与ICRS系统之间的位置角修正量$\Delta p$，从而由以下公式得到ICRS下的位置角：
$$
p_{{ICRS}} = p_{{TOD}} - \Delta p
$$
修正量$\Delta p$可通过球面三角公式、余弦定理、向量法等方式推导。但结果较差。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;直接求解位置角P的方法
该方法不依赖于TOD系统下的位置角作为输入，而是直接根据TOD下A、B两星的坐标，经变换后得到ICRS下的绝对坐标，再基于位置角的定义计算出ICRS系统中的位置角。结果较好。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;第一类方法侧重于差值建模，而第二类方法则更贴合天体测量中几何定义的本质。&lt;/p&gt;
&lt;h4&gt;yuanye+cot函数法&lt;/h4&gt;
&lt;p&gt;该方法基于yuanye提出的正弦和反切公式进行位置角修正量$\Delta p$的计算。公式如下：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
p_{\text{ICRS}}
&amp;amp;= p_{\text{TOD}} - \Delta p\[10pt]
\sin\Delta p
&amp;amp;= \dfrac{\sin\theta,\sin\Delta\alpha}{\cos\delta_B}\[6pt]
\cot\Delta p
&amp;amp;= -\cot\Delta\alpha,\sin\delta&apos;_B
+ \csc\Delta\alpha,\cos\delta&apos;_B,\cot\theta\[6pt]
\Delta\alpha
&amp;amp;= \alpha&apos;_B - \alpha&apos;_P
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;使用上述方法所获得的结果与 yuanye 的处理结果对比如下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试数据数量：108条&lt;/li&gt;
&lt;li&gt;平均差值：16,555mas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;由结果可见，该方法误差较大。初步怀疑问题可能出现在三角函数中$\cos$项的使用上，例如$\cos\delta_B$或$\cos\delta&apos;_B$的取值是否正确，仍需进一步验证。&lt;/p&gt;
&lt;h4&gt;yuanye+推导cos函数法&lt;/h4&gt;
&lt;p&gt;本方法使用球面余弦定理的标准形式推导位置角修正量$\Delta p$。其推导过程如下：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
p_{\text{ICRS}}
&amp;amp;= p_{\text{TOD}} - \Delta p\[10pt]
&amp;amp;= \cos(90^\circ-\delta_B),\cos(90^\circ-\delta&apos;_B)
+ \sin(90^\circ-\delta_B),\sin(90^\circ-\delta&apos;_B),
\cos\Delta P\
&amp;amp;= \sin\delta_B,\sin\delta&apos;_B
+ \cos\delta_B,\cos\delta&apos;_B,\cos\Delta P\[6pt]&lt;/p&gt;
&lt;p&gt;\cos\Delta P
&amp;amp;= \dfrac{\cos\theta - \sin\delta_B,\sin\delta&apos;_B}
{\cos\delta_B,\cos\delta&apos;_B}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;使用上述方法所获得的结果与 yuanye 的处理结果对比如下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试数据数量：108条&lt;/li&gt;
&lt;li&gt;平均差值：14,119.168mas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;由此可见，该方法的精度虽优于cot函数法，但误差仍较大。我们怀疑可能是$\Delta \alpha$或$\theta$这些中间角度计算出现偏差，导致误差积累，尚需进一步校验各参数的推导和数值精度。&lt;/p&gt;
&lt;h4&gt;yuanye+向量求解法&lt;/h4&gt;
&lt;p&gt;本方法基于球面几何中二面角的计算逻辑。通过参考星B与TOD北极、ICRS北极之间的空间关系，构建两个大圆弧平面，并求解其二面角$\Delta p$。&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\textbf{二面角计算}\[4pt]
N_{BP&apos;} &amp;amp;= V_B \times V_{P&apos;}
\quad (\text{大圆 } BP&apos; \text{ 所在平面法向})\
N_{BP}  &amp;amp;= V_B \times V_P&lt;br /&gt;
\quad (\text{大圆 } BP  \text{ 所在平面法向})\[6pt]&lt;/p&gt;
&lt;p&gt;\cos\Delta P
&amp;amp;= \dfrac{N_{BP&apos;} \cdot N_{BP}}
{|N_{BP&apos;}|;|N_{BP}|}\[6pt]&lt;/p&gt;
&lt;p&gt;\sin\Delta P
&amp;amp;= \dfrac{V_B \cdot (V_{P&apos;} \times V_P)}
{|N_{BP&apos;}|;|N_{BP}|}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;使用上述方法所获得的结果与 yuanye 的处理结果对比如下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试数据数量：108条&lt;/li&gt;
&lt;li&gt;平均差值：16,608.817mas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从误差可以看出，该方法同样存在较大偏差。原因可能在于位置角本质上定义在天球切平面上，而非球面上的夹角。TOD→ICRS的转换涉及三维旋转与坐标偏移，转换后的天体位置不再共面，因此简单地在TOD切平面中加上$\Delta p$得到ICRS下的位置角并不严谨。&lt;/p&gt;
&lt;p&gt;因此，我们进一步提出两种不同于$\Delta p$修正思路的新方法。&lt;/p&gt;
&lt;h4&gt;定义法&lt;/h4&gt;
&lt;p&gt;本方法严格遵循位置角（P）与角距离（S）的定义，直接构建ICRS坐标系下的位置角计算过程。具体步骤如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;查询参考星B在ICRS下的绝对坐标，并根据观测历元及光行差模型、岁差章动模型推算其在TOD系统中的位置。&lt;/li&gt;
&lt;li&gt;根据观测值中的位置角$\theta$与角距离$\rho$，利用定义公式计算出A星在TOD坐标系下的相对位置。&lt;/li&gt;
&lt;li&gt;将A星TOD坐标进行章动与岁差转换，变换至ICRS坐标系。&lt;/li&gt;
&lt;li&gt;以A、B两星在ICRS中的绝对坐标为基础，根据位置角定义重新计算ICRS下的位置角。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;其坐标与角度关系公式如下：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\textbf{ICRS} &amp;amp;;\longrightarrow; \textbf{PS}\[4pt]
\cos\rho &amp;amp;= \sin\delta_B,\sin\delta_A + \cos\delta_B,\cos\delta_A,\cos\Delta\alpha\
\theta   &amp;amp;= \operatorname{atan2}!\Bigl(\sin\Delta\alpha,\cos\delta_A,;
\cos\delta_B,\sin\delta_A - \sin\delta_B,\cos\delta_A,\cos\Delta\alpha\Bigr)\[10pt]
\textbf{PS} &amp;amp;;\longrightarrow; \textbf{ICRS}\[4pt]
\sin\delta_A &amp;amp;= \sin\delta_B,\cos\rho + \cos\delta_B,\sin\rho,\cos\theta\
\Delta\alpha &amp;amp;= \operatorname{atan2}!\Bigl(\sin\rho,\sin\theta,;
\cos\delta_B,\cos\rho - \sin\delta_B,\sin\rho,\cos\theta\Bigr)\
\alpha_A     &amp;amp;= \alpha_B + \Delta\alpha\
\delta_A     &amp;amp;= \arcsin\bigl(\sin\delta_A\bigr)
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;通过上述正向与反向的闭环推导过程，我们得出了ICRS下的全新位置角。其结果由以下几类误差源的累积影响：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;参考星与目标星的章动与岁差。&lt;/li&gt;
&lt;li&gt;依赖于历表查出的参考星绝对位置。&lt;/li&gt;
&lt;li&gt;以及原始观测数据中所给定的P与S值。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用上述方法所获得的结果与 yuanye 的处理结果对比如下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试数据数量：752条&lt;/li&gt;
&lt;li&gt;平均差值：156.918992mas&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;向量法&lt;/h4&gt;
&lt;p&gt;该方法基于空间向量的几何变换，通过三维向量的转换来完成位置角从TOD向ICRS的转换过程。具体操作流程如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;查询参考星B在ICRS坐标系中的位置，并推算其在TOD坐标系下的位置（考虑光行时延效应）。&lt;/li&gt;
&lt;li&gt;依据B星在TOD系统下的位置角定义出其所在切平面上的单位向量（x方向与y方向）在三维空间中的表示。&lt;/li&gt;
&lt;li&gt;将观测得到的位置角转化为该切平面内的二维向量，并与单位向量相乘，获得对应的空间向量。&lt;/li&gt;
&lt;li&gt;将该空间向量进行章动岁差转换至ICRS系统，并在ICRS坐标系中重新定义切平面单位向量，从三维向量中提取新的二维分量，计算出ICRS系统下的位置角。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;上述过程构成了一个闭环变换链条，即从二维（TOD）→三维→坐标系变换→回到二维（ICRS），可有效避免传统$\Delta p$修正中面不共线带来的系统误差。其结果由以下几类误差源的累积影响：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;参考星与目标星的章动与岁差。&lt;/li&gt;
&lt;li&gt;依赖于历表查出的参考星绝对位置。&lt;/li&gt;
&lt;li&gt;以及原始观测数据中所给定的P与S值。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用上述方法所获得的结果与yuanye的处理结果对比如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试数据数量：752条&lt;/li&gt;
&lt;li&gt;平均差值：133.499747mas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上述两种方法对比为：
&lt;img src=&quot;./image/241121_13.png&quot; alt=&quot;image-20250701221724753&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;DRD&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;使用DE440/NEP081历表提供B星在ICRS坐标系中的理论绝对位置。&lt;/li&gt;
&lt;li&gt;根据观测中记录的差值（即DRD），推导出A星在TOD系统中的位置。&lt;/li&gt;
&lt;li&gt;随后将A、B两星的TOD绝对坐标同步转换至ICRS坐标系。&lt;/li&gt;
&lt;li&gt;计算在ICRS下的DRD$^{\prime}$。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;使用上述方法所获得的结果与yuanye的处理结果对比如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试数据数量：3条&lt;/li&gt;
&lt;li&gt;平均差值：7mas&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;补充&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;DRD 为什么明明有绝对坐标却不用而是要算出主卫经纬之差？
这是因为主星坐标和卫星坐标之中都包含了误差，但是当两个位置相减就消掉了这些误差，让观测数据更加精确。&lt;/li&gt;
&lt;li&gt;ABS-B1950 必须将输入时间从JD转为Bessel年格式供iauFk45z使用，否则会导致50–80mas的误差。这里的JD应该选用转换到TT之前/转换到TT之后的时间。&lt;/li&gt;
&lt;li&gt;ABS-B1950 文中提及的参考架偏差文献是“Global and Local Bias in the FK5 from the Hipparcos Data”给出的FK5与依巴谷星表的旋转角是可以直接应用到FK5→ICRS的。依据为—&lt;a href=&quot;https://pholus.mtk.nao.ac.jp/~toshio/iaudiv1/IAU_resolutions/Resol-UAI.htm?utm_source=chatgpt.com&quot;&gt;第二十三届大会 B2 号决议（1997 年）规定&lt;/a&gt;：“&lt;em&gt;That the Hipparcos Catalogue shall be the primary realisation of the International Celestial Reference System (ICRS) at optical wavelengths。&lt;/em&gt;”因此从理论上来说，FK5与依巴谷星表的旋转角可以直接使用，且iauFk5hip(rmat,s5h)的结果与其差异很小，为了减少自定义公式引入的系统差，直接选用iauFk5hip(rmat,s5h)提供旋转矩阵对FK5坐标进行微调，最终得到ICRS系统下的坐标。&lt;/li&gt;
&lt;li&gt;ABS-B1950 不可以单独使用BPN矩阵里的B（即iauBi00函数）作为旋转矩阵，iauBi00提供的是ICRS到J2000.0的帧偏置参数。这里J2000.0不是FK5，是J2000平赤道平春分点坐标系。但FK5是星表实现，试图对齐J2000.0包含系统性误差。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;星表修正&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;根据传入的赤经赤纬在chleapix程序中匹配相应的天区。&lt;/li&gt;
&lt;li&gt;根据天区编号在eggl中匹配对应的自行参数。&lt;/li&gt;
&lt;li&gt;根据对应的偏差公式计算赤经赤纬的星表偏差。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;使用上述方法所获得的结果与yuanye的处理结果对比如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试数据数量：6000条&lt;/li&gt;
&lt;li&gt;平均差值：0mas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于木卫系统来说，229个文件中一共172文件是绝对观测类型。仅有小部分可以使用eggl的bais数据来修正的。已经统计出的有11个星表在bais数据中没有涉及到，且剩下的三分之二的观测资料都是no information或一些使用软件的描述，需要下载原文去统计具体使用的什么星表。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;标准化值&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;数量&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;类别&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tycho-2&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;标准星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UCAC4&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;标准星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gaia DR1&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;标准星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AST&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gaia DR2&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SAO&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AGK3&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yale&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ACRS&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Palomar Sky Survey&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hipparcos Catalogue&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gaia EDR3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GSC 2.2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FK4 catalogue&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paris zone&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ICRF&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;未涉及星表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;no information&lt;/td&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;td&gt;说明 / 参考&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;positions corrected (relativistic)&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;说明 / 参考&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catalogue diven in the data&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;说明 / 参考&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;referred to the 1976 IAU reference system&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;说明 / 参考&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transformed to ICRS system using of reference stars&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;说明 / 参考&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PDSP plate reduction software (see comments below)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;说明 / 参考&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conversion to FK5/J2000.0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;说明 / 参考&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catalogues PPM and SAO, reduction to the FK5/J2000.0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;说明 / 参考&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;附录&lt;/h1&gt;
&lt;h1&gt;附表1 IMCCE数据错误信息及修正&lt;/h1&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文件名&lt;/th&gt;
&lt;th&gt;错误信息&lt;/th&gt;
&lt;th&gt;修正手段&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;jg0001&lt;/td&gt;
&lt;td&gt;第6行  无效日期：第4个月31日&lt;/td&gt;
&lt;td&gt;日转换，月加1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0001&lt;/td&gt;
&lt;td&gt;第510行  无效日期：第1个月32日&lt;/td&gt;
&lt;td&gt;日转换，月加3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0001&lt;/td&gt;
&lt;td&gt;第82行  无效日期：第7个月32日&lt;/td&gt;
&lt;td&gt;日转换，月加5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0013&lt;/td&gt;
&lt;td&gt;第288行  无效日期：第4个月31日&lt;/td&gt;
&lt;td&gt;日转换，月加2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0013&lt;/td&gt;
&lt;td&gt;第454行  无效日期：第1个月32日&lt;/td&gt;
&lt;td&gt;日转换，月加4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0013&lt;/td&gt;
&lt;td&gt;第364行  无效日期：第7个月32日&lt;/td&gt;
&lt;td&gt;日转换，月加6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0029&lt;/td&gt;
&lt;td&gt;第91行  无效日期：第7个月36日&lt;/td&gt;
&lt;td&gt;日转换，月加7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0029&lt;/td&gt;
&lt;td&gt;第147行  无效日期：书写错误&lt;/td&gt;
&lt;td&gt;修正错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0029&lt;/td&gt;
&lt;td&gt;第178行  无效年份：书写错误&lt;/td&gt;
&lt;td&gt;修正错误&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;附表2 第四类及特殊记录格式&lt;/h1&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;id&lt;/th&gt;
&lt;th&gt;number&lt;/th&gt;
&lt;th&gt;error&lt;/th&gt;
&lt;th&gt;resolution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;jg0008&lt;/td&gt;
&lt;td&gt;738&lt;/td&gt;
&lt;td&gt;Cape sideral time&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0001&lt;/td&gt;
&lt;td&gt;1606&lt;/td&gt;
&lt;td&gt;sec格式不一&lt;/td&gt;
&lt;td&gt;科学计数法处理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0032&lt;/td&gt;
&lt;td&gt;448&lt;/td&gt;
&lt;td&gt;有JD,有年月带小数的秒&lt;/td&gt;
&lt;td&gt;按JD处理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0004&lt;/td&gt;
&lt;td&gt;144&lt;/td&gt;
&lt;td&gt;有JD,无时分秒&lt;/td&gt;
&lt;td&gt;按JD处理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ji0005&lt;/td&gt;
&lt;td&gt;156&lt;/td&gt;
&lt;td&gt;min&lt;/td&gt;
&lt;td&gt;Minutes from 0 h UTC, 3 December 1988 (JD=2447498.5)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ji0015&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;JD&lt;/td&gt;
&lt;td&gt;Julian date of observation (TDB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0020&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;MJD&lt;/td&gt;
&lt;td&gt;MJD - time of topocentric observation (MJD=JD-2400000.5), TT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ji0007&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;MJD&lt;/td&gt;
&lt;td&gt;MJD of observation with decimals (43494 = 17 Dec 1977)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0021&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;MJD&lt;/td&gt;
&lt;td&gt;MJD - time of topocentric observation (MJD=JD-2400000.5), TT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0069&lt;/td&gt;
&lt;td&gt;209&lt;/td&gt;
&lt;td&gt;Epoch_TCB&lt;/td&gt;
&lt;td&gt;Gaia-centric epoch in TCB relative to 2455197.5 (Epoch_TCB, days)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jg0073&lt;/td&gt;
&lt;td&gt;295&lt;/td&gt;
&lt;td&gt;Epoch_TCB&lt;/td&gt;
&lt;td&gt;Gaia-centric epoch in TCB relative to 2455197.5 (Epoch_TCB, days)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jo0069&lt;/td&gt;
&lt;td&gt;1712&lt;/td&gt;
&lt;td&gt;Epoch_TCB&lt;/td&gt;
&lt;td&gt;Gaia-centric epoch in TCB relative to 2455197.5 (Epoch_TCB, days)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jo0077&lt;/td&gt;
&lt;td&gt;3756&lt;/td&gt;
&lt;td&gt;Epoch_TCB&lt;/td&gt;
&lt;td&gt;Gaia-centric epoch in TCB relative to 2455197.5 (Epoch_TCB, days)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jo1057&lt;/td&gt;
&lt;td&gt;92&lt;/td&gt;
&lt;td&gt;Epoch_TCB&lt;/td&gt;
&lt;td&gt;Gaia-centric epoch in TCB relative to 2455197.5 (Epoch_TCB, days)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jo1061&lt;/td&gt;
&lt;td&gt;238&lt;/td&gt;
&lt;td&gt;Epoch_TCB&lt;/td&gt;
&lt;td&gt;Gaia-centric epoch in TCB relative to 2455197.5 (Epoch_TCB, days)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ji0001&lt;/td&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;hour带小数无min sec&lt;/td&gt;
&lt;td&gt;Hour of the moment of observation with decimals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ji0002&lt;/td&gt;
&lt;td&gt;160&lt;/td&gt;
&lt;td&gt;hour带小数无min sec&lt;/td&gt;
&lt;td&gt;Hour of the moment of observation with decimals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ji0004&lt;/td&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;td&gt;hour带小数无min sec&lt;/td&gt;
&lt;td&gt;Hour of the moment of observation with decimals&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;参考文献&lt;/h1&gt;
&lt;p&gt;J. Desmars. “A new catalogue of observations of the eight major satellites of Saturn (1874–2007).” &lt;em&gt;Astronomy &amp;amp; Astrophysics&lt;/em&gt; 493, no. 3 (January 2009): 1183–95. https://doi.org/10.1051/0004-6361:200810203.&lt;/p&gt;
&lt;p&gt;Jean-Eudes Arlot. “天然卫星相互现象观察：成就和未来.” &lt;em&gt;Planetary and Space Science&lt;/em&gt; 169 (May 2019): 70–77. https://doi.org/10.1016/j.pss.2019.02.004.&lt;/p&gt;
&lt;p&gt;Ye Yuan. “基于Gaia-DR2 的 11 颗海王星卫星的地面天文观测目录.” &lt;em&gt;Astronomy &amp;amp; Astrophysics&lt;/em&gt; 645 (January 2021): A48. https://doi.org/10.1051/0004-6361/202038776.&lt;/p&gt;
&lt;p&gt;“The Dynamics of Natural Satellites of the Planets.” In &lt;em&gt;The Dynamics of Natural Satellites of the Planets&lt;/em&gt;, i–iii. Elsevier, 2021. https://doi.org/10.1016/B978-0-12-822704-6.00002-9.&lt;/p&gt;
&lt;p&gt;jzhao. “Astronomical Times.” Accessed March 12, 2025. https://lweb.cfa.harvard.edu/~jzhao/times.html#TDB.&lt;/p&gt;
</content:encoded></item><item><title>Ephemerides</title><link>https://sues.fun/posts/241110_ephemerides/</link><guid isPermaLink="true">https://sues.fun/posts/241110_ephemerides/</guid><description>Satellite_Ephemerides</description><pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;&lt;/h1&gt;
&lt;p&gt;本文旨在探讨研究观测星表的收集和整合工作的流程以及遇到的难点。主要基于J. Desmars和Ye Yuan的两篇文献，剖析构建观测星表过程中的前后流程和操作手法&lt;/p&gt;
&lt;p&gt;两篇文献的最大共通点是：在文献发表之前，已经有很多基础文献和观测数据发表，但是通常都以不同的的格式发表。因此他们总结了之前发表的各式目录，检测规范观测目录中的旧数据，整理新发表的新数据，整理成统一制式的观测星表。&lt;/p&gt;
&lt;h2&gt;1. &lt;em&gt;基本知识&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;理解天文领域的基本常识是开展工作的基础，以下罗列出了在阅读文献中遇到的天文学名词。&lt;/p&gt;
&lt;p&gt;儒略日：以连续的日数计算时间的计时法。&lt;/p&gt;
&lt;p&gt;坐标单位：以角秒为单位，是测量角度的单位。1°=60角分=3600角秒。&lt;/p&gt;
&lt;p&gt;折射：折射是指光通过不同介质（如地球大气层）时路径发生弯曲的现象。在天文观测中，折射会影响观测到的天体位置，因此需要进行校正。&lt;/p&gt;
&lt;p&gt;像差：像差是由于光速有限和观测者相对于光源的运动导致观测到的光的方向发生偏移的现象。在天文观测中，像差校正是必要的步骤之一。&lt;/p&gt;
&lt;p&gt;相位效应：相位效应是指由于观测天体与观测者、光源（通常是太阳）之间相对位置的变化，导致观测到的天体亮度和形状的变化。&lt;/p&gt;
&lt;p&gt;赤经和赤纬：赤经和赤纬是天球坐标系统中的两个坐标，类似于地理坐标系统中的经度和纬度，用于确定天体在天球上的位置。&lt;/p&gt;
&lt;p&gt;CCD图像测量：CCD（Charge-Coupled Device）是一种用于检测光的电子设备，常用于天文摄影。CCD图像测量是指使用CCD相机获取的图像来测量天体的位置和亮度。&lt;/p&gt;
&lt;p&gt;HST观测：HST（Hubble Space Telescope，哈勃太空望远镜）观测是指使用哈勃太空望远镜进行的天文观测。这种观测可以提供极高分辨率的天体图像。&lt;/p&gt;
&lt;p&gt;O-C残差：O-C残差是指观测值与根据动力学模型计算值之间的差异。这些残差用于评估模型的准确性和观测数据的质量。&lt;/p&gt;
&lt;h2&gt;2. 土卫系统&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;./image/241110_01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;J. Desmars在A new catalogue of observations of the eight major satellitesof Saturn文中，比较系统的阐述了土星卫星观测星表汇编的主要流程，并且罗列出了较为权威的观测数据的来源。为之后的工作提供了较为准确的研究路线，其主要总结整合出了土星八颗主要卫星的新观测目录，阐述了构建新观测目录的基本逻辑，即收集新数据-整合旧数据-完善缺失数据-矫正处理数据-整合成新观测目录。&lt;/p&gt;
&lt;h3&gt;2.1 目录分类&lt;/h3&gt;
&lt;p&gt;&amp;lt;table&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr class=&quot;odd&quot;&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;目录名称&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;时间跨度&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;数据大小&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;获取方式&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;even&quot;&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;Strugnell &amp;amp; Taylor catalogue&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;(ST90)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;1874-1989&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;约51,000次观测&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;CDS&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;odd&quot;&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;Harper &amp;amp; Taylor catalogue&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;(HT94)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;1894-1922&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;约15,000次观测&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;CDS&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;even&quot;&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&amp;lt;a href=&quot;http://nsdb.imcce.fr/obspos/obsindhe.htm&quot;&amp;gt;Natural satellites database center&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;(NSDC)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;实时增加&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;—&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;NSDC&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;odd&quot;&amp;gt;
&amp;lt;td&amp;gt;The recent observations&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;1994-2007&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;近年发布的超9900个新的观测数据&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;—&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;even&quot;&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&amp;lt;a href=&quot;https://cdsarc.u-strasbg.fr/viz-bin/cat/J/A+A/493/1183&quot;&amp;gt;Catalogue of Observations of Saturnian Satellites&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;(COSS08)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;1874-2007&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;是四个不同观测来源的汇编。&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;CDS&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;&lt;/p&gt;
&lt;p&gt;实际上，观测数据最早可以溯源到80年代，甚至在不考虑观测精度的前提下可以追溯到更久，这也就带来了整合旧数据中的第一大难点，即不同年代不同观测站不同人的观测手法、观测范围、观测时间以及得出的数据规模和字段数量都是不一致的。因此如何将不同的观测尺度和数据类型化零为整是决定观测数据是否可用的关键。&lt;/p&gt;
&lt;p&gt;在文中的观测数据主要来源于NSDC上已发布的数据，次要来源为ST90和HT94，以及近年发表或收录的新观测数据。以下是对各来源的详细描述。&lt;/p&gt;
&lt;h3&gt;2.2 各分类内容&lt;/h3&gt;
&lt;h4&gt;2.2.1 &lt;a href=&quot;http://nsdb.imcce.fr/obspos/OBS_COLL/&quot;&gt;NSDB&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The Natural Satellites DataBase (NSDB) 是一个专注于自然行星卫星（不包括月球）的天文数据库，它提供了用于动力学研究和星历表制作的天体测量观测数据。文中涉及的大部分数据来源于IMCCE，即天体力学和星历表计算研究所。&lt;/p&gt;
&lt;p&gt;但是NSDC之中的观测数据是分层分段的，例如si0001是包含(helene、Telesto、Calypso)在1982年到1985年在La silla 和Maunakea两个天文台的观测数据，相对NSDC来说是子集和全集的关系。观测的字段类别如下。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;行星编号&lt;/th&gt;
&lt;th&gt;儒略日&lt;/th&gt;
&lt;th&gt;x的坐标&lt;/th&gt;
&lt;th&gt;y的坐标&lt;/th&gt;
&lt;th&gt;坐标系纪元&lt;/th&gt;
&lt;th&gt;x计算差异值&lt;/th&gt;
&lt;th&gt;y计算差异值&lt;/th&gt;
&lt;th&gt;观测站编号&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;2444704.547&lt;/td&gt;
&lt;td&gt;42.4&lt;/td&gt;
&lt;td&gt;7.03&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0.183&lt;/td&gt;
&lt;td&gt;0.435&lt;/td&gt;
&lt;td&gt;809&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;2444704.583&lt;/td&gt;
&lt;td&gt;45.65&lt;/td&gt;
&lt;td&gt;6.9&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;-0.096&lt;/td&gt;
&lt;td&gt;0.413&lt;/td&gt;
&lt;td&gt;809&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;NSDC的优点是即使存在某些数据错误，但是其观测星表数据是按照一定的制式创建的，更加方便统一和整理。而且对应的每一个观测数据都有对应的解释文档。&lt;/p&gt;
&lt;p&gt;缺点是即使是按照一定的制式制作的，但是不同年限的数据规模仍有细微的区别，例如ji0008和ji0009是同一个人在同一时间发布的观测数据，但观测的数据类别仍有区别。&lt;/p&gt;
&lt;p&gt;&amp;lt;table&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr class=&quot;odd&quot;&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;Ji0008 Format&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;Ji0009 Format&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;even&quot;&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;1. JD of observation with decimals&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;2. Right ascension, degres&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;3. Declination, degres&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;1. JD of observation with decimals&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;2. Number os satellite, N sat&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;3. Delta Right ascension, degres&lt;em&gt;10^5&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;4. Delta Declination, degres&lt;/em&gt;10^5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;&lt;/p&gt;
&lt;p&gt;在Contents解释文档中提到了NSDC中的一些差异的计算方法和评估指标。以si001为例，观测值与计算值的差异：提到了使用P. Oberty的理论，由N. Emelianov计算出的观测值（O）与计算值（C）之间的差异，分别在X和Y方向上，记为O-C(X)e和O-C(Y)e。&lt;/p&gt;
&lt;h4&gt;2.2.2 &lt;a href=&quot;http://cdsweb.u-strasbg.fr/&quot;&gt;ST90&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;ST90目录包含了从1874年到1989年的大约51,000次观测，涵盖了超过3500个观测夜晚。ST90目录中的观测数据以一种一致的格式进行整理，这使得数据可以与理论位置进行比较。ST90目录的观测数据来源多样，包括了不同时期、不同观测者以不同格式发布的数据。这些数据需要被整理成单一且一致的格式以便比较。&lt;/p&gt;
&lt;p&gt;ST90目录中的观测数据可以被分类为七种不同的类型，包括：视向、对立和合的计时；视觉测微计测量；摄影天体测量；自动子午圈测量；CCD图像测量；相互事件的光度测量；以及哈勃空间望远镜观测。&lt;/p&gt;
&lt;p&gt;在COSS08目录中，由于其更高的准确性，一些ST90中的观测数据被重新减少的新数据所取代。例如，Tolbin的观测数据（在ST90中的参考代码为30）被重新减少（Tolbin 1991b）的新位置所取代，同样，Tolbin的观测数据（在ST90中的参考代码为33）被重新减少的观测数据（Tolbin 1991a）所取代。&lt;/p&gt;
&lt;h4&gt;2.2.3 &lt;a href=&quot;http://cdsweb.u-strasbg.fr/&quot;&gt;HT94&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Harper &amp;amp; Taylor (HT94) 编译了超过15000个新的基于地面的土星主要卫星观测数据，以便将分析理论拟合到观测数据中。他们使用的是扩展版的Strugnell &amp;amp; Taylor目录，包括了在Lick、Yerkes和Leander McCormick天文台之间1894年到1922年进行的观测，其中大部分是视觉测微计测量。&lt;/p&gt;
&lt;p&gt;HT94目录中的观测数据可以被分类为七种不同的类型，包括：视向、对立和合的计时；视觉测微计测量；摄影天体测量；自动子午圈测量；CCD图像测量；相互事件的光度测量；以及哈勃空间望远镜观测。&lt;/p&gt;
&lt;p&gt;观测数据的格式：HT94目录使用与ST90目录相同的格式，但添加了新的参数。这种格式使得观测数据能够与理论位置进行比较，并且所有观测数据都被整理在一个统一和一致的格式中。&lt;/p&gt;
&lt;h4&gt;2.2.4 &lt;a href=&quot;https://cdsarc.u-strasbg.fr/viz-bin/cat/J/A+A/493/1183&quot;&gt;COSS08&lt;/a&gt;&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;字段&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Opp&lt;/td&gt;
&lt;td&gt;观测对立次数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;日期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dt&lt;/td&gt;
&lt;td&gt;utc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cob&lt;/td&gt;
&lt;td&gt;观测站的代码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;crf&lt;/td&gt;
&lt;td&gt;标识观测数据的来源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;观测类型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;csob&lt;/td&gt;
&lt;td&gt;卫星代码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;csrf&lt;/td&gt;
&lt;td&gt;参考对象&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;f_Obs1, f_Obs2&lt;/td&gt;
&lt;td&gt;存在标志&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Obs1, Obs2&lt;/td&gt;
&lt;td&gt;第一和第二观测值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rfs&lt;/td&gt;
&lt;td&gt;参考系统&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rfr&lt;/td&gt;
&lt;td&gt;参考框架&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(O-C)1, (O-C)2&lt;/td&gt;
&lt;td&gt;第一和第二观测残差&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rf, ab, ph&lt;/td&gt;
&lt;td&gt;折射, 像差, 相位效应修正&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;字段&lt;/td&gt;
&lt;td&gt;说明&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opp&lt;/td&gt;
&lt;td&gt;观测对立次数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;日期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dt&lt;/td&gt;
&lt;td&gt;utc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cob&lt;/td&gt;
&lt;td&gt;观测站的代码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;crf&lt;/td&gt;
&lt;td&gt;标识观测数据的来源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;观测类型&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;J. Desmars制作的COSS08综合了1874-2007期间这四个星表的汇编。数据可以通过CDS（Centre de Données astronomiques de Strasbourg）访问，相比较于原本的目录增加了，观测类型、卫星代码、参考对象。存在标志、修正参数的字段，增强了观测目录的准确性和完整性。观测数据的类型一般包括如光学(phot)、电荷耦合器件(CCD)、大气现象(phen)等。&lt;/p&gt;
&lt;h2&gt;3. &lt;em&gt;海卫系统&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;./image/241110_02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;袁烨等在New precise positions in 2013–2019 and a catalog of ground-based astrometric observations of 11 Neptunian satellites (1847–2019) based on Gaia-DR2文中详细介绍了编制海王星卫星观测的完整目录的过程。&lt;/p&gt;
&lt;p&gt;整体的目标是提供新的、精确的位置，并编制一个目录，包括所有可用的海王星卫星的地面天文观测数据。观测结果以单一一致的格式制成表格，并以相同的时间尺度，即地球时间 （TT） 和参考系统，即国际天文参考系统 （ICRS） 给出，包括必要的更改和更正方法。最后在识别并纠正错误和遗漏后，编制了一份名为 OCNS2019的目录。所有观测到的绝对和相对坐标都被转换为 ICRS，并对相对于 Gaia-DR2 的卫星目录偏差进行了校正。开发并应用了现代和旧星表的新去偏差表，这些表以前没有基于 Gaia-DR2 提供。&lt;/p&gt;
&lt;p&gt;整体上看OCNS2019更像是COSS08的进阶版本，其不仅从根本上统一相对坐标和绝对坐标，而且剔除了很多脏数据。根本上的文章结构与J. Desmars实际上是类似的，因此并没有用很多的时间去梳理文章逻辑。&lt;/p&gt;
&lt;h3&gt;3.1 &lt;em&gt;数据来源&lt;/em&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;目录名称&lt;/th&gt;
&lt;th&gt;介绍&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gaia-DR2&lt;/td&gt;
&lt;td&gt;提供了非常精确的天体位置和运动参数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;地基观测&lt;/td&gt;
&lt;td&gt;使用丽江2.4米和姚安0.8米望远镜进行的CCD观测&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;天文数据库&lt;/td&gt;
&lt;td&gt;NSDC、MPC、JPL-SSD等&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;有些参考目录上面已经提及不再阐述。&lt;/p&gt;
&lt;h3&gt;3.2 OCNS2019&lt;/h3&gt;
&lt;p&gt;OCNS2019目录以一致的格式呈现，使用统一的时间标准（地球时，TT）和参考系统（国际天球参考系统，ICRS）。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;字段名称&lt;/th&gt;
&lt;th&gt;标签&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Opp&lt;/td&gt;
&lt;td&gt;对数编号&lt;/td&gt;
&lt;td&gt;观测的对数编号，标识特定的观测事件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;日期&lt;/td&gt;
&lt;td&gt;UTC日期，格式为YYYY/MM/DD.ddddddd，未修正光行差。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dt&lt;/td&gt;
&lt;td&gt;ET-UTC秒差&lt;/td&gt;
&lt;td&gt;地球时（ET）与协调世界时（UTC）之间的时间差，以秒为单位。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Obs&lt;/td&gt;
&lt;td&gt;观测站代码&lt;/td&gt;
&lt;td&gt;观测站的国际天文联合会（IAU）代码。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ref&lt;/td&gt;
&lt;td&gt;参考代码&lt;/td&gt;
&lt;td&gt;参考代码，用于标识数据来源或参考文献。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;观测类型&lt;/td&gt;
&lt;td&gt;观测类型，例如光学观测（O）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S&lt;/td&gt;
&lt;td&gt;观测卫星&lt;/td&gt;
&lt;td&gt;观测到的卫星编号。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sr&lt;/td&gt;
&lt;td&gt;参考卫星&lt;/td&gt;
&lt;td&gt;作为参考的卫星，例如海王星或其他卫星。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;f_Obs1&lt;/td&gt;
&lt;td&gt;第一观测标志&lt;/td&gt;
&lt;td&gt;第一观测值存在的标志（0=缺失，1=存在）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;f_Obs2&lt;/td&gt;
&lt;td&gt;第二观测标志&lt;/td&gt;
&lt;td&gt;第二观测值存在的标志（0=缺失，1=存在）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Obs1&lt;/td&gt;
&lt;td&gt;观测值1&lt;/td&gt;
&lt;td&gt;第一观测坐标值，例如赤经或位置角。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Obs2&lt;/td&gt;
&lt;td&gt;观测值2&lt;/td&gt;
&lt;td&gt;第二观测坐标值，例如赤纬或分离角。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sys&lt;/td&gt;
&lt;td&gt;参考系统&lt;/td&gt;
&lt;td&gt;观测数据所使用的参考系统，例如ICRS。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fr&lt;/td&gt;
&lt;td&gt;参考框架&lt;/td&gt;
&lt;td&gt;观测数据所使用的参考框架，例如地心或日心。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(O-C)1&lt;/td&gt;
&lt;td&gt;残差1&lt;/td&gt;
&lt;td&gt;观测值与理论值之间的残差（第一坐标）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(O-C)2&lt;/td&gt;
&lt;td&gt;残差2&lt;/td&gt;
&lt;td&gt;观测值与理论值之间的残差（第二坐标）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rf&lt;/td&gt;
&lt;td&gt;折射修正&lt;/td&gt;
&lt;td&gt;折射修正标志（0=已修正，1=假定已修正，2=未修正，3=未校正）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ab&lt;/td&gt;
&lt;td&gt;像差修正&lt;/td&gt;
&lt;td&gt;像差修正标志（0=已修正，1=假定已修正，2=未修正，3=未校正）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ph&lt;/td&gt;
&lt;td&gt;相位修正&lt;/td&gt;
&lt;td&gt;相位效应修正标志（0=已修正，1=假定已修正，2=未修正，3=未校正）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S2&lt;/td&gt;
&lt;td&gt;参考卫星(O-C)&lt;/td&gt;
&lt;td&gt;在计算观测残差时使用的参考卫星。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;4. &lt;em&gt;木卫系统&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;./image/241110_03.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在接下来对土卫的观测星表编制中，基本遵循海卫和土卫的大体思路构建。就现阶段而言首先是要先完成对NSDC中土星卫星观测数据的归纳整理和入库。&lt;/p&gt;
&lt;h3&gt;4.1 木卫情况&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;平均半径(km)&lt;/th&gt;
&lt;th&gt;质量(×10²²kg)&lt;/th&gt;
&lt;th&gt;半长轴(km)&lt;/th&gt;
&lt;th&gt;公转周期(地球日)&lt;/th&gt;
&lt;th&gt;轨道倾角(°)&lt;/th&gt;
&lt;th&gt;轨道离心率&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://baike.baidu.com/item/%E6%9C%A8%E5%8D%AB%E4%B8%80/0?fromModule=lemma_inlink&quot;&gt;木卫一&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Io&lt;/td&gt;
&lt;td&gt;1,821.30&lt;/td&gt;
&lt;td&gt;8.93&lt;/td&gt;
&lt;td&gt;421,700&lt;/td&gt;
&lt;td&gt;1.769&lt;/td&gt;
&lt;td&gt;0.04&lt;/td&gt;
&lt;td&gt;0.0041&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://baike.baidu.com/item/%E6%9C%A8%E5%8D%AB%E4%BA%8C/0?fromModule=lemma_inlink&quot;&gt;木卫二&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Europa&lt;/td&gt;
&lt;td&gt;1,560.80&lt;/td&gt;
&lt;td&gt;4.78&lt;/td&gt;
&lt;td&gt;671,034&lt;/td&gt;
&lt;td&gt;3.551&lt;/td&gt;
&lt;td&gt;0.47&lt;/td&gt;
&lt;td&gt;0.0094&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://baike.baidu.com/item/%E6%9C%A8%E5%8D%AB%E4%B8%89/0?fromModule=lemma_inlink&quot;&gt;木卫三&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Ganymede&lt;/td&gt;
&lt;td&gt;2,634.10&lt;/td&gt;
&lt;td&gt;14.8&lt;/td&gt;
&lt;td&gt;1,070,412&lt;/td&gt;
&lt;td&gt;7.155&lt;/td&gt;
&lt;td&gt;0.195&lt;/td&gt;
&lt;td&gt;0.0013&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://baike.baidu.com/item/%E6%9C%A8%E5%8D%AB%E5%9B%9B/0?fromModule=lemma_inlink&quot;&gt;木卫四&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Callisto&lt;/td&gt;
&lt;td&gt;2,410.30&lt;/td&gt;
&lt;td&gt;10.76&lt;/td&gt;
&lt;td&gt;1,882,700&lt;/td&gt;
&lt;td&gt;16.689&lt;/td&gt;
&lt;td&gt;0.281&lt;/td&gt;
&lt;td&gt;0.0074&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://baike.baidu.com/item/%E6%9C%A8%E5%8D%AB%E4%BA%94/0?fromModule=lemma_inlink&quot;&gt;木卫五&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Amalthea&lt;/td&gt;
&lt;td&gt;83.5&lt;/td&gt;
&lt;td&gt;0.208&lt;/td&gt;
&lt;td&gt;181,366&lt;/td&gt;
&lt;td&gt;0.498&lt;/td&gt;
&lt;td&gt;0.375&lt;/td&gt;
&lt;td&gt;0.0032&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://baike.baidu.com/item/%E6%9C%A8%E5%8D%AB%E5%85%AD/0?fromModule=lemma_inlink&quot;&gt;木卫六&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Himalia&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td&gt;0.66&lt;/td&gt;
&lt;td&gt;11,480,000&lt;/td&gt;
&lt;td&gt;250.566&lt;/td&gt;
&lt;td&gt;27.52&lt;/td&gt;
&lt;td&gt;0.157&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://baike.baidu.com/item/%E6%9C%A8%E5%8D%AB%E5%8D%81%E5%9B%9B/0?fromModule=lemma_inlink&quot;&gt;木卫14&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Thebe&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;0.43&lt;/td&gt;
&lt;td&gt;221,889&lt;/td&gt;
&lt;td&gt;0.674&lt;/td&gt;
&lt;td&gt;1.08&lt;/td&gt;
&lt;td&gt;0.012&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;木星有95颗卫星，它们中的大多数都较小—大约有60颗卫星的直径小于10公里。到2023年，木星在卫星数量上输给了土星；据NASA称，这颗环状行星有146颗卫星。木星的四个最大的卫星是木卫一、木卫二、木卫三和木卫四，它们因其发现者而被命名为伽利略卫星，与木星本身一样引人注目。&lt;/p&gt;
&lt;p&gt;最大的木卫三比水星还大，其被称为太阳系中最大的卫星。它甚至有自己的磁场！反之，木卫二具有极高的宜居潜力—有证据表明它冰冷的表面下有一片广阔的海洋。人们认为其含水量是地球的两倍。木卫一是太阳系中火山活动最为活跃的天体，其上有数百座火山。&lt;/p&gt;
&lt;p&gt;木卫四与水星的大小大致相同（准确地说是其直径的99%），它是我们太阳系中的第三大卫星。&lt;/p&gt;
&lt;h3&gt;4.2 目录分类&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;来源&lt;/th&gt;
&lt;th&gt;备注&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Natural Satellite Data Center (NSDC)&lt;/td&gt;
&lt;td&gt;提供了木卫观测资料的主要来源之一&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Centre de Données astronomiques de Strasbourg（CDS）&lt;/td&gt;
&lt;td&gt;提供了木卫观测资料的另一来源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JPL Solar System Dynamics Website (SSD)&lt;/td&gt;
&lt;td&gt;提供了木卫观测资料的另一来源&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;对于接下来的项目规划流程如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;flowchart TD
A[ CSD]
B[ MPC ]
C[ NSDC]
L[遗漏数据]
K[新数据]
A --&amp;gt; |次要|D[整合和校正数据]
B --&amp;gt; |次要|D
C --&amp;gt; |主要|D
K --&amp;gt; | |D
L --&amp;gt; | |D
D --&amp;gt; E[折射校正]
D --&amp;gt; F[时间尺度]
D --&amp;gt;  G[坐标校正]
E --&amp;gt; J[处理数据]
F --&amp;gt; J
G --&amp;gt; J
J --&amp;gt; H[计算残差]
J --&amp;gt; I[验证数据]
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Simple Guides for Fuwari</title><link>https://sues.fun/posts/240401_guide/</link><guid isPermaLink="true">https://sues.fun/posts/240401_guide/</guid><description>How to use this blog template.</description><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;本博客基于 &lt;a href=&quot;https://github.com/saicaca/fuwari&quot;&gt;Fuwari&lt;/a&gt; 模板构建，使用 &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt; 框架，部署在 Vercel。&lt;/p&gt;
&lt;h2&gt;文章 Frontmatter&lt;/h2&gt;
&lt;p&gt;每篇文章顶部需包含以下字段：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: 文章标题
published: YYYY-MM-DD
description: &apos;50字以内摘要&apos;
image: &apos;./image/YYMMDD_01.jpg&apos;
tags: [Tag1, Tag2]
category: Notes
draft: false
---
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;字段&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;published&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;发布日期，不加引号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;摘要，用单引号包裹，无内容写 &lt;code&gt;&apos;&apos;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;封面图路径，无图写 &lt;code&gt;&apos;&apos;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;最多 2 个，首字母大写英文&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;只能用：&lt;code&gt;Notes&lt;/code&gt; / &lt;code&gt;Work&lt;/code&gt; / &lt;code&gt;LOL&lt;/code&gt; / &lt;code&gt;Life&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;draft&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt; 则不显示在博客中&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;文件与目录规范&lt;/h2&gt;
&lt;p&gt;文章文件名格式：&lt;code&gt;YYMMDD_Title.md&lt;/code&gt;，平铺在 &lt;code&gt;src/content/posts/&lt;/code&gt; 根目录。&lt;/p&gt;
&lt;p&gt;图片统一存放在 &lt;code&gt;src/content/posts/image/&lt;/code&gt;，命名格式 &lt;code&gt;YYMMDD_01.png&lt;/code&gt;，引用时用 &lt;code&gt;./image/YYMMDD_01.png&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;src/content/posts/
├── image/
│   ├── 250104_01.png
│   └── 260315_01.jpg
├── 250104_Sofa.md
├── 260315_PentaKill.md
└── ...
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;常用命令&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pnpm dev --host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;启动本地开发服务器（支持局域网访问）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pnpm build&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;构建到 &lt;code&gt;./dist/&lt;/code&gt;（Vercel 自动执行，本地一般不需要）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pnpm preview&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;本地预览构建结果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pnpm astro check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;检查类型错误&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item></channel></rss>