本地笔记库搭建:Qoder + 自定义 Skill

简介: 试了一圈笔记工具,最后落在 Qoder Desktop。需求很明确:Markdown 写作,自建图床,Agent 能检索能编辑。Codex、Cherry Studio、Notion、Qoderwork 都试过,各有各的不对。Qoder 让我停下来的原因很简单——编辑器跟 Agent 集成但不互相绑架,支持自定义模型,BYOK。没碰 RAG,用 Skill 搭了一套自己的检索流程:建索引、查索引、读文件、改文件、更新索引,每一步都看得见,跑偏了知道哪里出问题

选型工具:从 Codex 到 Qoder,兜兜转转

最开始的想法很简单:搭一个本地笔记库。

要实现 Markdown 写作,图片用自己的图床嵌入,Agent 能像人一样检索和编辑笔记,而不是把所有东西向量化丢进黑盒。

为了这件事,我试了一圈工具,最后发现 Qoder 好像是个不错的选项。

试过的那些

Claude Code、Codex、Opencode 我都用过,它们都是纯工作台模式——没有编辑器,所有交互走聊天框。

一度我用 Codex 比较多,但两个问题慢慢浮现:

一是用 GPT 5.5 做笔记确实大材小用(贵且慢……)。其次,文本处理上我更习惯 DeepSeek 的风格(便宜还好用)。
这两件事单独看不算致命,但每天用的时候就会不舒服。

笔记工具这一路

Codex:聊天式笔记让我觉得自己在退化

纯工作台 Agent 让我和笔记的交互变成了聊天。偶尔我也会厌恶这种模式,一度觉得是在被 LLM 接管——古法编程这门手艺还是需要保留的……

image.png

Cherry Studio:笔记做得真好,但 Agent 太冗余

Cherry Studio 是我用过对 Markdown 支持最好的工具。代码块、图片、预览、排版,远超很多专业笔记软件。

image.png

但它的 AI 对话和笔记在两个不同的框里,算上 Agent 还有第三个……这就让强迫症的我很难受了。
而且它的 Agent 做得确实不太行。

Notion:Markdown 图片嵌入的硬伤

Notion 和类似的笔记工具,都不支持图片嵌入的 Markdown 写法(![替代文本](图片URL))。这意味着我没法用自己的图床。

最关键的是,它居然不报错,不报错,只是拒绝……一度我粘贴的时候怀疑是自己操作有问题。
不然 Notion CLI + 工作台的模式我还是比较能接受的。

image.png

遗憾放弃。

Qoderwork:太臃肿,模型也不透明

公司给了付费的 Qoder 和 Qoderwork 资源。一度我很喜欢 Qoderwork,但慢慢发现它太臃肿了,各种花里胡哨的东西。

更关键的是,即便是付费版本,模型也不支持自定义,只能选标准、高级、旗舰。不够透明,也不适合非工作场景使用。

最后落在 Qoder

好像没太久,Qoder Quest 模式变成了 Qoder Desktop。意外的是,它基本满足了我所有需求。

界面简约,但 Skills、MCP、Memory、Repo Wiki 都在,Agent 和编辑器集成又独立,一键就能切过去改,自定义模型按厂家开放、最高 1M 上下文,虽然没给标准 OpenAI 端点,但对我来说确实没啥影响。

image.png

Repo Wiki 的索引很好用,虽然免费版不支持,但可以自己写 skills 实现(参见 notes skills),所以问题不大。

最让我舒服的一点:它和编辑器是集成又独立的。可以完全当工作台用,也可以一键进入编辑器去改。有种回到用 VSCode 写博客的年代的感觉……我已经把默认编辑器从 VSCode 换成 Qoder 了。

最后分享下我的 Notes Skill

我放弃了 RAG 路线,改用人的 SOP 方式:建索引、查索引、读文件、改文件、更新索引。每步都可见,每步都可控。

