[{"title":"AI时代底层书单——卡兹克推荐的10本书","url":"/2026/06/18/AI时代底层书单——卡兹克推荐的10本书/","content_type":"note","content_type_label":"过程笔记","subtype":"reading","summary":"卡兹克 2026-06-18 推荐的一份\"没有一本是关于 AI 的\"AI 时代书单，主张用底层能力应对 AI 时代的不确定性。","content":"看到卡兹克老师今天发的一份书单，主题很有意思——「没有一本是关于 AI 的」。 作者的核心观点是：决定你能不能把 AI 用好的，从来都不是你对 AI 了解多少，而是那些可能跟 AI 毫无关系的底层能力。AI 本身在进步、工具会迭代、模型会换代，今天的技巧明天可能被淘汰；但人的很多底层能力和认知，是不会过期的。 这 10 本书横跨 1950–2026 年，从控制论到传播学到复杂系统到哲学到战略思维，加在一起构成了一个”在 AI 时代活得好的底层方法论”。 10 本书速览 # 书名 作者 核心一句话 1 《失控》 凯文·凯利 (1994) AI 是涌现出来的系统——放弃控制才能获得控制 2 《人有人的用处》 诺伯特·维纳 (1950) AI 协作的核心是反馈回路,人和 AI 的差距就是反馈质量 3 《系统之美》 德内拉·梅多斯 警惕”舍本逐末”——AI 加速流量的同时在悄悄消耗你的存量 4 《事实》 汉斯·罗斯林 给 AI 的 prompt 背后是你的世界观,世界观歪答案就歪 5 《理解媒介》 马歇尔·麦克卢汉 (1964) 别用后视镜看 AI——问”什么以前不可能的事现在可能了” 6 《反脆弱》 塔勒布 杠铃策略:一头守住底牌,一头激进试新工具,中间最危险 7 《一生的旅程》 罗伯特·艾格 (迪士尼前CEO) AI 时代每个人都是管理者——聚焦、不确定中决断、管创意型人才 8 《千面英雄》 约瑟夫·坎贝尔 把信息变成叙事、把产品变成意义,是 AI 时代最值钱的能力之一 9 《第一哲学沉思集》 笛卡尔 “我思故我在”——定期停下来怀疑一切,经过怀疑还能站住的才靠得住 10 《毛泽东选集》 毛泽东 战略思维教材——“没有调查就没有发言权”,问题就是事物的矛盾 整张书单的暗线 这些底层能力,不会因为模型升级而过期,不会因为工具迭代而失效。因为它们从来就不是关于 AI 的,它们是关于人的。 个人备忘:3 本先读的优先级 想搞清怎么跟 AI 协作 → #2 维纳（反馈回路）+ #7 艾格（管理方法论） 想搞清 AI 时代怎么思考 → #5 麦克卢汉（后视镜思维）+ #3 梅多斯（系统&#x2F;存量） 想搞清底层认知框架 → #9 笛卡尔（怀疑一切）+ #10 毛选（战略） 来源: 卡兹克, 2026-06-18（QQ 内看到分享的抖音链接 YZKv1tDnAi6j79,原文首发于卡兹克公众号&#x2F;同名平台,搜索”卡兹克 AI 时代必读”可找到完整长文）。本篇为笔记整理,具体解读以原作者长文为准。","categories":["内化"],"tags":["AI","读书","书单","卡兹克"],"date":"2026-06-18","external_url":""},{"title":"openclaw skill 创建与配置","url":"/2026/04/13/openclaw-skill-创建与配置/","content_type":"note","content_type_label":"过程笔记","subtype":"learning","summary":"记录 OpenClaw Skill 的创建方式、目录优先级、配置位置与使用 skill-creator 的注意事项。","content":"详情请查阅https://docs.openclaw.ai/zh-CN/skills，本文是针对使用到的skill场景进行记录 创建 skill让agent创建skill，建议明确制定使用skill-creator skill，不然模型可能创建出来的skill不符合规范格式，导致openclaw无法识别。 skill-creator skill 是元skill，无需自己安装。可以使用类似指令创建skill： 1请你使用skill-creator skill创建一个skill，skill的用途是用于个人网站的友链管理。 skill 位置与优先级 自定义位置：在openclaw.json中配置skills.load.extraDirs配置，指定skill的存储路径。 内置skills：内置在openclaw中，比如skill-creator skill。 托管式&#x2F;本地 skills: .openclaw&#x2F;skills 目录下的skill文件，该目录下的skills所有agent共享。 工作区skills：在每个agent自己的工作区中&lt;workspace&gt;/skills目录下的skill文件。 Note: 针对名称冲突，优先级是：工作区skill -&gt; 托管式&#x2F;本地 skills -&gt; 内置skill -&gt; 自定义位置。 Q&amp;A 为什么创建skill但是openclaw没有识别到？ 很有可能是模型创建出来的skill不符合规范格式，导致openclaw无法识别。比如，缺少name字段。 参考文档 https://docs.openclaw.ai/zh-CN/skills","categories":["人工智能"],"tags":["Agent","OpenClaw","Skill"],"date":"2026-04-13","external_url":""},{"title":"LLM Post-Training 学习指南：ms-swift / verl / OpenRLHF / MiniMind","url":"/2026/04/13/llm-post-training-learning-guide/","content_type":"note","content_type_label":"过程笔记","subtype":"learning","summary":"对比 ms-swift、verl、OpenRLHF 与 MiniMind，规划从轻量复现到分布式 RLHF 的后训练学习路径。","content":"这四个框架覆盖了从入门到大规模生产的完整 RLHF &#x2F; Post-training 学习路径。 背景概览 框架 来自 核心定位 特色 ms-swift ModelScope 阿里 全链路微调框架 SFT + 偏好学习 + GRPO 族，Megatron 并行 verl ByteDance 字节 高性能 RL 训练库 PPO&#x2F;GRPO，VLM 支持，FSDP&#x2F;Megatron 双后端 OpenRLHF OpenRLHF 社区 工业级 RLHF Ray + vLLM 分布式，70B+ 全量微调 MiniMind 龚一淳 (个人) 入门教育 + 轻量级复现 全流程从0实现，$3 &#x2F; 2小时，单卡可跑 一、MiniMind（⭐入门首选）推荐理由： 代码纯净，核心算法全部从0用 PyTorch 原生实现，不依赖第三方 RL 库封装，非常适合理解底层原理。 🌟 最小 26M 参数，GPT-3 的 1&#x2F;7000 💰 $3 成本 + 单卡 3090，2小时训完整流程 📖 从0原生实现 PPO &#x2F; GRPO &#x2F; CISPO &#x2F; DPO 🔧 Tool Calling + Adaptive Thinking + YaRN 长文本外推 🖼️ 支持视觉多模态 MiniMind-V 学习路线： 1234Day 1: 环境搭建 + 跑通最简流程Day 2: 全流程实验 Pretrain → SFT → LoRA → DPODay 3: RLHF 强化学习 PPO/GRPO/CISPODay 4: 高级特性 YaRN / Tool Calling / Adaptive Thinking 资源： GitHub: https://github.com/jingyaogong/minimind 文档: https://minimind.readthedocs.io/ 二、ms-swift（工业级入门）推荐理由： 全链路覆盖，文档最友好，国内生态最完善。 支持算法：DPO, KTO, GRPO, DAPO, GSPO, SAPO, CISPO, RLOO, Reinforce++ 支持 vLLM &#x2F; SGLang &#x2F; LMDeploy 推理加速 Megatron TP&#x2F;PP 并行 + Web-UI 训练界面 多模态 VLMs 支持 学习路线： 123Day 5-6: 环境搭建 + SFT + DPO/KTO 偏好学习Day 7: GRPO 强化学习实战Day 8: Megatron 并行 + 多模态支持 资源： GitHub: https://github.com/modelscope/ms-swift 三、verl（算法深度）推荐理由： 字节最佳实践，算法实现最专业，VLM 支持最好。 DAPO 算法官方实现 VLM recipe: Qwen2.5-vl, Kimi-VL Multi-turn Rollout with Tools 支持 AMD &#x2F; Ascend 多硬件 学习路线： 123Day 9: verl 核心架构 Actor/Critic/Reward/RefDay 10: GRPO + 多 GPU 扩展Day 11: VLM + Agent 工具调用 资源： GitHub: https://github.com/volcengine/verl 文档: https://verl.readthedocs.io/ 四、OpenRLHF（大规模生产）推荐理由： 生产级稳定性，支撑大规模训练，EMNLP 2025 Demo Paper。 Ray 分布式调度 + vLLM Rollout Engine ZeRO 训练引擎 70B+ 全量微调支持 Hybrid Engine（推理训练分离） 学习路线： 123Day 12: OpenRLHF 架构解析Day 13: 高级特性 Packing / Dynamic Filtering / 调参Day 14: 多节点集群部署 资源： GitHub: https://github.com/openrlhf/openrlhf 推荐学习路线（四框架顺序）1234567MiniMind（零基础入门，理解原理） ↓ms-swift（工业级框架，掌握全流程） ↓verl（算法深度，字节最佳实践） ↓OpenRLHF（大规模生产部署） 实战项目建议项目1（入门）：MiniMind 全流程 用 MiniMind 跑通 Pretrain → SFT → DPO → GRPO 全流程，观测 loss 曲线。 项目2（工程）：小模型 RLHF 对齐 用 ms-swift，对 7B 模型做 SFT → GRPO，对比 DAPO vs GRPO vs Reinforce++。 项目3（研究）：推理模型蒸馏复现 参考 MiniMind-Reason，复现 DeepSeek-R1 的 GRPO + Reward + Verification 流程。 项目4（生产）：多 GPU 分布式 RLHF 用 OpenRLHF Hybrid Engine，配置 70B 模型的多节点 RLHF 训练。","categories":["技术笔记"],"tags":["LLM","Post-Training","RLHF","ms-swift","verl","OpenRLHF","MiniMind"],"date":"2026-04-13","external_url":""},{"title":"openclaw针对不同场景分配模型","url":"/2026/04/11/openclaw针对不同场景分配模型/","content_type":"note","content_type_label":"过程笔记","subtype":"experiment","summary":"根据任务复杂度为 OpenClaw 中不同 Agent 配置主模型、回退模型与本地嵌入模型。","content":"不同场景下，openclaw需要负责不同的任务，任务有需要较强的推理，也有不需要推理。所以对不同场景下的任务，openclaw需要分配不同的模型。比如设计了两个agent，一个sido，一个personal-web-manager，sido负责简单的问题，以及分配任务给personal-web-manager，只需要性能相对弱的模型。personnal-web-manager负责个人网站管理，需要代码撰写，博客管理等工作，需要较强的推理能力的模型。还有对记忆的嵌入模型的选择等。 盘点目前已经拥有的可以使用的供应商： minimax：订阅了plus套餐，每5个小时1500次调用，每周15000次； modelscope：免费服务，单个免费模型调用次数小于500次，共2000次调用，每天刷新； opentouter：免费服务，调用次数共50次，每天刷新； 阿里云百炼：300元学生免费额度。 针对sido管家agent，选择MiniMax-M2.7-highspeed，fallbacks选择MiniMax-M2.7。针对personal-web-manager agent，选择MiniMax-M2.7，fallbacks选择MiniMax-M2.7-highspeed。 针对memorySearch的配置，参考https://www.jianshu.com/p/74faa4ef979d，使用`nomic-embed-text`本地部署的模型。","categories":["人工智能"],"tags":["Agent","OpenClaw","模型路由"],"date":"2026-04-11","external_url":""},{"title":"openclaw 使用记录","url":"/2026/04/03/openclaw-使用记录/","content_type":"note","content_type_label":"过程笔记","subtype":"experiment","summary":"记录 OpenClaw minimal、messaging、coding、full 四种工具权限模式及配置方法。","content":"在使用openclaw时，出现工具使用权限问题，我将其设置为full模式，初步确保了工具的正常调用，后续将根据实际使用情况，精细化调整工具权限。 具有四种工具模式，分别是： minimal: 仅查看会话状态 messaging: 发消息，聊天，会话管理；不能读写文件，不能执行命令 coding: 文件读写，执行命令&#x2F;代码，会话&#x2F;记忆，图像分析 full: 无限制，所有工具可用 可以通过以下命令进行设置: 1openclaw config set tools.profile [minimal, messaging, coding, full] 参考文档 https://github.com/openclaw/openclaw/blob/main/docs/tools/index.md","categories":["技术实践"],"tags":["Agent","OpenClaw","工具权限"],"date":"2026-04-03","external_url":""},{"title":"vibe coding: 人机协作下的新型编程模式","url":"/2026/03/24/vibe-coding-人机协作下的新型编程模式/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"复盘完全依赖 AI 编程带来的黑盒、知识老化与维护问题，并提出人工设计、AI 加速实现的协作方式。","content":"最近想利用vibe coding对科研想法进行验证，多范式代码下的SQL修正，企图验证大模型对不同语言的知识储备是否可以启发帮助SQL的修正。 完全依赖vide coding：代码可以运行，但是运行效率很低，且过程完全黑盒化。结果不尽人意。试图重构，发下以下问题： 知识老旧： 大模型无法遵循日益迅速发展的框架的开发习惯，表现在我试图在rule中让大模遵循使用langgraph开发，并使用context7查看最新文档进行开发。没有遵循的原因可能是大模型训练语料中未能及时将最新的数据纳入；更重要的可能是我并未对任务足够的细粒度拆分，导致大模型注意力分散。 项目过于复杂，开发出屎山代码，难以维护：进行debug熟悉项目，发现代码结构混乱，且由于让大模型重构多次，历史遗留代码，重构不充分的问题暴露无遗，项目难以继续开发。 人机交互模式：人工设计+ai功能代码撰写：抛弃完全依赖模型设计与开发的模式，改为以人为主，大模型功能实现的模式。为什么这么做呢？我发现如果大模型写好计划并按照任务执行，计划赶不上变化，同时我无法了解代码为什么这样设计，是否经充分的验证。所以完全由ai撰写的模式适用于demo的展示，针对复杂项目，更依赖的是以人为主体，ai加快代码撰写的人机交互模式。 code agent发展至今，全局记忆，统筹调度的能力还有待提高，期望有一天，记忆可以内化，资源可以充分调度，也非常乐意完全当一名产品经理。","categories":["技术实践"],"tags":["Vibe Coding","人机协作","工程实践"],"date":"2026-03-24","external_url":""},{"title":"Agent面试经验内化总结","url":"/2026/03/23/Agent面试经验内化总结/","content_type":"note","content_type_label":"过程笔记","subtype":"learning","summary":"从亲自使用、可展示作品与行业想象三个方面，总结 Agent 岗位准备中的关键经验。","content":"首先一点就是使用，如果对市面上的agent没有一个调研，没有亲身使用的化，那就无法对agent有一个清晰的感知。 第二点就是作品，使用agent不能只停留在使用，要有可以看到的作品。 第三点是幻想，对agent商业化，应用合理的认知与幻想，成为agent领域的推动者。 参考资料： agent社招面试经验分享-uid: 152686439-bilibili","categories":["内化"],"tags":["Agent","面试","职业成长"],"date":"2026-03-23","external_url":""},{"title":"工作流与智能体的区别","url":"/2026/03/20/工作流与智能体的区别/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"从流程可预测性、决策权与工具使用方式出发，理解工作流和智能体的边界。","content":"本文主要是为了记录笔者对工作流与智能体的区别的理解。 工作流 (workflow)：根据预定义的代码逻辑，按照顺序执行，适用于严格定义的任务场景。 智能体 (agent)：根据环境和任务，自主决策和执行，适用于不可预测的任务场景。 下图是工作流与智能体的举例，来源于【workflows-agents】。 这个图其实有个疑问，为什么LLM参与决策的workflow，而不是智能体？ 比如Evaluator-Opimizer，其中Generator与Evaluator都是LLM，Generator负责生成候选解，Evaluator负责评估，通过则给出结果，反之则反馈给Generator重新生成。其中，Generator就具备自主决策的性质。 本质上在于执行流程的是否可以预测性，Evaluator-Optimizer是一个严格的流程，而智能体可以判断执行步骤，选择是否使用工具以及使用什么工具，流程是不可预测的。","categories":["技术"],"tags":["Agent","Workflow"],"date":"2026-03-20","external_url":""},{"title":"sudo-SQL: 基于langgraph的Text2SQL推理与评测智能体","url":"/2026/03/09/sudo-SQL-基于langgraph的Text2SQL推理与评测智能体/","content_type":"note","content_type_label":"过程笔记","subtype":"project-log","summary":"介绍 sudo-SQL 的 LangGraph 分层架构、Text-to-SQL 推理流程、并发分发与评测扩展设计。","content":"sudo-SQL 是一个基于 langgraph 框架的 Text2SQL 推理与评测智能体。设计的初衷是为了提供一个高效、准确的 Text2SQL 解决方案，同时也为了评测不同 Text2SQL 模型的性能。文件结构设计如下： 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106sudo-SQL/├── src/│ ├── __init__.py│ ├── inference_agent.py # 主推理 Agent (StateGraph + Send API)│ ├── evaluation_agent.py # 评估 Agent (未来扩展)│ ││ ├── utils/ # 主 Agent 的 utils│ │ ├── __init__.py│ │ ││ │ ├── inference_agent_utils/ # inference_agent 的工具│ │ │ ├── __init__.py│ │ │ ├── state.py # InferenceAgentState, ItemState│ │ │ ├── nodes.py # load_data, prepare_items, distribute, process_batch, aggregate│ │ │ └── tools.py # 协调工具│ │ ││ │ └── evaluation_agent_utils/ # evaluation_agent 的工具│ │ ├── __init__.py│ │ ├── state.py # EvaluationAgentState│ │ ├── nodes.py # evaluate, compare 等节点│ │ └── tools.py # 评估工具│ ││ ├── sub_agents/ # Sub-Agent 层 (独立可复用)│ │ ├── __init__.py│ │ ││ │ ├── loader_agent/ # 数据加载 Sub-Agent│ │ │ ├── __init__.py│ │ │ ├── agent.py # StateGraph 定义│ │ │ └── utils/│ │ │ ├── __init__.py│ │ │ ├── state.py # LoaderState│ │ │ ├── nodes.py # load_dataset, unify_format, load_schema│ │ │ ├── tools.py # DatasetLoader│ │ │ └── tools_schema.py # SchemaLoader│ │ ││ │ ├── prompt_agent/ # Prompt 构建 Sub-Agent│ │ │ ├── __init__.py│ │ │ ├── agent.py # StateGraph 定义│ │ │ └── utils/│ │ │ ├── __init__.py│ │ │ ├── state.py # PromptState│ │ │ ├── nodes.py # build_prompt│ │ │ └── tools.py # PromptBuilder│ │ ││ │ ├── inference_agent/ # 模型推理 Sub-Agent│ │ │ ├── __init__.py│ │ │ ├── agent.py # StateGraph 定义│ │ │ └── utils/│ │ │ ├── __init__.py│ │ │ ├── state.py # InferenceState│ │ │ ├── nodes.py # call_model, extract_sql│ │ │ ├── tools.py # ModelInference│ │ │ └── base.py # BaseInference│ │ ││ │ └── saver_agent/ # 结果保存 Sub-Agent│ │ ├── __init__.py│ │ ├── agent.py # StateGraph 定义│ │ └── utils/│ │ ├── __init__.py│ │ ├── state.py # SaverState│ │ ├── nodes.py # save_result│ │ ├── tools.py # ResultSaver│ │ └── base.py # BaseSaver│ ││ └── core/ # 基础设施层│ ├── __init__.py│ ├── config.py # 配置加载│ └── exceptions.py # 自定义异常│├── prompts/ # 模板资源 (项目根级别，全局共享)│ └── templates/│ └── text2sql_basic.jinja2│├── configs/ # 配置文件 (项目根级别，全局共享)│ └── config.yaml│├── tests/ # 测试目录 (与 src 结构对应)│ ├── conftest.py│ ├── test_inference_agent.py│ ├── test_evaluation_agent.py│ ││ ├── utils/│ │ └── test_inference_agent_utils/│ │ ├── test_state.py│ │ └── test_nodes.py│ ││ └── sub_agents/│ ├── test_loader_agent/│ │ ├── test_tools.py│ │ └── test_nodes.py│ ├── test_prompt_agent/│ │ ├── test_tools.py│ │ └── test_nodes.py│ ├── test_inference_agent/│ │ ├── test_tools.py│ │ └── test_nodes.py│ └── test_saver_agent/│ ├── test_tools.py│ └── test_nodes.py│├── scripts/ # 脚本目录│ └── run_inference.py # 推理入口脚本│├── outputs/ # 推理结果输出目录（运行时生成）│├── pyproject.toml # 项目配置└── README.md # 项目说明文档 遵循langgraph的状态管理规范，实现Text2SQL推理与评测智能体，包括数据加载、Prompt构建、模型推理、结果保存等功能，目前评测功能尚未实现。通过将不同功能模块当作独立的sub-agent节点，实现了高度的可扩展性和可维护性。同时基于节点间的分发功能（Send），实现了不同模块之间的解耦和并行处理，提高了系统的效率和响应速度。","categories":["人工智能"],"tags":["Agent","Text-to-SQL","LangGraph"],"date":"2026-03-09","external_url":""},{"title":"基金化的农田管理模式设想","url":"/2026/03/07/基金化的农田管理模式设想/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"面向农村劳动力流失与耕地闲置问题，设想由职业管理人统筹种植、销售和收益分配的农田模式。","content":"随着人口老龄化的加剧，农村留守老人增加，青壮劳动力外出务工，农村空心化愈发严重。由此，耕地无人种的问题愈发严重。一亩地耕种一年除去种子，化肥，人工等成本，收入微薄。现政策激励，帮助免费播种，耕地等扶持，减少土地的荒废。但是靠政策补贴并非活水，难以持久。现设想一种基金化的农田管理模式设想： 农村耕地无需收费总包给农田职业管理人 农田职业管理人负责规划农田种植，打通农田规划，种植，管理，采摘，销售等链路 收益分成 去除种植过程中的开销 剩下收益农田管理人以百分比划为工资 剩下收益划分部分为来年的农田预期费用 剩下收益以农田质量，面积，灌溉难易，交通等因素分配给农田所有人 在该种模式下，催生出农田职业管理人的职业，同时农田的经营，也提高当地的务农人员的收入。但是不可避免，农田职业管理人面临经营亏损的问题，收益分成的纠纷等系列问题，该设想需进一步优化完善。我相信更专业的农田管理，在未来可以提升农田收益，减少农田荒废，促进农业经济的发展。","categories":["设想"],"tags":["农业","商业模式","乡村发展"],"date":"2026-03-07","external_url":""},{"title":"Hexo主题优化：简化category和tag页面实现","url":"/2026/02/14/Hexo主题优化：简化category和tag页面实现/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"通过抽取共享归档模板，减少 Hexo category 与 tag 页面中的重复代码并提升主题可维护性。","content":"Hexo主题优化：简化category和tag页面实现优化背景最近在维护个人Hexo博客时，发现主题中的category.ejs和tag.ejs文件实现较为复杂，代码冗余度较高。这两个文件包含了大量重复代码，只是在页面标题和描述上有所不同。 同时，我注意到官方的hexo-theme-landscape主题在实现这两个页面时非常简洁，每个文件只有一行代码。这引起了我的兴趣，决定参考其实现方式来优化自己的主题。 优化目标 简化代码结构：减少代码冗余，提高代码可读性 提高可维护性：将通用逻辑集中到一个模板中，后续修改只需更新一个文件 保持原有功能：确保优化后所有原有功能都能正常工作 遵循最佳实践：参考官方主题的实现方式，采用更合理的代码组织方式 优化方案参考hexo-theme-landscape主题的实现方式，我采用了以下方案： 创建通用模板：在themes/sido-meet/layout/partial/目录下创建archive.ejs模板文件，包含所有列表页面的通用结构 修改category.ejs：使用&lt;%- partial(&#39;partial/archive&#39;, { ... }) %&gt;引用通用模板，并传递相应参数 修改tag.ejs：与category.ejs类似，使用通用模板并传递相应参数 清理冗余文件：删除不必要的文件，保持代码结构整洁 实现步骤1. 创建通用模板在themes/sido-meet/layout/partial/目录下创建archive.ejs模板文件，包含以下内容： 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162&lt;div class=&quot;blog-container&quot;&gt; &lt;div class=&quot;blog-header&quot;&gt; &lt;h1 class=&quot;blog-title&quot;&gt;&lt;%= page_title %&gt;&lt;/h1&gt; &lt;p class=&quot;blog-description&quot;&gt;&lt;%= page_description %&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;blog-content&quot;&gt; &lt;div class=&quot;posts-section&quot;&gt; &lt;div class=&quot;section-header&quot;&gt; &lt;h2 class=&quot;section-title&quot;&gt;Posts&lt;/h2&gt; &lt;div class=&quot;sort-controls&quot;&gt; &lt;%- partial(&#x27;partial/sort-button&#x27;) %&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;posts-list&quot;&gt; &lt;% page.posts.each(function(post) &#123; %&gt; &lt;article class=&quot;post-card&quot; data-date=&quot;&lt;%= post.date.unix() %&gt;&quot;&gt; &lt;div class=&quot;post-card-header&quot;&gt; &lt;span class=&quot;post-date&quot;&gt;&lt;%= post.date.format(&#x27;YYYY-MM-DD HH:mm:ss&#x27;) %&gt;&lt;/span&gt; &lt;/div&gt; &lt;h3 class=&quot;post-card-title&quot;&gt; &lt;a href=&quot;&lt;%= url_for(post.path) %&gt;&quot;&gt;&lt;%= post.title %&gt;&lt;/a&gt; &lt;/h3&gt; &lt;% if (post.excerpt) &#123; %&gt; &lt;p class=&quot;post-card-excerpt&quot;&gt;&lt;%= post.excerpt.replace(/&lt;[^&gt;]*&gt;/g, &#x27;&#x27;).substring(0, 150) + &#x27;...&#x27; %&gt;&lt;/p&gt; &lt;% &#125; %&gt; &lt;div class=&quot;post-card-footer&quot;&gt; &lt;a href=&quot;&lt;%= url_for(post.path) %&gt;&quot; class=&quot;read-more&quot;&gt;Read More →&lt;/a&gt; &lt;/div&gt; &lt;/article&gt; &lt;% &#125;) %&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;sidebar&quot;&gt; &lt;div class=&quot;sidebar-widget&quot;&gt; &lt;h3 class=&quot;widget-title&quot;&gt;Categories&lt;/h3&gt; &lt;div class=&quot;categories-list&quot;&gt; &lt;% site.categories.each(function(category) &#123; %&gt; &lt;div class=&quot;category-item&quot;&gt; &lt;a href=&quot;&lt;%= url_for(category.path) %&gt;&quot;&gt;&lt;%= category.name %&gt;&lt;/a&gt; &lt;span class=&quot;category-count&quot;&gt;&lt;%= category.posts.length %&gt;&lt;/span&gt; &lt;/div&gt; &lt;% &#125;) %&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;sidebar-widget&quot;&gt; &lt;h3 class=&quot;widget-title&quot;&gt;Recent Posts&lt;/h3&gt; &lt;div class=&quot;recent-posts&quot;&gt; &lt;% site.posts.sort(&#x27;-date&#x27;).limit(5).each(function(post) &#123; %&gt; &lt;div class=&quot;recent-post-item&quot;&gt; &lt;a href=&quot;&lt;%= url_for(post.path) %&gt;&quot;&gt;&lt;%= post.title %&gt;&lt;/a&gt; &lt;span class=&quot;recent-post-date&quot;&gt;&lt;%= post.date.format(&#x27;YYYY-MM-DD HH:mm:ss&#x27;) %&gt;&lt;/span&gt; &lt;/div&gt; &lt;% &#125;) %&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/div&gt; 2. 修改category.ejs将themes/sido-meet/layout/category.ejs文件修改为： 123456&lt;%- partial(&#x27;partial/header&#x27;) %&gt;&lt;%- partial(&#x27;partial/archive&#x27;, &#123; page_title: &#x27;Category: &#x27; + page.category, page_description: &#x27;All posts in category &quot;&#x27; + page.category + &#x27;&quot;&#x27; &#125;) %&gt;&lt;%- partial(&#x27;partial/footer&#x27;) %&gt; 3. 修改tag.ejs将themes/sido-meet/layout/tag.ejs文件修改为： 123456&lt;%- partial(&#x27;partial/header&#x27;) %&gt;&lt;%- partial(&#x27;partial/archive&#x27;, &#123; page_title: &#x27;Tag: &#x27; + page.tag, page_description: &#x27;All posts tagged with &quot;&#x27; + page.tag + &#x27;&quot;&#x27; &#125;) %&gt;&lt;%- partial(&#x27;partial/footer&#x27;) %&gt; 4. 配置版本控制修改.gitignore文件，添加规则只追踪themes/sido-meet主题： 1234# Themes# Ignore all themes except sido-meetthemes/*!themes/sido-meet/ 优化成果1. 代码简化 category.ejs：从64行减少到6行，减少了90.6%的代码 tag.ejs：从64行减少到6行，减少了90.6%的代码 总代码量：减少了134行代码，提高了代码可读性 2. 可维护性提升 集中管理：所有列表页面的通用逻辑都集中在archive.ejs模板中 易于修改：后续修改只需更新archive.ejs文件，无需修改多个文件 一致性：确保了category和tag页面的显示效果完全一致 3. 功能保持虽然代码简化了，但所有原有功能都得到了保留： 页面标题和描述 文章列表显示 侧边栏分类 最近文章 文章排序功能 4. 代码组织更合理 遵循最佳实践：参考官方主题的实现方式 命名规范：使用archive.ejs作为通用模板名称，与官方主题保持一致 结构清晰：模板文件职责明确，代码组织更合理 技术细节参数传递在使用通用模板时，通过传递参数来实现动态内容： 1234&lt;%- partial(&#x27;partial/archive&#x27;, &#123; page_title: &#x27;Category: &#x27; + page.category, page_description: &#x27;All posts in category &quot;&#x27; + page.category + &#x27;&quot;&#x27; &#125;) %&gt; 模板渲染通用模板使用传递的参数来渲染页面内容： 12&lt;h1 class=&quot;blog-title&quot;&gt;&lt;%= page_title %&gt;&lt;/h1&gt;&lt;p class=&quot;blog-description&quot;&gt;&lt;%= page_description %&gt;&lt;/p&gt; 版本控制通过修改.gitignore文件，确保只有sido-meet主题会被版本控制系统追踪，避免其他主题文件污染仓库。 结论通过参考hexo-theme-landscape主题的实现方式，我成功优化了自己主题中的category和tag页面实现。这次优化不仅简化了代码结构，提高了可维护性，还保持了所有原有功能。 这种通过创建通用模板来实现代码复用的方式，是一种很好的实践，值得在其他类似场景中推广使用。它不仅可以减少代码冗余，还可以提高代码的一致性和可维护性。 通过这次优化，我对Hexo主题的代码组织方式有了更深入的理解，也为后续的主题维护和开发打下了更好的基础。","categories":["博客开发"],"tags":["Hexo","主题优化","代码简化"],"date":"2026-02-14","external_url":""},{"title":"hexo博客的updated字段","url":"/2026/02/12/hexo博客的updated字段/","content_type":"note","content_type_label":"过程笔记","subtype":"learning","summary":"说明 Hexo updated 字段的默认行为，以及如何在主题中展示文章的最近更新时间。","content":"想要给hexo博客添加一个历史更新功能，但是目前并没有找到合适的插件，符合以下需求： 显示文章的更新历史 点击历史可以查看历史文章 退而求其次，hexo中支持updated字段，但是默认情况下，hexo不会显示updated字段。需要通过修改主题加手动指定该字段的时间，可以达到显示最近更新的时间的功能。 1234567---title: hexo博客的updated字段category: 博客开发date: 2026-02-12 21:59:42updated: 2026-02-13 22:00:00tags:---","categories":["博客开发"],"tags":["Hexo","内容管理","更新时间"],"date":"2026-02-12","external_url":""},{"title":"北京实习体验","url":"/2026/02/08/北京实习体验/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"回顾四个月北京实习中的租房、通勤、生活成本与离职安排，记录第一次异地实习的经验教训。","content":"2025年9月24日，星期三，我正式开始了我在北京的实习。 2025年9月20日中午到的北京，正值周六，hy师兄来地铁站接我，带我去小区边上的商场吃了一碗牛肉面。 2026年1月30日离职，实习总时间为4个月左右，本来想实习到2026年3月20号左右，但是，不太想过完年继续会北京折腾，还是回学校准备毕业条件。 北京实习最让人想吐槽的房价，一个三室一厨一卫的房子（客厅隔断）的房间，我租的是客厅隔断，居然要2300一个月，再额外家230的服务费。这已经要了我工资的2&#x2F;5左右。北京吃饭也贵，正常三餐吃饭，一天要花费50元左右，所以四个月实习下来也没攒到啥钱。 第一次租房，所以对中介的话术没有明确的理解。我是跟中介说的我不确定租多久，五六个月。然后她跟我讲免责解约，随时走就行，让我签了一年的合同。然后我12月20日就说我年前要走了，她这是说不行了，必须租到年后才能免责解约。哎，她说过年不好租，争不过她，我也有点感觉是我理亏，没明确说清楚租的时间，就算了。我2026年2月4号离开北京，房租还是得租到2026年2月24号，也就是初八，她们正式工作的第一天。相当于赔了20天房租1600多块。希望到时候能顺利把押金，剩余的预付一年的管理费，剩下的房租（押一付三也对实习非常不友好）还给我。 工资低但是又想想存点钱，所以在北京的生活体验不是很好。","categories":["日记"],"tags":["生活","北京","实习"],"date":"2026-02-08","external_url":""},{"title":"探索Skill：Claude提出的触发式调用新概念","url":"/2026/01/29/探索Skill：Claude提出的触发式调用新概念/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"介绍 AI Skill 的触发式调用、场景识别与能力封装方式，并讨论它与传统工具调用的差异。","content":"探索Skill：Claude提出的触发式调用新概念什么是Skill？Skill是Claude提出的一种全新的AI能力扩展概念，它允许AI系统通过特定的触发机制来调用预设的功能模块，从而实现更复杂、更专业化的任务处理。简单来说，Skill就像是AI的”工具箱”，里面装着各种专门的工具，当遇到需要这些工具的场景时，AI可以自动或半自动地调用它们。 触发式调用机制触发式调用是Skill系统的核心特性，它使得AI能够在特定条件下自动识别并调用相应的Skill，而不需要用户明确的指令。这种机制的实现主要基于以下几个方面： 1. 场景识别AI系统通过分析用户的输入内容、对话上下文以及任务需求，识别出当前场景是否需要特定的Skill。例如，当用户提到”创建一个表格”时，AI可以识别出这是一个需要表格处理Skill的场景。 2. 触发条件每个Skill都有其特定的触发条件，这些条件可以是： 关键词触发：当用户输入中包含特定关键词时触发 意图触发：当AI识别出用户的特定意图时触发 上下文触发：基于对话历史和上下文信息触发 组合触发：多种条件组合满足时触发 3. 调用流程当触发条件满足时，AI系统会： 识别需要的Skill类型 检查Skill的可用性 准备调用参数 执行Skill调用 处理Skill返回的结果 将结果以自然语言的形式呈现给用户 触发式调用的优势 自动化程度高：用户不需要明确指定要使用哪个Skill，AI会根据场景自动判断 使用门槛低：用户可以用自然语言描述需求，而不需要学习特定的命令格式 响应速度快：触发机制使得AI能够快速识别并调用相应的Skill 扩展性强：可以通过添加新的Skill来扩展AI的能力范围 集成度高：Skill可以与AI的自然语言处理能力无缝集成 具体例子例子1：数学计算Skill场景：用户询问”12345乘以67890等于多少？” 触发过程： AI识别到用户输入包含数学计算内容 触发数学计算Skill 将”12345”和”67890”作为参数传递给Skill Skill执行计算并返回结果 AI将结果以自然语言形式呈现给用户 结果：”12345乘以67890等于838102050。” 例子2：代码生成Skill场景：用户说”帮我写一个Python函数，计算斐波那契数列的第n项” 触发过程： AI识别到用户需要代码生成 触发代码生成Skill 传递语言类型(Python)和功能需求(斐波那契数列计算)作为参数 Skill生成代码并返回 AI将代码格式化后呈现给用户 结果： 12345678910def fibonacci(n): if n &lt;= 0: return 0 elif n == 1: return 1 else: return fibonacci(n-1) + fibonacci(n-2)# 示例使用print(fibonacci(10)) # 输出: 55 例子3：翻译Skill场景：用户输入”Translate ‘Hello world’ to Chinese” 触发过程： AI识别到”Translate”关键词和翻译需求 触发翻译Skill 传递源文本(“Hello world”)和目标语言(Chinese)作为参数 Skill执行翻译并返回结果 AI将翻译结果呈现给用户 结果：”‘Hello world’翻译成中文是’你好，世界’。” 例子4：数据分析Skill场景：用户上传了一份销售数据CSV文件，并说”分析这份数据的销售趋势” 触发过程： AI识别到文件上传和数据分析需求 触发数据分析Skill 传递文件内容和分析需求(销售趋势)作为参数 Skill执行分析并生成报告 AI将分析结果和可视化图表呈现给用户 结果：“根据您提供的销售数据，我分析了过去6个月的销售趋势： 整体销售额呈现上升趋势，月均增长率为12.5% 产品A是销售主力，占总销售额的45% 每周五是销售高峰，平均销售额比其他工作日高20% 地区B的销售额增长最快，环比增长18% 以下是销售趋势图表：[销售趋势图表]“ 实际应用场景1. 智能助手在智能助手中，Skill可以帮助用户处理各种日常任务，如： 日程管理和提醒 天气查询和预报 新闻资讯聚合 购物比价和推荐 2. 专业领域助手在专业领域，Skill可以提供更专业的支持： 法律咨询和文档审查 医疗健康咨询和建议 金融分析和投资建议 教育辅导和学习资源推荐 3. 开发工具对于开发者，Skill可以作为智能开发助手： 代码自动生成和补全 代码审查和bug检测 技术文档生成 依赖管理和版本控制 未来发展随着AI技术的不断发展，Skill系统也将迎来更多的创新和改进： 更智能的触发机制：基于深度学习的场景识别能力将不断提升，使得Skill的触发更加准确和智能 更多样的Skill类型：将会有更多专业领域的Skill被开发出来，覆盖更多的应用场景 更强大的Skill组合：未来的Skill系统将支持多个Skill的协同工作，通过Skill的组合来解决更复杂的问题 用户自定义Skill：普通用户也将能够创建和分享自己的Skill，形成Skill生态系统 跨平台集成：Skill将能够在不同的AI平台和应用之间无缝集成，提供统一的用户体验 总结Skill作为Claude提出的一种全新概念，通过触发式调用机制，为AI系统提供了更强大、更灵活的能力扩展方式。它使得AI能够根据场景自动识别并调用相应的功能模块，从而为用户提供更智能、更便捷的服务。 触发式调用的核心优势在于其自动化程度高、使用门槛低、响应速度快等特点，这使得Skill系统在各种应用场景中都有着广阔的发展前景。随着技术的不断进步，我们可以期待Skill系统在未来会带来更多的惊喜和创新。","categories":["人工智能","技术探索"],"tags":["AI","Claude","技能系统","触发式调用"],"date":"2026-01-29","external_url":""},{"title":"Hexo博客评论系统方案对比","url":"/2026/01/27/Hexo博客评论系统方案对比/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"对比 Disqus、Gitalk、Giscus 等 Hexo 评论方案的访问体验、维护成本、隐私与适用场景。","content":"Hexo博客评论系统方案对比引言在搭建个人博客时，评论系统是一个重要的组成部分，它允许读者与博主互动，增加博客的活跃度和社区感。对于使用Hexo框架的博主来说，选择一个合适的评论系统尤为重要。本文将对比当前主流的Hexo评论系统方案，分析它们的优缺点和适用场景，帮助你做出最佳选择。 主流评论系统介绍1. DisqusDisqus是最早也是最知名的第三方评论系统之一，拥有丰富的功能和庞大的用户基础。 特点： 功能丰富，支持评论嵌套、投票、分享等 提供完整的后台管理系统 支持社交账号登录 全球使用广泛，生态成熟 优缺点： 优点：功能全面，管理方便 缺点：国内访问速度慢，加载时间长，可能影响页面性能；数据存储在第三方，隐私性较差 2. UtterancesUtterances是一款基于GitHub Issues的轻量级评论系统，非常适合技术博客。 特点： 轻量级，加载速度快 基于GitHub Issues，评论内容存储在GitHub仓库中 支持Markdown语法 配置简单，只需一个GitHub仓库 优缺点： 优点：轻量快速，无需额外服务器；数据存储在自己的GitHub仓库，可控性高 缺点：需要GitHub账号才能评论；功能相对简单，不支持匿名评论 3. GiscusGiscus是基于GitHub Discussions的评论系统，是Utterances的升级版。 特点： 基于GitHub Discussions，功能比Utterances更丰富 支持Markdown语法 支持主题定制 轻量级，加载速度快 优缺点： 优点：功能比Utterances更全面，支持更多交互方式；数据存储在GitHub，可控性高 缺点：同样需要GitHub账号；配置相对复杂一些 4. WalineWaline是一款快速、简洁且高效的无后端评论系统，基于LeanCloud。 特点： 支持匿名评论 功能丰富，支持表情、图片、Markdown等 提供后台管理界面 支持多种部署方式 优缺点： 优点：功能全面，支持匿名评论，国内访问速度快 缺点：需要注册LeanCloud账号并配置；免费版有配额限制 5. TwikooTwikoo是一款基于云函数的评论系统，支持多种云服务提供商。 特点： 支持多种云函数服务（腾讯云、阿里云、Vercel等） 功能丰富，支持表情、图片、Markdown等 提供后台管理界面 国内访问速度快 优缺点： 优点：部署灵活，国内访问速度快，功能全面 缺点：需要配置云函数，部署相对复杂；部分云服务可能产生费用 6. GitalkGitalk是另一款基于GitHub Issues的评论系统，功能相对完整。 特点： 基于GitHub Issues 支持Markdown语法 提供简洁的界面 支持点赞功能 优缺点： 优点：数据存储在GitHub，可控性高；界面简洁美观 缺点：需要GitHub账号；首次使用需要初始化 Issues；配置相对复杂 7. VssueVssue是基于Vue.js和Issue系统的评论系统，支持多种代码托管平台。 特点： 支持GitHub、GitLab、Bitbucket等多个平台 基于Vue.js开发，界面现代化 支持Markdown语法 可定制性强 优缺点： 优点：支持多个代码托管平台，界面现代化，可定制性强 缺点：配置相对复杂；需要对应平台的账号 对比分析 评论系统 部署难度 速度与性能 功能丰富度 数据隐私 国内访问 适用场景 Disqus 低 慢 高 低 差 国际博客，需要丰富功能 Utterances 低 快 中 高 好 技术博客，注重速度 Giscus 中 快 中高 高 好 技术博客，需要更多功能 Waline 中 快 高 中 好 国内博客，支持匿名评论 Twikoo 中高 快 高 中 好 国内博客，需要灵活部署 Gitalk 中 中 中 高 好 技术博客，简洁风格 Vssue 中 中 中高 高 好 多平台用户，需要定制 选择建议 如果是技术博客，主要面向开发者：推荐使用 Utterances 或 Giscus，它们轻量快速，与 GitHub 集成良好，适合技术内容的讨论。 如果需要支持匿名评论，面向普通读者：推荐使用 Waline 或 Twikoo，它们支持匿名评论，功能丰富，国内访问速度快。 如果博客主要面向国际读者：可以考虑 Disqus，虽然国内访问慢，但在国际上使用广泛，功能全面。 如果注重数据隐私和控制权：推荐使用基于 GitHub Issues&#x2F;Discussions 的系统（Utterances、Giscus、Gitalk），数据存储在自己的仓库中，可控性高。 如果是新手，希望快速搭建：推荐使用 Utterances，配置最简单，只需一个 GitHub 仓库。 配置示例Utterances 配置示例在 Hexo 主题配置文件中添加： 123456utterances: enable: true repo: 你的GitHub用户名/仓库名 issue_term: pathname label: comment theme: github-light Waline 配置示例 首先在 LeanCloud 注册账号并创建应用 在 Hexo 主题配置文件中添加： 123456waline: enable: true serverURLs: https://你的LeanCloud应用域名 placeholder: 说点什么吧... emoji: [&#x27;https://cdn.jsdelivr.net/npm/@waline/emojis@1.0.1/weibo&#x27;] requiredMeta: [&#x27;nick&#x27;, &#x27;mail&#x27;] 总结选择合适的评论系统需要考虑多个因素，包括博客定位、目标 audience、技术能力和个人偏好。没有绝对最好的评论系统，只有最适合自己的。 对于大多数技术博主来说，Utterances 和 Giscus 是不错的选择，它们轻量快速，与 GitHub 生态集成良好。对于需要支持匿名评论的博主，Waline 和 Twikoo 提供了更多的灵活性。 最终，评论系统只是博客的一个组成部分，最重要的还是内容本身。选择一个适合自己的评论系统，让读者能够更方便地与你交流，这才是评论系统的真正价值所在。 参考链接 Utterances 官方文档 Giscus 官方文档 Waline 官方文档 Twikoo 官方文档 Gitalk 官方文档 Vssue 官方文档 Disqus 官方文档","categories":["博客开发"],"tags":["Hexo","评论系统","博客优化"],"date":"2026-01-27","external_url":""},{"title":"从本地部署到自动部署：Hexo博客GitHub Action配置实践","url":"/2026/01/25/从本地部署到自动部署：Hexo博客GitHub-Action配置实践/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"为源码仓库与 Pages 发布仓库分离的 Hexo 站点配置 GitHub Actions，实现推送后自动构建部署。","content":"背景一直以来，我都是使用传统的本地部署方式来管理Hexo博客： 12hexo generatehexo deploy 每次写完文章后都需要手动执行这些命令，虽然不算麻烦，但总觉得不够现代化。最近终于下定决心，将博客部署流程自动化，使用GitHub Action实现”写完即发布”的效果。 需求分析我的项目结构比较特殊： 源码仓库：私有仓库，保存Hexo源码和配置文件 静态网页仓库：公开仓库，专门用于GitHub Pages部署 目标很明确：修改源码后推送到私有仓库，自动触发GitHub Action，构建静态页面并部署到GitHub Pages。 配置过程1. 权限设置首先需要在私有仓库中配置GitHub Actions的权限： 进入私有仓库的Settings → Actions → General 找到”Workflow permissions”选项 选择”Read and write permissions”（读写权限） 保存设置 2. GitHub Action配置创建.github/workflows/frontend-deploy.yml文件，配置如下： 12345678910111213141516171819202122232425262728293031323334353637383940414243444546name: Frontend Hexo Deployon: push: paths: - &#x27;source/**&#x27; - &#x27;themes/**&#x27; - &#x27;_config.yml&#x27; - &#x27;package.json&#x27; branches: - mainjobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: &#x27;18&#x27; cache: &#x27;npm&#x27; - name: Install dependencies run: npm install - name: Clean Hexo cache run: npm run clean - name: Build Hexo site run: npm run build - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v4 with: github_token: $&#123;&#123; secrets.GITHUB_TOKEN &#125;&#125; publish_dir: ./public publish_branch: main external_repository: your-username/your-username.github.io cname: your-username.github.io force_orphan: true 3. SSH密钥配置由于需要部署到外部仓库，我们使用SSH密钥方式进行认证，这是最可靠和安全的方式。 生成SSH密钥对1ssh-keygen -t rsa -b 4096 -C &quot;your_email@example.com&quot; 添加公钥到静态网页仓库 进入静态网页仓库 your-username/your-username.github.io 点击 Settings → Deploy keys 添加生成的公钥（~/.ssh/id_rsa.pub） 勾选 “Allow write access” 添加私钥到源码仓库Secrets 进入源码仓库 your-username/your-username.github.io.source 点击 Settings → Secrets and variables → Actions 添加新的Secret： Name: DEPLOY_KEY Value: 私钥内容（~/.ssh/id_rsa） 4. Hexo配置验证确保_config.yml中的部署配置正确： 123456# Deployment## Docs: https://hexo.io/docs/one-command-deploymentdeploy: type: git repository: git@github.com:your-username/your-username.github.io.git branch: main 部署验证1. 测试部署流程完成配置后，我们可以通过以下步骤验证部署是否成功： 准备测试内容：对博客内容做一个微小的修改 推送测试提交：123git add .git commit -m &quot;测试GitHub Action部署&quot;git push origin main 查看Action运行状态： 进入私有仓库的Actions页面 查看刚刚触发的workflow运行记录 检查每一步的运行状态 2. 验证部署结果 等待Action完成：通常需要1-2分钟 检查静态网页仓库：查看是否有新的提交 访问网站：打开GitHub Pages地址，验证修改是否生效 常见问题与解决方案1. 跨仓库访问权限问题：私有仓库的Action是否能访问到公开的静态网页仓库？ 解答：是的，我们使用SSH密钥方式，只要在静态网页仓库中添加了对应的公钥，并在源码仓库中配置了私钥Secret，GitHub Action就能成功访问并部署到外部仓库。 2. 部署失败排查如果部署失败，可以从以下几个方面排查： 查看详细日志：进入Action运行记录，查看每一步的输出 检查依赖安装：npm install是否成功 检查构建过程：hexo generate是否生成了静态文件 检查部署配置：外部仓库地址和分支是否正确 检查SSH密钥配置： 公钥是否已添加到静态网页仓库 私钥是否已正确添加到源码仓库的Secrets Secret名称是否为DEPLOY_KEY 公钥是否勾选了”Allow write access” 优势总结相比传统的本地部署方式，GitHub Action自动部署具有以下优势： 自动化：无需手动执行部署命令，写完即发布 一致性：每次部署环境相同，减少部署差异 可追溯：每一次部署都有完整的日志记录 安全：无需在本地保存部署密钥 高效：节省手动部署的时间和精力 使用建议 合理设置触发条件：只在修改关键文件时触发部署 定期检查部署日志：确保部署流程正常运行 备份配置文件：将GitHub Action配置纳入版本控制 测试部署流程：新配置后进行测试，确保正常工作 关注GitHub Pages状态：定期访问网站，确保正常运行 结语通过GitHub Action实现Hexo博客的自动部署，是一次现代化开发流程的实践。配置完成后，我只需要专注于创作内容，剩下的部署工作全部交给自动化流程处理。这种”写完即发布”的体验，让博客创作变得更加高效和愉悦。 如果你也在使用Hexo博客，不妨尝试配置GitHub Action自动部署，体验一下自动化带来的便利！","categories":["技术实践"],"tags":["Hexo","GitHub Actions","自动化部署","博客"],"date":"2026-01-25","external_url":""},{"title":"JWT详解与加密算法分析","url":"/2026/01/03/JWT详解与加密算法分析/","content_type":"ai","content_type_label":"AI 专栏","subtype":"","summary":"系统介绍 JWT 的结构、签名验证流程，以及 HMAC、RSA、ECDSA 等常用算法的差异与安全边界。","content":"JWT详解与加密算法分析1. 什么是JWTJWT（JSON Web Token）是一种开放标准（RFC 7519），用于在各方之间安全地传输信息。它以简洁、自包含的方式将信息作为JSON对象进行传输，并通过数字签名确保信息的完整性和真实性。 JWT广泛应用于： 用户身份认证 API授权 分布式系统间的安全通信 2. JWT的结构JWT由三部分组成，用点（.）分隔： 1Header.Payload.Signature 2.1 实际JWT示例下面是一个真实的JWT示例： 1eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyNDI2MjJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 2.2 Header（头部）头部包含令牌类型和使用的加密算法信息： 1234&#123; &quot;alg&quot;: &quot;HS256&quot;, &quot;typ&quot;: &quot;JWT&quot;&#125; alg：指定签名算法，如HS256、RS256等 typ：令牌类型，通常为”JWT” 头部经过Base64Url编码后形成JWT的第一部分：eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 2.3 Payload（负载）负载包含声明（Claims），即要传输的信息： 123456&#123; &quot;sub&quot;: &quot;1234567890&quot;, &quot;name&quot;: &quot;John Doe&quot;, &quot;iat&quot;: 1516239022, &quot;exp&quot;: 1516242622&#125; 声明分为三种类型： 注册声明：预定义的声明，如iss（签发者）、exp（过期时间）、sub（主题）、iat（签发时间）等 公共声明：自定义声明，应避免与注册声明冲突 私有声明：各方约定的自定义声明 负载同样经过Base64Url编码后形成JWT的第二部分：eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyNDI2MjJ9 2.4 Signature（签名）签名用于验证令牌的完整性和真实性。生成方式取决于使用的算法： 对于HS256算法： 1234HMACSHA256( base64UrlEncode(header) + &quot;.&quot; + base64UrlEncode(payload), &quot;your-256-bit-secret&quot;) 签名结果经过Base64Url编码后形成JWT的第三部分：SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 注意：你可以使用JWT.io调试器来解码、验证和生成JWT令牌。 3. JWT的工作流程 用户使用凭据（如用户名密码）登录 服务器验证凭据有效性 验证通过后，服务器生成JWT令牌并发送给客户端 客户端将JWT存储在本地（如localStorage或Cookie） 客户端在后续请求中通过HTTP头（通常是Authorization: Bearer &lt;token&gt;）发送JWT 服务器验证JWT的签名和有效性 验证通过后，服务器处理请求并返回响应 4. JWT加密算法详解JWT支持多种加密算法，主要分为两大类：对称加密算法和非对称加密算法。 4.1 对称加密算法HS256 (HMAC-SHA256)HS256是最常用的JWT签名算法，属于对称加密算法： 工作原理：使用同一个密钥进行签名和验证 优点： 实现简单，性能高效 计算速度快，适合高并发场景 缺点： 密钥必须在所有使用方之间共享 密钥泄露风险高，任何一方泄露密钥都会导致整个系统不安全 HS384 和 HS512与HS256类似，只是使用更长的哈希长度（384位和512位），提供更高的安全性，但性能略有下降。 4.2 非对称加密算法RS256 (RSA-SHA256)RS256是基于RSA算法的非对称加密算法： 工作原理： 使用私钥进行签名 使用公钥进行验证 优点： 更高的安全性，私钥只需要在服务器端保存 公钥可以安全地分发给客户端或其他服务 支持密钥轮换，提高系统安全性 缺点： 计算复杂度高，性能比HS256低 密钥管理相对复杂 RS384 和 RS512与RS256类似，使用更长的哈希长度，提供更高的安全性。 ES256 (ECDSA-SHA256)ES256是基于椭圆曲线加密（ECC）的非对称算法： 工作原理：使用椭圆曲线密钥对进行签名和验证 优点： 相同安全性下，密钥长度比RSA短（256位ECC密钥相当于3072位RSA密钥） 计算效率比RSA高 缺点： 椭圆曲线算法的实现较为复杂 某些旧系统可能不支持 ED25519ED25519是基于Curve25519椭圆曲线的现代签名算法： 优点： 极高的安全性 高性能 密钥生成简单 缺点： 支持度相对较低 5. 算法选择建议根据不同场景选择合适的算法： 场景 推荐算法 理由 单服务器应用 HS256 实现简单，性能高效 微服务架构 RS256&#x2F;ES256 安全性高，密钥管理灵活 移动应用 RS256&#x2F;ES256 私钥安全存储在服务器端 对性能要求高 HS256&#x2F;ES256 计算速度快 对安全性要求极高 RS512&#x2F;ES512&#x2F;ED25519 提供最高级别的安全保障 6. JWT安全最佳实践 使用安全的签名算法：避免使用HS256以外的对称算法，优先考虑非对称算法 保护密钥安全： 对称算法密钥必须严格保密 非对称算法私钥必须安全存储，公钥可以公开 设置合理的过期时间： 访问令牌（Access Token）过期时间不宜过长（如15-30分钟） 使用刷新令牌（Refresh Token）获取新的访问令牌 使用HTTPS传输：确保JWT在传输过程中不被窃取 避免在Payload中存储敏感信息：Payload默认是Base64Url编码，不是加密，敏感信息应加密后存储 实现令牌撤销机制：如使用黑名单或状态管理处理令牌撤销场景 定期轮换密钥：提高系统安全性 7. JWT代码示例7.1 Node.js示例（使用jsonwebtoken库）12345678910111213141516171819202122232425// 安装依赖：npm install jsonwebtokenconst jwt = require(&#x27;jsonwebtoken&#x27;);// 生成JWT令牌const secretKey = &#x27;your-256-bit-secret&#x27;;const payload = &#123; sub: &#x27;1234567890&#x27;, name: &#x27;John Doe&#x27;, admin: true&#125;;const token = jwt.sign(payload, secretKey, &#123; expiresIn: &#x27;1h&#x27; &#125;);console.log(&#x27;生成的JWT令牌:&#x27;, token);// 验证JWT令牌try &#123; const decoded = jwt.verify(token, secretKey); console.log(&#x27;验证结果:&#x27;, decoded); // 可以在这里进行权限检查等操作 if (decoded.admin) &#123; console.log(&#x27;用户具有管理员权限&#x27;); &#125;&#125; catch (error) &#123; console.error(&#x27;令牌验证失败:&#x27;, error.message);&#125; 7.2 Python示例（使用PyJWT库）123456789101112131415161718192021222324252627282930313233# 安装依赖：pip install pyjwtimport jwtimport datetime# 生成JWT令牌secret_key = &#x27;your-256-bit-secret&#x27;payload = &#123; &#x27;sub&#x27;: &#x27;1234567890&#x27;, &#x27;name&#x27;: &#x27;John Doe&#x27;, &#x27;admin&#x27;: True, &#x27;iat&#x27;: datetime.datetime.utcnow(), &#x27;exp&#x27;: datetime.datetime.utcnow() + datetime.timedelta(hours=1)&#125;# 使用HS256算法token = jwt.encode(payload, secret_key, algorithm=&#x27;HS256&#x27;)print(&#x27;生成的JWT令牌:&#x27;, token)# 使用RS256算法（需要密钥对）# import rsa# private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)# token = jwt.encode(payload, private_key, algorithm=&#x27;RS256&#x27;)# 验证JWT令牌try: decoded = jwt.decode(token, secret_key, algorithms=[&#x27;HS256&#x27;]) print(&#x27;验证结果:&#x27;, decoded) if decoded[&#x27;admin&#x27;]: print(&#x27;用户具有管理员权限&#x27;)except jwt.ExpiredSignatureError: print(&#x27;令牌已过期&#x27;)except jwt.InvalidTokenError: print(&#x27;无效的令牌&#x27;) 7.3 前端使用示例12345678910111213141516171819202122// 登录后保存令牌到localStoragefunction login() &#123; // 假设从服务器获取到了令牌 const token = &#x27;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...&#x27;; localStorage.setItem(&#x27;token&#x27;, token);&#125;// 发送请求时携带令牌async function fetchProtectedResource() &#123; const token = localStorage.getItem(&#x27;token&#x27;); try &#123; const response = await fetch(&#x27;https://api.example.com/protected&#x27;, &#123; headers: &#123; &#x27;Authorization&#x27;: `Bearer $&#123;token&#125;` &#125; &#125;); const data = await response.json(); console.log(&#x27;受保护资源:&#x27;, data); &#125; catch (error) &#123; console.error(&#x27;请求失败:&#x27;, error); &#125;&#125; 8. JWT应用场景示例8.1 单页应用（SPA）认证 用户通过用户名密码登录 服务器验证成功后返回JWT令牌 前端将令牌存储在localStorage中 每次请求API时，在Authorization头中携带令牌 服务器验证令牌有效性，决定是否响应请求 8.2 微服务架构中的授权 API网关接收用户请求 网关验证JWT令牌的有效性 验证通过后，将请求转发到相应的微服务 微服务可以直接使用JWT中的信息，无需再次查询数据库 不同微服务可以共享相同的JWT验证逻辑 8.3 移动应用认证 用户在移动应用中登录 服务器返回JWT令牌和刷新令牌 应用将令牌存储在安全的位置（如Keychain&#x2F;iOS或Keystore&#x2F;Android） 每次API请求携带JWT令牌 令牌过期时，使用刷新令牌获取新的访问令牌 9. JWT与传统Session的对比 特性 JWT Session 状态管理 无状态 有状态 服务器存储 不需要 需要存储会话信息 扩展性 易于水平扩展 需要共享会话存储 跨域支持 良好 需要额外配置 性能 高（减少数据库查询） 中等（需要查询会话） 安全性 依赖于签名算法和密钥管理 依赖于Cookie安全设置 10. 总结JWT是一种灵活、高效的认证和授权机制，通过选择合适的加密算法和遵循安全最佳实践，可以构建安全可靠的身份验证系统。在实际应用中，应根据系统架构、安全需求和性能要求选择合适的JWT实现方案。 参考资料 JWT官方规范 从安全到性能:HS256与RS256在tymon&#x2F;jwt-auth中的终极抉择 JWT 签名算法的选择:HS256、RS256、ES256 和 ED25519 的对比与应用 JSON Web Token (JWT) 完整指南","categories":["AI 专栏"],"tags":["JWT","安全","加密算法"],"date":"2026-01-03","external_url":""},{"title":"人的在vibe coding不可取代的地位","url":"/2026/01/02/人的在vibe-coding不可取代的地位/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"从部署踩坑出发，讨论人在 Vibe Coding 中承担监督、破除循环、主动学习和系统理解的不可替代作用。","content":"昨天我完成了博客网页从本地到服务器的部署，包含利用vibe coding构建我没学过的后端，以及利用nginx配置反向代理，实现从域名访问到服务器的部署。踩了一些坑，记录一下： 在vibe coding的构建过程中，没有发挥人的监控作用，导致构建失败的问题，比如说呢，遇到一个问题构建docker的问题，code agent一直认为是版本问题，不断地降低版本，重构。然后版本不匹配，然后有换回去。其实只需要人监控着，人充当一个场外的观察者，打破这种循环。 还有就是没有发挥主观的学习作用，虽然我对该项目没有任何经验，但是过度依赖code agent。其实，更应该做的是通过code agent提高自己的认知，进而更好的进行vibe coding。这种自上而下，抽丝剥茧的学习方式，是vibe coding过程中不可忽视的一环。否则，项目构建后，人对项目熟悉底，这就不会作为是你的项目，虽然看起来想过好，但是一问三不知。","categories":["内化"],"tags":["Vibe Coding","人机协作","工程实践"],"date":"2026-01-02","external_url":""},{"title":"Hexo中--tags和--categories的区别详解","url":"/2025/12/21/hexo-tags-vs-categories-difference/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"解释 Hexo 分类的层级结构与标签的扁平结构，并给出两者在内容组织中的使用建议。","content":"在使用Hexo创建博客文章时，--tags和--categories是两个常用的命令行参数，用于为文章添加分类和标签。虽然它们看起来功能相似，但实际上有很大的区别和不同的使用场景。本文将详细介绍这两个参数的区别、使用方法和最佳实践。 一、基础概念区别1. Categories（分类）分类是一种层级化的内容组织方式，用于将文章划分为不同的主题领域。分类具有父子关系，可以创建多层级的分类结构。 特点：层级关系、树状结构、每个文章至少属于一个分类 作用：宏观组织内容，帮助读者了解网站的主要内容结构 2. Tags（标签）标签是一种扁平化的内容组织方式，用于为文章添加特定的关键词或主题标记。标签之间没有层级关系，是相互独立的。 特点：扁平化、无层级、可以有多个标签 作用：微观标记内容，帮助读者找到特定主题的相关文章 二、命令行使用区别1. –categories参数用于为文章添加分类，可以指定单个分类或多层级分类。 12345678# 单个分类hexo new post &quot;Hexo入门教程&quot; --categories=&quot;Hexo&quot;# 多层级分类（父分类/子分类）hexo new post &quot;Hexo主题开发&quot; --categories=&quot;Hexo/主题开发&quot;# 多个分类（不推荐，通常每个文章属于一个主要分类）hexo new post &quot;跨平台开发&quot; --categories=&quot;前端开发,移动开发&quot; 2. –tags参数用于为文章添加标签，可以添加多个标签，用逗号分隔。 12345678# 单个标签hexo new post &quot;JavaScript基础&quot; --tags=&quot;JavaScript&quot;# 多个标签hexo new post &quot;React组件开发&quot; --tags=&quot;React,组件开发,前端框架&quot;# 包含空格的标签（需要引号包裹）hexo new post &quot;生活随笔&quot; --tags=&quot;生活,思考,个人成长&quot; 三、Front-matter中的表示区别在生成的Markdown文件中，categories和tags在front-matter中的表示方式也不同： 1. Categories的表示1234567title: Hexo主题开发date: 2025-12-21tags: - Hexocategories: - Hexo - 主题开发 # 多层级分类会显示为数组 2. Tags的表示12345678title: React组件开发date: 2025-12-21tags: - React - 组件开发 - 前端框架categories: - 前端开发 四、网站显示区别1. Categories在网站中的显示 通常显示在文章页面的顶部或侧边栏 可以展示完整的分类层级结构 点击分类可以查看该分类下的所有文章 适合用于网站的主导航或内容架构 2. Tags在网站中的显示 通常显示在文章底部或侧边栏的标签云 以扁平化方式展示，没有层级关系 点击标签可以查看所有带有该标签的文章 适合用于内容的交叉索引和发现 五、最佳实践1. Categories使用建议 保持层级简洁：建议不超过3级分类 明确主题范围：每个分类应该有明确的主题范围 单一主要分类：每个文章最好只有一个主要分类 避免过度细分：不要创建过多的子分类 12345# 好的分类使用hexo new post &quot;Vue路由管理&quot; --categories=&quot;前端开发/Vue/路由&quot;# 避免的分类使用（层级过深）hexo new post &quot;Vue路由管理&quot; --categories=&quot;前端开发/框架/Vue/核心功能/路由/管理&quot; 2. Tags使用建议 使用具体关键词：标签应该是具体的关键词，避免过于宽泛 控制标签数量：每个文章建议使用3-5个标签 保持标签一致性：使用统一的标签命名规范 避免重复标签：不要创建含义相同的不同标签 12345# 好的标签使用hexo new post &quot;JavaScript性能优化&quot; --tags=&quot;JavaScript,性能优化,前端开发&quot;# 避免的标签使用（标签过多且宽泛）hexo new post &quot;JavaScript性能优化&quot; --tags=&quot;编程,技术,前端,JavaScript,JS,性能,优化,开发,代码,网站&quot; 3. 两者结合使用分类和标签应该结合使用，形成互补的内容组织体系： 使用分类构建网站的宏观内容结构 使用标签标记文章的具体主题和关键词 通过分类快速定位内容领域 通过标签发现相关主题的文章 12# 结合使用示例hexo new post &quot;Hexo命令行参数详解&quot; --categories=&quot;博客开发/Hexo&quot; --tags=&quot;Hexo,命令行,博客技巧&quot; 六、常见问题解答Q: 一个文章可以有多个分类吗？A: 虽然Hexo支持为文章添加多个分类，但通常建议每个文章只有一个主要分类，这样可以保持内容结构的清晰性。 Q: 标签可以有层级关系吗？A: 不可以，标签是扁平化的内容组织方式，没有层级关系。如果需要层级结构，应该使用分类。 Q: 如何修改文章的分类和标签？A: 可以直接编辑文章的front-matter部分，修改categories和tags字段，然后重新生成网站。 Q: 如何查看网站的所有分类和标签？A: 大多数Hexo主题都会在侧边栏或专门的页面展示网站的所有分类和标签，你也可以通过修改主题模板来自定义显示方式。 七、总结--tags和--categories是Hexo中两个重要的命令行参数，它们在内容组织中扮演着不同的角色： 特性 Categories（分类） Tags（标签） 结构 层级化（树状） 扁平化（无层级） 关系 父子关系 相互独立 数量 建议1-2个 建议3-5个 作用 宏观组织内容 微观标记主题 使用 定义内容领域 标记关键词 正确理解和使用这两个参数，可以帮助你更好地组织博客内容，提高读者的阅读体验和内容发现效率。希望本文能对你有所帮助！","categories":["博客开发"],"tags":["Hexo","博客技巧","命令行"],"date":"2025-12-21","external_url":""},{"title":"Hexo命令行参数详解：除了--tags和--categories还可以使用哪些？","url":"/2025/12/20/hexo-command-line-parameters-guide/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"整理 Hexo 新建内容时可用的标题、日期、作者、永久链接、布局等命令行参数与使用示例。","content":"在使用Hexo创建博客文章时，我们经常会使用hexo new post &quot;文章标题&quot;命令。除了大家熟悉的--tags和--categories参数外，Hexo还提供了许多其他实用的命令行参数，可以帮助我们更高效地管理和创建博客内容。本文将详细介绍这些参数的使用方法。 一、基础信息参数1. –title指定文章标题，与命令中的标题参数作用相同。 1hexo new post --title=&quot;Hexo命令行参数详解&quot; 2. –date指定文章的创建日期，格式为YYYY-MM-DD或YYYY-MM-DD HH:MM:SS。 12hexo new post &quot;回顾2025&quot; --date=&quot;2025-12-31&quot;hexo new post &quot;新年计划&quot; --date=&quot;2026-01-01 00:00:00&quot; 3. –updated指定文章的更新日期，格式与–date相同。 1hexo new post &quot;技术分享&quot; --updated=&quot;2025-12-20 15:30:00&quot; 4. –author指定文章作者。 1hexo new post &quot;团队协作经验&quot; --author=&quot;张三&quot; 二、内容组织参数1. –permalink指定文章的永久链接，覆盖站点配置中的permalink设置。 1hexo new post &quot;自定义链接&quot; --permalink=&quot;2025/12/custom-link&quot; 2. –layout指定使用的布局模板，默认为post。 12345# 使用page布局创建页面hexo new page &quot;关于我们&quot; --layout=&quot;page&quot;# 使用自定义布局hexo new post &quot;特别文章&quot; --layout=&quot;special&quot; 三、内容摘要参数1. –excerpt指定文章的摘要内容。 1hexo new post &quot;Hexo入门教程&quot; --excerpt=&quot;这是一篇详细的Hexo博客搭建教程&quot; 2. –description指定文章的描述信息，通常用于SEO。 1hexo new post &quot;SEO优化技巧&quot; --description=&quot;分享博客SEO优化的实用方法&quot; 四、高级参数1. –disable-linenos禁用代码行号显示（如果主题支持的话）。 1hexo new post &quot;代码示例&quot; --disable-linenos 2. –comments控制是否启用评论功能。 12345# 启用评论hexo new post &quot;讨论话题&quot; --comments=true# 禁用评论hexo new post &quot;个人笔记&quot; --comments=false 3. –path指定文章文件的保存路径，相对于source&#x2F;_posts目录。 12# 将文章保存到指定目录hexo new post &quot;分类文章&quot; --path=&quot;tutorials/hexo-guide&quot; 五、参数组合使用Hexo支持同时使用多个参数，实现更灵活的配置： 1234567891011# 同时指定标题、标签、分类、作者和摘要hexo new post &quot;Hexo高级技巧&quot; \\ --tags=&quot;Hexo,博客技巧,命令行&quot; \\ --categories=&quot;技术分享&quot; \\ --author=&quot;李四&quot; \\ --excerpt=&quot;分享Hexo博客开发的高级技巧&quot;# 创建带自定义日期和永久链接的文章hexo new post &quot;时间管理&quot; \\ --date=&quot;2025-12-15&quot; \\ --permalink=&quot;2025/12/time-management&quot; 六、自定义参数除了上述内置参数外，你还可以在scaffolds/post.md模板中定义自定义参数，然后通过命令行传递： 1. 修改模板文件编辑scaffolds/post.md文件，添加自定义参数： 1234567891011---title: &#123;&#123; title &#125;&#125;date: &#123;&#123; date &#125;&#125;tags: &#123;&#123; tags &#125;&#125;categories: &#123;&#123; categories &#125;&#125;author: &#123;&#123; author &#125;&#125;excerpt: &#123;&#123; excerpt &#125;&#125;# 添加自定义参数cover: &#123;&#123; cover &#125;&#125;featured: &#123;&#123; featured &#125;&#125;--- 2. 使用自定义参数1hexo new post &quot;带封面的文章&quot; --cover=&quot;/images/cover.jpg&quot; --featured=true 七、注意事项 参数大小写：Hexo命令行参数不区分大小写，--tags和--TAGS效果相同 空格处理：如果参数值包含空格，需要使用引号包裹，如--tags=&quot;思考,生活,随笔&quot; 参数顺序：参数顺序不影响效果，可以放在命令的任何位置 简写形式：部分参数支持简写形式，如-t可以替代--tags 总结Hexo提供了丰富的命令行参数，可以帮助我们更高效地创建和管理博客内容。除了常用的--tags和--categories参数外，还有许多实用的参数可以使用： 基础信息：--title, --date, --updated, --author 内容组织：--permalink, --layout 内容摘要：--excerpt, --description 高级功能：--disable-linenos, --comments, --path 自定义参数：支持在模板中定义和使用 合理使用这些参数，可以大大提高我们的博客创作效率。希望本文能帮助你更好地了解和使用Hexo的命令行参数！","categories":["博客开发"],"tags":["Hexo","博客技巧","命令行"],"date":"2025-12-20","external_url":""},{"title":"【论文阅读笔记】DTS-SQL: Decomposed Text-to-SQL with Small Large Language Models","url":"/2025/12/17/【论文阅读笔记】DTS-SQL-Decomposed-Text-to-SQL-with-Small-Large-Language-Models/","content_type":"note","content_type_label":"过程笔记","subtype":"reading","summary":"阅读 DTS-SQL：将 Text-to-SQL 分解为 schema linking 与 SQL generation，以提升小模型执行准确率。","content":"论文标题：DTS-SQL: Decomposed Text-to-SQL with Small Large Language Models论文作者：Mohammadreza Pourreza, Davood Rafiei论文链接：https://aclanthology.org/2024.findings-emnlp.481/论文代码：https://github.com/MohammadrezaPourreza/DTS-SQL 前言在Text2SQL任务中，较小的开源模型与闭源的商业模型性能有较大差异。为了缓解该问题，作者提出将Text2SQL任务分解为两个子任务，分别为schema linking和SQL generation。相比于一阶段微调有3%-7%的EX提升。 动机 开源小模型在性能上比不过闭源商业模型 一步生成SQL语句对于小模型来说是困难的，这个从实验中可以看到，相比一步生成，小模型可能会选错表，导致生成错误的SQL语句。因此，分为两阶段，先提升模型的schema linking能力，再提升SQL generation能力。 方法主要是Schema linking fine-tuning和SQL generation fine-tuning。 从 Spider 1.0 和 BIRD 2023 的数据集中构造，通过 gold SQL 提取 table。论文中是说提取了表和列，但是代码中直用了表。 针对schema linking任务，输入是问题，数据库schema，输出是将用来生成SQL的表 针对SQL generation任务，输入是问题，将用来生成SQL的表的schema，输出是SQL语句 二者可以同时训练，分别增强模型的schema linking能力和SQL generation的能力。 实验结果 相较于一步生成SQL，两阶段可以提升模型性能 总结 针对小模型，上下文有限，能力较弱，分解任务是有效的 但是该论文仅局限于表粒度，可以探索更多的列粒度及值粒度 能力提升归咎于SQL generation还是schmea linking，存在疑问","categories":["论文阅读笔记"],"tags":["LLM","Text-to-SQL","论文阅读"],"date":"2025-12-17","external_url":""},{"title":"为什么导航栏跳转没有反应","url":"/2025/12/16/why-navigation-links-not-working/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"排查 Hexo 导航链接无法跳转的问题，定位错误的全局 click 拦截逻辑并给出安全修复方式。","content":"在开发个人网站或博客时，导航栏是用户访问不同页面的重要入口。最近我在使用Hexo搭建个人博客时，遇到了一个问题：点击导航栏的链接（如Home、Blogs、Projects等）时，页面没有任何跳转反应。这个问题很影响用户体验，于是我进行了深入排查并成功解决。今天就来分享一下这个问题的解决过程。 一、问题描述网站导航栏包含多个链接： 123456&lt;ul&gt; &lt;li&gt;&lt;a href=&quot;/&quot;&gt;Home&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;/publications&quot;&gt;Publications&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;/projects&quot;&gt;Projects&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;/blogs&quot;&gt;Blogs&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; 点击这些链接时，页面没有任何跳转，浏览器地址栏也没有变化。 二、问题代码分析经过排查，我发现问题出在最近添加的scroll.js文件中，该文件用于实现导航栏的滚动收起效果： 1234567891011121314151617181920212223242526// Scroll listener for header behaviorwindow.addEventListener(&#x27;scroll&#x27;, function() &#123; // ... 导航栏滚动逻辑&#125;);// Smooth scroll for navigation linksdocument.addEventListener(&#x27;DOMContentLoaded&#x27;, function() &#123; const navLinks = document.querySelectorAll(&#x27;.nav a&#x27;); navLinks.forEach(link =&gt; &#123; link.addEventListener(&#x27;click&#x27;, function(e) &#123; const href = this.getAttribute(&#x27;href&#x27;); // Only handle internal links if (href.startsWith(&#x27;#&#x27;) || href.startsWith(&#x27;/&#x27;)) &#123; e.preventDefault(); // Scroll to target const target = href.startsWith(&#x27;#&#x27;) ? document.querySelector(href) : document.getElementById(&#x27;top&#x27;); if (target) &#123; target.scrollIntoView(&#123; behavior: &#x27;smooth&#x27; &#125;); &#125; &#125; &#125;); &#125;);&#125;); 三、问题原因问题出在这段代码的第26行： 1234if (href.startsWith(&#x27;#&#x27;) || href.startsWith(&#x27;/&#x27;)) &#123; e.preventDefault(); // ...&#125; 这段代码的意图是： 对所有内部链接（以#或/开头的链接）应用平滑滚动效果 使用e.preventDefault()阻止默认的链接跳转行为 然后根据链接类型执行相应的滚动操作 然而，这里存在一个严重的逻辑错误： 对于以#开头的锚点链接（如#section1），我们确实想要阻止默认跳转并应用平滑滚动 但对于以/开头的页面导航链接（如/blogs），我们不应该阻止默认跳转行为！ 当代码执行到e.preventDefault()时，它完全阻止了浏览器的默认链接跳转行为，导致所有以/开头的链接都无法正常跳转到目标页面。 四、解决方案修复这个问题很简单，我们只需要修改条件判断逻辑，仅对以#开头的锚点链接应用平滑滚动和e.preventDefault()，而让以/开头的导航链接保持默认的跳转行为： 12345678910111213141516171819202122// Smooth scroll for navigation linksdocument.addEventListener(&#x27;DOMContentLoaded&#x27;, function() &#123; const navLinks = document.querySelectorAll(&#x27;.nav a&#x27;); navLinks.forEach(link =&gt; &#123; link.addEventListener(&#x27;click&#x27;, function(e) &#123; const href = this.getAttribute(&#x27;href&#x27;); // Only apply smooth scroll to internal anchor links if (href.startsWith(&#x27;#&#x27;)) &#123; e.preventDefault(); // Scroll to target const target = document.querySelector(href); if (target) &#123; target.scrollIntoView(&#123; behavior: &#x27;smooth&#x27; &#125;); &#125; &#125; // For links starting with &#x27;/&#x27;, let the browser handle the navigation normally &#125;); &#125;);&#125;); 五、如何避免类似问题 明确功能边界：在实现功能时，要明确区分不同类型的元素和交互行为。锚点链接和页面导航链接是两种不同的元素，应该有不同的处理方式。 使用精确的条件判断：避免使用过于宽泛的条件判断。在这个例子中，href.startsWith(&#39;#&#39;) || href.startsWith(&#39;/&#39;)就是一个过于宽泛的条件，导致了非预期的行为。 测试各种场景：在实现功能后，要测试各种可能的使用场景。不仅要测试功能正常的情况，还要测试边界情况和异常情况。 理解事件处理机制：要深入理解JavaScript的事件处理机制，特别是event.preventDefault()的作用和影响范围。 模块化设计：将不同的功能模块分开实现，避免一个功能模块影响另一个功能模块。在这个例子中，滚动效果和链接跳转是两个不同的功能，应该尽量减少它们之间的相互影响。 六、总结导航栏链接无法跳转的问题是一个典型的JavaScript事件处理错误。通过仔细分析代码，我们找到了问题所在：错误地对所有以/开头的链接应用了e.preventDefault()。修复方法是调整条件判断逻辑，仅对以#开头的锚点链接应用平滑滚动效果。 这个问题提醒我们，在编写JavaScript代码时，要非常小心地处理事件默认行为，特别是当一个功能模块影响多个元素类型时。通过明确功能边界、使用精确的条件判断和充分测试，可以避免类似问题的发生。 希望这篇文章能帮助你解决类似的导航栏跳转问题，也能让你在编写JavaScript代码时更加注意这些细节。 本文由AI辅助生成，作者：sido","categories":["博客开发","前端问题排查"],"tags":["Hexo","博客技巧","JavaScript","前端开发"],"date":"2025-12-16","external_url":""},{"title":"Hexo 中 hexo generate 之前都需要使用 hexo clean 命令吗？","url":"/2025/12/11/Hexo-中-hexo-generate-之前都需要使用-hexo-clean-命令吗？/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"解释 hexo clean 与 hexo generate 的职责差异，以及哪些情况下需要先清理缓存再构建。","content":"在使用 Hexo 构建博客的过程中，经常会遇到 hexo clean 和 hexo generate 这两个命令。很多初学者可能会有疑问：每次执行 hexo generate 前都必须运行 hexo clean 吗？ 本文将详细解答这个问题，并提供最佳实践指南。 一、命令作用区别首先，让我们明确这两个命令的基本作用： 1. hexo clean清除 Hexo 的缓存文件 (db.json) 和已生成的静态文件 (public 目录)： 缓存文件 db.json：包含站点内容索引，用于提高生成效率 静态文件目录 public：最终生成的网站文件，用于部署到服务器 2. hexo generate根据当前配置和内容，生成新的静态文件到 public 目录： 默认基于缓存进行增量更新，只重新生成有变化的内容 使用 --force 参数可强制重新生成所有文件 二、什么时候需要先执行 hexo clean？以下情况建议先运行 hexo clean，再执行 hexo generate： ✅ 修改了站点核心配置（_config.yml）✅ 切换或修改了主题（包括主题配置 themes/主题名/_config.yml）✅ 修改了模板文件（.ejs、.pug 等布局文件）✅ 安装或卸载了插件，特别是影响生成过程的插件✅ 网站显示异常（如旧内容未更新、样式错乱等）✅ 需要完全重新生成网站（如发布前的最终检查） 三、什么时候可以直接执行 hexo generate？以下情况可以跳过 hexo clean，直接执行 hexo generate： ✅ 仅修改了文章内容（.md 文件）✅ 仅添加了新文章或页面✅ 仅修改了文章的 front-matter（标题、标签、日期等）✅ 开发过程中的快速预览（使用 hexo server 时会自动重新生成） 四、最佳实践总结1. 日常写作流程12345678910# 1. 创建新文章hexo new post &quot;文章标题&quot;# 2. 编辑文章内容（Markdown）# 3. 本地预览hexo server# 4. 直接生成（无需 clean）hexo generate 2. 配置或主题变更流程12345678910# 1. 修改配置文件或主题# 2. 清除缓存和旧文件hexo clean# 3. 重新生成站点hexo generate# 4. 本地预览确认hexo server 3. 发布前流程12345678# 清除缓存，确保生成完整文件hexo clean# 生成站点hexo generate# 部署到服务器hexo deploy 五、命令组合技巧Hexo 支持命令组合，可以简化操作： 12345# 清除并重新生成hexo clean &amp;&amp; hexo generate# 清除、生成并部署hexo clean &amp;&amp; hexo deploy 六、常见问题解答Q: 为什么我修改了配置，但生成的网站没有变化？A: 可能是缓存导致的，尝试先执行 hexo clean 再重新生成。 Q: hexo clean 会删除我的文章吗？A: 不会，它只会删除缓存文件和生成的静态文件，不会影响 source 目录中的原始文章。 Q: 增量更新和强制更新有什么区别？A: 增量更新只处理变化的内容，生成速度更快；强制更新会重新生成所有文件，确保内容完全一致。 总结不是每次执行 hexo generate 都需要先运行 hexo clean，这取决于你的具体操作场景。合理使用这两个命令可以提高工作效率： 日常写作：直接使用 hexo generate 或 hexo server 配置变更：先 hexo clean 再 hexo generate 发布前：执行 hexo clean &amp;&amp; hexo generate 确保完整性 希望本文能帮助你更好地理解和使用 Hexo 的这两个核心命令！","categories":["博客开发"],"tags":["Hexo","博客技巧","命令指南"],"date":"2025-12-11","external_url":""},{"title":"不知道写啥？","url":"/2025/12/10/不知道写啥？/","content_type":"note","content_type_label":"过程笔记","subtype":"journal","summary":"从“学啥写啥”出发，记录 Hexo scaffold 与 new 命令如何生成带标题、标签和分类的文章。","content":"学啥写啥？今天学了啥呢，怎么控制hexo生成一个新的文章，首先要通过new的命令： 1hexo new &lt;layout&gt; &quot;文章名&quot; 这个命令会调用scaffolds下面的模板创建，创建post的layout为post，通过layout下的post.md控制，可以在post.md中设置文章的标题、标签、分类等信息。例如： title: 不知道写啥？date: 1765381929000tags: 这个就在生成文章时自动填充。同时也可以通过命令控制，例如： 1hexo new post &quot;文章名&quot; --tags=&quot;思考,随笔,生活&quot; 可以控制的参数有--author、--categories、--date、--tags等。具体可以查阅hexo文档。","categories":["日记"],"tags":["思考","随笔","生活"],"date":"2025-12-10","external_url":""},{"title":"Hello World","url":"/2025/11/27/hello-world/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"SIDO MEET 的第一篇文章，记录这个个人网站的开始。","content":"Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new &quot;My New Post&quot; More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment","categories":["生活思考"],"tags":["建站记录"],"date":"2025-11-27","external_url":""},{"title":"如何使用 GitHub + Hexo 快速搭建个人网站","url":"/2025/11/01/how-to-use-github-hexo-for-personal-website/","content_type":"article","content_type_label":"人工写作","subtype":"","summary":"从环境安装、Hexo 初始化到 GitHub Pages 部署，完整演示个人静态网站的搭建流程。","content":"一、前言Hexo 是一款基于 Node.js 的静态博客框架，能快速将 Markdown 文章渲染为静态 HTML 页面；GitHub 则可提供免费的页面托管服务。两者结合能零成本搭建高性能个人网站，本文将带你完成从环境搭建到网站上线的全流程。 二、前置准备 安装 Node.js（建议 v16+）和 Git（版本无特殊要求） 注册 GitHub 账号 配置 GitHub SSH 密钥（避免每次部署输入账号密码） 三、步骤 1：安装并初始化 Hexo 项目 全局安装 Hexo CLI： 1npm install -g hexo-cli 初始化 Hexo 项目（替换为你的项目路径）： 123hexo init sido-meet.github.iocd sido-meet.github.ionpm install 本地预览初始项目： 1hexo s 访问 http://localhost:4000 即可查看默认页面。 四、步骤 2：配置 Hexo 基础参数修改项目根目录的 文件： 设置网站标题、描述、作者等信息 配置语言（如 language: zh-CN） 你的项目已配置部署类型为 Git（对应文件第 104 行的 type: git），后续仅需补充仓库地址即可。 三、步骤 3：创建 GitHub 托管仓库 登录 GitHub，创建名为 [你的GitHub用户名].github.io 的公开仓库 复制仓库的 SSH 地址（如 git@github.com:yourname/yourname.github.io.git） 四、步骤 4：配置 Hexo 自动部署到 GitHub在 中补充部署配置： 1234deploy: type: git repo: git@github.com:yourname/yourname.github.io.git # 替换为你的仓库地址 branch: main 安装部署插件： 1npm install hexo-deployer-git --save 五、步骤 5：写文章并部署上线 创建新文章（自动生成 Markdown 文件到 source&#x2F;_posts 目录）： 1hexo new &quot;我的第一篇文章&quot; 生成静态文件并部署： 1hexo clean &amp;&amp; hexo g &amp;&amp; hexo d 访问 https://[你的GitHub用户名].github.io 即可查看上线后的网站。 六、常见问题排查 部署失败：检查 SSH 密钥配置是否正确、仓库地址是否有误 页面不更新：执行 hexo clean 清除缓存后重新生成部署 样式异常：检查主题配置文件或静态资源路径 七、总结通过 GitHub + Hexo 的组合，你可以快速拥有一个可自定义样式、支持 Markdown 写作的个人网站。后续可尝试更换主题、添加评论系统等扩展功能。","categories":["技术教程"],"tags":["Hexo","GitHub","个人网站"],"date":"2025-11-01","external_url":""},{"title":"Matt Pocock / Skills for Real Engineers","url":"/bookmarks/#bookmark-matt-pocock-skills","content_type":"bookmark","content_type_label":"外部收藏","subtype":"repository · processed","summary":"teach skill 把学习过程拆成目标、信源、课程、永久参考和学习记录；真正掌握还需要检索练习、间隔重复与穿插练习。","content":"Matt Pocock teach skill 把学习过程拆成目标、信源、课程、永久参考和学习记录；真正掌握还需要检索练习、间隔重复与穿插练习。","categories":[],"tags":["AI","学习方法","Skill"],"date":"2026-07-01","external_url":"https://github.com/mattpocock/skills"},{"title":"nanochat","url":"/bookmarks/#bookmark-karpathy-nanochat","content_type":"bookmark","content_type_label":"外部收藏","subtype":"repository · inbox","summary":"用 --depth 作为复杂度旋钮的最小化 LLM 训练框架，代码可读、可修改，覆盖从训练到对话的完整流程。","content":"Andrej Karpathy 用 --depth 作为复杂度旋钮的最小化 LLM 训练框架，代码可读、可修改，覆盖从训练到对话的完整流程。","categories":[],"tags":["AI","LLM","训练"],"date":"2026-05-12","external_url":"https://github.com/karpathy/nanochat"},{"title":"AI Agents for Beginners","url":"/bookmarks/#bookmark-microsoft-ai-agents-for-beginners","content_type":"bookmark","content_type_label":"外部收藏","subtype":"course · reading","summary":"面向初学者的 Agent 课程，重点理解模型、工具、知识与执行环境如何组合成可行动的系统。","content":"Microsoft 面向初学者的 Agent 课程，重点理解模型、工具、知识与执行环境如何组合成可行动的系统。","categories":[],"tags":["AI","Agent","课程"],"date":"2026-04-28","external_url":"https://github.com/microsoft/ai-agents-for-beginners"},{"title":"Agent memory 的核心问题有两个：什么是值得保留的记忆，以…","url":"/thoughts/#thought-20260412-1","content_type":"thought","content_type_label":"随想","subtype":"","summary":"Agent memory 的核心问题有两个：什么是值得保留的记忆，以及如何存储与检索。很多任务数据被隐式训练进模型参数，但面对新的 case 时仍会丢失过去经验，本质上还是无状态。","content":"Agent memory 的核心问题有两个：什么是值得保留的记忆，以及如何存储与检索。很多任务数据被隐式训练进模型参数，但面对新的 case 时仍会丢失过去经验，本质上还是无状态。","categories":[],"tags":["AI","Agent","Memory"],"date":"2026-04-12","external_url":""},{"title":"顺势而为，借势而进，乘势而起，造势而上。","url":"/thoughts/#thought-20260321-2","content_type":"thought","content_type_label":"随想","subtype":"","summary":"顺势而为，借势而进，乘势而起，造势而上。","content":"顺势而为，借势而进，乘势而起，造势而上。","categories":[],"tags":["生活","感悟"],"date":"2026-03-21","external_url":""},{"title":"养成备份习惯——意外以为固态损坏的惊吓","url":"/thoughts/#thought-20260306-3","content_type":"thought","content_type_label":"随想","subtype":"","summary":"养成备份习惯——意外以为固态损坏的惊吓","content":"养成备份习惯——意外以为固态损坏的惊吓","categories":[],"tags":["生活","感悟"],"date":"2026-03-06","external_url":""},{"title":"市场是由人组成的","url":"/thoughts/#thought-20260228-4","content_type":"thought","content_type_label":"随想","subtype":"","summary":"市场是由人组成的","content":"市场是由人组成的","categories":[],"tags":["投资","感悟"],"date":"2026-02-28","external_url":""},{"title":"仓位管理不分大小","url":"/thoughts/#thought-20260228-5","content_type":"thought","content_type_label":"随想","subtype":"","summary":"仓位管理不分大小","content":"仓位管理不分大小","categories":[],"tags":["投资","交易"],"date":"2026-02-28","external_url":""},{"title":"保证在头脑清醒的情况下交易","url":"/thoughts/#thought-20260224-6","content_type":"thought","content_type_label":"随想","subtype":"","summary":"保证在头脑清醒的情况下交易","content":"保证在头脑清醒的情况下交易","categories":[],"tags":["生活","感悟"],"date":"2026-02-24","external_url":""},{"title":"AI Agent","url":"/terms/#term-ai-agent","content_type":"term","content_type_label":"词条","subtype":"Agent 系统 · growing","summary":"以模型作为决策核心，能够根据目标和环境选择步骤、调用工具并观察结果的系统。它与固定工作流的主要区别，是执行路径可以在运行时动态决定。","content":"以模型作为决策核心，能够根据目标和环境选择步骤、调用工具并观察结果的系统。它与固定工作流的主要区别，是执行路径可以在运行时动态决定。 智能体 Agent 根据问题选择搜索、代码或数据库工具 依据执行结果调整下一步计划","categories":[],"tags":["workflow","context-engineering"],"date":"2026-07-11","external_url":""},{"title":"Workflow","url":"/terms/#term-workflow","content_type":"term","content_type_label":"词条","subtype":"Agent 系统 · evergreen","summary":"由预先定义的步骤、分支和控制逻辑组成的执行过程。模型可以参与其中，但整体路径和边界通常由代码确定，因此更容易测试、观测和复现。","content":"由预先定义的步骤、分支和控制逻辑组成的执行过程。模型可以参与其中，但整体路径和边界通常由代码确定，因此更容易测试、观测和复现。 工作流 提取信息后再生成摘要 Generator 与 Evaluator 循环","categories":[],"tags":["ai-agent"],"date":"2026-07-11","external_url":""},{"title":"Context Engineering","url":"/terms/#term-context-engineering","content_type":"term","content_type_label":"词条","subtype":"Agent 系统 · growing","summary":"为模型组织指令、工具、检索结果、历史状态和运行时信息的工程方法，目标是在有限上下文中提供完成当前任务真正需要的信息。","content":"为模型组织指令、工具、检索结果、历史状态和运行时信息的工程方法，目标是在有限上下文中提供完成当前任务真正需要的信息。 上下文工程 根据任务动态选择记忆片段 控制工具返回内容的粒度","categories":[],"tags":["ai-agent","agent-memory"],"date":"2026-07-11","external_url":""},{"title":"Agent Memory","url":"/terms/#term-agent-memory","content_type":"term","content_type_label":"词条","subtype":"Agent 系统 · growing","summary":"让智能体保存、检索并利用过去信息的机制。它既包括会话内的短期状态，也包括通过结构化存储或向量检索实现的跨会话长期记忆。","content":"让智能体保存、检索并利用过去信息的机制。它既包括会话内的短期状态，也包括通过结构化存储或向量检索实现的跨会话长期记忆。 智能体记忆 保存用户稳定偏好 检索相似任务的历史决策","categories":[],"tags":["ai-agent","context-engineering"],"date":"2026-07-11","external_url":""},{"title":"LLM Post-Training","url":"/terms/#term-llm-post-training","content_type":"term","content_type_label":"词条","subtype":"LLM 后训练 · evergreen","summary":"在基础预训练之后，使用指令数据、偏好数据或可验证奖励继续优化模型行为的阶段，常见方法包括 SFT、偏好优化和强化学习。","content":"在基础预训练之后，使用指令数据、偏好数据或可验证奖励继续优化模型行为的阶段，常见方法包括 SFT、偏好优化和强化学习。 大模型后训练 指令监督微调 基于人类或规则反馈的策略优化","categories":[],"tags":["sft","rlhf","grpo"],"date":"2026-07-11","external_url":""},{"title":"SFT","url":"/terms/#term-sft","content_type":"term","content_type_label":"词条","subtype":"LLM 后训练 · evergreen","summary":"使用高质量输入与目标输出样本对预训练模型进行监督学习，使模型掌握特定任务格式、指令遵循方式或领域行为。","content":"使用高质量输入与目标输出样本对预训练模型进行监督学习，使模型掌握特定任务格式、指令遵循方式或领域行为。 Supervised Fine-Tuning 监督微调 使用问答数据训练指令遵循 使用领域样本适配专业任务","categories":[],"tags":["llm-post-training","rlhf"],"date":"2026-07-11","external_url":""},{"title":"RLHF","url":"/terms/#term-rlhf","content_type":"term","content_type_label":"词条","subtype":"LLM 后训练 · evergreen","summary":"把人类偏好转化为奖励信号，再通过强化学习优化模型策略的方法族。典型流程包含监督微调、偏好或奖励建模，以及受约束的策略更新。","content":"把人类偏好转化为奖励信号，再通过强化学习优化模型策略的方法族。典型流程包含监督微调、偏好或奖励建模，以及受约束的策略更新。 Reinforcement Learning from Human Feedback 人类反馈强化学习 对多个回答进行偏好排序 使用奖励模型指导策略优化","categories":[],"tags":["llm-post-training","sft","grpo"],"date":"2026-07-11","external_url":""},{"title":"GRPO","url":"/terms/#term-grpo","content_type":"term","content_type_label":"词条","subtype":"LLM 后训练 · growing","summary":"使用同一问题下多条采样结果的组内相对奖励估计优势，从而进行策略优化的方法。它减少了对独立价值模型的依赖，常用于可验证任务的后训练。","content":"使用同一问题下多条采样结果的组内相对奖励估计优势，从而进行策略优化的方法。它减少了对独立价值模型的依赖，常用于可验证任务的后训练。 Group Relative Policy Optimization 数学答案的可验证奖励训练 代码任务的测试结果奖励训练","categories":[],"tags":["llm-post-training","rlhf"],"date":"2026-07-11","external_url":""},{"title":"Text-to-SQL","url":"/terms/#term-text-to-sql","content_type":"term","content_type_label":"词条","subtype":"数据智能 · evergreen","summary":"将自然语言问题转换为可执行 SQL 的任务。系统需要同时理解用户意图、数据库 schema、查询约束与目标数据库方言。","content":"将自然语言问题转换为可执行 SQL 的任务。系统需要同时理解用户意图、数据库 schema、查询约束与目标数据库方言。 NL2SQL 将“销售额最高的地区”转换为聚合查询 根据表关系生成多表连接 SQL","categories":[],"tags":["schema-linking"],"date":"2026-07-11","external_url":""},{"title":"Schema Linking","url":"/terms/#term-schema-linking","content_type":"term","content_type_label":"词条","subtype":"数据智能 · evergreen","summary":"在自然语言问题与数据库表、列、值及关系之间建立对应的过程，是 Text-to-SQL 在生成查询前缩小搜索空间和减少选表错误的关键步骤。","content":"在自然语言问题与数据库表、列、值及关系之间建立对应的过程，是 Text-to-SQL 在生成查询前缩小搜索空间和减少选表错误的关键步骤。 模式链接 将“客户姓名”映射到 customers.name 根据外键识别需要连接的表","categories":[],"tags":["text-to-sql"],"date":"2026-07-11","external_url":""},{"title":"Vibe Coding","url":"/terms/#term-vibe-coding","content_type":"term","content_type_label":"词条","subtype":"工程实践 · growing","summary":"通过自然语言与代码模型快速生成、修改和调试软件的开发方式。它能降低原型成本，但复杂项目仍需要人负责问题定义、架构判断、验证和维护。","content":"通过自然语言与代码模型快速生成、修改和调试软件的开发方式。它能降低原型成本，但复杂项目仍需要人负责问题定义、架构判断、验证和维护。 AI 辅助编程 用对话快速验证产品原型 由人拆解任务并审查模型实现","categories":[],"tags":["ai-agent","workflow"],"date":"2026-07-11","external_url":""},{"title":"VibeSQL","url":"/projects/#project-vibesql","content_type":"project","content_type_label":"项目","subtype":"AI Research · 迭代中","summary":"面向 Text-to-SQL 研究的统一评测框架，用一致的配置、数据集与指标横向比较不同推理方法。","content":"面向 Text-to-SQL 研究的统一评测框架，用一致的配置、数据集与指标横向比较不同推理方法。 方法注册与可插拔执行图 数据集、提示词与评测流程分层 Python LangGraph Text-to-SQL","categories":[],"tags":["Python","LangGraph","Text-to-SQL"],"date":"2026","external_url":"https://github.com/sido-meet/vibe-sql"},{"title":"sudo-SQL","url":"/projects/#project-sudo-sql","content_type":"project","content_type_label":"项目","subtype":"AI Agent · 开源实验","summary":"基于 LangGraph 的 Text-to-SQL 推理与评测智能体，采用 Node、Sub-Agent、Agent 分层组织能力。","content":"基于 LangGraph 的 Text-to-SQL 推理与评测智能体，采用 Node、Sub-Agent、Agent 分层组织能力。 支持数据加载、Prompt、推理与持久化 面向扩展与并发执行设计 Python LangGraph LLM","categories":[],"tags":["Python","LangGraph","LLM"],"date":"2026","external_url":"https://github.com/sido-meet/sudo-SQL"},{"title":"Speech Desk","url":"/projects/#project-speech-desk","content_type":"project","content_type_label":"项目","subtype":"Desktop Tool · 原型","summary":"面向 Windows 的中文离线语音识别工具，使用轻量 Vosk 模型完成本地转写，关注隐私与低资源运行。","content":"面向 Windows 的中文离线语音识别工具，使用轻量 Vosk 模型完成本地转写，关注隐私与低资源运行。 本地离线识别 麦克风与 Web 操作入口 Python Vosk Web UI","categories":[],"tags":["Python","Vosk","Web UI"],"date":"2026","external_url":"https://github.com/sido-meet/speech-desk"},{"title":"Resume Templates","url":"/projects/#project-resume-templates","content_type":"project","content_type_label":"项目","subtype":"Open Resource · 持续整理","summary":"汇集 HTML、Markdown 与 LaTeX 简历模板，并记录编辑、导出和开源协议差异。","content":"汇集 HTML、Markdown 与 LaTeX 简历模板，并记录编辑、导出和开源协议差异。 统一模板索引 保留上游来源与许可证边界 HTML Markdown LaTeX","categories":[],"tags":["HTML","Markdown","LaTeX"],"date":"2026","external_url":"https://github.com/sido-meet/resume-templates"}]