用飞书+Kimi+Obsidian搭建AI日记系统:半自动化情绪追踪与知识沉淀
1. 为什么我要折腾一个AI日记系统写日记这件事我坚持过很多次也放弃过很多次。原因基本都一样白天忙成狗晚上躺床上想起来今天还没写打开备忘录敲两行觉得没意思删掉睡觉。第二天继续循环。问题不在于懒而在于传统日记的反馈周期太长——你写了一个月回头看除了一堆流水账什么洞察都没有。后来我换了个思路如果日记不是我写给它看而是我写完之后它给我反馈呢比如我今天写今天开会又被怼了烦系统自动帮我关联到上周也写过类似的情绪然后问我一句这周第三次了要不要聊聊——这个体验就完全不一样了。这就是我做这套AI个人日记系统的起点。核心思路很简单用飞书多维表格做数据底座用Kimi做智能分析层用Obsidian做长期知识沉淀中间用自动化串起来。整套方案不需要写太多代码小白跟着做也能跑通。它解决的核心问题是三个第一降低记录门槛手机点一下就能记第二让AI帮你做情绪追踪和主题聚类而不是你自己翻旧账第三所有数据存在你自己的表格和本地仓库里不依赖任何单一平台。适合谁看如果你符合下面任意一条这篇内容对你有用想坚持写日记但总是断更的手里已经有飞书或Obsidian但不知道怎么联动AI的对自动化工作流感兴趣、想拿一个真实场景练手的以及单纯想看看AI Agent这东西在个人生活里到底能干嘛的。我踩过的坑不少比如飞书机器人权限配置搞了一下午、Kimi的接口调用频率限制、Obsidian插件冲突导致同步失败等等。下面我把整套流程拆开讲包括每个环节为什么这么选、参数怎么定、出问题怎么排查。2. 整体架构设计与工具选型逻辑2.1 四层架构记录层、存储层、智能层、沉淀层整套系统我把它分成四层每层职责清晰互不干扰层级工具职责为什么选它记录层飞书多维表格快速录入日记条目手机端体验好表单可自定义存储层飞书多维表格结构化存储所有记录自带API字段类型丰富智能层Kimi情绪分析、主题聚类、周报生成长文本理解强中文语境好沉淀层Obsidian长期知识库、双向链接本地Markdown永久可读这个分层不是拍脑袋定的。我一开始想的是全都放Obsidian里不就行了但实际用下来发现两个问题一是Obsidian手机端录入体验一般打字慢二是Obsidian本身没有AI能力你得自己接插件配置复杂。而飞书多维表格的手机端表单录入非常顺滑还能设置必填项和默认值记录这一步的摩擦降到最低。那为什么还要Obsidian因为飞书是云端的长期来看我希望有一个完全本地的、纯文本的备份和知识网络。Obsidian的双向链接和关系图谱能把零散的日记条目串成主题脉络这是表格做不到的。Kimi放在中间是因为它的长上下文能力确实强。我试过把一周的日记大概3000-5000字一次性丢给它做分析它能准确识别出情绪波动曲线和重复出现的主题词这个体验比我自己翻记录好太多。2.2 为什么不用全自动而是半自动这里我要特别说一下设计取舍。很多人做自动化系统追求的是全自动——我写一句话系统自动分析、自动归档、自动生成报告。我试过不行。原因有两个。第一AI分析需要上下文。单条日记丢给AI它只能做浅层情绪判断正面/负面/中性没有意义。真正有价值的是跨条目关联这需要积累一定量之后再批量分析。第二全自动容易产生噪音。如果每条日记都自动生成一段AI点评你的表格很快就变成垃圾场你反而不想看了。所以我采用的是半自动模式记录是全自动的手机表单提交即入库分析是定时触发的每周日晚自动跑一次沉淀是手动确认的AI生成的周报我看过之后手动导出到Obsidian。这样既省力又保证了质量。2.3 数据流走向从一句话到一张知识网络完整的数据流是这样的你在飞书多维表格的移动端表单里写一句话日记提交。记录自动存入表格带上时间戳、情绪标签手动选或留空。每周日晚8点自动化流程触发拉取本周所有记录。记录打包发送给Kimi附带一段预设的分析提示词。Kimi返回分析结果情绪曲线、高频主题、值得关注的条目。分析结果写回飞书表格的周报视图。你查看周报觉得有价值的内容手动复制到Obsidian的日记文件夹。Obsidian里通过标签和双向链接自动形成主题索引。这个流程里第3到第6步是自动化的第7步是人工的。为什么保留人工因为什么值得沉淀这个判断目前AI还做不好。它会把所有东西都标为重要你需要自己筛。3. 飞书多维表格的搭建细节3.1 表格结构设计字段不是越多越好我第一版表格设计了十几个字段结果自己都懒得填。后来砍到六个核心字段使用率立刻上来了。最终结构如下字段名类型说明是否必填日期日期自动填充当前日期是内容多行文本日记正文是情绪单选开心/平静/焦虑/低落/愤怒否标签多选工作/生活/学习/健康/关系否周报多行文本AI生成的分析结果否已沉淀复选框是否已导出到Obsidian否这里有个细节情绪字段设为非必填。为什么因为有时候你就是不想标注情绪强制填写会增加心理负担。留空没关系AI分析时会根据文本内容自动推断。标签字段用多选而不是单选是因为一条日记可能同时涉及工作和健康比如加班到凌晨胃疼。多选更符合真实情况。已沉淀这个复选框看起来多余但它解决了一个实际问题当你积累了几百条记录后你分不清哪些已经导出过、哪些没有。有了这个勾选框配合筛选视图一目了然。3.2 移动端表单配置让记录变成三秒动作飞书多维表格支持为表格创建表单视图这个功能是整套系统的入口。配置步骤在表格右上角点击新建视图选择表单。在表单设计里只保留内容和情绪两个字段可见其他字段隐藏。日期字段设置为自动填充当前时间用户不可见。表单标题改为今日记录描述写一句引导语比如今天发生了什么。生成表单链接保存到手机桌面。这样你打开手机点桌面图标直接进入表单写一句话选个情绪提交。整个过程不超过十秒。我实测下来这个摩擦系数足够低能让我在睡前愿意花这个时间。注意表单视图里隐藏的字段提交后会使用默认值。所以日期字段一定要设置默认值为当前时间否则会变成空值。3.3 飞书机器人配置打通自动化的关键一步自动化流程需要飞书机器人来触发和接收数据。配置过程如下进入飞书开放平台创建一个企业自建应用。在权限管理里开通以下权限bitable:app多维表格读写im:message发送消息drive:drive云文档访问在事件订阅里添加多维表格记录变更事件。发布应用获取App ID和App Secret。回到多维表格把机器人添加为协作者权限设为可编辑。这一步最容易卡住的地方是权限范围。飞书的权限粒度很细如果你只开通了bitable:app但没开通drive:drive读取表格时会报权限错误。我建议一次性把上面三个都开通省得后面反复调试。另一个坑是事件订阅的回调地址。如果你没有公网服务器可以用飞书提供的长连接模式不需要自己搭服务器。在应用配置里选择使用长连接接收事件即可。3.4 自动化流程搭建用飞书自带工具还是外部工具飞书本身有自动化流程功能可以做一些简单的触发动作比如当有新记录时发送消息通知。但它不支持调用外部AI接口。所以我的方案是飞书负责触发外部工具负责执行。外部工具我试过几个方案方案APython脚本 定时任务。在自己的电脑或服务器上跑一个脚本每周日晚触发。优点是灵活想怎么改就怎么改。缺点是需要一台常开的机器。方案B低代码平台。比如某些支持Webhook和HTTP请求的自动化平台。优点是不用写代码缺点是免费额度有限复杂逻辑不好调。方案C飞书多维表格的按钮字段 自动化。手动点按钮触发适合不想搞定时任务的场景。我最后选的是方案A因为我对Python比较熟而且需要处理一些文本清洗逻辑。如果你不熟悉编程方案B更友好。下面我以方案A为例讲具体实现。4. Kimi智能分析层的实现4.1 提示词设计让AI输出结构化结果Kimi的分析质量八成取决于提示词。我前后改了十几版最终稳定下来的提示词结构是这样的你是一个个人日记分析助手。下面是我本周的日记记录请按以下要求分析 1. 情绪曲线按日期列出每天的主要情绪用1-10分标注情绪值1极低落10极开心。 2. 高频主题提取出现次数最多的3个主题词并说明每个主题对应的具体事件。 3. 值得关注的条目挑出2-3条你认为最值得我重新审视的记录说明理由。 4. 一句话总结用一句话概括我这周的状态。 输出格式要求用Markdown格式不要用表格用列表和段落。 日记记录如下 {records}这里有几个关键设计点第一要求情绪值用1-10分而不是正面/负面。因为二元判断太粗糙1-10分能看出波动幅度。比如连续三天都是4分和一天3分一天7分平均值一样但含义完全不同。第二要求说明理由。如果不要求理由AI会随便挑几条你也不知道它为什么挑。要求理由之后它会基于情绪转折点重复出现的困扰等逻辑来选更有参考价值。第三明确禁止用表格。Kimi有时候会输出表格但在飞书多行文本字段里表格会变成一堆竖线很难看。用列表和段落更清晰。第四{records}是占位符实际调用时替换成拼接好的日记文本。拼接格式我建议用2024-01-15 [焦虑] 今天开会又被怼了感觉自己准备得不够充分。 2024-01-16 [平静] 在家看了一天书难得清静。 ...日期、情绪标签、内容三段式AI解析起来最准确。4.2 调用Kimi接口参数怎么设Kimi的API调用不复杂核心参数就几个import requests def analyze_diary(records_text, api_key): url https://api.moonshot.cn/v1/chat/completions headers { Authorization: fBearer {api_key}, Content-Type: application/json } payload { model: moonshot-v1-32k, messages: [ {role: system, content: 你是一个个人日记分析助手。}, {role: user, content: PROMPT_TEMPLATE.format(recordsrecords_text)} ], temperature: 0.3, max_tokens: 2000 } resp requests.post(url, headersheaders, jsonpayload, timeout60) return resp.json()[choices][0][message][content]参数说明model选32k版本。一周的日记大概3000-5000字32k上下文足够。如果选8k版本长一点的一周记录可能被截断。temperature设为0.3。分析类任务需要稳定输出温度太高会导致每次分析结果差异很大。0.3是一个平衡点既不会太死板也不会太随机。max_tokens设为2000。分析结果一般不会超过1500字2000留有余量。timeout设为60秒。Kimi处理长文本时偶尔会慢30秒可能不够。注意Kimi的API有频率限制免费额度下每分钟请求数有限。如果你一次分析多周数据建议加个time.sleep(2)间隔避免触发限流。4.3 结果写回飞书字段更新与视图配置Kimi返回的分析结果需要写回飞书表格。这里有两种做法做法一写回每条记录的周报字段。适合你想在每条记录旁边看到相关分析。但缺点是重复内容多每条记录都带一份完整周报表格会很臃肿。做法二新建一个周报表格单独存储。我推荐这种做法。周报表结构字段名类型说明周次文本如2024-W03日期范围文本如01-15 至 01-21分析结果多行文本Kimi返回的完整内容生成时间日期自动填充然后在原日记表格里通过关联字段关联到对应的周报记录。这样既保持了日记表格的简洁又能随时查看周报。飞书多维表格的API更新记录用PUT请求def update_bitable_record(app_token, table_id, record_id, fields, token): url fhttps://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records/{record_id} headers { Authorization: fBearer {token}, Content-Type: application/json } payload {fields: fields} resp requests.put(url, headersheaders, jsonpayload) return resp.json()app_token是你的多维表格ID在表格URL里能找到。table_id是具体表格的ID在表格设置里查看。5. Obsidian沉淀层的配置与联动5.1 文件夹结构与命名规范Obsidian这边我建议单独建一个日记仓库不要和你的其他笔记混在一起。文件夹结构日记仓库/ ├── 每日记录/ │ ├── 2024-01-15.md │ ├── 2024-01-16.md │ └── ... ├── 周报/ │ ├── 2024-W03.md │ └── ... ├── 主题/ │ ├── 工作压力.md │ ├── 健康管理.md │ └── ... └── 模板/ └── 日记模板.md每日记录的命名用YYYY-MM-DD格式这样排序天然正确。周报用YYYY-WXX格式。主题文件夹是精髓所在。当你发现某个主题反复出现比如工作压力就新建一个主题笔记在里面用双向链接引用所有相关的日记条目。Obsidian的关系图谱会自动把这些条目连起来你一眼就能看出这个主题的时间分布和情绪走向。5.2 从飞书导出到Obsidian手动但高效的方法前面说了这一步我保留手动。但手动不等于低效。我的操作流程是打开飞书周报视图复制分析结果。在Obsidian里打开周报模板粘贴内容。根据分析结果里的高频主题在主题笔记里添加链接。勾选飞书表格里的已沉淀复选框。整个过程大概五分钟。为什么不用自动化因为筛选和判断需要人来做。AI会告诉你这周出现了工作压力、睡眠不足、社交减少三个主题但哪个值得深入追踪只有你自己知道。这五分钟的投入换来的是知识库的质量。如果你确实想自动化可以用Obsidian的Local REST API插件配合脚本把飞书内容直接写入Markdown文件。但我不推荐因为自动写入的内容往往格式混乱后期整理成本更高。5.3 双向链接与标签体系让日记自己长出结构Obsidian最强大的功能是双向链接。我的用法是每条日记里用[[主题名]]的方式链接到主题笔记。比如今天又加班到十点[[工作压力]] 越来越大了。主题笔记里用[[2024-01-15]]的方式反向链接到具体日记。标签用#情绪/焦虑、#情绪/平静这样的层级标签方便筛选。这样做的效果是当你打开工作压力这个主题笔记你能看到所有提到它的日记按时间排列旁边还有情绪标签。你立刻就能看出这个月工作压力的出现频率是不是变高了。标签体系我建议不要超过三层否则你自己都记不住。我的标签结构#情绪/开心、#情绪/平静、#情绪/焦虑、#情绪/低落、#情绪/愤怒#领域/工作、#领域/生活、#领域/学习、#领域/健康、#领域/关系就这两组够用了。6. 常见问题与排查技巧实录6.1 飞书权限报错99991663错误码怎么解这是我最常遇到的错误。99991663通常表示应用权限不足。排查步骤检查开放平台里是否开通了bitable:app权限。检查多维表格里是否把机器人添加为协作者。检查app_token和table_id是否填对。如果以上都没问题尝试重新发布应用版本。我遇到过一次所有配置都对但就是报权限错误。最后发现是应用版本没有发布。飞书的权限变更需要发布新版本才生效这个很容易忽略。6.2 Kimi返回结果为空或截断如果Kimi返回空内容先检查max_tokens是否设得太小。如果返回内容被截断检查finish_reason字段stop正常结束。length达到max_tokens上限需要调大。content_filter内容被过滤检查日记里是否有敏感词。还有一种情况是输入太长。如果你把整个月的日记一次性丢进去可能超出上下文限制。建议按周分批处理。6.3 Obsidian同步冲突多设备编辑的坑如果你在多台设备上用Obsidian同步冲突是难免的。我的经验是用Obsidian官方的Sync服务冲突处理最省心但需要付费。用第三方同步如iCloud、OneDrive冲突文件会以conflicted copy形式出现需要手动合并。最稳妥的做法同一时间只在一台设备上编辑。日记这种场景你不太可能同时用两台设备写所以这个问题不严重。6.4 常见问题速查表问题现象可能原因解决方法飞书API报99991663权限不足或未发布检查权限、发布应用版本Kimi返回空max_tokens太小调大到2000以上Kimi返回截断输入超长按周分批处理Obsidian链接失效文件名变更用自动更新内部链接功能表单提交后日期为空默认值未设置设置日期字段默认值为当前时间自动化流程不触发定时任务未启动检查脚本运行状态和日志6.5 几个我踩过的坑坑一情绪标签别设太多选项。我一开始设了十几种情绪结果每次选都要想半天。后来砍到五种选择速度明显提升。选项太多等于没有选项。坑二周报不要每天生成。我试过每天让AI分析一次结果每天都是你今天情绪平稳继续保持毫无价值。周报的粒度刚好既有足够的数据量又不会太频繁。坑三Obsidian插件别装太多。我一开始装了二十多个插件启动慢、冲突多。后来只保留核心的几个Dataview数据查询、Templater模板、Calendar日历视图。够用了。坑四API密钥不要硬编码在脚本里。用环境变量或配置文件存储避免泄露。这个虽然是老生常谈但确实有人犯。7. 后续可以怎么扩展这套系统跑通之后我陆续加了一些扩展功能你可以按需参考。扩展一情绪趋势可视化。用Obsidian的Dataview插件写一个查询把每周的情绪平均值拉出来生成一个简单的折线图。这样你能直观看到自己几个月的情绪走势。扩展二关键词自动提取。在Kimi的提示词里加一条提取本周出现频率最高的10个关键词然后把这些关键词自动添加到Obsidian的标签体系里。时间长了你的标签库会越来越丰富。扩展三月度回顾。把四周的周报再丢给Kimi让它生成一份月度总结。粒度更粗但视角更高能看出一些周报里看不到的长期趋势。扩展四接入其他数据源。比如把你的运动手环数据、天气数据也导入飞书表格让Kimi分析情绪和运动量/天气的相关性。这个我还在折腾目前发现阴天没运动的日子情绪值明显偏低。最后分享一个我自己的体会这套系统最大的价值不是AI分析得多准而是它让你愿意持续记录。因为你知道写完之后会有反馈不是写进黑洞。这个正反馈循环一旦建立起来坚持就不再是问题了。