1. 项目概述:用AI构建你的第二大脑,从手机到知识库的无缝流转

你有没有过这样的时刻?在手机上刷到一篇深度好文,或者看到一个精彩的YouTube视频,脑子里闪过一个绝妙的点子,你对自己说:“这个得记下来,以后肯定用得上。”然后呢?然后就没有然后了。要么是复制链接后忘了整理,要么是截图后淹没在相册里,要么是打开电脑准备记录时,那股冲动和灵感早已烟消云散。信息碎片化时代,我们最大的痛点不是获取信息,而是如何高效、无感地保存和调用这些信息。

今天要分享的,就是我折腾了几个月,最终稳定运行在我日常工作流里的一个“神器级”方案: Telegram to Obsidian 。它的核心逻辑极其简单: 你在手机上看到任何想保存的内容,无论是文章、链接、视频还是灵光一闪的想法,直接扔给你的Telegram机器人,说一句“存进ob”,剩下的所有事情——AI摘要、智能打标、自动分类归档——全部由系统自动完成,最终生成一篇结构清晰的Markdown笔记,直接存入你的Obsidian知识库。

这不仅仅是一个“保存”动作,而是一个完整的“输入-处理-归档”自动化管道。它完美解决了“灵感稍纵即逝”和“信息收集即终结”的痛点,让你真正能把手机变成第二大脑的便携采集端。整个方案基于Docker容器化部署,数据完全本地化处理(AI摘要环节可灵活选择云端或本地模型),核心利用了OpenClaw这个AI智能体框架来调用大模型能力。接下来,我会从设计思路、环境搭建、核心配置、避坑实录到高阶玩法,为你完整拆解这个能极大提升知识管理效率的自动化工作流。

2. 核心设计思路与架构选型解析

2.1 为什么是“Telegram + Obsidian”这个组合?

在动手搭建之前,我们需要先理解这个方案背后的设计哲学。市面上有无数剪藏工具,如Pocket、Instapaper、Raindrop.io,甚至Obsidian自家的官方插件。但这个方案选择Telegram和Obsidian的组合,是基于以下几个深思熟虑的考量:

第一,采集入口的极致便捷性与普适性。 Telegram作为一个全球性的即时通讯工具,其机器人API稳定、强大且完全免费。更重要的是,它几乎存在于每个人的手机上。这意味着采集入口无需安装新的App,你只需要将内容“分享”到Telegram机器人,或者直接复制粘贴发送。这种基于现有高频工具的无感集成,是保证工作流可持续性的关键。试想,如果一个工具需要你专门打开某个App才能采集,它的使用频率会大打折扣。

第二,知识库本体的绝对控制权与灵活性。 Obsidian以其纯本地Markdown文件存储和强大的双向链接能力,成为了个人知识管理领域的标杆。选择Obsidian作为最终存储地,意味着你的所有知识资产都是一份份可读、可迁移、可被任何文本编辑器打开的 .md 文件。你拥有数据的绝对主权,无需担心服务商倒闭、功能变更或收费涨价。同时,Obsidian丰富的社区插件生态,让你可以基于这些自动生成的笔记进行二次加工、关联和可视化。

第三,AI作为“认知副驾”,而非简单搬运工。 这个方案的核心价值不在于“保存”,而在于“预处理”。传统的剪藏只是保存了原文或链接,你依然需要面对一大段未经消化的信息。而本方案中,AI模型(如Gemini Flash)会扮演一个高效的初级编辑角色:它自动提取核心观点、生成结构化摘要、打上相关性标签,并按照PARA方法论(Projects, Areas, Resources, Archive)进行智能分类。这相当于在信息入库前,已经帮你完成了第一轮的信息加工,极大地降低了后续回顾和调用的认知负荷。

2.2 技术架构深度拆解:从消息到笔记的旅程

整个系统的数据流清晰而精妙,我们可以将其拆解为五个核心环节:

用户手机 (Telegram App)
        ↓ (发送消息 “内容” + “存进ob”)
Telegram 官方服务器
        ↓ (Webhook 推送)
你的服务器 (Docker 容器: openclaw-gateway)
        ↓ (路由至AI智能体工作流)
AI 模型服务 (OpenRouter API 或 本地模型)
        ↓ (返回结构化JSON:标题、摘要、标签、分类)
你的服务器 (OpenClaw Exec Tool)
        ↓ (执行 shell 命令: `cat > /obsidian/xxx.md`)