目录结构

Skill 放在 .qoder/skills/notes/,两个文件:

.qoder/skills/notes/
├── SKILL.md
└── scripts/
    └── rebuild_index.py

笔记根目录通过相对路径推导,不写死绝对路径:

SKILL_DIR = .qoder/skills/notes
NOTES = SKILL_DIR/../../..

笔记库的布局:

<NOTES>/
├── .qoder/skills/notes/
├── 技术笔记/
├── 项目文档/
├── 读书笔记/
└── INDEX.json

所有业务笔记都是 Markdown 文件,分类用子目录管理。

索引:INDEX.json

INDEX.json 是机器可读索引,记录每篇笔记的路径、分类、标题、摘要和更新时间。格式大概是:

{
   
  "schema_version": 1,
  "generated_at": "2026-06-28T20:00:00+08:00",
  "root": ".",
  "count": 42,
  "notes": [
    {
   
      "path": "技术笔记/某篇笔记.md",
      "category": "技术笔记",
      "title": "某篇笔记的标题",
      "summary": "正文第一段的前120个字符作为摘要",
      "updated_at": "2026-06-28T19:00:00+08:00"
    }
  ]
}

维护规则就一条:笔记增删改移之后,跑一次 rebuild_index.py 重建索引。脚本扫全库 Markdown 文件,自动跳过 .qoder 内部目录,提取每个文件的一级标题和首段摘要,写入 INDEX.json

不再维护人工可读的 Markdown 索引。检索时先看 INDEX.json,定位到具体文件后再用 rg 搜正文细节。

重建索引脚本

rebuild_index.py 的核心逻辑大概 70 行,做了几件事:

  1. 从脚本自身路径向上查找笔记根目录(通过 .qoder/skills/notes/SKILL.md 定位)
  2. 递归扫描所有 .md 文件,跳过 .qoder 内部文件和旧 INDEX.md
  3. 对每个文件提取一级标题作为标题、正文第一段前 120 字符作为摘要
  4. 取文件修改时间作为 updated_at
  5. 按路径排序后写入 INDEX.json
def find_notes_root() -> Path:
    here = Path(__file__).resolve()
    for parent in here.parents:
        if (parent / ".qoder" / "skills" / "notes" / "SKILL.md").exists():
            return parent
    raise RuntimeError("Cannot locate notes root")

def first_heading_and_summary(path: Path) -> tuple[str, str]:
    title = path.stem
    summary = ""
    lines = path.read_text(encoding="utf-8").splitlines()
    for line in lines:
        text = line.strip()
        if not text:
            continue
        if text.startswith("# "):
            title = text[2:].strip() or title
            continue
        if text.startswith("#"):
            continue
        summary = text[:120]
        break
    return title, summary

搜索流程

Agent 搜索笔记时按这个顺序:

  1. 先重建索引确保最新
  2. 打印 INDEX.json 看标题和摘要
  3. rg 在笔记正文中搜索关键词
  4. 汇报命中文件和简短片段
# 搜索正文
rg -n "<关键词>" "$NOTES" -g "*.md" -g "!.qoder/**"

# 按文件名搜索
find "$NOTES" -path "$NOTES/.qoder" -prune -o -iname "*<关键词>*" -print

创建和编辑笔记

创建笔记时,Skill 会:

  • 优先归入已有分类子目录,没有合适分类时先确认再新建
  • 文件顶部加一级标题 # <标题>
  • 创建后自动重建索引

追加内容时,按时间倒序插入,默认加日期戳如 ## 2026-06-28,保持标题层级一致。追加后重建索引。

修改笔记时,小改动做精确替换,大改动保留已有内容。涉及目录结构或正文摘要变化时重建索引。

为什么不用 RAG

RAG 的问题在于,它把检索变成一个黑盒。向量化之后,你不太清楚 Agent 到底看到了什么、没看到什么。

