<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>ZengLiangYi Blog</title>
    <description>前端工程、AI 编程与开源实践</description>
    <link>https://zengliangyi.com</link>
    <atom:link href="https://zengliangyi.com/rss.xml" rel="self" type="application/rss+xml"/>
    <language>zh</language>
    <lastBuildDate>Fri, 23 Oct 2026 04:22:09 GMT</lastBuildDate>
    <item>
      <title>彻底解决轮播图 1px 白边与黑缝：从 CSS 亚像素舍入原理到 scale 最佳实践</title>
      <link>https://zengliangyi.com/blog/carousel-subpixel-1px-seam/</link>
      <guid>https://zengliangyi.com/blog/carousel-subpixel-1px-seam/</guid>
      <description>深入分析移动端与高分屏下轮播图因 CSS 亚像素浮点数与浏览器光栅化取整导致的 1px 缝隙问题，横向对比负 margin、位移与 scale 缩放三种方案，给出零布局破坏的优雅解法。</description>
      <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>CSS</category>
        <category>前端开发</category>
        <category>Swiper</category>
        <category>性能优化</category>
    </item>
    <item>
      <title>打破 Google 收录僵局：基于 Astro 与 Indexing API 的增量缓存推送实践</title>
      <link>https://zengliangyi.com/blog/google-indexing-incremental-cache/</link>
      <guid>https://zengliangyi.com/blog/google-indexing-incremental-cache/</guid>
      <description>利用 Astro 构建期生成的 sitemap lastmod 时间戳与本地状态缓存，精准推送增量与未收录页面，打破静态博客收录停滞并杜绝配额浪费。</description>
      <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>Astro</category>
        <category>SEO</category>
        <category>Google</category>
        <category>自动化</category>
    </item>
    <item>
      <title>AI 对话格式差异：事件、快照与跨库消息定位</title>
      <link>https://zengliangyi.com/blog/ai-conversation-format-divergence/</link>
      <guid>https://zengliangyi.com/blog/ai-conversation-format-divergence/</guid>
      <description>对照五个固定适配器，区分 JSONL 容器、事件语义与 SQLite 键布局，用两个内存数据库观察消息索引、孤立数据和未知版本。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>SQLite</category>
    </item>
    <item>
      <title>AI 对话管理方案：四种存储路径与迁移验收</title>
      <link>https://zengliangyi.com/blog/ai-conversation-management-options/</link>
      <guid>https://zengliangyi.com/blog/ai-conversation-management-options/</guid>
      <description>比较 Claude Code、Cursor、Copilot、Trae 的固定适配器输入，区分原始副本、可读导出与知识库，并用合成清单验证身份和信息保留。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>SQLite</category>
    </item>
    <item>
      <title>五种 AI 对话解析器：字段保留与损失边界</title>
      <link>https://zengliangyi.com/blog/ai-conversation-parser-boundaries/</link>
      <guid>https://zengliangyi.com/blog/ai-conversation-parser-boundaries/</guid>
      <description>从 Claude Code、Codex、Cursor、Trae 和 Copilot 的实际解析器建立验收矩阵，检查工具标记、思考文本、顺序与快照覆盖范围。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>AI SDK Provider 抽象：能力表与协议边界</title>
      <link>https://zengliangyi.com/blog/ai-sdk-provider-abstraction/</link>
      <guid>https://zengliangyi.com/blog/ai-sdk-provider-abstraction/</guid>
      <description>核对 ChatCrystal 的七项 Provider 注册、AI SDK 7 模型工厂和结构化输出，用无网络 mock 验证 Responses、Chat Completions、Embedding 与 schema 失败。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>TypeScript</category>
    </item>
    <item>
      <title>批量导入 1000 条对话：成本拆分与性能验收</title>
      <link>https://zengliangyi.com/blog/bulk-import-performance-plan/</link>
      <guid>https://zengliangyi.com/blog/bulk-import-performance-plan/</guid>
      <description>从固定导入链路区分解析、事务、WASM 导出与摘要队列，并用临时合成输入检查流式保留范围与数据等价性。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>SQLite</category>
        <category>Performance</category>
    </item>
    <item>
      <title>CLI 知识流水线：退出码、JSON 合同与最终状态</title>
      <link>https://zengliangyi.com/blog/cli-knowledge-workflow/</link>
      <guid>https://zengliangyi.com/blog/cli-knowledge-workflow/</guid>
      <description>核对现有 CLI 命令与响应形状，用合成子进程和按 ID 状态验收拒绝假成功，再规划调度、备份与恢复。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>CLI</category>
        <category>Automation</category>
    </item>
    <item>
      <title>AI 编程对话复盘：分母、质量抽检与可复用证据</title>
      <link>https://zengliangyi.com/blog/conversation-knowledge-retrospective/</link>
      <guid>https://zengliangyi.com/blog/conversation-knowledge-retrospective/</guid>
      <description>以合成样本核对来源与长度分母、错收漏收和空样本，并区分当前经验筛选、模型摘要与真实复用结果。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Knowledge Management</category>
        <category>Evaluation</category>
    </item>
    <item>
      <title>Fastify 与 Electron：桌面服务的启动和退出边界</title>
      <link>https://zengliangyi.com/blog/fastify-electron-service-lifecycle/</link>
      <guid>https://zengliangyi.com/blog/fastify-electron-service-lifecycle/</guid>
      <description>跟踪 ChatCrystal 的本地、云端与引导模式，验证 CommonJS 动态加载和端口竞争，核对窗口、安全头及服务关闭顺序。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>Electron</category>
    </item>
    <item>
      <title>图谱辅助重构：把关系线索变成故障检查</title>
      <link>https://zengliangyi.com/blog/graph-assisted-refactoring/</link>
      <guid>https://zengliangyi.com/blog/graph-assisted-refactoring/</guid>
      <description>区分标签共现、笔记关系和代码依赖，核对真实嵌入与取消链路，用合成故障顺序练习审查重构边界。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Knowledge Graph</category>
        <category>Testing</category>
    </item>
    <item>
      <title>MCP 协议的边界：发现、实例身份与调用权限</title>
      <link>https://zengliangyi.com/blog/mcp-protocol-boundaries/</link>
      <guid>https://zengliangyi.com/blog/mcp-protocol-boundaries/</guid>
      <description>对照 ChatCrystal 的七个 MCP 工具，用固定 SDK 的内存传输验证同名工具可指向不同实例，并区分参数 schema、行为提示与应用权限。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>MCP</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>SourceAdapter 内部链路：身份、内容哈希与重新导入</title>
      <link>https://zengliangyi.com/blog/source-adapter-internals/</link>
      <guid>https://zengliangyi.com/blog/source-adapter-internals/</guid>
      <description>对照 ChatCrystal 的注册表、导入器和远端载荷，验证会话身份、内容哈希、元数据捷径与 parserVersion 的实际边界。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>sql.js WASM 持久化：内存、导出、外键与保存点</title>
      <link>https://zengliangyi.com/blog/sqljs-wasm-persistence/</link>
      <guid>https://zengliangyi.com/blog/sqljs-wasm-persistence/</guid>
      <description>对照 ChatCrystal 的数据库生命周期，运行 sql.js 1.14.2 样本，区分 SQL 提交、二进制导出、文件写入、外键恢复和嵌套回滚。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>SQLite</category>
    </item>
    <item>
      <title>团队知识共享：令牌、审批与实例边界</title>
      <link>https://zengliangyi.com/blog/team-knowledge-sharing-plan/</link>
      <guid>https://zengliangyi.com/blog/team-knowledge-sharing-plan/</guid>
      <description>区分当前云令牌与拟议成员权限，以合成网关规则验证只读操作和整批审批，并明确共享与备份责任。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Knowledge Management</category>
        <category>Security</category>
    </item>
    <item>
      <title>Vectra 索引内部：元数据文件、取消更新与实例缓存</title>
      <link>https://zengliangyi.com/blog/vectra-search-internals/</link>
      <guid>https://zengliangyi.com/blog/vectra-search-internals/</guid>
      <description>核对 Vectra 0.15.0 的真实查询和存储路径，在临时索引中观察外部元数据、取消后的文件残留，以及不同实例的缓存状态。</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>SQLite</category>
    </item>
    <item>
      <title>实现 Embedding 服务：文本、分块与提交边界</title>
      <link>https://zengliangyi.com/blog/embedding-service-design/</link>
      <guid>https://zengliangyi.com/blog/embedding-service-design/</guid>
      <description>对照 ChatCrystal 的真实 Embedding 流程，区分文本选择、软分块、向量校验与提交，并用离线反例验证边界。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>AI</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>代码规范工具：核对 Biome、ESLint 与格式化的真实分工</title>
      <link>https://zengliangyi.com/blog/lint-format-tooling/</link>
      <guid>https://zengliangyi.com/blog/lint-format-tooling/</guid>
      <description>阅读 ChatCrystal 的实际脚本与 Flat Config，用离线 ESLint 诊断验证规则，再区分语法检查、类型检查、格式化和 CI 门禁。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>实现最小 MCP Server：注册工具与验证 stdio 调用</title>
      <link>https://zengliangyi.com/blog/mcp-server-implementation/</link>
      <guid>https://zengliangyi.com/blog/mcp-server-implementation/</guid>
      <description>用固定版本 TypeScript SDK 编写一个离线加法工具，从客户端完成初始化、发现、调用与参数错误检查，再对照 ChatCrystal 的适配边界。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>MCP</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>多格式对话解析：JSONL、事件与 SQLite 的读取边界</title>
      <link>https://zengliangyi.com/blog/multi-format-conversation-parsing/</link>
      <guid>https://zengliangyi.com/blog/multi-format-conversation-parsing/</guid>
      <description>从 ChatCrystal 的真实解析器出发，用离线样本验证行读取、事件筛选和数据库快照，区分格式解析、消息归一化与一致性保证。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>SQLite</category>
    </item>
    <item>
      <title>发布工程：npm、Electron 与标签驱动的 CI</title>
      <link>https://zengliangyi.com/blog/npm-release-ci/</link>
      <guid>https://zengliangyi.com/blog/npm-release-ci/</guid>
      <description>对照 ChatCrystal 的版本脚本和发布工作流，用离线计划验证标签分流、包内容和失败出口，再明确发布后仍需验收的结果。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>GitHub Actions</category>
    </item>
    <item>
      <title>p-queue 任务队列：限速、重试与取消各自保证什么</title>
      <link>https://zengliangyi.com/blog/pqueue-task-queues/</link>
      <guid>https://zengliangyi.com/blog/pqueue-task-queues/</guid>
      <description>对照 ChatCrystal 的队列与状态跟踪，区分任务限速和请求限速，并用离线练习验证清空队列不会中断在途任务。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>TypeScript</category>
    </item>
    <item>
      <title>SourceAdapter 设计：把源发现、扫描和解析分开</title>
      <link>https://zengliangyi.com/blog/source-adapter-design/</link>
      <guid>https://zengliangyi.com/blog/source-adapter-design/</guid>
      <description>阅读 ChatCrystal 的适配器接口和导入路径，用假数据验证按需解析，再检查注册、启用配置、身份与版本的接入边界。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>结构化 JSON Prompt：把输出字段与来源证据一起设计</title>
      <link>https://zengliangyi.com/blog/structured-json-prompts/</link>
      <guid>https://zengliangyi.com/blog/structured-json-prompts/</guid>
      <description>以 ChatCrystal 摘要和关系发现为例，设计字段契约、可见输入与反例样本，并用离线 Zod 练习区分格式验证和证据验证。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>AI</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>TanStack Query 数据流：缓存键、失效与后台任务</title>
      <link>https://zengliangyi.com/blog/tanstack-query-data-flow/</link>
      <guid>https://zengliangyi.com/blog/tanstack-query-data-flow/</guid>
      <description>对照 ChatCrystal 的查询钩子和 API，用离线缓存实验验证参数键与前缀失效，再区分请求成功、后台完成和页面刷新。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>React</category>
        <category>TypeScript</category>
    </item>
    <item>
      <title>测试策略：用反例验证纯函数、数据库与 API 边界</title>
      <link>https://zengliangyi.com/blog/testing-strategy/</link>
      <guid>https://zengliangyi.com/blog/testing-strategy/</guid>
      <description>核对 ChatCrystal 的 Node 测试入口，用离线样本练习依赖隔离、SQL 回滚和 Fastify inject，并明确这些测试没有覆盖什么。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>TypeScript</category>
    </item>
    <item>
      <title>TypeScript 多包配置：类型检查与运行环境的分界</title>
      <link>https://zengliangyi.com/blog/typescript-monorepo-configuration/</link>
      <guid>https://zengliangyi.com/blog/typescript-monorepo-configuration/</guid>
      <description>核对 ChatCrystal 的共享类型、服务端、Vite 客户端和 Electron 配置，用可复现的别名反例解释编译通过为何不等于运行成功。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Vectra 本地搜索：用固定向量验证排序、过滤与持久化</title>
      <link>https://zengliangyi.com/blog/vectra-local-search/</link>
      <guid>https://zengliangyi.com/blog/vectra-local-search/</guid>
      <description>在临时目录运行 Vectra 0.15.0 的确定性练习，检查余弦分数、元数据过滤、重新打开索引和取消更新。</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>AI</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>AI SDK 结构化笔记：统一调用、Schema 与业务校验</title>
      <link>https://zengliangyi.com/blog/ai-sdk-structured-notes/</link>
      <guid>https://zengliangyi.com/blog/ai-sdk-structured-notes/</guid>
      <description>对照 ChatCrystal 的 AI SDK 7 调用，分清 provider 适配、输出类型与业务事实，用离线 Zod 练习验证提示描述的边界。</description>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>AI</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Electron 托盘与窗口状态：隐藏、恢复和退出的边界</title>
      <link>https://zengliangyi.com/blog/electron-tray-window-state/</link>
      <guid>https://zengliangyi.com/blog/electron-tray-window-state/</guid>
      <description>对照 ChatCrystal 当前托盘菜单、窗口位置校验与退出流程，理解状态持久化能恢复什么，以及仍需测试的失败场景。</description>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Electron</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Fastify 生产静态服务：同端口、SPA fallback 与失败路径</title>
      <link>https://zengliangyi.com/blog/fastify-production-static-service/</link>
      <guid>https://zengliangyi.com/blog/fastify-production-static-service/</guid>
      <description>核对 ChatCrystal 的实际构建与静态目录探测，用隔离 inject 练习验证页面、未知 API 和缺失资源的不同响应。</description>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Fastify</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Electron 入门：主进程、页面与有限的 IPC 能力</title>
      <link>https://zengliangyi.com/blog/electron-app-basics/</link>
      <guid>https://zengliangyi.com/blog/electron-app-basics/</guid>
      <description>沿 ChatCrystal 的模式选择、BrowserWindow、preload 和 Fastify 启动路径，理解桌面宿主与 Web 页面的权限和生命周期边界。</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Electron</category>
        <category>桌面应用</category>
    </item>
    <item>
      <title>Embedding 横评方法：固定笔记与查询，比较实际命中</title>
      <link>https://zengliangyi.com/blog/embedding-retrieval-evaluation/</link>
      <guid>https://zengliangyi.com/blog/embedding-retrieval-evaluation/</guid>
      <description>用人工标注的查询和独立索引比较本地与云端 Embedding，核对重建状态、命中质量和资源成本。</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Embedding</category>
        <category>评测</category>
    </item>
    <item>
      <title>从 ChatCrystal 学 Fastify：插件、校验与失败路径</title>
      <link>https://zengliangyi.com/blog/learn-fastify-with-chatcrystal/</link>
      <guid>https://zengliangyi.com/blog/learn-fastify-with-chatcrystal/</guid>
      <description>对照真实 createServer 与路由边界，在隔离练习中运行 Fastify inject，验证成功、无效输入和不存在的路由。</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Fastify</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>摘要模型怎么比较：固定输入、核对证据，再算成本</title>
      <link>https://zengliangyi.com/blog/llm-summary-evaluation/</link>
      <guid>https://zengliangyi.com/blog/llm-summary-evaluation/</guid>
      <description>用相同转录、字段评分和失败记录比较本地与云端摘要模型，区分质量评测和 ChatCrystal 的实际处理链路。</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>LLM</category>
        <category>评测</category>
    </item>
    <item>
      <title>sql.js 实战：内存 SQLite、外键与显式保存</title>
      <link>https://zengliangyi.com/blog/sqljs-wasm-basics/</link>
      <guid>https://zengliangyi.com/blog/sqljs-wasm-basics/</guid>
      <description>从 ChatCrystal 数据层理解 sql.js 的加载、事务和导出边界，用隔离练习验证外键、回滚与重新加载。</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>SQLite</category>
        <category>WebAssembly</category>
    </item>
    <item>
      <title>Tailwind CSS v4 与 Vite：编译工具类，运行时换主题</title>
      <link>https://zengliangyi.com/blog/tailwind-v4-vite-setup/</link>
      <guid>https://zengliangyi.com/blog/tailwind-v4-vite-setup/</guid>
      <description>核对 ChatCrystal 的双包安装、Vite 插件与 CSS 变量主题，区分构建时类名生成和运行时变量注入。</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Tailwind CSS</category>
        <category>Vite</category>
    </item>
    <item>
      <title>ChatCrystal 入门：从安装到第一条可搜索笔记</title>
      <link>https://zengliangyi.com/blog/chatcrystal-getting-started/</link>
      <guid>https://zengliangyi.com/blog/chatcrystal-getting-started/</guid>
      <description>按 ChatCrystal 0.6.1 的实际 CLI，依次验证安装、服务、两类模型、导入、摘要与搜索，区分 npm 包和桌面应用的使用入口。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>知识管理</category>
    </item>
    <item>
      <title>配置 ChatCrystal MCP：让 Claude Code 可检查地调用知识库</title>
      <link>https://zengliangyi.com/blog/chatcrystal-mcp-setup/</link>
      <guid>https://zengliangyi.com/blog/chatcrystal-mcp-setup/</guid>
      <description>用 Claude Code 的项目级 stdio 配置连接 ChatCrystal MCP，核对七个工具、HTTP 后端、审批和真实调用链路。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>MCP</category>
        <category>Claude Code</category>
    </item>
    <item>
      <title>导入 Claude Code 对话：路径、解析与验收</title>
      <link>https://zengliangyi.com/blog/claude-code-conversation-import/</link>
      <guid>https://zengliangyi.com/blog/claude-code-conversation-import/</guid>
      <description>按 ChatCrystal 当前适配器检查 Claude Code 历史位置、JSONL 过滤、增量导入和监听限制，避免把导入成功误读为完整保存或自动生成笔记。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Claude Code</category>
        <category>数据解析</category>
    </item>
    <item>
      <title>Claude Code JSONL 过滤：区分事件、正文块与遗漏</title>
      <link>https://zengliangyi.com/blog/claude-code-jsonl-noise-filter/</link>
      <guid>https://zengliangyi.com/blog/claude-code-jsonl-noise-filter/</guid>
      <description>沿 ChatCrystal 的相关性判断、内容提取和标签清理检查 JSONL，解释顶层过滤与嵌套 thinking、工具标记的差别。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Claude Code</category>
        <category>JSONL</category>
        <category>数据解析</category>
    </item>
    <item>
      <title>MCP 与 Claude Code 记忆工作流：回忆、验证，再写回</title>
      <link>https://zengliangyi.com/blog/claude-code-memory-workflow/</link>
      <guid>https://zengliangyi.com/blog/claude-code-memory-workflow/</guid>
      <description>用 recall_for_task、validate_task_memory 和 write_task_memory 组织可审计的任务记忆流程，不把工具配置误当成自动记忆保证。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>MCP</category>
        <category>Claude Code</category>
    </item>
    <item>
      <title>配置云端 LLM：核对提供方、地址与真实摘要</title>
      <link>https://zengliangyi.com/blog/cloud-llm-configuration/</link>
      <guid>https://zengliangyi.com/blog/cloud-llm-configuration/</guid>
      <description>按 ChatCrystal 提供方注册表设置远端生成，区分原生接口与兼容网关，检查持久化配置、凭证和短测试的边界。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>LLM</category>
        <category>配置</category>
    </item>
    <item>
      <title>接入 Codex、Trae 与 Copilot：分别核对三种历史格式</title>
      <link>https://zengliangyi.com/blog/codex-trae-copilot-import/</link>
      <guid>https://zengliangyi.com/blog/codex-trae-copilot-import/</guid>
      <description>按 ChatCrystal 当前适配器检查数据目录、事件提取与快照边界，用真实会话验证三类来源的导入结果。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>数据解析</category>
        <category>知识管理</category>
    </item>
    <item>
      <title>大量对话导入的内存预算：隔离样本测量再分批</title>
      <link>https://zengliangyi.com/blog/conversation-import-memory-budget/</link>
      <guid>https://zengliangyi.com/blog/conversation-import-memory-budget/</guid>
      <description>解释 sql.js、来源解析、数据库保存和队列如何共同决定导入峰值，用可复现的测量方法安排批次而不是套用固定内存数字。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>导入</category>
        <category>性能</category>
    </item>
    <item>
      <title>导入 Cursor 对话：工作区元数据与全局消息</title>
      <link>https://zengliangyi.com/blog/cursor-conversation-import/</link>
      <guid>https://zengliangyi.com/blog/cursor-conversation-import/</guid>
      <description>核对 ChatCrystal 如何关联 Cursor 的两类 SQLite 数据、发现孤立会话和提取消息，并用真实会话验证导入范围。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Cursor</category>
        <category>SQLite</category>
        <category>数据解析</category>
    </item>
    <item>
      <title>解析 Cursor SQLite：从表与键排查缺失消息</title>
      <link>https://zengliangyi.com/blog/cursor-sqlite-parser-pitfalls/</link>
      <guid>https://zengliangyi.com/blog/cursor-sqlite-parser-pitfalls/</guid>
      <description>沿 Cursor 适配器检查两个数据库、键前缀、未知版本和孤立会话，区分读不到、解析遗漏与真正没有记录。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Cursor</category>
        <category>SQLite</category>
        <category>数据解析</category>
    </item>
    <item>
      <title>配置 Embedding：按检索样本选模型并验证重建</title>
      <link>https://zengliangyi.com/blog/embedding-model-configuration/</link>
      <guid>https://zengliangyi.com/blog/embedding-model-configuration/</guid>
      <description>检查向量模型的任务支持、实际输入和索引兼容性，用已知笔记与无答案查询验收配置及模型切换。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Embedding</category>
        <category>向量检索</category>
    </item>
    <item>
      <title>LLM 与 Embedding：配置相同提供方也要区分任务</title>
      <link>https://zengliangyi.com/blog/llm-and-embedding-separation/</link>
      <guid>https://zengliangyi.com/blog/llm-and-embedding-separation/</guid>
      <description>从生成文本与生成向量的接口差异出发，核对 ChatCrystal 的两套模型配置、连接测试与索引重建边界。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>AI</category>
        <category>向量搜索</category>
    </item>
    <item>
      <title>笔记关系与图视图：从候选发现到可验证扩展</title>
      <link>https://zengliangyi.com/blog/note-relations-and-graph/</link>
      <guid>https://zengliangyi.com/blog/note-relations-and-graph/</guid>
      <description>按 ChatCrystal 当前关系 API、候选筛选与图投影说明自动发现、手动关系和标签图的实际边界。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>知识图谱</category>
        <category>关系</category>
    </item>
    <item>
      <title>Ollama 本地流程：分别验收生成、向量与笔记检索</title>
      <link>https://zengliangyi.com/blog/ollama-local-workflow/</link>
      <guid>https://zengliangyi.com/blog/ollama-local-workflow/</guid>
      <description>安装本地 Ollama，独立测试两类模型请求，再接入 ChatCrystal，检查真实笔记与检索结果，明确资源和数据流边界。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Ollama</category>
        <category>本地优先</category>
    </item>
    <item>
      <title>找回调试方案：从搜索候选到验证可复用条件</title>
      <link>https://zengliangyi.com/blog/recover-debugging-notes/</link>
      <guid>https://zengliangyi.com/blog/recover-debugging-notes/</guid>
      <description>用一个明确标注的调试场景，检查笔记、向量和检索返回，再核对原始对话与当前项目，避免把相关分数当作正确答案。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>语义搜索</category>
        <category>调试</category>
    </item>
    <item>
      <title>语义搜索与关系上下文：发现隐藏依赖但保留验证</title>
      <link>https://zengliangyi.com/blog/semantic-search-relation-context/</link>
      <guid>https://zengliangyi.com/blog/semantic-search-relation-context/</guid>
      <description>用构造的重构场景组合直接检索和一跳关系扩展，解释分数、候选和来源字段，不把关联线索写成依赖证明。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>语义搜索</category>
        <category>知识图谱</category>
    </item>
    <item>
      <title>语义搜索流程：请求、候选去重与关系扩展</title>
      <link>https://zengliangyi.com/blog/semantic-search-workflow/</link>
      <guid>https://zengliangyi.com/blog/semantic-search-workflow/</guid>
      <description>沿 ChatCrystal 实现检查查询向量、候选升级、词项加分和关系扩展，用实际 API 区分笔记列表筛选与语义检索。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>语义搜索</category>
        <category>RAG</category>
    </item>
    <item>
      <title>Vectra 索引异常排查：区分状态、清理与重建</title>
      <link>https://zengliangyi.com/blog/vectra-index-recovery/</link>
      <guid>https://zengliangyi.com/blog/vectra-index-recovery/</guid>
      <description>从数据库状态、Vectra 文件和待清理任务三个层面排查语义搜索异常，按风险选择单篇重建或完整索引恢复。</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Vectra</category>
        <category>故障排查</category>
    </item>
    <item>
      <title>百度智能云 PaddleOCR-VL 接入实践：一个文档解析校样工具的实现</title>
      <link>https://zengliangyi.com/blog/paddleocr-vl-api-proofreading/</link>
      <guid>https://zengliangyi.com/blog/paddleocr-vl-api-proofreading/</guid>
      <description>用 Python 标准库接入百度智能云 PaddleOCR-VL 文档解析 API，串起异步任务、结果下载、原件预览与坐标联动，分享开源校样工具的实现与边界。</description>
      <pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>Python</category>
        <category>JavaScript</category>
        <category>PaddleOCR-VL</category>
        <category>文档解析</category>
    </item>
    <item>
      <title>为什么 `translate: none` 只在生产环境失效</title>
      <link>https://zengliangyi.com/blog/tailwind-translate-minifier-css-layer/</link>
      <guid>https://zengliangyi.com/blog/tailwind-translate-minifier-css-layer/</guid>
      <description>复现 Lightning CSS 合并独立变换属性的行为，解释为何 !important 不是通用修法，并用 Tailwind 变量覆盖与明确的层叠顺序修复生产位移。</description>
      <pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>CSS</category>
        <category>Tailwind</category>
        <category>构建</category>
        <category>调试</category>
    </item>
    <item>
      <title>从 ChatCrystal 导出到 Obsidian 的工作流</title>
      <link>https://zengliangyi.com/blog/chatcrystal-to-obsidian/</link>
      <guid>https://zengliangyi.com/blog/chatcrystal-to-obsidian/</guid>
      <description>分页导出 ChatCrystal 笔记，用稳定 ID 建立 Obsidian 双向链接，并明确快照、人工编辑和增量同步之间的边界。</description>
      <pubDate>Thu, 11 Jun 2026 01:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Obsidian</category>
        <category>Node.js</category>
        <category>知识管理</category>
    </item>
    <item>
      <title>本地向量数据库选型：Vectra、Chroma 与 hnswlib</title>
      <link>https://zengliangyi.com/blog/local-vector-database-selection/</link>
      <guid>https://zengliangyi.com/blog/local-vector-database-selection/</guid>
      <description>从 ChatCrystal 的安装、运行和维护约束出发，对比 Vectra、Chroma 与 hnswlib 的接入方式、检索成本、备份和恢复边界。</description>
      <pubDate>Tue, 09 Jun 2026 01:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>向量搜索</category>
        <category>架构</category>
    </item>
    <item>
      <title>5 种 AI 对话数据格式全解析</title>
      <link>https://zengliangyi.com/blog/ai-conversation-data-formats/</link>
      <guid>https://zengliangyi.com/blog/ai-conversation-data-formats/</guid>
      <description>从 Claude Code、Codex、Cursor、Trae 和 Copilot 的实际适配器出发，理解 JSONL 消息、事件流、SQLite KV 与会话快照的解析边界。</description>
      <pubDate>Tue, 09 Jun 2026 00:45:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>AI</category>
        <category>数据解析</category>
    </item>
    <item>
      <title>AI Agent 时代的知识库：回忆、验证与写回</title>
      <link>https://zengliangyi.com/blog/agent-knowledge-memory-loop/</link>
      <guid>https://zengliangyi.com/blog/agent-knowledge-memory-loop/</guid>
      <description>从 ChatCrystal 的 MCP 工具和任务记忆实现出发，设计有范围、有证据、可修订的记忆循环，区分工具能力与自动化承诺。</description>
      <pubDate>Fri, 05 Jun 2026 01:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>MCP</category>
        <category>AI Agent</category>
        <category>知识管理</category>
    </item>
    <item>
      <title>从 RAG 到知识图谱：让个人知识检索保留关系</title>
      <link>https://zengliangyi.com/blog/rag-and-knowledge-graphs/</link>
      <guid>https://zengliangyi.com/blog/rag-and-knowledge-graphs/</guid>
      <description>区分关键词检索、向量搜索、RAG 与笔记关系图，结合 ChatCrystal 的候选召回和一跳扩展实现，说明关系能补充什么、不能证明什么。</description>
      <pubDate>Fri, 05 Jun 2026 00:45:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>RAG</category>
        <category>知识图谱</category>
        <category>检索</category>
    </item>
    <item>
      <title>本地优先与云端 AI：从数据流理解隐私边界</title>
      <link>https://zengliangyi.com/blog/local-first-ai-data-boundaries/</link>
      <guid>https://zengliangyi.com/blog/local-first-ai-data-boundaries/</guid>
      <description>以 ChatCrystal 为例，分别检查存储、Embedding、摘要、关系发现与 Agent 回忆的数据流，判断本地优先究竟控制了哪些边界。</description>
      <pubDate>Thu, 04 Jun 2026 00:30:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>架构</category>
        <category>隐私</category>
        <category>AI</category>
    </item>
    <item>
      <title>用 AudioContext suspend/resume 作为流式音视频的同步门控</title>
      <link>https://zengliangyi.com/blog/audiocontext-stream-sync-gate/</link>
      <guid>https://zengliangyi.com/blog/audiocontext-stream-sync-gate/</guid>
      <description>在逐帧流式播放中，用 AudioContext suspend 和 resume 冻结或放行音频时间轴，让帧到达决定播放推进并维持严格音画同步。</description>
      <pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>TypeScript</category>
        <category>Web Audio API</category>
        <category>音视频同步</category>
    </item>
    <item>
      <title>React 事件订阅的稳定引用问题：从 useEffect 到 useEffectEvent</title>
      <link>https://zengliangyi.com/blog/react-stable-event-subscriptions/</link>
      <guid>https://zengliangyi.com/blog/react-stable-event-subscriptions/</guid>
      <description>解决 WebSocket、EventEmitter 和 DOM 监听器因回调变化而反复订阅的问题，并厘清 useRef 代理与 React 19.2 useEffectEvent 的边界。</description>
      <pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>React</category>
        <category>Hooks</category>
        <category>事件订阅</category>
    </item>
    <item>
      <title>并发 401 下的 Token 刷新竞态：一个被低估的 Bug</title>
      <link>https://zengliangyi.com/blog/token-refresh-race-condition/</link>
      <guid>https://zengliangyi.com/blog/token-refresh-race-condition/</guid>
      <description>多个请求同时收到 401 时，如何用单次刷新与等待队列避免 refresh token 轮换竞态，并确保刷新失败时所有请求都能正确结束。</description>
      <pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>TypeScript</category>
        <category>认证</category>
        <category>并发</category>
    </item>
  </channel>
</rss>