如今,围绕人工智能构建模式有很多炒作。特工、记忆、RAG、助手——这么多流行语!但现实是,您不需要花哨的技术或库来使用法学硕士构建有用的个人工具。
在这篇短文中,我将向您展示如何使用极其简单的架构为我的家人构建一个有用的 AI 助手:一个 SQLite 内存表,以及一些用于摄取内存和发送更新的 cron 作业,所有这些都托管在Val.town上。整个事情非常简单,您可以轻松地自己复制和扩展它。
认识史蒂文斯
这位助理名叫史蒂文斯,以石黑一雄的伟大小说《长日将尽》中的管家命名。每天早上,它都会通过 Telegram 向我和我的妻子发送一份简报,包括我们当天的日历安排、天气预报预览、我们预计收到的任何邮政邮件或包裹,以及我们要求它跟踪的任何提醒。所有内容都写得漂亮而正式,就像您对合适管家的期望一样。
这是一个例子。 (我将在整篇文章中使用虚假数据,因为我们的实际更新包含私人信息。)
除了每日简报之外,我们还可以按需与史蒂文斯沟通——我们可以转发包含一些重要信息的电子邮件,或者只是留下提醒或通过 Telegram 聊天提出问题。
那是史蒂文斯。虽然它还很初级,但对我来说已经比 Siri 更有用了!
幕后花絮
让我们分解一下 Stevens 背后的简单架构。整个事情都托管在Val.town上,这是一个可爱的平台,提供 SQLite 存储、HTTP 请求处理、计划的 cron 作业和入站/出站电子邮件:该项目的一组完美功能。
首先,史蒂文斯如何知道早间简报的内容?钥匙是管家的笔记本,记录着史蒂文斯所知道的一切。有一个管理视图,我们可以在其中查看笔记本内容 – 让我们看看里面有什么:
您可以看到上面早间简报中的一些条目,例如,家长教师会议有一个日志条目。
除了一些文本之外,条目还可以有一个预期相关的日期。还有一些没有日期的条目可用作一般背景信息,并且始终包含在内。您可以看到这些特定的背景记忆来自 Telegram 聊天,因为史蒂文斯在您第一次开始时通过 Telegram 进行了一次面试:
有了这个笔记本,发送早间简报就很容易:只需运行一个 cron 作业,该作业调用 Claude API 来编写更新,然后将文本发送到 Telegram 线程。作为模型的上下文,我们包括下周的所有日志条目以及未注明日期的背景条目。
在幕后,“笔记本”只是一个包含几列的 SQLite 表。这是一个更无聊的观点:
但是等等:各种日志条目最初是如何到达那里的?在管理视图中,我们可以看到史蒂文斯忙着从各种来源将内容输入到日志中:
这只是一些填充表的数据导入器:
- 从 Google Calendar API 提取每小时的数据
- 使用天气 API 每小时检查一次当地天气预报
- 我转发包含我们邮政邮件扫描件的USPS Informed Delivery ,史蒂文斯使用 Claude 对它们进行 OCR
- 入站电报和电子邮件消息也可能导致日志条目
- 每周,一些“有趣的事实”都会添加到日志中,作为为未来的每日更新添加一些色彩的一种方式。
该系统可以轻松地通过新的进口商进行扩展。导入器就是在日志中添加/编辑内存的任何进程。内存内容可以是任意文本,因为无论如何它们稍后都会反馈到 LLM 中。
反思
对这个项目的一些快速思考:
对于个人人工智能工具来说,从其他信息源访问更广泛的上下文非常有用。对日历和天气预报等事物的了解可以将愚蠢的聊天机器人变成有用的助手。 ChatGPT 最近添加了对过去对话的记忆,但有很多信息未存储在该筒仓中。我之前写过关于人工智能驱动的个人软件的最终游戏如何不再是更多的应用程序孤岛,而是在我们生活的共享背景池上运行的小工具。
“记忆”可以从简单开始。在这种情况下,助理的用例是有限的,并且其信息本质上是有时间限制的,因此查询提供给法学硕士的相关上下文相当容易。一些现代模型具有长上下文窗口也有帮助。随着可用信息的大小不断增加,可能需要 RAG 和更奇特的内存方法,但您可以从简单的开始。
Vibe 编码可以实现更愚蠢的项目。最初,史蒂文斯说话的语气很干巴巴,就像你对苹果或谷歌的普通产品所期望的那样。但事实证明,让助理像正式管家一样说话更有趣。这很简单,只需在提示中添加几行即可。同样,我决定让管理仪表板视图感觉像一个视频游戏,因为为什么不呢?我在 ChatGPT 中生成了图像资源,并在 Cursor + Claude 3.7 Sonnet 中对整个 UI 进行了编码;付出一点点额外的努力,就能换来更多的乐趣。
自己尝试一下
Stevens 不是一个可以开箱即用的产品,它只是我为自己制作的一个个人项目。
但如果您好奇,可以在此处查看代码并分叉该项目。您应该能够应用这个基本模式(单个内存表和可扩展的 cron 作业群)来执行许多其他有用的操作。
我建议使用您选择的 AI 编辑器和Valtown CLI来编辑代码,以同步到本地文件系统。