I Built a Personal AI Agent on a Raspberry Pi — Jeremy Adams, Neo4j
频道: AI Engineer
视频: https://www.youtube.com/watch?v=oUZEt4EiPbk
原文语言: en
统计: 共 13 轮 · Jeremy 13
[0:12] Jeremy
How's everybody doing? Day what is it? 4 400 something. Thank you for bearing with us as we had a little technical difficulty getting started. But I am Jeremy Adams. I'm from Neo4j. You might have seen our booth. It's kind of right over that way. And we're all about graphs and graph databases. Today I'm going to expand that a little bit to a side project I've been playing with. Uh who here has done something with uh open claw or Hermes agent or any of your kind of claw of choice. Okay. So a lot of some folks but most folks are kind of new to the space which is cool. How about uh things that are more like edge devices, hardware? Um thinking about like you know offline mode kind of stuff. Yeah. Okay. Some interest there. Um how about who's experienced with graph in general? A little bit of graph some graph people. Cool. And how who's been doing like building agents with memory and things like that? Okay. Whoa. Cool. That's the the biggest group so far. And I want to keep it going. We're going to try and do more things that have to do with uh statistics of some sort uh as we get to some findings that we're going to do in a little bit. So, um what I'm going to do in this talk today is talk about this agent memory project that I did that involves a bit of hardware that you can see on my chest. And um as we go through it, we're going to talk about how I also built up some software for agent memory and how that all went. So, this is like the livest of the live demos I've done with this so far because I'm like literally assembling the pieces in front of you. So, let's see. We're I have a microphone, little extra microphone.
大家怎么样啊?今天是第几天来着?第 4……第四百多天了吧。刚才开场出了点小小的技术故障,谢谢大家耐心等着。我是 Jeremy Adams,来自 Neo4j。你们可能看到过我们的展位,大概就在那个方向。我们做的全是图和图数据库这一块。今天我想把话题稍微扩一扩,讲讲我一直在折腾的一个业余项目。嗯,在座有谁用 OpenClaw、Hermes Agent,或者你自己顺手的哪款 claw 做过点东西?好,有一些人,不过大多数人对这块还比较陌生,挺好的。那,嗯,偏边缘设备、硬件这一类的呢?嗯,比如琢磨离线模式之类的东西。嗯,好,有人感兴趣。嗯,那有谁对图本身有经验?有一点图的经验……有几位搞图的。不错。那有谁在做,比如带记忆的 agent 之类的东西?好。哇,厉害,这是目前为止举手最多的一拨。我想把这个势头保持下去。待会儿讲到我们要得出的一些发现时,我们还会再多做几件跟某种统计沾点边的事。那么,嗯,今天这场演讲我要讲的,是我做的这个 agent 记忆项目,它用到了一点硬件,就是你们能看到挂在我胸前的这个。嗯,一路讲下去的过程中,我还会讲我是怎么顺带搭出一套 agent 记忆的软件的,以及整个过程是怎么走过来的。所以这是我到目前为止拿它做过的最「现场」的一次现场演示,因为我真的就是在你们面前一件一件把零件装起来。那我们来看看。我这儿有个麦克风,一个额外的小麦克风。
[2:05] Jeremy
Yes, I'm going to be using this to talk to my claw in a second. It's not It's not yet powered on. So, this is really crazy. And I've got this uh I've got like a capture a video capture from my HDMI, which is over here. I'm going to plug that in. Whoa. Somewhere. Plug that in. Okay. It's not on yet. I'm also going to This is the receiver for the USB for the mic. So, we hope this works too today. If I can see where it goes. There we go. Plug that in. Guess that's why they made USBC. You have to keep flipping the thing over. Okay. So, there that goes in. And now gonna try and sync these two mics. Okay, they're green. That's okay. So, I got a mic there. Now for some power. Good old good old battery power. All right. So, what I'm going to do really quick, just for fun before we get into the main presentation. I'm going to show you this trick. So, with this weird video capture situation I've got going on, I'm going to go over here to my QuickTime player, and I'm going to say that I want a I want something that it will not let me do right now. Let me quit QuickTime Player and let's reopen it. All right, here we go. And let's try and do a f a new movie recording. All right, we can see there we go. You see the claw? All right, we don't want to see that. We want to see what's on the claw. So, what I'm going to do instead is I'm going to use the source will be from my from the output of this video here. All right. So, let's power it up and I'll try my best. There we go.
对,我待会儿就要用它来跟我的 claw 说话。它还没……还没通电呢。所以这事儿真挺疯狂的。然后我还有这个,嗯,一个采集……从我 HDMI 接出来的视频采集,在这边。我把它插上。哇。插哪儿来着。插上。好。它还没开机。我还要……这个是麦克风的 USB 接收器。所以希望这个今天也能正常工作。让我看看它该插哪儿。好了。插上。难怪后来要做 USB-C,这东西你得不停地翻面才插得进去。好,这个插进去了。现在来试着把这两个麦克风同步一下。好,亮绿灯了。没问题。这样我这儿就有一个麦克风了。接下来是供电。老办法,老办法,电池供电。好了。那在进入正式演讲之前,我先很快地做一件事,纯粹图个好玩。我给你们看个小把戏。靠我现在弄的这套奇怪的视频采集方案,我到这边打开 QuickTime Player,然后我要选一个……我要的是一个它现在不让我弄的东西。我先把 QuickTime Player 退掉,再重新打开。好,来了。我们来试试新建一个……新建影片录制。好,我们能看到……出来了。看到那个 claw 了吗?好,我们不是要看这个。我们要看的是 claw 上面显示的东西。所以我要换个做法,把源改成我这个……这路视频的输出。好。那我们给它通电,我尽量。好了。
[3:57] Jeremy
To catch it during the boot sequence. All right. So, I'm going to go here to my I'm going to change to this USB3 capture device and I'm going to move this around a little bit so we can see it. And hopefully, I mean, I can't give you any guarantees, but hopefully what's going to happen is as this guy goes, we're going to see something actually happen. So, I'm going to give a little reset to that and back to that. Oh, and let me push power on this. Okay, there we go. All right. So, again, hopefully I see power is now flowing through into here. Okay. Oh, something's happening. Okay. And um this gives me high confidence because I've done this only like one million times as you can imagine, hacking on this silly thing. Okay. Raspberry Pi desktop. Oh, yeah. So, this is a Raspberry Pi 4B, not the latest model. Okay. So, um, but very serviceable, and I was running a 32-bit operating system for a long time until I realized it was 64-bit ARM capable. It's pretty cool. Um, you can't run everything on this thing, but you can run quite a bit. And, um, we're going to get into exactly what I did put on this to end up getting this presentation together. Okay, cool. All right. So, it's alive and I've got a little extra Bluetooth keyboard and that's how I can drive things on here.
争取在它开机启动的过程中抓到画面。好。我到这儿,我要切到这个 USB3 采集设备,再把这个挪一挪,好让大家看得到。但愿——我是说,我没法给你们打任何包票——但愿接下来会发生的是,这家伙跑起来的时候,我们真能看到点什么动静。所以我先把那个重置一下,再切回这个。噢,我来按一下这上面的电源。好,行了。好。还是那句话,但愿……我看到电现在已经通进来了。好。噢,有动静了。好。嗯,这让我很有信心,因为这事我也就做过大概一百万次吧,你们可以想象,天天折腾这个傻玩意儿。好。树莓派桌面。哦对了。这是一台树莓派 4B,不是最新款。好。所以,嗯,不过相当够用,而且我有很长一段时间跑的都是 32 位操作系统,后来才发现它其实支持 64 位 ARM。挺酷的。嗯,你没法在这东西上什么都跑,但能跑的也不少。嗯,我们接下来会细讲我到底往这上面装了什么,最后才凑出今天这场演讲。好,不错。好了。它活过来了,我还另外配了一个小的蓝牙键盘,我就是靠它来操作这上面的东西。
[5:26] Jeremy
And we will do that um in a second. But I mostly just kind of wanted to show you the setup so you could, you know, believe that it actually is a real thing. And uh there we go. All right. So, now I'm going to get into the presentation. We'll come here. There we go. I'll come back to this Pi here in just a second after I open up. There we go. And just to give you a a flavor, uh, this one has nano claw, but it also has Docker on here. And I'm running Neo Forj on on here. I've got a little Docker based Neo Forj database. Okay, now let's continue with the talk and we'll get back to the claw in a minute. So small claw. What did I I I said small claws are beautiful. What did I mean by that? Well, there was a lot of hype happening and still is about these personal agents, but I did not want one that was on my laptop. I'm sorry. I'm a little conservative. I come from the old kind of cisadmin devops space. I'm like, I want to wait for this stuff to be really solid before I do something like that. But I I also wanted to be cheap, open, hackable, right? And for me, I wanted to understand what was happening more than it being featurerich. That was more important to me. And so I went and I saw like lo I live in Portland, Oregon. I looked on Craigslist.
这个我们,嗯,一会儿就来弄。不过我主要就是想先给你们看一眼这套装置,这样你们就能,怎么说,相信它确实是个真东西。然后,嗯,好了。好。那现在我要进入演讲正题了。我们到这儿来。好了。等我打开之后,我马上再回到这台 Pi 上。好了。先给你们一个大概的感觉,嗯,这台上面装了 NanoClaw,但上面也有 Docker。而且我在这上面跑着 Neo4j,有一个基于 Docker 的小 Neo4j 数据库。好,现在我们接着讲,等一下再回到这个 claw 上。那么,小 claw。我刚才……我说小 claw 才是美的。这话是什么意思呢?是这样,当时这类个人 agent 被炒得很热,现在也还是,但我不想要一个装在我笔记本上的。不好意思,我这人有点保守。我是从老派的那种 sysadmin、DevOps 圈子出来的。我的想法是,我得等这东西真的很稳了,再去干那样的事。但我……我同时也想要它便宜、开放、可以随便折腾,对吧?而对我来说,比起功能丰富,我更想搞明白里面到底在发生什么。这一点对我更重要。于是我就去看了看,那个……我住在俄勒冈州的波特兰。我上 Craigslist 看了看。
[6:43] Jeremy
Somebody's selling a Mac Mini with OpenClaw pre-installed. I'm already like pre-installed. That's a red flag. And you know, Mac Mini could be cool, but um I know now it's not going to be 600 anymore with the recent price increases, right? So that's not a small claw as far as I'm concerned. So then I reached back and this is uh I did I think it's pandemic or at the end of the pandemic I did something where I was hacking with this very Raspberry Pi doing something like measuring the weight of the dishes in your sink to tell you you should wash the dishes. Anyway, you could check out the video there if you like that kind of nonsense. But that's this exact guy. And I saw I said I have this in the closet. Will it claw? I don't know. I should try it and see. And uh yeah, it claws real good. It was and um that that that little that it's not a sticker. It's like more like me, you know, photoshopping a a claw on there just like, you know, oh, maybe someday I could actually, you know, uh do something really cool with this. And uh but you see my old setup. I have this external monitor. I've got my external keyboard. There's a mouse off screen and everything. This guy, this is a game changer right here. I'm like so it's so sleek now. Uh, it's got onboard Wi-Fi, which is great, or you can plug into wired. So, hopefully I'm actually on the network. We'll have to check that in a second. Um, okay. And then addition, uh, I used nano claw. So, I didn't use open claw. I found this other project that more suited my tastes because it was like 15 source files and it was quite compact and small number of lines of code. It just used Docker containers to run the agent processes. So they couldn't run a mock on the system. I was like, okay, this is my kind of thing. So I said, I'm going for it. Uh, and so I like the other boxes that check for me.
有人在卖一台预装了 OpenClaw 的 Mac Mini。我当时就觉得,预装?这可是个危险信号。而且你知道,Mac Mini 可能挺酷的,但是嗯,我知道现在经过最近这轮涨价,它不会还是 600 了,对吧?所以在我看来,那就算不上小 claw 了。于是我往回翻了翻,这个是,嗯,我做过……我想是疫情期间,或者疫情快结束的时候,我做过一个东西,就是拿这同一台树莓派来折腾,干的事大概是称一称你水槽里碗碟的重量,然后告诉你该洗碗了。总之,你要是喜欢这类瞎胡闹的东西,可以去看看那边那个视频。不过那就是眼前这同一台。然后我看到……我心想,这东西我柜子里就有。它能 claw 吗?不知道。我该试试看。结果,嗯,没错,它 claw 得相当好。它是……然后嗯,那个,那个小小的……那不是贴纸。那更像是我,你知道,用 Photoshop 在上面 P 了一只 claw,就是那种,你知道,哦,也许哪天我真能,你知道,嗯,拿它做点特别酷的事。然后,嗯,不过你们看到我以前的那套配置了。我有这个外接显示器,有外接键盘,画面外还有个鼠标什么的。这家伙,这个才是真正改变局面的东西。我就觉得……它现在太利落了。嗯,它自带板载 Wi-Fi,这很棒,或者你也可以插网线。所以但愿我现在真的连在网上。这个我们过会儿得确认一下。嗯,好。然后另外,嗯,我用的是 NanoClaw。所以我没用 OpenClaw。我找到了另外这个项目,它更对我的口味,因为它大概就 15 个源文件,相当紧凑,代码行数也很少。它就是用 Docker 容器来跑 agent 进程。这样它们就没法在系统里横冲直撞。我心想,行,这正是我喜欢的那种东西。所以我说,那我就上了。嗯,所以它还替我勾上了另外几个条件。
[8:31] Jeremy
I could run Linux on here. It's got a Docker. I understand. Uh, it was based on cloud agent SDK, nano clause, and I could and they actually encourage you modify it. Use cloud code. We got skills in there. Hack on it. Make it work for you. And it use messaging like, you know, Telegram if you want. But I was like, well, I had WhatsApp on my phone, so I'll just use WhatsApp. Perfect. So, the initial architecture was something like this to go from my iPhone uh or my MacBook WhatsApp, you know, and then go through and talk to NanoClaw on this Raspberry Pi. That's it. And you just had to get like a credential. You go on the NanoClon, you get it to register. So, now you know WhatsApp's in the cloud. And this thing can pull messages down from it. And of course, you know, on board, I said we're using Claude stuff in the background. So you got all the power. There's no inference, no LLM inference happening on this thing. I am using the CL the cloud for all that. So I've got a big brain though it's over over a wire to the cloud, right? But then uh I said well what can I do with this? You know uh I I've got also in the claw in the cloud I also have Neo forj. I've got Neo Forj database up there. And for the folks here that have never done graph before this is your graph 101.
我能在这上面跑 Linux。它上面有 Docker,这个我懂。嗯,NanoClaw 是基于 Claude Agent SDK 的,而且我可以……他们其实还鼓励你去改它。用 Claude Code。里面带了 skill。随便折腾,把它改成适合你自己的样子。它用的是消息应用,比如,你知道,愿意的话可以用 Telegram。但我想的是,嗯,我手机上有 WhatsApp,那我就用 WhatsApp 好了。完美。所以最初的架构大概是这样:从我的 iPhone,嗯,或者我 MacBook 上的 WhatsApp 出发,你知道,然后一路过去,跟这台树莓派上的 NanoClaw 对话。就这些。你只需要拿到一个类似凭证的东西。你到 NanoClaw 上,让它完成注册。这样,你知道,WhatsApp 是在云端的,而这东西可以从上面把消息拉下来。当然了,你知道,在这台设备上,我说过我们后台用的是 Claude 那一套。所以该有的能力你全都有。这东西上面没有推理,没有任何 LLM 推理在跑。那些我全都是用云……用云端来做的。所以我有一个很强的大脑,虽然它是隔着一根线、在云端那头的,对吧?不过接着,嗯,我就想,那我能拿这个干点什么呢?你知道,嗯,我……我在 claw……在云端还有 Neo4j。我在上面有一个 Neo4j 数据库。对于在座从来没碰过图的朋友,这就是你们的图入门第一课。
[9:45] Jeremy
There is a small graph and this is a graph. Can you see which ones are the nodes, right? The round ones. And you see the relationships, the edges between them. So, there's two person nodes and a movie node. And Tom Hanks, the person acted in Horus Gump and Robert Zmechus directed it. Pretty easy. That's it. Now, you know, graphs. So, I asked in a WhatsApp message once I had this database full of movies and I had my claw connected. I'm like, "Hey, tell me what movies Tom Hanks acted in." and it went through there with an MCP server connecting into my Neoforj instance with the movie database in there, right? And then it responded back to me. It's like, "Oh, well, first your stuff's not set up right. It's broken." I'm like, "Oh, okay. Let me fix it." So, I got on the claw, made sure O was working, and then I got a bunch of results back on the right there. And those all came right out of pulling data from the database, feeding it back up through the cloud agent SDK, forming a response, and sending it back through the WhatsApp channel. Got it? So then I was like, well, what else could I do with this? And I'm on the airplane, and I found that even without paying for Wi-Fi, I could use the messaging stuff and WhatsApp was working. I was like, oh my god, I could talk to Claw right now. So I was like, hey, could I do memory? And I said, well, I'm not exactly sure what I want, but I was reading blog posts about this thing called poll plus O. So, this is a way of doing memory where you just think of like person, object, location, event, uh, uh, an organization, right? And it's this actually came from the European policing and you know those folks have been drawing graphs for a long time and every every one of your favorite cop shows that does a string diagram, right? And so then I just was on the plane. I'm like, hey, could we build a memory system using pole plus o? And then it's like, "Yeah, sure. Yeah, we can do it.
这儿有一张小小的图——这就是一张图。看得出哪些是节点吧?圆的那些。然后你能看到它们之间的关系,也就是连着它们的边。所以这里有两个 person(人)节点、一个 movie(电影)节点。Tom Hanks 这个人出演了《阿甘正传》(Forrest Gump),Robert Zemeckis 执导了它。挺简单的,就这些。好了,现在你懂图了。后来,等我有了这个装满电影的数据库、我的 claw 也连上了,我就在 WhatsApp 上发了条消息问它:「嘿,告诉我 Tom Hanks 演过哪些电影。」它就顺着那条链路走下去,通过一个 MCP server 连进我的 Neo4j 实例,电影数据库就在那里面,对吧?然后它回我了,说:「呃,首先,你这套东西没配对,是坏的。」我说:「哦,行,我来修。」于是我登上那台 claw,确认认证(auth)是通的,然后就拿回了一堆结果,就是右边那些。这些全都是这么来的:从数据库里把数据拉出来,往上送回 Claude Agent SDK,组织成一段回复,再通过 WhatsApp 这个渠道发回来。明白了吧?接着我就想,那我还能拿它干点别的什么?当时我在飞机上,我发现就算不花钱买 Wi-Fi,消息类的功能也能用,WhatsApp 是通的。我心想,天哪,我现在就能跟 Claw 聊天。于是我就问:嘿,我能做记忆吗?我说,嗯,我也不太确定自己到底想要什么,不过我正在读一些博客文章,讲的是一个叫 POLE+O 的东西。这是一种做记忆的方式,你就按人(person)、物(object)、地点(location)、事件(event),呃,呃,再加一个组织(organization)这几类去想,对吧?而且它——这东西其实出自欧洲的警务系统,你知道,那帮人画图已经画了很久了,你爱看的那些警匪剧,哪一部没有那种用线把线索串起来的线索板,对吧?所以我当时就在飞机上,我说:嘿,我们能不能用 POLE+O 搭一套记忆系统?然后它说:「可以啊,当然。行,我们能做。」
[11:35] Jeremy
I'm your right of skill for that right now. I've got this mount point. It'll persist even when you reboot me. No problem." I was like, "This is amazing." And so now I have this thing where I've got Neo4j in the cloud. I've got this new memory database with this super advanced schema memories and related things very early, you know, before Carpathy's, you know, wiks and be after Obsidian, but you know, you get the idea. It's it's that kind of thing. And this is what ends up being in Neo forj memory nodes that show like places I was going and as I went to do little Devril events I was having this thing record it for me and all that. So then we can like actually jump in and look at this database. So I'm going to go over here to um to the web browser which I'm already in but I'm going to go over to this other tab and over here I've got Neo forj Aura and I've got this demo instance. I'm going to connect to it in query. And this is where I've been storing all this information kind of over time. And so I'm going to jump in and show you the memory nodes. I got a bunch of stuff. It's kind of a dumping ground in here, I admit. And um here's all the here's the memories. So he these are those original memory types that I had in here. And I actually want to show you the memories. I want to show you all the memories uh as they're connected to other things. And I'm going to run that.
「我现在就给它写个 skill。我有这个挂载点,就算你把我重启了,它也还在。没问题。」我当时就觉得:「这也太棒了。」所以现在我手上是这么一套东西:云端有 Neo4j,还有这个新的记忆数据库,带着一套超高级的 schema——记忆以及相关的那些东西。那会儿还很早,你知道,在 Karpathy 的那些,你知道,wiki 之前,可能在 Obsidian 之后吧,不过,你懂我意思。就是——就是那一类东西。最后落进 Neo4j 里的就是这样:一个个记忆节点,记着比如我去过哪些地方;我去跑一些小型 DevRel 活动的时候,就让这东西帮我记下来,诸如此类。那我们其实可以直接进去看看这个数据库。我要切到这边,呃,切到浏览器——其实我已经在浏览器里了,不过我要切到另外这个标签页。这边是 Neo4j Aura,我有这么一个演示实例。我在 Query 里连上它。这段时间以来,我就是把这些信息一点点存在这儿的。那我进去给你们看看记忆节点。东西一大堆。我承认,这里面有点像个杂物堆。然后,呃,这是所有的——这就是那些记忆。这些就是我最初放在这里面的那几种记忆类型。其实我想给你们看的是记忆本身。我想给你们看所有的记忆,呃,连同它们跟其他东西的连接。我来跑一下这条。
[12:56] Jeremy
So you can see more like the connected graph. And as I zoom in on this thing, you can see there's like me going to there's, you know, talking to a person going to the snowflake office in Menllo Park. Menlo Park is itself a location in that framework and then I was at a certain AI meetup event, right? So it follows and there's people in here like Rebecca, like Jeremy, there's different people, right? So this is one way of doing it. So then going back over here, we see that we can definitely store memories. Well, what else? I was thinking can I fit on this physical claw and somebody was doing like they had a microphone out their window and they were recording all the bird song in the backyard and they could there was a bird net model that that could tell you that. And I was like, "Oh, whoa. I want to do that." And then I was like, "Oh, wait. Or maybe I could do voice to text. Is that possible?" So then I was like, "Sure enough, let me hook up a USB microphone, right, and do something like that." And then do some voice to text and and do something like that. So, um, and just to get ahead of it, just for fun, I'm going to go ahead and try and use Oh, that's funny. Oh, there it is. The button fell off. So, I I made this button and it's connected into into some pins. This is me getting ahead a little bit, but just in the interest of time, I'm going to go ahead and plug this back in. And what this allows me to do is trigger that model and I'm going to do some quick recording. I'm saying I am actually on stage at AI Engineer World delivering the talk I've been preparing for, right?
这样你们看到的就更像一张连起来的图了。我把这东西放大,你们能看到,比如有我去了——有,你知道,跟某个人聊天、去了 Snowflake 在 Menlo Park 的办公室。在那套框架里,Menlo Park 本身就是一个地点(location),然后我又参加了某一场 AI meetup 活动(event),对吧?就这么一路连下去。这里面还有人,比如 Rebecca,比如 Jeremy,有各种不同的人,对吧?所以这是其中一种做法。那回到这边,我们看到,存记忆肯定是没问题的。那还有什么呢?我在想,这台实体的 claw 上我还能再塞点什么。有人在搞这么个东西:他们把麦克风伸到窗外,把后院里所有的鸟叫声都录下来,然后他们可以——有个 BirdNET 模型能告诉你那是什么鸟。我当时就说:「哇,我也想搞这个。」然后我又想:「哦,等等,或者我可以做语音转文字?这行得通吗?」于是我就想:「还真行,那我接一个 USB 麦克风,对吧,搞点这样的东西。」然后做点语音转文字,诸如此类。那,呃,我先抢跑一步,纯粹图个好玩,我来试着用一下——哦,有意思。哦,在这儿。按钮掉了。是这样,我——我做了这么个按钮,它接在——接在几个针脚上。这有点讲超前了,不过为了省时间,我直接把它插回去。它的作用是让我能触发那个模型,我来快速录一段。我说的是:我现在真的站在 AI Engineer World 的台上,讲着我一直在准备的这场演讲,对吧?
[14:33] Jeremy
And so I you see the little lights went on. So it did some recording. Hopefully we'll be able to look and see if we actually if I'm actually online, if we got a message and so forth. But this is the dream, right? And I started doing it with all sorts of microphones, playing around with it. And then I was like, "Oh, I want to bring this to AI engineer and I want to like walk around, right? And with these recording little LEDs on it, and I want to like record something. I don't know what I want what I want to record." And I was like, I know what I'll do. I'll go booth to booth and I'll record what messaging people have up at their booths. And then I was like, let me build this thing. And then I actually started working on, you know, adding in that kind of capability for recording. And then I was like, okay, well, the booths, they got numbers and names. Okay, I had to map this out. So I was like, I'm just going to like create a very simple data model. It's just exhibitors and they're not even connected. They're just there in the database. So I tried to get as many as I could and there was some data cleaning to do. And now then then uh I was worried. I was like, "Oh god, conference Wi-Fi is terrible typically." So I need like an offline mode. So then I had this other thing. I put Neo forj running on here and then I was like, well I I could have this thing so if I'm offline it'll use some reaxes and stuff and parse out of the audio voice to text the booth number and maybe it can write a query to insert it in this local database. And you know again if this if this thing is uh if this thing is up which I at this point I'm not even I'm not even sure.
然后我——你们看到小灯亮了,所以它确实录了一段。但愿待会儿我们能看一眼,看看我们是不是真的——我是不是真的在线、有没有收到消息之类的。不过这就是我梦想中的样子,对吧?我开始拿各种各样的麦克风来试,随便折腾。然后我就想:「哦,我要把这东西带到 AI Engineer 来,我要,比如,到处走走,对吧?上面带着这些录音时会亮的小 LED,我想,比如,录点什么。可我不知道我想——我想录什么。」然后我想,我知道该干嘛了:我一个展位一个展位地走过去,把大家在自己展位上挂出来的宣传语录下来。接着我就想,那我把这东西做出来吧。然后我就真的开始动手,你知道,把这种录音的能力加进去。然后我又想,好吧,这些展位,它们都有编号和名字。行,那我得把这些对应清楚。所以我想,我就,比如,建一个非常简单的数据模型:里面只有参展商,它们之间甚至都没连起来,就那么放在数据库里。于是我尽量多收了一些,还有些数据清洗的活儿要干。然后,然后,呃,我开始担心了。我想:「天哪,会场的 Wi-Fi 通常都烂得要命。」所以我需要一个类似离线模式的东西。于是我又弄了另一样东西:我在这上面跑了个 Neo4j。然后我想,嗯,我——我可以让这东西这么干:如果我离线了,它就用一些 regex 之类的手段,从音频转出来的文字里把展位号解析出来,然后也许它能写一条查询,把它插进这个本地数据库。然后,你知道,还是那句话,前提是这——这东西,呃,这东西还开着——到了这会儿,我其实连——连这点都不敢确定了。
[16:03] Jeremy
Um, we're going to try cipher. Uh, my cipher shell browser. Oh, I should spell right. Let's go. Cipher. Shell browser. So, this is like a little program I wrote to talk to Neoforj databases without a very expensive guey and things like that. And I should be able to match all my exhibitors and return those. So, this is talking to the database that's running in here around my neck. And as I go in here and I look, I could say, "Oh, yeah, there's Microsoft, Minmax, CI, right?" And so this is me and I had on these like my raw notes. It's like, "Oh, this is like the raw notes that I took. I'm at this booth and blah blah blah." Right? So I and I took that data and then I uploaded it later up into Neo4j in the cloud. And in the cloud, um, it looks a little bit different because I've now enriched it. And so if we look at this, let's see if I can just move back into Neo forj for a second. And here I'm going to look for exhibitors, right? And here are my exhibitors. And the exhibitors, I can click on one. And you can see they're actually connected to something else. So I did load all their data in. So here's, you know, got the notes all cleaned up now on them. But you'll notice that these other things are connected to. And the things that they're connected to is I'm going to put in here they're connected to all sorts of other things. And I'm going to put a path through them and return the path. And we end up with something like this. This shows how they're all connected to some other theme nodes. So at some point I figured out, oh look, there's some themes that exist here.
呃,我们来试试 Cypher。呃,我的 Cypher shell browser。哦,我得把字拼对。来吧。Cypher。Shell browser。这是我写的一个小程序,用来跟 Neo4j 数据库对话,不需要那种很贵的 GUI 之类的东西。我应该可以 match 出我所有的参展商,然后把它们 return 回来。所以这是在跟挂在我脖子上、跑在这里面的那个数据库对话。我进来看一眼,就可以说:「哦对,这儿有 Microsoft、Minmax、CI,对吧?」这就是我——我在这些上面记着,比如我的原始笔记。就像:「哦,这就是我当时记的原始笔记。我在这个展位,如此这般。」对吧?所以我——我拿了这些数据,后来把它上传到了云端的 Neo4j 里。在云端,呃,它看起来有点不一样,因为我现在已经把它丰富过了。那如果我们看看这个——我看看能不能先切回 Neo4j 一下。在这儿我要找参展商,对吧?这就是我的参展商。这些参展商,我可以点开一个。你们能看到,它们其实还连着别的东西。所以我确实把它们的数据都加载进来了。这儿,你知道,它们身上的笔记现在都整理干净了。不过你们会注意到,还有别的东西也连在上面。至于它们连着的是什么——我在这儿写一下——它们连着各种各样别的东西。我给它们加一条 path,然后 return 这条 path。最后我们得到的就是这样的东西。这显示出它们是怎么全都连到另外一些主题节点上的。所以在某个时刻我发现,哦你看,这里面存在着一些主题。
[17:52] Jeremy
Evaluation and observability. Build kite has that theme. Lang chain has that theme, right? So I I was like, okay, I've got I've actually generated some knowledge that was maybe novel that maybe nobody has any, right? So are there themes? Yes, there are themes. So these this is the data dump that I collected by walking around the booth and figuring out what the themes were. So there's a whole bunch out there. And um I know I'm just about at my time. The thing uh I will point out for folks that are interested uh in talking more, I did subsequently upgrade the agent memory that I have using the agent memory service. Basically, I wanted to load all of the WhatsApp messages that I ever had in all and it's been a while I've been talking to it as you see. I wanted to upload all of those in there and see if I could get some kind of insights out of those. And sure enough, I use this Neo Forj agent memory service. And if you log into this sort of thing, at some point I just connected it up and that allowed me to get a whole bunch of memories from the conversations and then it distilled them out. And you can see here that uh I've got all these different things, these conversations that I've had and so forth. And this will allow me to browse those memories and um for example, all the people I've spoken to or the locations, the concepts, whatever. So this these are all the things that I've been doing talking about with my claw and they're all distilled out into memories that are now accessible via an MCPU server from this very claw. So anyway, that gives you some flavor of how this stuff works.
评测与可观测性(evaluation and observability)。Buildkite 有这个主题,LangChain 也有这个主题,对吧?所以我——我就想,好,我有了——我其实生成了一些知识,可能还挺新的,可能谁手上都没有,对吧?那么有没有主题?有,是有主题的。所以这些——这就是我逛了一圈展位、再把主题理出来之后,收集到的那一大堆数据。这样的还有一大堆。然后,呃,我知道我的时间差不多到了。有一点,呃,我想跟有兴趣,呃,多聊聊的朋友提一下:我后来确实用 Agent Memory 服务,把我手上的 agent 记忆升级了。基本上,我是想把我有过的所有 WhatsApp 消息全都加载进去——你们也看到了,我跟它聊了有一阵子了。我想把这些全都传上去,看看能不能从里面得到点什么洞察。还真行,我用的就是这个 Neo4j Agent Memory 服务。如果你登录进这类东西——我是在某个时候直接把它接上了,这让我从那些对话里拿到了一大堆记忆,然后它把这些记忆提炼了出来。你们在这儿可以看到,呃,我有这么多不同的东西,我有过的这些对话等等。这让我可以浏览这些记忆,呃,比如所有我聊过的人,或者地点、概念,随便什么。所以这——这些就是我一直在跟我的 claw 做的、聊的所有事情,它们全都被提炼成了记忆,现在通过一个 MCP server,就能从这台 claw 上访问到。总之,这能让你们大致感受一下这套东西是怎么运作的。
[19:33] Jeremy
Please come see us at booth P3 over there. I can tell you a lot more. If you're just getting started with graph, you can go to Graph Academy, which is this link right there, and we've got all these hands-on courses. It's all totally free to use. So, please either uh visit us there or even better at the booth. Thank you so much. [music]
欢迎到那边的 P3 展位来找我们,我可以跟你们讲更多。如果你刚开始接触图,可以去 GraphAcademy,就是那边那个链接,我们有一大堆动手实操的课程,全部完全免费。所以,呃,要么去那儿看看,更好的是直接来展位找我们。非常感谢。(音乐)