本地硬盘 (Obsidian Vault 文件夹)
        ↓ (文件系统同步)
你的所有设备 (通过 Dropbox/iCloud/Syncthing/Git)

环节一:触发与接收。 你在Telegram中向自己创建的Bot发送消息。Telegram服务器会通过你预先配置的Webhook,将这条消息即时推送到你部署了OpenClaw服务的机器(通常是家里的NAS或一台长期开机的电脑)上。这里的关键是,你的机器需要一个公网可访问的地址(或通过内网穿透工具)来接收Webhook,这是初期配置的一个小难点,后文会详细说明解决方案。

环节二:智能体路由与处理。 OpenClaw框架接收到消息后,会根据预定义的技能(Skill)进行路由。在本项目中,技能被定义为处理“存进ob”这个意图。OpenClaw会将用户消息的上下文(包括消息文本、链接、甚至图片OCR后的文字)打包,准备发送给AI模型。

环节三:AI认知加工。 这是系统的“大脑”。OpenClaw通过API调用配置好的AI模型(默认是OpenRouter提供的Google Gemini Flash)。发送给模型的不仅仅是一句“请总结这篇文章”,而是一段精心设计的系统提示词(Prompt),其中明确指令模型需要提取标题、生成关键洞察、列出摘要要点、分析个人关联性、推荐标签,并最终根据PARA原则决定文件应该存放在哪个分类文件夹下。模型返回的是一个结构化的JSON数据。

环节四:指令执行与文件写入。 这是最体现OpenClaw“智能体”能力的一步。OpenClaw框架内置了一个 exec 工具(即执行Shell命令的能力)。AI模型在返回的JSON中,不仅包含内容,还会包含一个“动作”(Action)指令,例如: {"action": "write_file", "path": "/obsidian/30-Resources/AI/关于Gemini模型详解.md", "content": "..."} 。OpenClaw会解析这个动作,并真正在Docker容器内部执行 echo '...' > /obsidian/... 这样的命令。 这里有一个至关重要的安全机制:首次执行这类命令前,需要管理员在服务器端手动批准(pairing & approval),防止恶意指令被执行。

环节五:持久化与同步。 由于我们在启动Docker时,通过 volumes 参数将本地的Obsidian仓库目录“映射”到了容器内的 /obsidian 路径,所以容器内写入的文件,实际上直接写到了你硬盘上的Obsidian文件夹里。之后,无论你使用Dropbox、iCloud、Syncthing还是Git进行跨设备同步,这篇新笔记都会自动出现在你的手机、平板、电脑等所有设备的Obsidian中。

这个架构的优势在于 松耦合与可替换性 。你可以轻松更换AI模型提供商(从OpenRouter换成Groq、Together.ai或本地Ollama),也可以调整分类逻辑和笔记模板,而无需改动核心的数据流。它构建了一个稳固的自动化管道,将便捷的输入、智能的处理和可靠的存储无缝连接了起来。

3. 从零开始的完整部署与配置指南

理论讲完,我们进入实战环节。我会假设你是在一台运行Linux(如Ubuntu)或macOS的机器上部署,这台机器需要保持长期开机,以随时接收Telegram的消息。Windows通过WSL2也可以,但步骤会略有不同。

3.1 基础环境准备:Docker与项目初始化

首先,确保你的系统已经安装了Docker和Docker Compose。这是整个项目的运行基石。

# 在Ubuntu/Debian上安装Docker
sudo apt update
sudo apt install docker.io docker-compose
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户加入docker组,避免每次都用sudo
sudo usermod -aG docker $USER
# 需要重新登录生效

# 在macOS上,建议直接下载 Docker Desktop 图形化安装包

接下来,获取项目代码并进入目录:

git clone https://github.com/tzongen5168/telegram-to-obsidian.git
cd telegram-to-obsidian

这个仓库里已经包含了所有必要的配置文件、Docker编排脚本和工具脚本。

3.2 核心API密钥的申请与配置

整个系统需要两个关键的外部服务密钥:

1. Telegram Bot Token 这是你的机器人在Telegram世界的身份证。

  • 打开Telegram,搜索 @BotFather
  • 发送 /newbot 指令,按照提示依次设置你的机器人名称(如 My Obsidian Saver )和用户名(必须以 bot 结尾,如 my_obsidian_saver_bot )。
  • 创建成功后,BotFather会给你一串长长的字符串,格式类似 1234567890:ABCDEFGhijklmnOpqrstUvWxyz-abcde 务必妥善保存,它只显示一次。

