1. 项目概述:一个能帮你规划生活的AI助理
如果你和我一样,每天被各种待办事项、日程安排、账单提醒搞得焦头烂额,总感觉时间不够用,事情永远做不完,那今天聊的这个项目,你可能会非常感兴趣。它叫LifeSync-AI,虽然原作者已经宣布它被一个叫 Bubbles 的新项目取代并停止更新,但作为一个已经跑通了核心逻辑、并且完全开源的项目,它的设计思路和实现代码,对于我们这些想自己动手打造一个“私人AI生活管家”的人来说,依然是一座宝藏。
简单来说,LifeSync-AI 不是一个简单的待办清单App。它的野心更大:它试图成为你的“第二大脑”。这个大脑会主动去你的 Notion 任务数据库里“看”你今天有什么任务,然后结合当天的天气、你的个人习惯,调用像 ChatGPT 这样的 AI 大模型,为你生成一份精确到小时的、个性化的每日计划。最后,它还会在每天清晨,把这份计划连同天气提醒,通过邮件准时送到你的收件箱。整个过程全自动,你只需要在头天晚上把任务丢进 Notion,第二天早上就能收到一份“行动指南”。
我花了一些时间深入研究了这个项目的源码,并尝试在本地和云端(GitHub Actions)都部署运行过。我发现,它的核心价值不在于那些尚未实现的“路线建议”、“账单监控”等未来功能,而在于它已经跑通的、非常清晰的“数据获取 -> AI 处理 -> 结果推送”自动化链路。这套链路,完全可以作为我们构建任何个性化自动化系统的骨架。接下来,我就把自己拆解、复现和优化这个项目的全过程,以及踩过的坑、总结的经验,毫无保留地分享给你。
2. 核心设计思路与架构拆解
在动手写代码或部署之前,我们必须先理解 LifeSync-AI 是怎么“想”问题的。这能帮助我们在后续配置和自定义时,知道每一步在干什么,出了问题该往哪个方向排查。
2.1 核心工作流:从任务到邮件的自动化旅程
整个系统的运行,可以看作一个精心设计的流水线,我把它画成了下面这个流程图来帮助你理解:
graph TD A[GitHub Actions 定时触发] --> B[读取 Notion 任务数据库]; B --> C[获取 OpenWeather 天气数据]; C --> D[组装 Prompt 调用 AI]; D --> E{AI 模型选择}; E -->|OpenAI GPT| F[生成计划与建议]; E -->|智谱清言 GLM| F; F --> G[使用 Mailgun 发送邮件]; G --> H[用户清晨收到每日计划];这个流程的起点是GitHub Actions 的定时触发器。你设定一个时间(比如北京早上6点),GitHub 就会在那个时间点自动启动这个程序。这里有个关键点:GitHub Actions 的服务器在 UTC 时区,所以你需要做时区换算。项目文档里给的例子cron: '0 22 * * *'指的是 UTC 时间 22:00,对应北京时间早上6点(+8时区)。这个设定决定了你什么时候收到邮件,非常重要。
流程的第二步是连接你的 Notion。LifeSync-AI 把 Notion 当作唯一的数据源和“指挥中心”。它通过 Notion API 去读取一个特定数据库(Database)里的任务。这里的设计很巧妙:它并非读取所有任务,而是通过筛选条件(比如“状态不是已完成”、“日期是今天”)来获取你当天需要处理的事项。这意味着,你管理任务的方式可以非常自由,只需要保证数据库的字段(Property)符合程序的预期即可。
拿到任务清单和从 OpenWeather 获取的实时天气后,程序会把这些原始信息组装成一个给 AI 的“指令”(Prompt)。这个 Prompt 是核心中的核心,它大概会说:“以下是用户今天的任务和天气,请以专业助理的身份,帮他规划一个时间表,并给出一些注意事项。” AI 的发挥好坏,很大程度上取决于这个 Prompt 写得是否清晰、具体。
接下来就是AI 的表演时间。LifeSync-AI 支持 OpenAI 的 GPT 系列和国内的智谱清言(GLM)。AI 会消化任务和天气信息,产出一份结构化的文本,通常包括:问候语、今日重点、按小时划分的时间安排、针对天气或特定任务的个性化建议。
最后,这份精心生成的计划,会通过Mailgun这个邮件服务,发送到你预设的邮箱地址。Mailgun 是专门为开发者提供的邮件发送 API,稳定且不易被当作垃圾邮件,比直接用个人邮箱的 SMTP 服务要可靠得多。
核心思路总结:LifeSync-AI 的本质是一个信息聚合与智能调度器。它不创造信息,而是把你散落在不同地方的信息(任务、天气)收集起来,利用 AI 进行理解和重组,再通过最通用的通道(邮件)交付给你。这个模式几乎可以套用到任何需要“定期总结+智能建议”的场景。
2.2 技术选型背后的“为什么”
理解了流程,我们再来看看作者为什么选择这些技术栈,这能帮助我们在自行搭建时做出合理的替代或优化。
核心语言:PythonPython 是这类自动化脚本和 AI 应用的首选,生态丰富。Notion、OpenAI、Mailgun 都有非常成熟易用的 Python SDK (
notion-client,openai,requests),能让开发者快速集成,把精力集中在业务逻辑而非底层通信上。数据中枢:Notion
- 灵活性:Notion 的数据库可以自定义任何字段,完美适配不同用户的任务管理习惯。LifeSync-AI 只需要约定几个关键字段(如任务名、日期、状态),其他字段你可以随意添加,不影响程序运行。
- API 成熟度:Notion 官方 API 功能强大且稳定,能高效地进行查询和筛选。
- 用户友好:对于终端用户来说,在 Notion 里管理任务是直观且无痛的,学习成本低。这避免了为了用一个工具而去学习另一个复杂工具的局面。
执行环境:GitHub Actions
- 免费与自动化:对于个人项目,GitHub Actions 提供的免费额度完全够用。它的定时任务 (
cron) 功能非常稳定,是实现“每日自动运行”的理想选择,省去了自己维护服务器的成本和麻烦。 - 环境隔离与保密:GitHub Secrets 功能可以安全地存储你的所有 API 密钥,避免硬编码在代码中导致泄露。每次运行都是一个全新的、干净的环境,排除了因本地环境差异导致的问题。
- 可观测性:每次运行都有详细的日志,成功或失败一目了然,方便排查问题。
- 免费与自动化:对于个人项目,GitHub Actions 提供的免费额度完全够用。它的定时任务 (
AI 服务:OpenAI / 智谱清言
- OpenAI GPT:效果的金字塔尖,生成文本的质量、逻辑性和指令遵循能力最强,但需要处理网络访问和付费问题。
- 智谱清言 GLM:优秀的国产替代方案,提供了国内可稳定访问的 API,对于国内用户非常友好。LifeSync-AI 同时支持两者,体现了实用性考量。
通知渠道:Mailgun
- 可靠性:专门的事务性邮件服务,送达率高,不易进垃圾箱。
- 易用性:API 简单清晰,几行代码就能发送格式精美的 HTML 邮件。
- 免费额度:Mailgun 的免费套餐足以支撑个人每日一封邮件的需求。
这个技术栈组合,体现了一个清晰的思路:用最成熟、最省事的服务,拼装出一个能解决实际问题的自动化系统。每一个组件都承担了最擅长的工作,开发者只需要写好“胶水代码”把它们粘合起来。
3. 从零开始部署与配置实战
理论讲完了,我们进入实战环节。我会假设你是一个有一定技术基础(知道什么是 API、会在命令行操作)的开发者,带你一步步把这个系统跑起来。我强烈推荐使用云端(GitHub Actions)部署,这是最省心、最接近“全自动”理想状态的方式。
3.1 前期准备:收集你的“武器”
在写代码之前,我们需要先把所有必需的“钥匙”(API Key)和“地图”(Notion 模板)准备好。
第一步:Fork 项目仓库打开 LifeSync-AI 的 GitHub 仓库页面,点击右上角的Fork按钮。这会在你的账号下创建一个完全相同的副本,你可以在自己的副本里任意修改和配置。
第二步:获取 Notion API 集成令牌与数据库 ID这是整个系统的数据入口,也是最容易出错的一步,请仔细跟随。
- 访问 Notion 开发者页面 ,登录后点击 “+ New integration”。
- 给你的集成取个名字,比如 “My LifeSync AI”。关联的工作区选择你的个人工作区即可。
- 创建成功后,你会看到“Internal Integration Token”。点击 “Show” 复制它,这个就是你的
NOTION_TOKEN。妥善保存,它只会显示一次。 - 接下来,你需要一个任务数据库。作者提供了一个 现成的模板 。我建议你直接点击 “Duplicate” 复制这个模板到你自己的 Notion 空间。用现成模板可以避免字段不匹配的问题。
- 打开你复制好的模板页面。在浏览器地址栏,你会看到一长串 URL。其中,在
notion.site/之后、问号?或下一个斜杠/之前的那一串字符,就是你的数据库 ID。它通常由 32 个十六进制字符组成。例如,URL 是https://www.notion.so/yourworkspace/1234567890abcdef1234567890abcdef?v=...,那么1234567890abcdef1234567890abcdef就是你的数据库 ID。复制它,作为DATABASE_ID。
关键操作提示:获取数据库 ID 后,你必须回到刚才创建集成(My LifeSync AI)的页面,在 “Content Capabilities” 部分,找到你刚刚复制的那个数据库,点击下拉菜单,选择 “Can read content” 和 “Can update content”(如果未来需要标记任务完成,则需要更新权限),然后点击 “Save”。这一步至关重要,否则你的程序将无权读取数据库!
第三步:申请 OpenWeather API Key
- 前往 OpenWeather 官网 注册账号。
- 在 “My API Keys” 页面,生成一个新的 Key。免费套餐的调用频率对于每日一次的需求绰绰有余。
- 复制这个 Key,作为
OPENWEATHER_API_KEY。
第四步:申请 Mailgun API Key 和域名
- 前往 Mailgun 官网 注册。他们提供免费试用,包含每月一定数量的邮件。
- 注册后,你需要验证一个发件人邮箱(比如你的个人 Gmail),并添加一个域名。Mailgun 会提供一些子域名(如
sandboxXXXX.mailgun.org)供测试使用,免费套餐足以应对。 - 在控制台的 “Sending” -> “Domain Settings” 里,找到你的域名(如
sandboxxxx.mailgun.org),这就是你的MAILGUN_DOMAIN。 - 在 “API Keys” 页面,复制默认的 Private API Key,这就是你的
MAILGUN_API_KEY。
第五步:获取 AI API Key
- 方案A(OpenAI):访问 OpenAI Platform ,创建新的 API Key。注意保管,并确保你的使用方式符合其条款。你需要为 GPT 的调用付费,但成本极低(每日一次的计划生成,一个月可能只需几美分)。
- 方案B(智谱清言):访问 智谱清言开放平台 ,注册并创建 API Key。这对于国内用户是更稳定便捷的选择。
3.2 云端部署:在GitHub Actions上安家
现在,我们进入你的 GitHub 仓库进行配置。
设置 Secrets(核心机密库)进入你 Fork 后的仓库,点击
Settings->Secrets and variables->Actions。 点击New repository secret,依次添加以下密钥。注意,Name 必须严格按以下大小写填写:ENV_DATABASE_ID: 填入你第二步获取的 Notion 数据库 ID。ENV_NOTION_TOKEN: 填入你的 Notion Internal Integration Token。MAILGUN_API_KEY: 填入你的 Mailgun Private API Key。MAILGUN_DOMAIN: 填入你的 Mailgun 域名(如sandboxxxx.mailgun.org)。AI_API_KEY:这里有个重要变化。根据项目代码,这个变量名同时用于 OpenAI 和智谱清言。你需要根据自己选择填入对应的 Key。OPENWEATHER_API_KEY: 填入你的 OpenWeather API Key。RECIPIENT_EMAIL: (需要额外添加)填入你希望接收日报的邮箱地址。这个在原文档的 Secrets 列表里没有明确列出,但代码中是需要的,从环境变量RECIPIENT_EMAIL读取。务必加上。WEATHER_CITY: (建议添加)填入你所在的城市拼音,如Beijing。这样天气获取更准确。
配置运行时间在仓库代码中,找到
.github/workflows/deploy.yml文件。点击编辑(铅笔图标)。 找到on.schedule.cron这一行:on: schedule: - cron: '0 22 * * *' # UTC时间22:00,即北京时间06:00这个
cron表达式决定了每天运行的时间。‘0 22 * * *’表示在 UTC 时间的每天 22:00(即小时为22,分钟为0)运行。如果你想在北京时间早上7点收到邮件,因为 UTC 时间比北京时间晚8小时,所以 UTC 时间应为前一天的 23:00,即‘0 23 * * *’。Cron 表达式小课堂:
‘0 22 * * *’中,五个星号依次代表:分钟(0)、小时(22)、日、月、星期。*表示“每”。所以这个表达式就是“每日 22:00”。手动触发试运行配置完成后,你可以立即测试一下,而不用等到定时时间。 点击仓库顶部的
Actions标签页,你应该能看到一个名为 “Daily Report” 的工作流。点击它,然后点击右侧的Run workflow按钮,选择Run workflow。这将会手动触发一次流程。 稍等一两分钟,点击这次运行的记录,你可以查看详细的执行日志。如果所有 Secrets 配置正确,Notion 数据库有今天的数据,你应该能看到 “Run Python script” 步骤执行成功,并最终完成。
3.3 本地运行与调试(可选但重要)
虽然云端部署是最终形态,但在配置过程中,本地运行是极佳的调试手段。它能让你快速看到错误信息,并进行交互式测试。
克隆代码与安装依赖
git clone https://github.com/你的用户名/LifeSync-AI.git cd LifeSync-AI pip install -r requirements.txt配置本地环境变量在项目根目录下,创建一个名为
.env的文件。注意,文件名前面有个点。内容如下:# Notion 配置 NOTION_TOKEN=你的_NOTION_TOKEN DATABASE_ID=你的_DATABASE_ID # 邮件配置 MAILGUN_API_KEY=你的_MAILGUN_API_KEY MAILGUN_DOMAIN=你的_MAILGUN_DOMAIN RECIPIENT_EMAIL=你的接收邮箱 # AI 配置 (使用OpenAI时) OPENAI_API_KEY=你的_OPENAI_API_KEY # 或者使用智谱清言时,注意变量名是 AI_API_KEY AI_API_KEY=你的_智谱清言_API_KEY AI_MODEL=glm-4 # 如果使用智谱清言,指定模型 # 天气配置 OPENWEATHER_API_KEY=你的_OPENWEATHER_API_KEY WEATHER_CITY=Beijing重要提示:查看项目
config.py或main.py的开头部分,确认它从环境变量读取的键名到底是什么。例如,它可能期望OPENAI_API_KEY还是AI_API_KEY?根据代码实际期望的变量名来填写你的.env文件。这是本地运行最常见的错误来源。运行与测试
python main.py如果一切顺利,你会在终端看到日志输出,并很快在你的收件箱里收到一封测试邮件。如果报错,请根据错误信息(通常是 API 密钥无效、数据库无权访问、网络问题等)逐一排查。
4. 核心代码逻辑与自定义改造点
部署成功只是第一步。要真正让这个工具为你所用,甚至进行二次开发,我们需要深入其核心代码。LifeSync-AI 的代码结构清晰,主要逻辑集中在main.py、notion_client.py、ai_planner.py、weather.py和email_sender.py这几个文件里。
4.1 任务获取:如何与Notion对话
核心在notion_client.py。它使用notion-client库与 Notion API 交互。
# 示例性代码逻辑(非原文件逐行复制) from notion_client import Client class NotionClient: def __init__(self, token, database_id): self.client = Client(auth=token) self.database_id = database_id def get_today_tasks(self): # 构建筛选器:获取“日期”是今天且“状态”不是“完成”的任务 filter = { "and": [ {"property": "Date", "date": {"equals": datetime.today().isoformat()[:10]}}, {"property": "Status", "select": {"does_not_equal": "Done"}} ] } response = self.client.databases.query(database_id=self.database_id, filter=filter) tasks = [] for page in response.get("results", []): task_name = page["properties"]["Task"]["title"][0]["text"]["content"] # ... 解析其他属性,如标签、优先级等 tasks.append({"name": task_name, ...}) return tasks自定义关键点:
- 字段映射:代码中的
"Task"、"Date"、"Status"必须与你 Notion 数据库里的属性名完全一致,包括大小写。如果你的字段叫“任务名称”或“Due Date”,这里就需要相应修改。 - 筛选逻辑:这是决定“哪些任务会被AI看到”的规则。默认是取“今天”且“未完成”的任务。你可以修改
filter字典来实现更复杂的逻辑,比如:- 获取“本周”的任务:将
"equals"改为"this_week"。 - 包含“高优先级”的任务:在
and列表里增加一个条件{"property": "Priority", "select": {"equals": "High"}}。
- 获取“本周”的任务:将
- 数据结构:解析任务后组装成的
tasks列表,其格式直接影响后续 AI Prompt 的输入。你可以选择把更多信息(如预估耗时、所属项目)传给 AI,让计划更精准。
4.2 AI提示词工程:让大模型成为你的专属顾问
这是项目的“大脑”所在,位于ai_planner.py。其核心是构造发送给 AI 的 Prompt。
# 示例性Prompt构造 def build_planning_prompt(tasks, weather_info): task_list_str = "\n".join([f"- {task['name']}" for task in tasks]) prompt = f""" 你是一个高效、体贴的个人生产力助理。请根据用户今天的任务和天气情况,为他制定一份详细到小时的时间安排表,并给出实用建议。 # 用户今日任务: {task_list_str} # 今日天气({weather_info['city']}): - 概况:{weather_info['description']} - 温度:{weather_info['temp']}°C (体感温度 {weather_info['feels_like']}°C) - 湿度:{weather_info['humidity']}% - 风速:{weather_info['wind_speed']} m/s - 紫外线指数:{weather_info['uvi']} # 你的输出格式要求: 1. 以友好的问候开头。 2. 用“### 今日核心任务”列出最重要的1-3件事。 3. 用“### 时间安排建议”提供一个从早上8点到晚上10点的时间表,将任务合理插入。请考虑任务难度、天气对出行的影响(如雨天、大风)、以及劳逸结合。 4. 用“### 个性化建议”提供2-3条基于天气和任务的提醒(例如:“下午有雨,建议外出任务安排在上午。”或“今天任务较多,记得中午小憩20分钟。”)。 5. 最后以一句鼓励的话结束。 请确保建议具体、可行,并体现出对用户时间和精力的关怀。 """ return prompt自定义关键点(这里是发挥你创造力的核心):
- 角色设定:
你是一个高效、体贴的个人生产力助理。你可以改变这个角色,比如“你是一个严格的项目经理”或“你是一个注重工作生活平衡的教练”,AI 的语气和侧重点会随之变化。 - 输入信息:除了任务和天气,你还可以在 Prompt 里加入更多上下文。例如,从 Notion 读取用户的“每周目标”、“能量水平”记录,或者固定的“作息时间表”,让 AI 的建议更个性化。
- 输出格式:这里定义的格式就是最终邮件的骨架。你可以要求 AI 用更活泼的 Markdown、甚至用表格来呈现时间表。清晰的格式指令能让 AI 的输出稳定且美观。
- 模型与参数:在调用 AI API 时,可以调整
temperature(创造性,越低越稳定)、max_tokens(回复长度)等参数。对于每日计划,temperature设为 0.5-0.7 比较合适,既有一定灵活性,又不会天马行空。
4.3 邮件模板:打造你的专属日报样式
最终成果通过email_sender.py发送。Mailgun 支持发送 HTML 邮件,所以我们可以把 AI 返回的 Markdown 文本渲染成漂亮的 HTML。
# 示例性邮件内容构造 def create_email_content(ai_response, weather_info): # 假设ai_response是AI返回的Markdown文本 html_content = markdown2.markdown(ai_response) # 使用markdown2库转换 # 可以进一步美化,添加CSS样式 styled_html = f""" <!DOCTYPE html> <html> <head> <style> body {{ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; padding: 20px; }} .header {{ color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px; }} .section {{ margin: 25px 0; }} .schedule-table {{ width: 100%; border-collapse: collapse; }} .schedule-table td, .schedule-table th {{ border: 1px solid #ddd; padding: 10px; text-align: left; }} .weather-card {{ background-color: #f8f9fa; border-left: 4px solid #3498db; padding: 15px; margin: 15px 0; }} .tip {{ background-color: #fff3cd; border-left: 4px solid #ffc107; padding: 10px; font-style: italic; }} </style> </head> <body> <div class="header"> <h1>🌞 你的每日智能规划</h1> <p>{datetime.now().strftime('%Y年%m月%d日 %A')}</p> </div> <div class="weather-card"> <h3>今日天气速览</h3> <p>{weather_info['city']} | {weather_info['description']} | {weather_info['temp']}°C</p> </div> {html_content} <div class="tip"> <p>本计划由你的 LifeSync AI 助理生成,祝你拥有高效而愉快的一天!</p> </div> </body> </html> """ return styled_html自定义关键点:
- 视觉设计:通过内联 CSS,你可以完全定制邮件的样式,让它符合你的审美。可以设计成简洁商务风、活泼可爱风等。
- 信息增强:除了 AI 生成的内容,你可以在邮件固定位置添加更多信息模块,比如:一周任务完成度统计、一句每日名言、甚至是从其他 API 获取的新闻摘要。
- 多收件人:修改代码,可以让它同时发送给多个邮箱(比如你的工作邮箱和个人邮箱),或者根据任务标签发送给不同的协作者。
5. 避坑指南与常见问题排查
在实际部署和运行中,我遇到了不少问题。这里把典型问题和解决方案整理出来,希望能帮你节省大量时间。
5.1 配置与权限类问题
问题1:GitHub Actions 运行失败,日志显示KeyError或Authentication Failed。
- 排查思路:这几乎总是 Secrets 配置错误。
- 检查变量名:确保在 GitHub Secrets 里设置的变量名,与代码中
os.getenv(‘VARIABLE_NAME’)读取的名字完全一致,包括大小写。最常见的是把DATABASE_ID误设为ENV_DATABASE_ID,或者反之。 - 检查变量值:确认 API Key 或 Token 复制完整,没有多余的空格或换行。特别是 Notion Token,它以
secret_开头,是一长串字符。 - 检查 Notion 集成权限:再次确认你是否在 Notion 集成的设置页面,为你使用的数据库赋予了 “Read” 权限。
- 检查变量名:确保在 GitHub Secrets 里设置的变量名,与代码中
问题2:程序运行成功,但收不到邮件。
- 排查思路:
- 检查垃圾邮件箱:首先去垃圾邮件(Spam)文件夹找找。
- 检查 Mailgun 日志:登录 Mailgun 控制台,进入 “Logs” 页面。这里会记录每一封邮件的发送状态(Delivered, Failed, Accepted 等)。如果显示失败,通常会给出原因,如“域名未验证”、“发件人地址未授权”等。
- 检查收件人邮箱:确认
RECIPIENT_EMAIL这个 Secret 是否正确设置,并且邮箱地址有效。 - 检查免费额度:确认 Mailgun 免费账户的额度(每月300封)是否用完。
问题3:AI 返回的内容空洞、不按格式要求,或者直接报错。
- 排查思路:
- 检查 API Key 和模型:确认
AI_API_KEY有效,且对于智谱清言,代码中指定的模型(如glm-4)你有权限调用。 - 审查 Prompt:在本地运行,打印出构建好的 Prompt,看看是否清晰、包含了所有必要信息。Prompt 的指令越明确,AI 表现越好。
- 检查网络:如果是 OpenAI,确保运行环境(GitHub Actions 服务器或你的本地网络)能够访问其 API。GitHub Actions 的服务器在国外,访问 OpenAI 通常没问题,但访问国内模型可能需要配置代理(注意合规性)。
- 调整参数:尝试降低
temperature值(如从 0.8 调到 0.3),让 AI 的输出更稳定、更遵循指令。
- 检查 API Key 和模型:确认
5.2 逻辑与数据类问题
问题4:AI 生成的时间表完全不合理,把重要任务排到了深夜。
- 解决方案:这需要优化你的 Prompt。在 Prompt 中明确加入约束条件,例如:
- “请将需要高度集中精力的创造性任务安排在上午9点至11点。”
- “用户的常规作息是晚上11点休息,请勿安排任何任务在晚上10点之后。”
- “请确保午餐时间(12:00-13:00)和晚餐时间(18:00-19:00)留空。” 你甚至可以从 Notion 中读取一个“偏好设置”数据库,把用户的作息时间、能量高峰期等作为变量动态传入 Prompt。
问题5:Notion 中的任务没有被正确识别或获取。
- 排查思路:
- 字段名匹配:用 Notion 客户端打开你的数据库,点击 “...” -> “Properties”,确认属性名称。确保代码中的
“Task”、“Date”等与这里显示的名称一字不差。 - 属性类型匹配:确认
“Date”属性的类型是 “Date”,“Status”的类型是 “Select”。如果类型不对,查询会失败。 - 筛选日期:代码中通常筛选“今天”的任务。请检查你 Notion 任务里 “Date” 属性是否确实设置为今天的日期。Notion 的日期可以包含时间,但代码筛选时通常只比较日期部分。
- 字段名匹配:用 Notion 客户端打开你的数据库,点击 “...” -> “Properties”,确认属性名称。确保代码中的
问题6:GitHub Actions 运行时间不对,不是在我想要的本地时间触发。
- 解决方案:牢记 GitHub Actions 的
cron使用UTC 时间。计算你的本地时间对应的 UTC 时间。一个简单的公式:UTC时间 = 本地时间 - 时区偏移。例如,北京是 UTC+8,想要早上7点运行,则 UTC 时间为前一天的 23点 (7 - 8 = -1,即前一天的23点)。所以cron应设为‘0 23 * * *’。你可以使用在线的 cron 表达式生成器 来辅助验证。
5.3 进阶优化与扩展思路
当基础版本稳定运行后,你可以考虑以下方向进行个性化增强:
- 多数据源整合:LifeSync-AI 目前只用了 Notion。你可以很容易地扩展它,让它也从你的 Google Calendar 读取会议日程,从 Toggl 或 Clockify 读取时间记录,甚至从健康 App 读取睡眠数据,让 AI 的建议更加全面。
- 反馈循环:让系统变得更聪明。例如,在邮件末尾添加一个链接,点击可以对今天的计划进行评分(“太紧”、“刚好”、“太松”),或者报告任务的实际完成情况。将这些数据存回 Notion,未来 AI 制定计划时可以参考历史反馈。
- 条件触发与多渠道通知:除了每日定时,可以增加条件触发。例如,当 Notion 中某个高优先级任务被创建时,立即发一条 Telegram 或 Slack 消息提醒你。这可以通过 GitHub Actions 的
repository_dispatch事件或更复杂的服务器来实现。 - 本地部署与隐私强化:如果你对数据隐私有极高要求,可以将整套系统部署在家里的树莓派或 NAS 上,使用本地大模型(如通过 Ollama 部署 Llama 3)来生成计划,完全避免数据出域。
这个项目就像一副乐高骨架。官方版本(LifeSync-AI)提供了一个稳定、可用的基础模型,而它的继任者 Bubbles 可能构建了更复杂的上层建筑。但对我们学习者而言,这副骨架的价值在于,它清晰地展示了如何将几个现代 API 服务像积木一样拼接起来,创造出一个能真实服务于生活的智能工具。动手去部署它,改造它,让它真正成为你的“第二大脑”,这个过程本身,就是一次极佳的学习和创造体验。