Obsidian 智能日记整理 Agent

版本: 0.1.0

这是一个基于 Agent 架构的智能日记整理系统,专为 Obsidian 用户设计。它能够自动分析您的每日日记,提取关键信息(如经验、待办事项、问题等),并将其智能地整理到您的知识库中的指定位置。

该系统采用 Command + Skill 架构,具有高度的可扩展性和灵活性,并支持通过命令行触发,方便与 Obsidian 或其他工具集成。

系统特性

  • 智能分析:集成 Claude 3.5 Sonnet 模型,深度理解日记内容并提取结构化信息。
  • 自动化整理:自动将提取的内容创建为新的笔记,并放置在预设的文件夹中。
  • 双向链接:在生成的笔记中自动添加指向原始日记的链接,方便溯源。
  • Agent 架构:采用 Command + Skill 模式,逻辑清晰,易于扩展新功能。
  • 命令行驱动:通过标准命令行接口(CLI)操作,易于集成和自动化。
  • 高度可配置:所有关键参数(如 API 密钥、文件夹路径、分析规则)均可通过配置文件管理。
  • 通用性设计:核心框架与具体实现分离,可兼容 Claude Code、OpenCode 等多种 Agent 环境。

系统架构

系统由以下核心组件构成:

  1. Agent Core:定义了 AgentCommandSkill 的基础接口和交互逻辑。
  2. Skills:原子化的功能单元,负责执行具体任务,如 ObsidianReadSkill(读取笔记)和 ClaudeAnalyzeSkill(分析内容)。
  3. Commands:用户可执行的命令,负责编排一个或多个 Skill 来完成复杂任务,如 OrganizeCommand
  4. CLI 入口:提供一个命令行界面,用于接收用户指令并驱动 Agent 执行相应命令。
  5. 配置文件:使用 YAML 文件管理所有配置,实现代码与配置分离。
graph TD
    subgraph User Interface
        CLI[命令行接口]
        Obsidian[Obsidian (via shell command)]
    end

    subgraph Agent System
        AgentCore[Agent Core]
        CLI --> AgentCore
        Obsidian --> AgentCore

        AgentCore -- dispatches --> Commands
        subgraph Commands
            OrganizeCmd[Organize Command]
        end

        Commands -- orchestrates --> Skills
        subgraph Skills
            ReadNote[Obsidian Read Skill]
            AnalyzeNote[Claude Analyze Skill]
            WriteNote[Obsidian Write Skill]
        end
    end

    subgraph External Services
        ObsidianAPI[Obsidian Local REST API]
        ClaudeAPI[Claude API]
    end

    ReadNote -- HTTP --> ObsidianAPI
    WriteNote -- HTTP --> ObsidianAPI
    AnalyzeNote -- HTTP --> ClaudeAPI

安装指南

1. 先决条件

  • Python 3.8+
  • Obsidian
  • Obsidian 插件: Local REST API

2. 安装 Local REST API 插件

  1. 在 Obsidian 中,进入 设置 > 第三方插件
  2. 关闭 安全模式
  3. 点击 浏览社区插件,搜索 Local REST API 并安装。
  4. 启用插件,并在插件设置页面生成一个 API 密钥。请妥善保管此密钥。

3. 安装 Agent

  1. 克隆或下载本项目到您的本地计算机。

    git clone <repository_url> journal_organizer
    cd journal_organizer
    
  2. 安装 Python 依赖。

    pip install -r requirements.txt
    

配置指南

  1. 复制配置文件

    config.example.yaml 复制为 config.yaml

    cp config.example.yaml config.yaml
    
  2. 编辑配置文件

    打开 config.yaml 并根据您的环境填写以下关键信息:

    • obsidian.vault_path: 您的 Obsidian vault 在计算机上的绝对路径。
    • obsidian.rest_api.api_key: 您在 Local REST API 插件中生成的 API 密钥。
    • claude.api_key: 您的 Anthropic API 密钥。建议使用环境变量 ANTHROPIC_API_KEY 来设置。
    • journaloutput 部分的文件夹路径,确保它们在您的 vault 中存在。

    安全提示: 请勿将包含敏感密钥的 config.yaml 文件提交到公共代码仓库。

使用方法

您可以通过命令行在项目根目录下运行 Agent。

整理今天的日记

python -m journal_organizer organize

整理指定日期的日记

python -m journal_organizer organize --date 2025-12-31

在 Obsidian 中调用

您可以使用 TemplaterQuickAdd 等插件,通过执行 Shell 命令来调用 Agent。

例如,在 Templater 中可以这样设置:

<%*
const command = `cd /path/to/journal_organizer && python -m journal_organizer organize --date ` + tp.file.title;
const result = await tp.user.exec(command);
tp.obsidian.Notice.now(result, 10000);
%>

查看帮助

# 查看所有命令
python -m journal_organizer --help

# 查看特定命令的帮助
python -m journal_organizer organize --help

项目结构

journal_organizer/
├── commands/                # Command 模块
│   ├── __init__.py
│   └── organize_command.py  # 日记整理命令
├── skills/                  # Skill 模块
│   ├── __init__.py
│   ├── claude_skill.py      # Claude AI 相关 Skill
│   └── obsidian_skill.py    # Obsidian API 相关 Skill
├── __init__.py
├── agent_core.py            # Agent 核心框架
├── main.py                  # 命令行入口和 Agent 初始化
├── config.example.yaml      # 配置文件示例
├── requirements.txt         # Python 依赖
└── README.md                # 本文档

如何扩展

本系统基于 Command + Skill 架构,您可以轻松地添加新的功能。

添加一个新的 Skill

  1. skills/ 目录下创建一个新的 Python 文件,例如 my_new_skill.py

  2. 在该文件中,创建一个继承自 Skill 的类。

  3. 实现 execute 方法,该方法是 Skill 的核心逻辑。

    from ..agent_core import Skill, SkillType, SkillResult, CommandContext
    
    class MyNewSkill(Skill):
        def __init__(self):
            super().__init__(name="my_new_skill", skill_type=SkillType.TRANSFORM, description="我的新技能")
    
        async def execute(self, context: CommandContext, **kwargs) -> SkillResult:
            # 在这里实现您的逻辑
            return SkillResult(success=True, data="新技能执行成功")
    

添加一个新的 Command

  1. commands/ 目录下创建一个新的 Python 文件。
  2. 创建一个继承自 Command 的类。
  3. __init__ 方法中注册所需的 Skills。
  4. 实现 execute 方法,编排 Skills 来完成任务。
  5. main.py_register_commands 方法中注册您的新命令。

许可证

本项目采用 MIT 许可证。

S
Description
No description provided
Readme
1.1 MiB
Languages
Python 100%