2. OpenRouter API Key 这是调用AI模型的通行证。OpenRouter聚合了众多AI模型API,并提供免费的Gemini Flash额度,非常适合本项目起步。

  • 访问 OpenRouter官网 ,用GitHub或Google账号注册。
  • 进入 API Keys 页面,点击 “Create Key”。
  • 给你的Key起个名字(如 obsidian-bot ),创建后即可看到你的API Key。同样复制保存。

有了这两个Key,我们开始配置环境变量:

# 复制环境变量模板文件
cp .env.example .env
# 使用你喜欢的编辑器(如nano, vim, vscode)编辑 .env 文件
nano .env

在打开的 .env 文件中,填入你的密钥和Obsidian仓库路径:

# Telegram Bot Token
TELEGRAM_BOT_TOKEN=你的Telegram_Bot_Token
# OpenRouter API Key
OPENROUTER_API_KEY=你的OpenRouter_API_Key
# 你的Obsidian主仓库在宿主机上的绝对路径
OBSIDIAN_VAULT_PATH=/home/yourname/Documents/ObsidianVault

重要提示 OBSIDIAN_VAULT_PATH 必须填写绝对路径。你可以通过 pwd 命令在终端中查看当前目录的绝对路径。确保你有对该目录的读写权限。

3.3 构建Obsidian仓库的PARA结构

PARA(Projects, Areas, Resources, Archive)是一种广受欢迎的信息组织方法,它根据信息的“行动状态”而非“主题”来分类,更符合大脑处理事务的逻辑。项目提供了自动创建这个结构的脚本。

# 确保你有执行权限
chmod +x ./scripts/setup-vault.sh
# 运行脚本,参数就是你的Obsidian仓库路径
./scripts/setup-vault.sh /home/yourname/Documents/ObsidianVault

运行后,你的Obsidian仓库目录会生成如下结构:

你的知识库/
├── 00-Inbox/           # 收件箱。所有AI暂未明确分类或需要你二次处理的笔记默认放在这里。
├── 10-Projects/        # 项目。有明确起止时间、目标的具体任务(如“撰写Q3报告”、“开发XX功能”)。
├── 20-Areas/           # 领域。你长期关注、持续精进的领域(如“个人健康”、“机器学习”、“投资理财”)。
├── 30-Resources/       # 资源。持续积累的参考资料、文章、工具、灵感(如“优秀的React组件库列表”、“关于睡眠的科学研究”)。
├── 40-Archive/         # 归档。已完结的项目、不再活跃的领域或资源的存档。
└── 50-Templates/       # 模板。存放Obsidian的笔记模板,本项目生成的笔记也基于一个模板。

这个结构是AI进行自动分类的依据。AI模型会根据对内容的理解,决定将新笔记放入 30-Resources/AI 还是 20-Areas/Health 等子文件夹。

3.4 启动服务与Telegram机器人配对

所有配置就绪,现在可以启动整个Docker服务栈了。

# 在项目根目录下,使用docker-compose拉起所有服务
docker-compose up -d

-d 参数表示在后台运行。你可以用 docker-compose logs -f 来实时查看日志,排查问题。

服务启动后,最关键的一步来了: 配对(Pairing)与批准(Approval) 。这是OpenClaw框架的安全机制,确保只有你授权的对话(Session)才能执行写入文件等敏感操作。

  1. 在Telegram中找到你的机器人 (用户名就是刚才创建的 my_obsidian_saver_bot ),给它发送任意一条消息,比如“hi”。
  2. 回到服务器终端,查看当前的配对请求:
    docker exec openclaw-gateway openclaw pairing list telegram
    
    你会看到一个列表,包含一个未批准的配对请求,其中有一个 PAIRING_ID (一串数字字母组合)和对应的 VERIFICATION_CODE (一个6位数字)。
  3. 批准这个配对
    docker exec openclaw-gateway openclaw pairing approve telegram <VERIFICATION_CODE>
    
    请将 <VERIFICATION_CODE> 替换为上一步看到的6位数字。
  4. 批准执行权限 :配对只是允许对话,还需要批准执行命令的权限。
    # 查看待批准的exec请求
    docker exec openclaw-gateway openclaw approvals get
    # 你应该会看到一个来自你Telegram ID的请求,状态是pending
    # 批准它(通常需要请求的ID,如果只有一个,可以直接用`--all`)
    docker exec openclaw-gateway openclaw approvals approve --all
    

