Obsidian + Claude Code + 微信AI,我把这三个系统缝进了一个软件

背景:三个独立系统的痛点作为一个知识管理狂,我同时是 Obsidian 的重度用户、Claude Code 的代码搭档、以及微信 AI 的日常使用者。过去,这三个系统像孤岛一样各自运行:- Obsidian 存储我所有的笔记、文档和知识图谱- Claude Code 负责代码生成、调试和架构设计- 微信 AI(企业微信助手)用来接收任务提醒和快速查询每天我要在这三个工具间来回切换,手动搬运数据。比如在 Obsidian 里写了一段需求文档,复制到 Claude Code 生成代码,再把结果手动发送到微信。这种“人工集成”不仅耗时,还容易出错。于是,我决定用 Python 写一个中间件,把这三个系统“缝”在一起,形成一个自动化工作流。下面是我的实战过程。—## 第一步:搭建核心架构——用 Python 桥接三个系统核心思路是:写一个 Python 服务,监听 Obsidian 的本地文件变化,将内容传给 Claude Code 处理,然后通过微信 AI 的 Webhook 发送结果。### 代码示例 1:Obsidian 文件监控 + Claude Code 调用pythonimport osimport timeimport requestsfrom watchdog.observers import Observerfrom watchdog.events import FileSystemEventHandler# 配置:Obsidian 笔记仓库路径OBSIDIAN_VAULT_PATH = "/Users/yourname/Documents/Obsidian/MyVault"# Claude Code 的 API 密钥(假设你已获得)CLAUDE_API_KEY = "sk-ant-xxxxx"# 微信 AI Webhook 地址(企业微信机器人)WECHAT_WEBHOOK_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx"class ObsidianToClaudeHandler(FileSystemEventHandler): """监控 Obsidian 文件变化,自动触发 Claude Code 处理""" def on_modified(self, event): # 只处理 .md 文件 if not event.src_path.endswith(".md"): return # 读取文件内容 with open(event.src_path, "r", encoding="utf-8") as f: content = f.read() # 检测是否有触发关键词(比如 #codegen 标签) if "#codegen" not in content: return # 提取需求描述(假设用 demand 标记) demand_start = content.find(“demand") demand_end = content.find("”, demand_start + 10) if demand_start == -1 or demand_end == -1: return demand_text = content[demand_start + 10:demand_end].strip() print(f"检测到代码需求:{demand_text[:50]}…“) # 调用 Claude Code API 生成代码 code_result = self.call_claude_code(demand_text) # 将结果写回 Obsidian 文件(追加注释) with open(event.src_path, “a”, encoding=“utf-8”) as f: f.write(f”\n\n## Claude 生成的代码\npython\n{code_result}\n\n") # 同时发送到微信 self.send_to_wechat(f"✅ 代码生成完成\n需求:{demand_text[:100]}\n结果:{code_result[:200]}…“) def call_claude_code(self, prompt): “”“调用 Claude Code API 生成代码””" headers = { “Authorization”: f"Bearer {CLAUDE_API_KEY}“, “Content-Type”: “application/json” } payload = { “model”: “claude-3-opus-20240229”, “messages”: [ {“role”: “user”, “content”: f"请根据以下需求生成 Python 代码,只返回代码本身:\n{prompt}”} ], “max_tokens”: 2000 } response = requests.post( “https://api.anthropic.com/v1/messages”, headers=headers, json=payload ) if response.status_code == 200: return response.json()[“content”][0][“text”] else: return f"错误:{response.status_code} - {response.text}" def send_to_wechat(self, message): “”“通过企业微信机器人发送消息”“” payload = { “msgtype”: “text”, “text”: {“content”: message} } requests.post(WECHAT_WEBHOOK_URL, json=payload)# 启动监控if name == “main”: event_handler = ObsidianToClaudeHandler() observer = Observer() observer.schedule(event_handler, OBSIDIAN_VAULT_PATH, recursive=True) observer.start() print(f"开始监控 Obsidian 仓库:{OBSIDIAN_VAULT_PATH}“) try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()这段代码的核心是 `watchdog` 库,它实时监控 Obsidian 仓库下的 `.md` 文件变化。当我在笔记中写下 `#codegen` 标签和需求描述后,它自动调用 Claude Code 生成代码,并把结果追加到笔记末尾,同时推送到微信。---## 第二步:微信 AI 的双向交互——从微信发起任务光有监控还不够,我还需要能从微信直接触发任务。比如在微信里发一条消息:“生成一个 Flask 用户登录接口”,系统就应该自动处理。### 代码示例 2:微信消息接收 + 自动处理pythonfrom flask import Flask, request, jsonifyimport subprocessimport jsonimport requestsapp = Flask(name)# 微信 AI 的验证 Token(在企业微信后台配置)WECHAT_TOKEN = “your_wechat_token”# Claude Code API 配置(同上)CLAUDE_API_KEY = “sk-ant-xxxxx”@app.route(”/wechat/callback", methods=[“POST”])def wechat_callback(): “”“接收企业微信消息回调”“” data = request.get_json() # 验证消息来源(简化版,实际需要签名校验) if data.get(“token”) != WECHAT_TOKEN: return jsonify({“error”: “Invalid token”}), 401 # 提取消息内容 msg_type = data.get(“msgtype”, “”) if msg_type == “text”: content = data[“text”][“content”] sender = data.get(“sender”, “unknown”) # 检查是否是代码生成请求(以 /code 开头) if content.startswith(“/code”): demand = content[5:].strip() # 去掉 /code 前缀 print(f"收到微信代码请求:{demand}“) # 异步处理,避免 Webhook 超时 process_demand_in_background(demand, sender) return jsonify({“status”: “accepted”}) # 如果是普通查询,直接返回帮助信息 elif content.startswith(”/help"): help_text = “可用命令:\n/code <需求> - 生成代码\n/search <关键词> - 搜索 Obsidian 笔记” send_wechat_message(sender, help_text) return jsonify({“status”: “ok”})def process_demand_in_background(demand, sender): “”“后台异步处理代码生成请求”“” # 调用 Claude Code API headers = { “Authorization”: f"Bearer {CLAUDE_API_KEY}“, “Content-Type”: “application/json” } payload = { “model”: “claude-3-opus-20240229”, “messages”: [ {“role”: “user”, “content”: f"生成满足以下需求的代码,用 markdown 代码块包裹:\n{demand}”} ], “max_tokens”: 3000 } response = requests.post( “https://api.anthropic.com/v1/messages”, headers=headers, json=payload ) if response.status_code == 200: result = response.json()[“content”][0][“text”] # 保存到 Obsidian(自动创建新笔记) note_content = f"# 微信生成的代码\n\n需求:{demand}\n\n生成时间:{import(‘datetime’).datetime.now()}\n\n{result}" note_path = f"/Users/yourname/Documents/Obsidian/MyVault/微信生成/{import(‘datetime’).datetime.now().strftime(‘%Y%m%d_%H%M%S’)}.md" os.makedirs(os.path.dirname(note_path), exist_ok=True) with open(note_path, “w”, encoding=“utf-8”) as f: f.write(note_content) # 回复微信 reply = f"✅ 代码已生成并保存到 Obsidian\n文件名:{os.path.basename(note_path)}\n预览:{result[:200]}…" send_wechat_message(sender, reply) else: send_wechat_message(sender, f"❌ 代码生成失败:{response.status_code}“)def send_wechat_message(user, message): “”“发送消息给指定用户(通过企业微信 API)””" # 这里需要调用企业微信的消息推送 API # 简化示例: payload = { “touser”: user, “msgtype”: “text”, “text”: {“content”: message} } # 实际需要 access_token,此处省略获取逻辑 print(f"发送给 {user}:{message}")if name == “main”: app.run(host=“0.0.0.0”, port=5000, debug=True)```这个 Flask 服务实现了双向通信:微信发消息 → 触发 Claude Code 处理 → 结果存回 Obsidian 并回复微信。我使用 /code 作为命令前缀,这样普通对话不会误触发。—## 第三步:缝合后的真实工作流部署完这个系统后,我的日常工作变成了这样:1. 在 Obsidian 写需求:打开一个笔记,写下 #codegen 标签和需求描述2. 自动触发 Claude:系统监控到文件变化,调用 Claude Code 生成代码3. 结果回写 Obsidian:代码追加到笔记末尾,形成完整的“需求+实现”文档4. 微信通知:收到一条消息:“✅ 代码生成完成,请查看笔记”或者从微信发起:1. 微信发命令:输入 /code 写一个 Flask 登录接口2. 后台自动处理:系统调用 Claude Code,生成代码3. 保存到 Obsidian:自动创建一个新笔记,命名规则为 微信生成_时间戳.md4. 微信回复:收到结果预览和笔记链接整个过程完全自动化,我再也不用手动复制粘贴了。—## 总结把 Obsidian、Claude Code 和微信 AI 三个系统“缝”在一起,本质上是一个 事件驱动 + API 集成 的架构:- 事件驱动:Obsidian 的文件变更、微信的消息推送,都是触发事件的源头- API 集成:Claude Code 提供代码生成能力,微信 AI 提供消息通道- 中间件:Python 脚本作为胶水,把三个系统粘合起来这个系统的价值在于:打破了信息孤岛。过去我在 Obsidian 写需求 → 手动复制到 Claude → 手动粘贴结果到微信,需要 5 分钟的操作,现在变成了 0 秒自动化。而且因为所有数据都留在 Obsidian 里,我还可以在图谱视图中看到“需求 → 代码”的关联,形成了完整的知识闭环。如果你也有类似的多工具使用场景,不妨试试这种“缝纫机”思路——不要追求大而全的平台,而是用简单的脚本把现有工具串联起来。毕竟,最好的工具,就是那些能让你少操心的工具。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