Hermes Agent config.yaml 完全指南：模型、路由、故障转移
Hermes Agent 的全部行为由一个 YAML 配置文件控制——config.yaml。这篇文章用官方文档 + 真实配置，把模型配置、自定义提供商、故障转移、辅助模型等核心机制讲清楚，附带常见错误和标准写法。一、配置文件位置系统路径WindowsC:\Users\<用户名>\AppData\Local\hermes\config.yamlLinux / macOS~/.hermes/config.yaml配置文件由 hermes model 交互式向导生成，也可以直接编辑。每次修改后无需重启 Hermes，模型切换类配置立即生效。二、模型配置（model 节）model: 是配置文件的入口，决定默认使用哪个提供商和模型。标准写法model: default: sensenova-6.7-flash-lite # 模型名称 provider: custom:sensenova # 提供商 base_url: https://token.sensenova.cn/v1 # API 地址关键字段说明字段作用示例default默认模型名称sensenova-6.7-flash-liteprovider提供商标识custom:sensenova、openrouter、anthropicbase_urlAPI 端点地址https://token.sensenova.cn/v1context_length上下文窗口大小（tokens）131072max_tokens单次响应最大输出 tokens4096两个容易混淆的设置context_length = 总上下文窗口，输入 + 输出的合计预算。Hermes 用它决定何时压缩历史。max_tokens = 单次响应的输出上限。与对话历史长度无关。文档原文：context_length 是总上下文窗口——输入和输出 token 的合计预算。model.max_tokens 是输出上限——模型在单次响应中最多可生成的 token 数。模型 ID 别名default: 和 model: 作为键名效果完全相同：model: model: sensenova-6.7-flash-lite # 与 default 等价三、自定义提供商（custom_providers）当提供商不在 Hermes 一等支持列表中（如 SenseNova、LongCat、Together AI），使用 custom_providers: 定义。标准写法custom_providers: - name: SENSENOVA base_url: https://token.sensenova.cn/v1 key_env: SENSENOVA_API_KEY models: sensenova-6.7-flash-lite: context_length: 128000 deepseek-v4-flash: context_length: 1000000字段说明字段作用是否必须name提供商名称（用于 provider: custom:<name> 引用）是base_urlAPI 端点地址是key_envAPI Key 对应的环境变量名推荐models按模型覆盖上下文长度等参数可选api_modeAPI 协议类型可选extra_body每个请求附加的额外字段可选api_mode 可选值值适用场景chat_completionsOpenAI 兼容 API（默认）anthropic_messagesAnthropic 兼容代理命名自定义提供商的切换语法配置多个自定义端点后，用三段式语法在会话中切换：/model custom:local:qwen-2.5 # 使用 "local" 端点 + qwen-2.5 模型 /model custom:work:llama3-70b # 使用 "work" 端点 + llama3-70b 模型实战：Together AI 配置custom_providers: - name: together base_url: https://api.together.xyz/v1 key_env: TOGETHER_API_KEY model: default: MiniMaxAI/MiniMax-M2.7 provider: custom:together对应 .env 文件：TOGETHER_API_KEY=your-together-key实战：多个提供商组合custom_providers: - name: together base_url: https://api.together.xyz/v1 key_env: TOGETHER_API_KEY - name: groq base_url: https://api.groq.com/openai/v1 key_env: GROQ_API_KEY - name: perplexity base_url: https://api.perplexity.ai key_env: PERPLEXITY_API_KEY model: default: MiniMaxAI/MiniMax-M2.7 provider: custom:together四、一等提供商（无需 custom_providers）一等提供商（First-class providers） 是 Hermes 内置原生支持的提供商，有专属的 provider ID。核心特点：不需要 custom_providers: — 直接写 provider: deepseek 即可Hermes 自动处理特殊行为 — 如 Anthropic 的 token 自动刷新、xAI 的 prompt 缓存、Z.AI 的端点自动检测等专属 provider ID — 如 deepseek、anthropic、kimi-coding非一等提供商（如 SenseNova、LongCat、Together AI）则需要通过 custom_providers: 自定义配置。对比示例：# ✅ DeepSeek 是一等提供商，直接写 model: provider: deepseek default: deepseek-chat # ❌ 写成 custom 就多余了，失去了自动处理特殊行为的优势 custom_providers: - name: deepseek base_url: https://api.deepseek.com/v1 key_env: DEEPSEEK_API_KEY model: provider: custom:deepseek以下提供商内置支持，只需设置 API Key 环境变量，不需要 custom_providers:：提供商provider 值环境变量OpenRouteropenrouterOPENROUTER_API_KEYAnthropicanthropicANTHROPIC_API_KEYDeepSeekdeepseekDEEPSEEK_API_KEYz.ai / GLMzaiGLM_API_KEYKimi / Moonshotkimi-codingKIMI_API_KEYKimi 中国版kimi-coding-cnKIMI_CN_API_KEYMiniMaxminimaxMINIMAX_API_KEYMiniMax 中国minimax-cnMINIMAX_CN_API_KEY阿里 DashScopealibabaDASHSCOPE_API_KEY阿里 Coding Planalibaba-coding-planDASHSCOPE_API_KEY小米 MiMoxiaomiXIAOMI_API_KEY腾讯 TokenHubtencent-tokenhubTOKENHUB_API_KEYNovitaAInovitaNOVITA_API_KEYxAI / GrokxaiXAI_API_KEYHugging FacehuggingfaceHF_TOKENGoogle GeminigeminiGOOGLE_API_KEYNVIDIAnvidiaNVIDIA_API_KEYGMI CloudgmiGMI_API_KEYStepFunstepfunSTEPFUN_API_KEY一等提供商的标准配置：model: provider: deepseek default: deepseek-chat# .env DEEPSEEK_API_KEY=sk-xxx五、故障转移（fallback_providers）当主模型失败（速率限制、服务器错误、认证失败）时，Hermes 按顺序尝试备用提供商，不丢失对话。标准写法fallback_providers: - provider: openrouter model: anthropic/claude-sonnet-4 - provider: deepseek model: deepseek-chat旧版兼容写法（仍可用）fallback_model: provider: openrouter model: anthropic/claude-sonnet-4支持的故障转移提供商openrouter、nous、anthropic、gemini、zai、kimi-coding、kimi-coding-cn、minimax、minimax-cn、deepseek、nvidia、xai、huggingface、alibaba、custom 等。故障转移行为链按条目逐一尝试每个会话激活一次中途切换模型和提供商，不丢失对话仅通过 config.yaml 或 hermes fallback 配置六、辅助模型（auxiliary）即使使用 Nous Portal、Codex 或自定义端点，某些工具（视觉、网页摘要、压缩等）仍使用单独的"辅助"模型。默认行为默认 provider: auto，Hermes 将辅助任务路由到主聊天模型。自定义辅助模型auxiliary: vision: provider: custom:sensenova model: sensenova-6.7-flash-lite timeout: 120 web_extract: provider: auto timeout: 360 compression: provider: auto timeout: 120辅助任务列表任务配置键默认超时视觉分析vision120s网页摘要web_extract360s上下文压缩compression120s技能中心skills_hub30s审批approval30sMCPmcp30s标题生成title_generation30sTTS 音频标签tts_audio_tags30s分诊triage_specifier120sKanban 分解kanban_decomposer180s配置文件描述profile_describer60s策展人curator600s监控monitor60s后台审查background_review120sMoA 参考moa_reference600sMoA 聚合moa_aggregator600s七、上下文长度检测机制Hermes 使用多源解析链检测上下文窗口：配置覆盖 — config.yaml 中的 model.context_length（最高优先级）自定义提供商按模型 — custom_providers[].models.<id>.context_length持久缓存 — 之前发现的值（重启后保留）端点 /models — 查询服务器 APIOpenRouter API — 实时模型元数据models.dev — 社区维护的注册表回退默认值 — 默认 128K同一模型在不同服务商处可能有不同的上下文限制。例如 claude-opus-4.6 在 Anthropic 直连时为 1M，在 GitHub Copilot 上为 128K。八、常见错误与避坑错误 1：provider 值写错# ❌ 错误 provider: sensenova # ✅ 正确（自定义提供商用 custom: 前缀） provider: custom:sensenova错误 2：key_env 拼写错误# ❌ 错误——.env 里找不到这个变量 key_env: SENSENOVA_API_KEYS # ✅ 正确 key_env: SENSENOVA_API_KEY错误 3：context_length 设置过小智能体使用至少需要 16k–32k 上下文。系统 prompt 加工具 schema 就可能占用 4k–8k tokens。# ❌ 太小 context_length: 4096 # ✅ 推荐 context_length: 131072错误 4：一等提供商误用 custom_providersDeepSeek、阿里 DashScope 等一等提供商不需要 custom_providers:，直接写 provider: 即可：# ❌ 多余 custom_providers: - name: deepseek base_url: https://api.deepseek.com/v1 key_env: DEEPSEEK_API_KEY model: provider: custom:deepseek # ✅ 正确 model: provider: deepseek default: deepseek-chat错误 5：base_url 末尾缺少 /v1# ❌ 缺少 /v1 base_url: https://token.sensenova.cn # ✅ 正确 base_url: https://token.sensenova.cn/v1九、hermes model 与 /model 的区别命令运行位置功能hermes model终端（任何会话之外）完整配置向导——添加提供商、OAuth、输入 API Key/modelHermes 聊天会话内部在已配置的提供商和模型之间快速切换想切换到尚未配置的提供商，必须退出会话（Ctrl+C 或 /quit），运行 hermes model，完成配置后再开新会话。十、完整配置示例一个典型的多提供商 + 故障转移 + 辅助模型配置：model: default: sensenova-6.7-flash-lite provider: custom:sensenova base_url: https://token.sensenova.cn/v1 custom_providers: - name: SENSENOVA base_url: https://token.sensenova.cn/v1 key_env: SENSENOVA_API_KEY models: sensenova-6.7-flash-lite: context_length: 128000 deepseek-v4-flash: context_length: 1000000 - name: LongCat base_url: https://api.longcat.chat/openai key_env: LONGCAT_API_KEY models: LongCat-2.0-Preview: context_length: 1000000 max_output_tokens: 128000 fallback_providers: - provider: custom:LongCat model: LongCat-2.0-Preview auxiliary: vision: provider: custom:sensenova model: sensenova-6.7-flash-lite timeout: 120 web_extract: provider: auto timeout: 360 compression: provider: auto timeout: 120对应 .env：SENSENOVA_API_KEY=sk-xxx LONGCAT_API_KEY=sk-xxx总结配置项核心要点model:入口，指定默认提供商和模型custom_providers:非一等提供商用此定义，支持多端点fallback_providers:主模型失败时自动切换，不丢对话auxiliary:辅助任务可单独指定更便宜的模型context_length总上下文窗口，智能体至少 32kmax_tokens单次输出上限，与上下文长度无关配置文件是 Hermes 行为的核心。理解 model → custom_providers → fallback_providers → auxiliary 这四层结构，就能覆盖 99% 的使用场景。
现有简略版services: gateway: image: nousresearch/hermes-agent:latest container_name: hermes restart: unless-stopped volumes: - ./data:/opt/data environment: - HERMES_UID=${HERMES_UID:-10000} - HERMES_GID=${HERMES_GID:-10000} - TZ=Asia/Shanghai command: ["gateway", "run"]带后台面板完整版services: gateway: image: nousresearch/hermes-agent:latest container_name: hermes-gateway restart: unless-stopped volumes: # 前后端容器必须挂载相同的宿主机目录，作为统一的数据源 (SSOT) - ./data:/opt/data environment: # 映射权限，确保容器内部进程对挂载的数据卷拥有读写权限 - HERMES_UID=${HERMES_UID:-10000} - HERMES_GID=${HERMES_GID:-10000} - TZ=Asia/Shanghai # 执行网关核心进程 command: ["gateway", "run"] dashboard: image: nousresearch/hermes-agent:latest container_name: hermes-dashboard restart: unless-stopped depends_on: # 依赖控制，确保在网关启动后再拉起前端面板 - gateway volumes: # 必须与 gateway 保持完全一致的挂载路径 - ./data:/opt/data ports: # 将宿主机的 9119 端口映射至容器内部的 9119 端口 # 限制 127.0.0.1 可阻断公网直连，后续通过宿主机反向代理 (如 1Panel 的 OpenResty) 访问 - "127.0.0.1:59118:9119" environment: - HERMES_UID=${HERMES_UID:-10000} - HERMES_GID=${HERMES_GID:-10000} - TZ=Asia/Shanghai # Dashboard 的 HTTP Basic 身份验证配置 - HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin - HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=admin # 覆盖默认命令，拉起前端面板 # 容器内部必须监听 0.0.0.0，以便 Docker Bridge 网络能够正常转发外部请求 command: ["dashboard", "--host", "0.0.0.0", "--no-open"]
清理Windows“运行”窗口（快捷键：Win + R）的历史命令可以采用以下方法。方法一：通过“文件夹选项”清理这是最基础的图形界面清理方式，会同时清理文件资源管理器的地址栏历史。按下 Win + E 打开文件资源管理器。打开“文件夹选项”：Windows 11： 点击顶部菜单栏的“...”（查看更多），选择“选项”。Windows 10： 点击顶部菜单栏的“查看”选项卡，然后点击右侧的“选项”。在弹出的“文件夹选项”窗口中，停留在“常规”选项卡。找到底部的“隐私”区域，点击“清除文件资源管理器历史记录”右侧的“清除”按钮。点击“确定”关闭窗口。再次打开“运行”窗口时，历史记录已清空。方法二：通过注册表编辑器清理（可选择性删除特定命令）如果你只想删除某一条特定的历史命令，或者方法一未能完全清理，可以直接修改注册表。按下 Win + R，输入 regedit 并按回车，打开注册表编辑器。在顶部地址栏中粘贴并导航至以下路径： HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU在右侧的窗格中，你会看到名称为 a, b, c 等字母的字符串值，它们的数据栏即为你之前输入过的历史命令。清理单条： 找到你想要删除的那条命令对应的字母（例如 a），右键点击它并选择“删除”。同时需要双击 MRUList，将数据中的字母 a 删掉以保持顺序正确。清理全部： 框选除 (默认) 之外的所有项（包括所有的字母和 MRUList），右键选择“删除”。关闭注册表编辑器，更改会立即生效。
修改默认主机名root@drls-260620:~# # 将 "new-hostname" 替换为你想要设置的新主机名 hostnamectl set-hostname new-hostname # 查看当前的主机名状态，确认是否修改成功 hostnamectl修改默认端口号root@drls-260620:~#打开 SSH 配置文件：在终端中输入以下命令，然后按回车键：nano /etc/ssh/sshd_config修改端口号：找到写着 #Port 22 的这一行，把 22 删掉，改成你想要的端口，比如 26022。修改完之后，这一行应该变成这样（前面不能有 # 号）：Port 26022保存并退出：在 nano 编辑器里保存文件，需要用到键盘上的快捷键组合：按下 ​Ctrl + O​（字母 O，不是数字 0）。屏幕最底下的白条会提示你确认文件名，这时候​直接按一次回车键 (Enter)​。按下 Ctrl + X 退出编辑器，此时你应该又看到了熟悉的 root@drls-260620:~# 提示符。最后重启 SSH 服务使之生效：在终端中输入以下命令，然后按回车键：systemctl输入完回车后，通常不会有任何提示直接跳到下一行，这就说明重启成功了。使用密钥对登录第一阶段：在本地电脑生成密钥对请在你的本地电脑（自己的电脑，不是服务器）上操作：打开本地终端​：按下键盘上的 Win + R 键，输入 cmd 并回车。​生成密钥对​：在弹出的黑窗口中，输入以下命令并按回车：ssh-keygen -t ed25519一路敲回车：系统会询问你三个问题（保存路径、私钥密码、确认密码），看到屏幕上出现一个字符组成的方块图案，说明生成成功。第二阶段：将公钥部署到服务器登录服务器，在服务器上添加公钥公钥写入 ~/.ssh/authorized_keys公钥权限 600目录权限 700第三阶段：测试密钥登录（核心安全检查）注意：在确保密钥登录成功之前，千万不要关闭当前的连接窗口！打开一个新的本地电脑终端窗口，或者在你的 SSH 软件中新建一个连接，测试使用密钥登录：如果成功登录，说明“指纹锁”已完美生效，请继续执行第四阶段。如果提示需要密码或报错，请仔细检查第二阶段的权限设置和公钥内容是否完整。第四阶段：修改配置文件，彻底禁用密码既然密钥已经测试通过，现在可以安全地封死密码登录的后路了。在服务器命令行中操作：# 这一行是把带有注释的密码允许项改为 no sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config # 这一行是把没有注释的密码允许项也改为 no sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config # 重启 SSH 服务，让配置瞬间生效 systemctl restart sshd系统更新标准执行命令更新软件源列表：此命令不会修改系统文件，仅用于从服务器同步最新的软件清单。apt update升级所有已安装的系统组件和软件：此命令会根据第一步获取的清单，自动下载并安装所有可用的安全补丁和软件更新。-y 参数表示在所有确认提示中自动输入 yes。apt upgrade -y清理冗余依赖（可选操作）：系统升级后，可能会遗留一些旧版本不再使用的依赖包。执行此命令可以释放磁盘空间。apt autoremove -y
Typecho 目前在用Docker Compose代码存档：services: typecho: image: joyqi/typecho:nightly-php8.2-apache container_name: blog restart: always ports: - "80:80" environment: - TZ=Asia/Shanghai - TYPECHO_DB_ADAPTER=Pdo_SQLite - TYPECHO_DB_FILE=/app/usr/database.db volumes: - ./blog:/app/usr
今天在使用 Excel 进行字符替换的时候，忽然遇到了一个小问题。如图，想把单元格值为 0 的进行清空方便统计：Ctrl + H 常规操作，查找内容输入 0，进行替换。结果发现真特么替换得太干净了，连带着正常数字里的 0 都被干掉了，完全不是我想要的效果：我需要的效果是：只替换单元格内容仅为 0 的单元格为空白。这就尴尬了，于是 Google 了一番，发现方法其实很简单：在替换选项中勾选“单元格匹配”（或“匹配整个单元格内容”）即可。以下为正确方法替换后的结果，完美达到预期：
Base64 并不是一种"加密"（Encryption），而是一种"编码"（Encoding）。加密的目的是为了隐藏信息，而编码的目的是为了传输信息。Base64 的核心作用是将二进制数据（如图片、复杂的加密密钥、证书等）转换成 64 个安全的可打印字符（A-Z, a-z, 0-9, +, /），它的存在解决了以下几个核心痛点：解决"不可打印字符"的传输崩溃在 URL 和文本格式中嵌入数据统一数据格式如果你担心在线网站会记录你的关键信息，最安全的方法就是在本地环境进行解码。任何现代浏览器（Chrome、Edge、Safari）都自带了解码工具，数据只在你的电脑内存中处理。操作步骤：在浏览器任意页面按 F12（或右键点击"检查"）。切换到 Console（控制台）选项卡。输入以下命令并回车（将引号内的内容替换为你的 Base64 字符串）：atob("在这里输入你的Base64字符串")控制台会立刻显示出解码后的内容。推荐使用 F12 控制台解码的原因：本地执行： 当你输入 atob() 命令时，所有的计算和转换都是在你电脑的内存中完成的。无网络传输： 这个过程不需要向任何服务器发送请求。你可以试着在断开网络的情况下按 F12 进行解码，它依然能正常工作，这证明了数据从未离开过你的设备。无持久化记录： 除非你手动点击了控制台的"保存日志"功能，否则一旦你关闭该标签页或刷新页面，内存中的这些临时变量和解码结果就会被彻底清除。
“我活不活无所谓，我只要你死。”哪吒撞向天元鼎的身影，不是英雄的凯歌，而是困兽在绝境中崩断锁链时，溅出的带火星的碎片。这不再是那个空喊“我命由我不由天”的热血少年，却爆发出一种更原始、更决绝、也更令人心悸的力量。电影前半段，哪吒其实和我们大多数人一样，被无形的规则推着走。参加升仙考核，抓土拨鼠……他没问为什么，也没想过后路，像极了普通的你我，在生活的齿轮下，按部就班，做个沉默的牛马。压迫来了？忍着。干活？干着。只要最后能换到想要的东西——救敖丙的升仙令——就好。这是一种被驯化的“成熟”，一种在庞大规则面前的暂时性妥协。“可能是我老了，没力气再去和这个世界碰撞。” 龙王敖光这句疲惫的低语，像深海涌出的叹息，道尽了这种妥协背后的沉重代价。衰老，从来不是年岁的增加，而是体内那点敢于“碰撞”的勇气，在一次次退让中熄灭了火光。然而，底线在哪里？对于哪吒，是父母，是陈塘关那些曾经惧怕他又接纳他的百姓；对于敖光，是敖丙，是龙族最后一点血脉的尊严；对挣扎求存的妖族，底线就是生命本身——最原始也最不容侵犯的根基。当无量仙翁的贪婪之手，无情地碾过这条线，把陈塘关百姓炼作丹药，把龙族尊严踩在脚下，把妖族的性命视作草芥时，一切“成熟”的伪装都被瞬间撕碎。于是，那沉寂的火山爆发了。“既然他想要我们的命，那我们就用这条命和他们拼了！” 这不再是哪一个人的宣言，而是所有被逼到悬崖边的生灵，从灵魂深处迸发出的、最本能的怒吼。哪吒那句“我活不活无所谓，我只要你死”，不再是少年意气的口号，而是将生命本身化作最沉重砝码，狠狠砸向天平另一端的宣言。当命都不要了，那些高高在上的权力、法力、规则，瞬间失去了所有威慑。于是我们看到：敖光目睹爱子将亡的幻象，眼中熄灭的火焰重新燃烧；申公豹在失去所有后，反而了无牵挂，将仙丹塞给弟弟时，眼底是决然的微光；石矶娘娘残躯只剩一点，也要喊出“太好了，还剩一点点！”的顽强。反抗，在此刻不再是抽象的哲学命题，而是用头颅撞向青铜巨鼎的物理轰鸣，是用血肉之躯在绝境中硬生生撕开的一道裂缝。真正的反抗，并非为了虚妄的口号或宏大的叙事，而是为了守护那些具体的人，具体的爱，具体的底线。是为了不让所爱之人的血肉，成为霸权祭坛上冰冷的薪柴。走出影院，那句“我活不活无所谓，我只要你死”依然在血脉里奔涌。它如此暴烈，如此不计后果，却像一把锋利的匕首，精准地挑开了文明社会温顺表皮下的真实筋骨。当退让换来的只是更深的奴役和彻底的毁灭，那么，以命相搏就不再是疯狂，而是对生命尊严最悲壮、也最彻底的确认。在这个“内卷”令人窒息、“躺平”弥漫无奈的时代，多少人正在无声的妥协中，一点点磨平了曾经“碰撞”的棱角？《哪吒之魔童闹海》用这近乎惨烈的“撞鼎”，如同一声惊雷，提醒着我们：总有一些底线，值得用生命去丈量；总有一些时刻，“不知天高地厚”的碰撞，才是对抗衰老、对抗驯化、对抗命运碾压的唯一武器。那撞墙的愚者，留下的不仅是回响，更是给所有尚在忍耐、尚未绝望的凡人，点燃的一簇不肯熄灭的火苗。
金庸的庙堂，古龙的酒馆：一种人间，两处江湖
江湖有两种写法，一种是金庸笔下的“庙堂与山河”，另一种是古龙笔下的“人心与烈酒”。前者是史，后者是诗。金庸提笔是山河浩荡，是襄阳城头的烽火、华山论剑的豪情，是郭靖以血肉之躯镇守国门的悲壮，是张无忌在光明顶上调和正邪的苦心。他的江湖扎根于历史缝隙，侠客们背负家国大义，像一尊尊青铜鼎，铭刻着“侠之大者，为国为民”的儒家训诫。而古龙落墨时，撕掉了历史的标签，他的江湖是虚空的、永恒的。江湖成了一壶烈酒，是李寻欢咳嗽声里飞出的刀光，是楚留香指尖拈过的海棠，是傅红雪拖着跛足走出的长夜。这里没有君王与朝代，只有人性的修罗场——脆弱者自毁，孤傲者独行，痴情人饮鸩止渴，浪子醉倒在月光下。个人更钟情于后者，因为古龙的江湖里，英雄不必背负家国大义，侠客也无需困守道德枷锁。他们可以脆弱、矛盾，甚至荒诞，却也因此更接近人性的真实。金庸善写“完人”。郭靖的憨厚、杨过的痴情、令狐冲的洒脱，皆是道德与天赋熔铸的标本。他们的苦难像一场精心设计的淬炼，只为将璞玉雕琢成圭臬。但古龙笔下尽是“痴人”。李寻欢把爱人拱手相让，用自毁成全虚伪的道义；叶开笑着咽下血仇，将宽恕化作刺向宿命的刀；花满楼目不能视，却在黑暗中捧出比光明更灼热的温柔。这些角色从神坛跌落，带着伤痕与私欲，却在泥泞中活成了人的模样——伟大从不是他们的使命，他们只是在深渊边徘徊时，顺手点燃了一盏灯。古龙的文字像酒，醉意比真相更浓。他写“冷风如刀，以大地为砧板，视众生为鱼肉”，三句话劈开江湖的荒诞；写“天涯远不远？不远，人就在天涯”，把漂泊酿成一句偈语。金庸的武功有招有式，降龙十八掌暗藏《周易》玄机；古龙的刀剑却无迹可寻，小李飞刀“例不虚发”四字，便让千万读者自行填补了所有想象。这种留白如同水墨画的余韵，武功不再是杀人的技艺，而是人心的投射——傅红雪的刀斩不断恩怨，只劈得开自己的心魔；陆小凤的灵犀一指夹住天下兵刃，却夹不住红尘纷扰。我爱古龙的江湖，恰因它容得下凡人。金庸的英雄是庙堂上的松柏，世人仰望其高洁；古龙的侠客是野地里的荆棘，在裂缝中肆意生长。杨凡（《大人物》）生得矮胖平庸，却能以赤子心破江湖局；王怜花亦正亦邪，不屑用标签掩饰复杂的人性。他们像极了现代社会的我们：不必做郭靖般的圣人，但可以如叶开在仇恨中选择宽恕，如花满楼在残缺中拥抱光明。古龙不说教，他只把血淋淋的人性丢进江湖，看他们在浊世里沉浮、挣扎、破碎，再从尘埃里开出一朵花来。江湖从未消逝。当金庸的侠客在历史长卷中挥剑时，古龙的角色正蜷缩在酒馆角落，与每一个孤独的现代人碰杯。他们的故事不是史诗，而是一面镜子——照见我们的怯懦、偏执、不甘与热望。正如《天涯·明月·刀》里那句呓语：“天涯远不远？不远。人就在天涯，天涯怎么会远？”或许真正的江湖不在山河远阔，而在我们直面自我的那一瞬。那里有古龙斟好的酒，足够让所有独行者，痛饮一生。
最近几年个人其实没有什么特别好用的企业邮局，zoho mail网上口碑挺好的，但免费版本因为不支持客户端收信，所以一直花钱使用的zoho最便宜的版本，一年几十快钱的那个，别名功能挺好用。但zoho此前有一次忽然在iPhone上无法收取邮件，提示密码错误，而我却未换手机未改密码，还以为是系统bug，等了两天仍然错误，各种尝试后无果遂联系客服，被告知是他们那边的问题，已帮我修复解决。此后心里一直耿耿于怀，对该家有一个“不太稳定”的定性，但可能的确是小概率事件。前几天在网上搜索企业邮局相关，搜到了Larksuite（我知道的似乎有点晚了）。感觉挺好用，于是放弃了今年7月份到期的zoho，直接使用了Larksuite，巧的是，Larksuite也支持邮箱别名。在Larksuite和Cloudflare的电子邮件路由之前来回切换了三四次，最终还是换回了Larksuite。在几次切换的过程中，放弃Larksuite的原因主要以下几条：不支持Catch-all；强制使用客户端生成密码；后续如果不使用了，要考虑邮件迁移；收信速度较慢，使用A邮箱向B、C邮箱及Larksuite邮箱同时发送邮件，B、C邮箱在iPhone自带邮件内推送新邮件，但Larksuite未推送，登陆Larksuite网页能看到新邮件，APP或Windows客户端均能看到新邮件，iOS自带邮件延迟约1~5分钟方能收到。而最终没有选择Cloudflare的原因主要以下几条：不能自定义发件人，电子邮件 Workers据说可以？但未深入研究；专门注册了一个Hotmail邮箱作为收件人，但Hotmail一直把我测试发送的邮件，临时注册网站测试功能的注册邮件放入垃圾箱，移至收件箱后，同样发件人发送邮件，仍然在垃圾箱。当然，这个不怪CF；开通Catch-all，设置SPF，用其他邮件给自己发了一封信测试泛邮箱，test@test.xyz，收到信件的同时，还收到一封test@test.xyz发往test@test.xyz的邮件，而且是诈骗邮件，要求我转usdt。注意：Larksuite是飞书的国际版本，字节跳动旗下产品，但不允许国内用户注册。另，Larksuite的邮箱客户端密码，必须强制使用客户端生成，web页面、iOS APP均不显示该功能，但完成之后客户端可留可删，因为我禁止自启动，硬盘空间暂时宽裕，所以未卸载。就这个问题我在网上查了好几个小时，终于在下面的网站找到该要求，为表感谢，附上链接及相关描述。以下内容来源：https://www.cnbeining.com/2023/07/larksuite-as-email-provider-with-custom-domain-and-adding-catch-all-for-larksuite-with-mxguarddog/Lark 的一些好处：50 个免费帐户免费协作软件使用Lark Minutes免费转录音频200GB 共享电子邮件存储空间100GB共享存储，单个文件小于250MB无限自定义电子邮件域！可用的电子邮件迁移工具支持 IMAP但并非没有限制：字节跳动是一家拥有 TikTok 的中国公司——在隐私和安全方面有着不良记录不支持Catch-allIMAP应用程序密码只能从客户端而不是 Web 生成