完成这两步批准后,你的Telegram机器人才被真正授权可以往你的Obsidian仓库里写文件。这个流程虽然稍显繁琐,但极大地增强了系统的安全性,防止被恶意利用。

4. 核心功能使用与个性化定制

4.1 基础使用:如何保存一切

配置完成后,使用起来就非常简单了。以下是一些典型的使用场景:

  • 保存网页文章 :在手机浏览器中打开一篇公众号文章或博客,点击“分享”->“复制链接”,然后打开Telegram,将链接发送给你的机器人,并附上文字“存进 ob”。几秒后,一篇包含摘要、标签和分类的笔记就会出现在你的Obsidian里。
  • 保存推文/微博线程 :长按选中整个有价值的推文串,复制文本,粘贴到Telegram发给机器人,加上“存进 ob”。AI会理解这是一段社交媒体讨论,并提取核心论点。
  • 记录灵感或语音转文字 :直接对着Telegram语音输入你的想法,或者打字输入,然后发送“存进 ob”。AI会帮你把零散的语言组织成结构化的笔记。
  • 保存YouTube视频 :分享视频链接给机器人,并最好在消息里简单描述一下这个视频是关于什么的(例如:“这是一个关于如何用Docker部署PostgreSQL的教程”)。AI会结合链接(如果能获取到元数据)和你的描述生成笔记。

实操心得 :对于链接类内容,AI模型(尤其是免费模型)有时无法直接抓取网页内容(受限于OpenRouter的配置或网站反爬)。最可靠的方式是**“文本+链接”**一起发送。即,先手动复制文章的核心段落或你的简要总结,然后附上链接和“存进 ob”指令。这样即使链接抓取失败,AI也能基于你提供的文本进行处理。

4.2 笔记模板与AI输出解析

系统生成的笔记遵循一个精心设计的模板,这不仅是为了美观,更是为了后续的检索与关联。一篇典型的生成笔记如下:

---
title: 深度解读GPT-4o的多模态能力突破
source: https://example.com/gpt4o-review
date: 2023-10-27
tags: [AI, 多模态, OpenAI, 模型架构]
category: 30-Resources/AI
---

## 关键洞察
GPT-4o的核心突破在于实现了真正的端到端多模态统一建模,将文本、图像、音频在同一神经网络中进行处理,而非传统的拼接式架构,这带来了更低的延迟和更自然的跨模态理解。

## 摘要
- **统一架构**:摒弃了独立的编码器-解码器组合,使用单一模型处理所有模态输入输出,训练效率与交互流畅度大幅提升。
- **实时响应**:音频输入输出延迟降至约232毫秒,接近人类对话反应时间,为实时交互应用铺平道路。
- **多模态理解增强**:在视觉、音频理解基准测试中表现显著优于前代模型,尤其在涉及跨模态推理的任务上。
- **API成本降低**:尽管能力更强,但OpenAI宣称其API调用成本仅为GPT-4 Turbo的一半。

## 个人关联性
- 当前负责的智能客服项目可探索集成其音频实时理解能力,提升语音客服体验。
- 其统一架构设计思路可作为我们内部多模态模型研发的参考方向。
- 成本降低意味着可以在产品中更广泛地应用高级AI功能,需重新评估项目预算。

你可以看到,AI不仅仅做了摘要,还生成了 关键洞察 (一句话抓住本质)、 标签 (便于后期筛选)、 分类 (自动归入 30-Resources/AI 目录),以及最重要的—— 个人关联性 。这部分是AI基于内容对你可能的工作或兴趣进行的推测性关联,虽然不一定完全准确,但极大地激发了笔记与你已有知识体系的连接点,是“冷笔记”变成“热知识”的关键一步。

4.3 模型选型与配置调优

项目默认使用OpenRouter的Google Gemini 2.0 Flash模型,因为它有免费的额度。但不同的模型在能力和成本上差异巨大。配置文件位于 config/config.yaml

# config/config.yaml 核心部分
agent:
  model: google/gemini-2.0-flash-001  # 默认使用免费的Gemini Flash
  # model: anthropic/claude-3-5-sonnet-20241022  # 付费但能力更强的Claude 3.5 Sonnet
  # model: meta-llama/llama-3.1-8b-instruct  # 免费的Llama模型(注意工具调用支持)
  temperature: 0.3  # 控制创造性,越低输出越稳定
  max_tokens: 2000   # 生成内容的最大长度

