Files
llm_wiki/AGENTS.md

1191 lines
29 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
categories:
- "[[Tools]]"
- "[[Documentation]]"
tags:
- agents
- ai-assistant
- development-workflow
- obsidian-vault
- knowledge-management
created: 2026-01-23
rating: 7
type: schema
---
# AGENTS.md - Obsidian Vault 智能代理指南
## 概述
本指南为在这个 Obsidian 知识库中工作的智能代理AI Coding Agents提供详细的操作规范、代码风格指南和工作流指导。确保所有代理能够高效协作遵循统一的编码标准并在 PARA + LLM Wiki 双层架构中正确组织知识。
> **目标:** 让 AI 代理像真正的开发团队成员一样高效工作,遵循最佳实践,保持代码质量和一致性。
**IMPORTANT:** 处理 Obsidian 笔记时,必须优先使用以下官方 Skills来源kepano/obsidian-skills
> |Skill|用途|何时用|
> |---|---|---|
> |`obsidian-cli`|CLI 命令(搜索、读写、任务、属性、插件开发)|**首选**,几乎所有 vault 操作|
> |`obsidian-markdown`|`.md` 笔记编写frontmatter、wikilink、callout、embed|创建/编辑笔记内容时|
> |`obsidian-bases`|`.base` 数据库视图filters、formulas、views|创建/编辑 Bases 文件时|
> |`json-canvas`|`.canvas` 图表nodes、edges、groups|创建/编辑 Canvas 文件时|
> |`defuddle`|网页→干净 Markdown去导航/广告/杂讯)|处理 URL 时优先于 WebFetch|
>
> 使用 `skill` 工具加载对应 skill 后再执行操作。
---
### Obsidian CLI (v1.12.7+)
新版 CLI 使用独立二进制文件,响应更快。常用命令:
```bash
# 版本检查
obsidian version
# 日常操作
obsidian daily:read # 读取今日日记
obsidian daily:append content="- [ ] 新任务" # 添加任务
obsidian tasks todo limit=10 # 查看待办
# 文件操作
obsidian files total # 文件总数
obsidian search query="关键词" limit=5 # 搜索
obsidian tags sort=count counts # 标签统计
## 1. 仓库架构总览
本项目采用**双层知识管理模式**,结合 PARA 方法论和 LLM Wiki 模式:
```mermaid
graph TD
subgraph PARA["PARA 层(个人知识)"]
C[Categories/]
R[References/]
N[Notes/]
D[Daily/]
Cl[Clippings/]
T[Tags/]
end
subgraph Wiki["LLM Wiki 层(编译知识)"]
Wiki[wiki/]
Raw[raw/]
end
subgraph Infrastructure["基础设施"]
Templates[Templates/]
Attach[Attachments/]
Schema[AGENTS.md]
end
Ingest[新来源] --> Raw
Raw -->|Ingest 操作| Wiki
Wiki -->|归档| PARA
Wiki --> Schema
Schema --> Wiki
```
### 1.1 文件夹组织
| 文件夹 | 用途 | 文件格式 | 维护者 |
|--------|------|----------|--------|
| **PARA 层** | | | |
| | | | |
| `Categories/` | PARA 类别索引页面 | `Books.md`, `Movies.md` (复数) | 人类 |
| `References/` | 实体参考文件 | `Kevin Kelly.md`, `Obsidian.md` | 人类 + LLM |
| `Notes/` | 个人反思和分析 | `Evergreen notes…md` | 人类 |
| `Daily/` | 日常日记 | `2026-01-23.md` | 人类 |
| `Clippings/` | 网页摘录 | `Article Title.md` | 人类 |
| `Tags/` | 标签定义和索引 | `主题-ai.md`, `卡片-金句.md` | 人类 |
| | | | |
| **LLM Wiki 层** | | | |
| | | | |
| `wiki/` | LLM 编译维护的知识库 | `Concept.md`, `Person.md` | LLM |
| `raw/` | 不可变的原始来源 | `source.md` | 人类 |
| | | | |
| **基础设施** | | | |
| | | | |
| `Templates/` | 笔记和演示模板 | `*.md`, `*.css`, `*.base` | 人类 |
| `Attachments/` | 媒体文件 | 图片、PDF、视频 | 人类 |
| `markdown_output/` | 外部导入的内容 | `*.md` | 批量导入 |
| `AGENTS.md` | **Schema代理操作规范** | 本文件 | 人类 + LLM |
### 1.2 PARA 方法论
PARA 层用于组织**个人项目、领域、资源和归档**
| 类型 | 说明 | 示例 |
|------|------|----------|
| **Projects** | 有明确目标和时间线的活跃项目 | `项目-卡片笔记实践`, `项目-论文1` |
| **Areas** | 持续关注的领域和责任 | `领域-山西`, `领域-自组网` |
| **Resources** | 未来参考的主题和兴趣 | Obsidian 笔记、AI 工具、参考材料 |
| **Archive** | 已完成的项目和不活跃内容 | 过去项目、归档资料 |
**注意事项**
- PARA 层主要由人类维护LLM 辅助
- LLM Wiki 的编译结果可以归档到 PARA 层(如 References/
### 1.3 LLM Wiki 模式
LLM Wiki 层是**由 LLM 增量编译和维护的结构化知识库**
| 层级 | 位置 | 职责 | 维护者 |
|------|------|------|--------|
| **Raw Sources** | `raw/` | 不可变的原始文档、文章、论文、数据文件 | 人类 |
| **Wiki** | `wiki/` | 摘要、实体页、概念页、比较、综合 | **LLM** |
| **Schema** | `AGENTS.md` | Wiki 结构约定、工作流规范 | 人类 + LLM |
**三种核心操作**
1. **Ingest摄入**:将新来源编译到 wiki更新 index 和 log
2. **Query查询**:搜索 wiki 页面并综合回答
3. **Lint健康检查**:检查矛盾、过时、孤立页面、缺失交叉引用
**索引与日志**
- `wiki/index.md` - 内容目录,按类别组织(每次 ingest 更新)
- `wiki/log.md` - 时间线日志grep 可解析的格式)
### 1.4 Frontmatter 规范
#### PARA 层Categories, References, Clippings, Notes
所有 PARA 内容笔记必须包含 YAML frontmatter
```yaml
---
categories:
- "[[Books]]"
- "[[People]]"
tags:
- books
- people
- reference
created: 2026-01-23
rating: 5
author: []
topics: []
para: []
---
<!-- Added: 2026-04-07 -->
## Obsidian Frontmatter 布尔值规范
在 Obsidian 笔记的 YAML frontmatter 中,布尔值 `true`/`false` 会被 Obsidian 识别为 checkbox 类型属性。为避免此问题,所有布尔值属性必须用引号包裹为字符串:
- ✅ `marp: "true"`
- ✅ `paginate: "true"`
- ❌ `marp: true`Obsidian 会将其显示为 checkbox
- ❌ `paginate: true`(同上)
此规范适用于所有通过 LLM 生成或修改的 Obsidian 笔记。HTML 注释中的指令(如 `<!-- paginate: true -->`)不受影响,保持原样。
## 内容开始
```
**Frontmatter 规则**
-**Categories**:使用 wikilink 格式 `[[Category]]`frontmatter 中用复数 `categories: [[Books]]`
-**Tags**:短横线连接、小写、无空格(例如:`#tag``ai/coding`
-**Dates**`YYYY-MM-DD` 格式
-**多值字段**:使用列表格式,即使单值也要加 `[]`(例如:`author: ["Kevin Kelly"]`
-**空字段**:留空不写引号或 null例如`via: ""`
-**分隔符**YAML 后必须有空行 `---`,正文前也要有空行
#### LLM Wiki 层
Wiki 页面必须包含以下 frontmatter
```yaml
---
categories:
- "[[LLM Wiki]]" # ✅ 必须包含
tags:
- wiki # ✅ 必须包含
- {tag1}
- {tag2}
created: {YYYY-MM-DD}
source: "[[{source-file}]]" # ✅ 必须指向 raw 来源
type: concept | entity | tool | index | log # ✅ 必须指定类型
aliases: # 可选
- {alias1}
- {alias2}
marp: "true" # Marp 演示文稿专用
---
```
**字段说明**
| 字段 | 必填 | PARA 层 | Wiki 层 | 说明 |
|------|------|---------|---------|------|
| `categories` | ✅ | `[[Category]]` | `[[LLM Wiki]]` | 类别 |
| `tags` | ✅ | `{tag}` | `wiki`, `{tag}` | 标签 |
| `created` | ✅ | `YYYY-MM-DD` | `YYYY-MM-DD` | 创建日期 |
| `source` | ❌ | 可选 | ✅ 必填 | Wiki 层必须指向 raw 来源 |
| `type` | ❌ | 可选 | ✅ 必填 | Wiki 层必须指定页面类型 |
| `aliases` | ❌ | 可选 | 可选 | 替代名称列表 |
| `marp` | ❌ | 可选 | 可选 | 演示文稿标识,必须用引号 |
---
## 2. Wiki 工作流
### 2.1 Ingest摄入操作
当收到新来源时,按以下流程处理:
```mermaid
graph LR
A[收到新来源] --> B[存入 raw/]
B --> C[读取并分析关键要点]
C --> D[创建/更新 Wiki 页面]
D --> E[更新 index.md]
E --> F[追加 log.md 条目]
F --> G[完成]
```
**详细步骤**
1. **读取来源**
```bash
# 来源存入 raw/ 目录
raw/source-name.md
```
2. **创建 Wiki 页面**
- 根据内容类型创建相应页面:
- **概念页**`wiki/概念名称.md` - 理论、方法论、模式
- **实体页**`wiki/人物姓名.md` - 人物、公司、组织
- **工具页**`wiki/工具名称.md` - 软件、框架、工具
- **参考页**`wiki/主题-子主题.md` - 详细文档、教程
3. **更新 index.md**
```yaml
## 概览
| 指标 | 值 |
|------|-----|
| 来源数 | {更新数字} |
| Wiki 页面数 | {更新数字} |
```
4. **追加 log.md**
```markdown
## [YYYY-MM-DD] ingest | {来源标题}
**来源**: {来源链接或文件路径}
**操作**:
- 操作 1
- 操作 2
**涉及页面**: N 个新页面M 个更新页面
**关键要点**:
- 要点 1
- 要点 2
```
**示例**:参考 `wiki/log.md` 中的历史记录
### 2.2 Query查询操作
当用户对 Wiki 提问时:
1. 搜索相关页面(使用 grep 或 qmd
2. 综合多页面的信息
3. 如果发现新的见解,**将回答归档为新 Wiki 页面**
4. 更新 index 和 log
> **原则**:好的回答应该成为 Wiki 的一部分,让探索像摄入一样持续积累。
### 2.3 Lint健康检查
定期执行健康检查:
1. **检查矛盾** - 搜索冲突声明
2. **检查过时** - 标记陈旧信息
3. **检查孤立页面** - 无入站链接的页面
4. **检查缺失概念** - 需要创建但尚未创建的页面
5. **检查交叉引用** - 确保相关页面互相链接
```bash
# 示例命令
grep -r "TODO\|FIXME\|过时\|矛盾" wiki/
grep -r "\[\[" wiki/ | grep -v "md:" | sort | uniq -c | sort -rn | head -20
```
### 2.4 Wiki 页面模板
参考 `Templates/Wiki Page Template.md`
**概念页面**
```markdown
---
categories:
- "[[LLM Wiki]]"
tags:
- wiki
- {tag1}
- {tag2}
created: {YYYY-MM-DD}
source: "[[{source-file}]]"
type: concept
aliases:
- {alias1}
---
# {概念名称}
> **一句话定义**{核心定义}
## 定义
{概念的详细定义和解释}
## 关键要点
- 要点 1
- 要点 2
- 要点 3
## 与其他概念的关系
- [[相关概念1]] — {关系说明}
- [[相关概念2]] — {关系说明}
## 来源
- [[source]] — 来源描述
```
**实体页面**
```markdown
---
categories:
- "[[LLM Wiki]]"
- "[[People]]"
tags:
- wiki
- people
- {domain}
created: {YYYY-MM-DD}
source: "[[{source-file}]]"
type: entity
aliases:
- {alias}
---
# {人物姓名}
{一句话简介}
## 身份
| 属性 | 值 |
|------|-----|
| 领域 | {领域} |
| 知名身份 | {身份} |
## 主要贡献
- 贡献 1
- 贡献 2
## 与本 Wiki 相关
{此人与 wiki 内容的关联}
## 来源
- [[source]] — 来源描述
```
**工具页面**
```markdown
---
categories:
- "[[LLM Wiki]]"
tags:
- wiki
- tool
- {category}
created: {YYYY-MM-DD}
source: "[[{source-file}]]"
type: tool
aliases:
- {alias}
---
# {工具名称}
> **一句话描述**
## 基本信息
| 属性 | 值 |
|------|-----|
| 仓库 | {URL} |
| 类型 | {类型} |
## 在 LLM Wiki 中的角色
{工具在 wiki 工作流中的作用}
## 来源
- [[source]] — 来源描述
```
---
## 3. Marp 演示文稿工作流
### 3.1 Marp 基础知识
Marp 是用 Markdown 编写演示文稿的生态系统。本知识库使用 Marp 创建幻灯片。
**核心概念**
- **Marpit** - 框架层,定义指令解析和转换规则
- **Marp Core** - 引擎层,实现 Marpit 接口
- **Marp CLI** - 命令行工具,导出 HTML/PDF/PPTX
- **Obsidian Marp 插件** - 在 Obsidian 中预览和导出
### 3.2 Frontmatter 指令
Marp 演示文稿必须包含 Marp frontmatter
```yaml
---
marp: "true" # ✅ 必须用引号包裹
theme: gaia # 主题default, uncover, gaia
paginate: "true" # ✅ 必须用引号包裹
style: |
/* 自定义样式 */
section {
background: linear-gradient(to bottom, #1a1a2e, #16213e);
color: white;
}
---
<!-- _class: cover -->
# 标题页
<!-- _class: dark -->
# 深色页
```
**全局指令**frontmatter 中):
- `marp: "true"` - 启用 Marp
- `theme: default/uncover/gaia` - 选择主题
- `paginate: "true"` - 显示页码
- `style: |` - 自定义 CSS
**局部指令**(注释中):
- `<!-- _class: cover -->` - 封面页样式
- `<!-- _class: dark -->` - 深色背景
- `<!-- _class: cols-2 -->` - 两栏布局
- `<!-- _paginate: false -->` - 当前页不显示页码
**自定义主题**
- 主题文件存放在 `Templates/MarpTheme/`
- 格式:`theme-name.css`
- 使用后需重启 Obsidian
- 在 frontmatter 中引用:`theme: theme-name`
### 3.3 自定义主题示例
**University Blue 主题** (`Templates/MarpTheme/university-blue.css`)
```css
/* @theme university-blue */
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;700&display=swap');
:root {
--primary-color: #1a365d; /* 学术蓝 */
--secondary-color: #2b6cb0;
--accent-color: #4299e1;
--text-color: #1a202c;
--bg-color: #ffffff;
}
section {
background: var(--bg-color);
color: var(--text-color);
font-family: 'Noto Sans SC', sans-serif;
}
h1, h2, h3 {
color: var(--primary-color);
}
/* 封面页 */
section.cover {
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
color: white;
}
/* 两栏布局 */
.cols-2 {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
}
```
**使用方式**
```yaml
---
marp: "true"
theme: university-blue
paginate: "true"
---
```
### 3.4 Marp 页面类型
| 类型 | 指令 | 用途 | 示例 |
|------|------|------|------|
| **封面页** | `<!-- _class: cover -->` | 标题、作者、日期 | 论文首页、报告封面 |
| **过渡页** | `<!-- _class: trans -->` | 章节分隔 | 章节标题页 |
| **深色页** | `<!-- _class: dark -->` | 强调、对比 | 数据可视化、代码块 |
| **两栏页** | `<!-- _class: cols-2 -->` | 左右对比 | 对比分析、并列说明 |
| **结束页** | `<!-- _class: ending -->` | 致谢、Q&A | 演示结尾 |
**完整示例**:参考 `wiki/示例-学校定制Marp演示.md`
### 3.5 导出方式
**Obsidian 插件**
1. 打开 Marp 文件
2. 点击预览按钮(👁️)
3. 点击导出按钮(📥)
4. 选择格式HTML / PDF / PPTX
**CLI 命令**
```bash
# 导出 PDF
marp --pdf presentation.md -o output.pdf
# 导出 HTML
marp --html presentation.md -o output.html
# 导出 PPTX
marp --pptx presentation.md -o output.pptx
```
### 3.6 Marp 相关 Wiki 页面
| 页面 | 内容 | 来源 |
|------|------|------|
| `[[Marp]]` | 概念总览 | marp-guide |
| `[[Marp 指令语法]]` | 指令系统完整参考 | marp-guide |
| `[[Marp 主题与样式]]` | 内置主题、CSS 自定义 | marp-guide |
| `[[Marp 导出]]` | HTML/PDF/PPTX 导出方式 | marp-guide |
| `[[Obsidian Marp 插件]]` | Obsidian 集成 | marp-guide |
| `[[Marp 主题推荐]]` | GitHub 社区主题合集 | marp-themes |
| `[[示例-学校定制Marp演示]]` | 学校定制蓝主题演示 | marp-themes |
---
## 4. 构建与测试命令
### 4.1 可用命令
AI 代理可使用以下命令进行构建和测试:
| 命令 | 功能 | 使用场景 | 示例 |
|------|--------|----------|--------|
| **bun run dev** | 启动开发服务器 | 本地开发时热重载 |
| **bun run build** | 构建生产版本 | CI/CD 环境构建 |
| **bun run lint** | 运行代码检查 | 确保 ESLint 规范 |
| **bun test** | 运行单元测试 | Jest/Vitest 测试套件 |
| **bun run test:unit** | 单元测试 | `测试特定模块` |
| **bun run test:e2e** | E2E 测试 | `集成测试` |
| **bun run test:integration** | 集成测试 | 端到端测试 |
| **bun run test:coverage** | 测试覆盖率 | 生成覆盖率报告 |
| **bun run type-check** | 类型检查 | TypeScript 类型验证 |
| **pytest** | Python 测试 | 后端测试时使用 |
### 4.2 命令使用规范
```markdown
## 启动开发服务器
# 推荐方式
bun run dev
# 禁止方式
bun --bun run dev
# 或者使用 oh-my-opencode 的 pty_spawn
pty_spawn:
command: "bun"
args: ["run", "dev"],
title: "Dev Server",
notifyOnExit: true
```
```markdown
## 运行测试
# 单个测试
bun test path/to/test.spec.ts
# 带详细输出
bun test --reporter=verbose path/to/test.spec.ts
# 运行特定测试
bun test path/to/test.spec.ts -t "Authentication Flow"
# 生成覆盖率报告
bun run test:coverage --reporter=text --reporter=lcov
```
```markdown
## 类型检查
# TypeScript 类型检查
bun run type-check
# 或配合 TSC
bunx tsc --noEmit
```
### 4.3 测试最佳实践
#### 原则 1快速失败Fail Fast
```markdown
# 单元测试应该快速执行(< 2 分钟)
- 快速发现明显问题
- 避免测试中的网络请求
- 使用 mock 数据隔离依赖
**适用场景:**
- 验证核心业务逻辑
- 测试纯函数组件
```
#### 原则 2测试隔离
```markdown
# 每个测试文件应该能够独立运行
- 不依赖其他测试的状态
- 使用独立的测试数据库或 mock 服务
- 清理测试后的资源
**实现方式:**
```typescript
// 每个测试文件使用独立的 beforeEach/afterEach
import { beforeEach, afterEach } from '@testing-library/react';
describe('UserService', () => {
beforeEach(() => {
// 清理或初始化每个测试前的状态
userService = new UserService();
});
afterEach(() => {
// 清理每个测试后的资源
userService.dispose();
});
it('should create user', () => {
// 测试代码...
});
});
```
```
#### 原则 3描述性测试名称
```markdown
# 测试名称应该清晰描述测试意图和场景
describe('Authentication Flow', () => {
it('should authenticate user with valid credentials', () => { });
it('should reject invalid credentials', () => { });
it('should handle network errors gracefully', () => { });
});
```
**避免:**
```markdown
// ❌ 避免模糊名称
it('test', () => {});
// ✅ 使用描述性名称
it('should authenticate user with valid credentials', () => {});
```
#### 原则 4测试覆盖率目标
```markdown
# 设定测试覆盖率目标(建议 80% 以上)
# package.json 配置
{
"scripts": {
"test": "vitest run --coverage",
"test:coverage": "vitest run --coverage --reporter=json"
},
"coverage": {
"statements": 80,
"branches": 80,
"functions": 80,
"lines": 80
}
}
```
### 4.4 Lint 与格式化命令
```markdown
## ESLint
# 运行 ESLint
bun run lint
# 修复问题
bun run lint --fix
# 检查特定文件
bun run lint path/to/component.ts
# 生成报告
bun run lint --format json --output-file eslint-report.json
## Prettier
# 格式化代码
bun run format
# 检查格式
bun run format --check
# 格式化特定文件
bun run format path/to/component.ts
```
### 4.5 命令执行优先级
```markdown
## 开发工作流中的命令使用优先级
| 优先级 | 命令类型 | 说明 |
|--------|-----------|--------|
| **高** | 开发服务器启动/重启 | `bun run dev`(常用) |
| **高** | 类型检查 | `bun run type-check`(快速验证) |
| **中** | Lint/格式化 | `bun run lint`, `bun run format`(定期执行) |
| **中** | 单元测试 | `bun test`(开发过程中) |
| **低** | 集成测试 | `bun run test:integration`PR 前或合并前) |
| **低** | E2E/覆盖率测试 | `bun run test:e2e`(定期执行) |
| **低** | 文档生成 | 手动生成文档 |
```
---
## 5. 代码风格指南
### 5.1 TypeScript 编码规范
#### 5.1.1 命名约定
```typescript
// ✅ 组件和类名PascalCase
class UserService { }
interface UserProfile { }
// ✅ 函数和变量camelCase
function getUserById() { }
const userId = 0;
const userProfile: UserProfile;
// ❌ 避免缩写
function getusr() { }
// ✅ 使用描述性名称
function authenticateUser() { }
// ✅ 常量UPPER_SNAKE_CASE
const API_BASE_URL = 'https://api.example.com';
const MAX_RETRIES = 3;
// ❌ 避免单字母变量
const a = 1;
const n = userId;
```
#### 5.1.2 类型定义
```typescript
// ✅ 使用明确的类型定义
interface ApiResponse<T> {
data: T;
error?: string;
status: number;
}
// ✅ 使用泛型提高代码复用
interface Repository<T> {
findAll(): Promise<T[]>;
findById(id: string): Promise<T>;
create(entity: T): Promise<T>;
}
// ❌ 避免使用 any除非确实必要
// ✅ 使用 unknown 替代
function process(data: unknown) {
// 明确类型或接口
}
// ✅ 使用联合类型明确可能的状态
type Status = 'pending' | 'success' | 'error';
```
#### 5.1.3 错误处理
```typescript
// ✅ 统一的错误处理模式
// 1. 定义错误类型
class ValidationError extends Error {
constructor(message: string) {
super(message);
this.name = 'ValidationError';
}
}
class NetworkError extends Error {
constructor(message: string, code: number) {
super(message);
this.name = 'NetworkError';
this.code = code;
}
}
// 2. 使用 try-catch 包裹可能失败的代码
try {
await apiCall();
} catch (error) {
if (error instanceof NetworkError) {
// 网络错误处理
} else if (error instanceof ValidationError) {
// 验证错误处理
} else {
// 未知错误处理
}
}
// 3. 错误日志记录
console.error('[ERROR]', error.message, error.stack);
// 或使用日志服务
logger.error('API call failed', { error, context: { userId, action } });
```
### 5.2 导入与依赖管理
```typescript
// ✅ 明确导入路径(使用绝对导入)
import { UserService } from './services/user/UserService';
import { validateUser } from './utils/validators';
// ✅ 使用类型导入
import type { User, UserProfile } from './types';
// ✅ 按功能分组导入
// UI 组件
import { Button } from './components/ui/Button';
import { Form } from './components/ui/Form';
// 工具函数
import { formatDate } from './utils/dateUtils';
// ❌ 避免相对导入(除非在同一目录内)
// import { Something } from '../shared/Something';
// ✅ 使用 barrel exportsindex.ts 导出)
// services/index.ts
export { UserService, AuthService, OrderService };
export type { User, Order, Profile };
```
#### 5.2.1 API 调用规范
```typescript
// ✅ 使用 async/await
async function fetchData(): Promise<Data> {
const response = await fetch(url);
return response.json();
}
// ❌ 避免回调地狱(使用 async/await
// fetchData((data, callback) => { callback(data); }); // 不推荐
// ✅ 正确的错误传播
async function processOrder(orderId: string): Promise<void> {
try {
await validateOrder(orderId);
await processPayment(orderId);
await shipOrder(orderId);
} catch (error) {
// 统一错误处理
throw new ProcessingError('Failed to process order', error);
}
}
```
---
## 6. Wiki 与 PARA 协作指南
### 6.1 知识流转路径
```mermaid
graph LR
Raw[新来源] --> Ingest[Ingest 操作]
Ingest --> Wiki[wiki/ 页面]
Wiki -->|价值高| Ref[References/ 归档]
Wiki -->|个人洞察| Notes[Notes/ 笔记]
Wiki -->|参考模板| Templ[Templates/]
Raw -->|直接阅读| Clippings[Clippings/]
Clippings -->|价值验证| Ingest
```
### 6.2 操作决策树
| 场景 | 操作层 | 工作流 | 示例 |
|------|--------|--------|------|
| **收到新文章** | Wiki 层 | Ingest → 编译到 wiki | 读取论文,创建概念页 |
| **临时摘录** | PARA 层 | Clippings/ → 存储待整理 | 网页摘录,暂存 |
| **个人感悟** | PARA 层 | Notes/ → 原子笔记 | 阅读后的思考 |
| **稳定知识** | Wiki 层 | 维护 wiki 页面 | 概念页长期更新 |
| **模板需求** | Templates/ | 创建模板 | 新内容类型模板 |
### 6.3 Frontmatter 一致性
确保跨层级的 frontmatter 一致性:
| 层级 | categories | tags | type | source |
|------|-----------|------|------|--------|
| **PARA 层** | `[[Category]]` | `{tag}` | 可选 | 不需要 |
| **Wiki 层** | `[[LLM Wiki]]` | `wiki` | **必填** | **必填** |
**示例对比**
```yaml
# PARA 层 - References/Obsidian.md
---
categories:
- "[[Tools]]"
tags:
- tools
- obsidian
- knowledge-management
created: 2026-01-23
rating: 5
author: []
---
# Obsidian
Obsidian is a markdown-based note-taking app...
```
```yaml
# Wiki 层 - wiki/Obsidian.md
---
categories:
- "[[LLM Wiki]]"
tags:
- wiki
- tool
- obsidian
created: 2026-04-07
source: "[[raw/obsidian-guide.md]]"
type: tool
aliases:
- Obsidian 笔记工具
---
# Obsidian
> **一句话描述**:基于 Markdown 的知识管理工具
## 基本信息
| 属性 | 值 |
|------|-----|
| 官网 | https://obsidian.md |
| 类型 | 知识管理工具 |
## 在 LLM Wiki 中的角色
Obsidian 是 Wiki 的可视化 IDE提供 Graph View 查看连接形状。
## 来源
- [[raw/obsidian-guide.md]] - 官方文档
```
---
## 7. 常见任务清单
### 7.1 摄入新来源
- [ ] 存放来源到 `raw/{source-name}.md`
- [ ] 读取并分析关键要点
- [ ] 创建/更新 Wiki 页面(概念/实体/工具)
- [ ] 更新 `wiki/index.md`(来源数、页面数)
- [ ] 追加 `wiki/log.md` 条目
- [ ] 检查是否需要创建 PARA 层引用
### 7.2 回答 Wiki 查询
- [ ] 搜索相关 Wiki 页面grep/qmd
- [ ] 综合多页面信息
- [ ] 检查是否有新见解
- [ ] 如有新见解,创建新 Wiki 页面
- [ ] 更新 index 和 log
### 7.3 Wiki 健康检查
- [ ] 检查矛盾声明
- [ ] 检查过时信息
- [ ] 检查孤立页面
- [ ] 检查缺失交叉引用
- [ ] 更新 log 记录检查结果
### 7.4 创建 Marp 演示文稿
- [ ] 添加 frontmatter`marp: "true"`, `theme`, `paginate`
- [ ] 编写幻灯片内容(每页用 `---` 分隔)
- [ ] 添加页面类型注释(`<!-- _class: cover -->` 等)
- [ ] 使用 Obsidian Marp 插件预览
- [ ] 导出为 HTML/PDF/PPTX
### 7.5 自定义 Marp 主题
- [ ] 在 `Templates/MarpTheme/` 创建 CSS 文件
- [ ] 定义 CSS 变量(颜色、字体)
- [ ] 编写自定义样式规则
- [ ] 重启 Obsidian 使主题生效
- [ ] 在 frontmatter 中引用:`theme: theme-name`
- [ ] 创建示例演示文稿验证主题
---
## 8. 工具与资源
### 8.1 核心工具
| 工具 | 用途 | 文档 |
|------|------|------|
| **Obsidian** | Wiki 的可视化 IDE | 官方文档 |
| **qmd** | 本地 Markdown 搜索引擎 | GitHub |
| **Marp** | 演示文稿工具 | marp.guide |
| **Obsidian Marp** | Obsidian 中的 Marp 插件 | GitHub |
### 8.2 相关 Wiki 页面
**LLM Wiki 核心**
- [[LLM Wiki]] - 核心模式定义
- [[RAG vs 持久化知识库]] - 模式对比
- [[知识库维护自动化]] - 维护负担解决方案
- [[Memex]] - 思想源头
**实践案例**
- [[Farzapedia]] - Farza 的实践案例
- [[BYOAI]] - 四大优势
- [[Contamination Mitigation]] - Agent 工作区隔离
**人物**
- [[Andrej Karpathy]] - 模式提出者
- [[Vannevar Bush]] - Memex 概念提出者
**Marp 生态**
- [[Marp]] - 概念总览
- [[Marp 指令语法]] - 指令参考
- [[Marp 主题与样式]] - 主题和 CSS
- [[Marp 导出]] - 导出方式
- [[Obsidian Marp 插件]] - Obsidian 集成
- [[Marp 主题推荐]] - 社区主题合集
- [[示例-学校定制Marp演示]] - 演示示例
### 8.3 外部资源
- [[llm-wiki]] - Karpathy Gist 原文
- [[刚刚Karpathy 开源个人 LLM Wiki]] - J0hn 中文解读
- [[marp-guide]] - Marp 官方文档
- [[marp-themes]] - GitHub 主题合集
---
## 9. 附录
### 9.1 本文档特殊说明
AGENTS.md 是仓库的 **Schema 文件**,位于基础设施层:
| 属性 | 值 | 说明 |
|------|-----|------|
| **位置** | 仓库根目录 | 与 PARA、wiki、raw 同级 |
| **角色** | Wiki 结构约定、工作流规范 | 连接 PARA 层和 Wiki 层 |
| **维护者** | 人类 + LLM | 共同演进 |
**Frontmatter 特殊性**
- 继承 PARA 层的字段categories, rating
- 添加 Wiki 层的字段type: schema
- 不需要 source 字段(因为是规范本身,非编译产物)
### 9.2 文件命名约定
| 层级 | 类型 | 命名约定 | 示例 |
|------|------|----------|------|
| **raw/** | 来源 | `{source-name}.md` | `llm-wiki.md` |
| **wiki/** | 概念 | `{概念名称}.md` | `Memex.md` |
| **wiki/** | 实体 | `{人物姓名}.md` | `Andrej Karpathy.md` |
| **wiki/** | 工具 | `{工具名称}.md` | `qmd.md` |
| **wiki/** | 参考 | `{主题}-{子主题}.md` | `Marp-指令语法.md` |
| **Categories/** | 类别 | `{类别名}s.md` | `Books.md` |
| **References/** | 实体 | `{实体名称}.md` | `Obsidian.md` |
| **Notes/** | 笔记 | `{标题}.md` | `Evergreen notes…md` |
| **Daily/** | 日记 | `{YYYY-MM-DD}.md` | `2026-01-23.md` |
### 9.2 Git 忽略规则
```
# Obsidian
.obsidian/workspace.json
.obsidian/workspace-mobile.json
# 导出文件
*.pdf
*.html
*.pptx
# 除非是源文件
# 临时文件
.DS_Store
Thumbs.db
```
### 9.3 更新日志
| 日期 | 版本 | 更新内容 |
|------|------|----------|
| 2026-01-23 | 1.0 | 初始版本PARA 模式) |
| 2026-04-07 | 2.0 | 添加 LLM Wiki 模式、Marp 工作流、双层架构 |
---
## 名言
> "Obsidian is the IDE; LLM is the programmer; wiki is the codebase."
> — [[Andrej Karpathy]]
> "这种个性化方式把控制权完全交到你手上。数据是你的,格式是通用的,内容是可检查的。用哪个 AI 随你,让 AI 公司们卷起来吧。"
> — [[Andrej Karpathy]]