SOP 方式的好处是每一步都可见:

  1. 索引告诉你有哪些笔记、各自的标题和摘要
  2. rg 精确匹配关键词,告诉你命中了哪几行
  3. 读文件时你看到完整上下文
  4. 编辑后重建索引,状态一致

每个环节都可以确认、纠正、回退。对于个人笔记库这种规模不大但需要精确操作的场景,可控性比召回率更重要。

目录
相关文章
|
4天前
|
人工智能 定位技术 SEO
我学 GEO 第 15 天:终于知道AI GEO该如何做?
我是暴走的莉莉酱,边旅行边研究AI GEO的数字游民。专注普通人如何提升“AI可见度”——让AI在回答用户问题时准确识别、理解并推荐你。不讲玄学,只做可测、可调、可持续的GEO实践。
377 124
|
6天前
|
机器学习/深度学习 人工智能 调度
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
HappyHorse 1.1 是新一代视频生成大模型,全面升级动态表现力、角色一致性、指令遵循、视觉质感与音画协同能力。支持I2V/T2V/R2V三类生成,适配短剧、电商广告、品牌营销等场景,提供高质、流畅、可控的AI视频生产力。
648 4
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
|
2天前
|
人工智能 自然语言处理 API
阿里云Token Plan团队版解析:功能、三档套餐与省钱订阅指南
阿里云百炼平台推出的Token Plan团队版,是面向企业与团队的AI大模型订阅服务,以Credits为统一计量单位,整合文本与图像生成模型,提供团队管理、数据安全、多工具兼容等核心能力,解决团队零散订阅AI服务的管理混乱、成本失控、数据安全等痛点。本文将从核心定位、套餐详情、计费规则、团队管理、工具兼容、便宜订阅技巧等方面,全面解析Token Plan团队版,帮助企业与团队高效、低成本地使用AI服务。
288 108
|
4天前
|
缓存 人工智能 运维
阿里云618百炼大模型Qwen3.7-Max功能、免费试用、订阅计费、配置接入详解
Qwen3.7-MAX是阿里云百炼平台推出的通义千问3.7系列旗舰大语言模型,专为智能体时代复杂任务打造,依托阿里云全域算力与自研技术,在逻辑推理、长文本处理、代码工程、长周期自主执行等领域达到行业顶尖水平。2026年618期间,该模型推出多重免费试用权益、按量计费5折、订阅套餐优惠等专属福利,覆盖个人开发者、团队与企业全场景需求,以下从核心功能、免费试用、订阅计费、配置接入四方面展开详细解析。
377 123
|
17天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
3天前
|
存储 人工智能 数据可视化
别再手动复制 Skill 了:多 Agent 时代的 Skill 管理方案
多 Agent 场景下 Skill 的统一管理与同步。
207 121
|
10天前
|
缓存 人工智能 运维
GLM 5.2自托管全流程实战:硬件选型、vLLM/SGLang部署与成本盈亏测算
2026年智谱发布GLM 5.2超大混合专家模型,区别于以往仅开放API的闭源大模型,该模型权重以MIT开源协议对外发布,企业与开发者可完整下载、本地审计、私有化部署,实现数据不出环境、自定义微调、自主调度推理资源。GLM 5.2拥有753B总参数,原生支持百万级上下文窗口,在代码生成、长文档推理、数学逻辑等多项基准测试中对标国际顶尖商用模型,是首款可完整自托管的前沿代码向大模型。
793 0
|
3天前
|
SQL 存储 运维
日志能不能改?SLS LogStore 原生支持更新和删除了
随着日志承载的业务语义越来越多,数据订正、回填、清理等需求变得越来越常见。SLS 现已为 LogStore 提供原生 update/delete 能力——支持按 RowID 精确修改,按查询条件批量操作,类似计费调账、标签刷新、反馈回填等场景都可以直接在 LogStore 内完成闭环。
180 123

热门文章

最新文章