如何选择模型?这里有一份详细的对比与建议:

模型 成本 工具调用可靠性 分类/摘要质量 适用场景与建议
Gemini 2.0 Flash OpenRouter免费额度 时好时坏 。在简单指令下工作正常,复杂时可能忽略工具调用。 基本可用 。能生成结构和摘要,但深度和准确性一般,分类可能出错。 入门首选 。用免费额度测试整个流程是否跑通,感受自动化带来的便利。如果发现它经常“答应”保存但实际没写文件,就是工具调用失败了。
Claude 3.5 Sonnet ~$0.01 / 篇 非常可靠 。能稳定理解并执行工具调用指令。 高质量 。摘要凝练、洞察深刻,分类准确度高,个人关联性部分更有启发性。 生产环境推荐 。如果你每天保存大量信息,且依赖准确的自动分类和高质量摘要,强烈建议在OpenRouter充值少量金额(如5美元),切换到Claude。其可靠性和输出质量远超免费模型,体验有质的飞跃。
Llama 3.1/4 系列 免费(部分) 通常不支持 。大多数开源模型未针对OpenAI格式的工具调用进行微调。 质量尚可,但 由于无法调用工具,笔记无法实际保存 不推荐用于此项目 。除非你精通模型微调,能将工具调用能力适配到Llama上,否则它们只会“模拟”成功,而不产生实际文件。
本地模型 (Ollama) 免费 严重依赖模型 。14B以上参数且经过工具调用微调的模型(如 qwen2.5:14b )可能支持。7B模型基本不可用。 质量参差不齐,取决于具体模型。 高级玩家选项 。适合注重隐私、有强大显卡、且愿意折腾的用户。你需要自行搭建Ollama服务,并在 config.yaml 中修改 baseUrl: http://host.docker.internal:11434/v1 。务必测试工具调用是否真的生效。

配置技巧 :如果你想切换模型,只需修改 config.yaml 中的 model 字段,然后重启Docker服务: docker-compose down && docker-compose up -d 强烈建议在切换后,先发送一条简单的测试信息(如“测试,存进ob”),并观察Docker日志 docker-compose logs -f openclaw-gateway ,确认模型被正确调用且工具执行成功。

4.4 技能定制:让AI更懂你的分类体系

默认的PARA分类是通用的,但你可能希望AI能识别更具体的领域。例如,你希望所有关于“Python异步编程”的文章都自动归入 30-Resources/Programming/Python/Async 。这可以通过修改OpenClaw的技能定义文件来实现。

技能文件位于 config/workspace/skills/obsidian/SKILL.md 。这个文件本质上是一个给AI模型的“系统提示词+工具说明书”。你需要关注其中的 classification_rules 部分。

# 在SKILL.md中寻找类似以下的结构(具体格式可能为YAML或JSON)
classification_rules:
  - if: "内容涉及具体的、有截止日期的任务目标"
    then: "10-Projects"
    examples: ["季度产品发布", "撰写毕业论文", "筹备线下活动"]
  - if: "内容涉及需要长期维护和精进的领域或责任范围"
    then: "20-Areas"
    examples: ["个人健康管理", "机器学习知识体系", "家庭财务管理"]
  - if: "内容属于参考资料、灵感、有价值的信息,但不属于当前活跃项目或领域"
    then: "30-Resources"
    examples: ["一篇关于新框架的评测", "一个有用的命令行工具介绍", "某行业研究报告"]
  # 你可以在这里添加更细粒度的规则
  - if: "内容主要关于Python编程语言,特别是异步相关技术"
    then: "30-Resources/Programming/Python/Async"
    examples: ["asyncio教程", "FastAPI并发处理", "aiohttp库使用心得"]
  - if: "内容主要关于投资理财中的指数基金定投"
    then: "30-Resources/Finance/IndexFund"
    examples: ["标普500定投策略", "沪深300估值分析", "ETF选择指南"]

修改技巧

  1. 规则描述( if )要尽量具体,使用AI容易理解的关键词。
  2. then 指向的路径必须是你在Obsidian仓库中实际存在的文件夹路径(可以运行 setup-vault.sh 脚本创建子文件夹,或手动创建)。
  3. 提供清晰的 examples 有助于AI理解规则的边界。
  4. 修改后需要重启OpenClaw服务使新技能生效: docker-compose restart openclaw-gateway

5. 高级部署与网络穿透方案

对于大多数家庭用户,你的服务器位于路由器后面,没有公网IP,Telegram的Webhook无法直接送达。这就需要“内网穿透”。以下是几种经过验证的可靠方案:

方案一:使用云服务器反向代理(推荐,最稳定) 这是最专业和稳定的方案。你需要一台拥有公网IP的轻量级云服务器(如腾讯云/阿里云/AWS Lightsail,最低配置即可)。

  1. 在云服务器上安装Nginx。
  2. 配置Nginx,将某个域名(如 bot.yourdomain.com )的HTTPS请求,反向代理到你家庭服务器的 http://内网IP:3000 (OpenClaw服务端口)。这需要在家庭路由器上设置端口转发(Port Forwarding),将云服务器访问的某个端口(如30001)转发到内网服务器的3000端口。
  3. 在云服务器上使用 ssh -R frp 等工具建立一条从家庭服务器到云服务器的稳定隧道。
  4. 将Telegram Bot的Webhook地址设置为 https://bot.yourdomain.com/webhook

方案二:使用现成的内网穿透服务(最简单) 对于不想折腾云服务器的用户,可以使用 ngrok cloudflared 等服务。

# 以ngrok为例(需注册获取authtoken)
ngrok http 3000

运行后,ngrok会给你一个随机的 https://xxxx.ngrok.io 域名。将这个地址设置为Telegram Bot的Webhook地址。缺点是免费版域名会变化,重启后需要重新设置Webhook。

方案三:使用Tailscale等组网工具(安全,但需客户端) Tailscale基于WireGuard,能在你的所有设备间建立一个安全的虚拟局域网(VPN),每个设备都会获得一个固定的Tailscale IP。

  1. 在你的家庭服务器和手机上都安装Tailscale并登录同一账号。
  2. 家庭服务器会获得一个如 100.x.x.x 的Tailscale IP。
  3. 将Telegram Bot的Webhook地址设置为 http://100.x.x.x:3000/webhook
  4. 因为手机和服务器在同一个虚拟网络内,Webhook可以直达。 但请注意,Telegram服务器本身不在你的Tailscale网络内,所以这个方案行不通。 Webhook必须是从Telegram公网服务器发起的,因此Tailscale方案不适用于Webhook接收,仅适用于你从手机直接访问家庭服务器管理界面时使用。

设置Webhook的命令 : 当你确定了公网可访问的URL后,需要通过Telegram Bot API来设置。

# 将YOUR_BOT_TOKEN和YOUR_PUBLIC_URL替换成你的信息
curl -X POST https://api.telegram.org/botYOUR_BOT_TOKEN/setWebhook \
  -H "Content-Type: application/json" \
  -d '{"url": "YOUR_PUBLIC_URL/webhook", "allowed_updates": ["message"]}'

设置成功后,当你在Telegram中给Bot发消息,消息就会推送到你的服务器了。

6. 故障排查与常见问题实录

在实际部署和运行中,你几乎一定会遇到一些问题。下面是我踩过坑后总结的排查清单。

6.1 Bot无响应或提示超时

症状 :给Bot发消息后,长时间无回复,或最终回复“LLM request timed out”。

排查步骤

  1. 检查Docker服务状态 docker-compose ps 。确保所有容器(特别是 openclaw-gateway )的状态是 Up
  2. 查看服务日志 docker-compose logs -f openclaw-gateway 。这是最重要的信息源。关注是否有错误堆栈。
    • 如果看到 Connection refused Failed to connect to OpenRouter API ,说明网络问题或API Key错误。检查 .env 文件中的 OPENROUTER_API_KEY ,并确保服务器能访问互联网。
    • 如果看到 404 Model not found ,说明 config.yaml 中配置的模型名称有误。去OpenRouter官网确认模型全称。
  3. 检查Webhook是否设置成功 curl https://api.telegram.org/botYOUR_BOT_TOKEN/getWebhookInfo 。查看返回的 url 字段是否是你的公网地址。
  4. 检查防火墙/安全组 :确保你的服务器(或云服务器)的3000端口(或你映射的端口)对公网开放。

6.2 Bot回复“已保存”但Obsidian里没有文件

症状 :Bot回复了包含标题和摘要的消息,看起来成功了,但Obsidian仓库里找不到对应的Markdown文件。

这是最常见的问题,根本原因在于AI模型没有成功执行“写文件”这个工具调用。 请按以下顺序排查:

  1. 确认配对与批准已完成 :这是前提。务必执行过 pairing approve approvals approve
  2. 检查OpenClaw工具配置 :查看 config/openclaw.json 文件,确认 tools.profile 被设置为 "full" 。这是启用执行能力的关键。
    {
      "tools": {
        "profile": "full"
      }
    }
    
  3. 检查模型工具调用能力 :这是核心。免费模型(如Gemini Flash)的工具调用能力不稳定。查看Docker日志,如果看到模型返回的响应里没有包含 tool_calls 字段,或者响应内容是一个“模拟”的保存成功消息,那就说明模型这次调用工具失败了。 解决方案
    • 换用更可靠的模型 :如Claude 3.5 Sonnet。
    • 优化你的指令 :发送更清晰、更简单的指令。例如,先发送“测试”,等Bot回复后,再发送“存进ob”和你的内容。有时复杂的上下文会让免费模型“分心”。
    • 在日志中确认 :在日志中搜索 tool_calls function_call 。成功的调用会显示类似 Calling tool 'exec' with arguments... 的日志,并且紧接着会有 File written successfully to /obsidian/... 的确认信息。
  4. 检查文件路径映射 :确认Docker Compose文件中的 volumes 映射是否正确,以及你是否有权限写入该目录。可以进入容器内部检查:
    docker exec -it openclaw-gateway /bin/sh
    ls -la /obsidian/  # 这里应该能看到你的Obsidian仓库文件
    echo "test" > /obsidian/test.txt  # 测试写入权限
    exit
    
    然后去你的本地 OBSIDIAN_VAULT_PATH 目录下查看是否有 test.txt 文件。

6.3 分类不准确或摘要质量差

症状 :文件保存了,但被放到了错误的文件夹(如该去 30-Resources 的去了 00-Inbox ),或者摘要写得泛泛而谈。

原因与解决

  1. 模型能力局限 :免费模型在复杂内容理解和分类任务上精度有限。 最有效的办法是升级到付费模型(Claude 3.5 Sonnet) ,效果立竿见影。
  2. 输入信息不足 :AI是依据你发送的内容做判断的。如果你只发了一个光秃秃的链接,AI获取到的元数据(Title, Description)可能很模糊。 尽量附带一些你自己的描述 ,比如“这是一篇关于React性能优化的高级技巧文章”。
  3. 调整技能规则 :如前文所述,细化 SKILL.md 中的 classification_rules ,提供更明确的规则和例子。
  4. 修改提示词模板 :高级用户可以修改 config/workspace/skills/obsidian/ 下的提示词文件,调整AI生成摘要、标签和关联性的逻辑。但这需要一定的Prompt Engineering经验。

6.4 如何备份与迁移

整个系统的配置和数据都非常轻量。

  • 配置备份 :备份项目根目录下的 .env config/ 文件夹和 docker-compose.yml 文件即可。
  • 数据备份 :你的所有笔记数据都在本地的Obsidian仓库中,使用你已有的同步方案(如Git)进行备份即可。
  • 迁移 :在新机器上,安装好Docker,克隆项目,放入备份的配置和 .env 文件,修改 OBSIDIAN_VAULT_PATH 指向新位置,然后 docker-compose up -d 即可。Telegram Bot Token和OpenRouter API Key是通用的,无需更改。

这个由Telegram、OpenClaw AI智能体和Obsidian共同构建的自动化流水线,彻底改变了我收集和处理信息的方式。它最大的价值不在于技术本身有多炫酷,而在于它如此自然地嵌入到了我的生活流中——看到、发送、遗忘。剩下的整理、消化、关联工作,交给那个不知疲倦的AI助手。当一周后我需要某个模糊记忆中的观点时,我不再需要翻找混乱的收藏夹,只需在Obsidian里轻轻搜索,或直接问我的Telegram Bot,那份已经被初步加工、带着标签和关联的笔记就会立刻呈现。技术应该服务于人,让人更专注于思考和创造,而不是重复性的整理与记忆。这套方案,正是这个理念的一个微小但切实的实践。如果你也受困于信息过载与碎片化,不妨花上一个下午,搭建属于你自己的“第二大脑”输入管道,体验那种信息尽在掌握的从容感。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