哎李博,你最近是不是还在用Simon Willison那个llm命令行工具?
对啊,天天用,怎么了?
他刚发了个0.32a1,你升级了没?我看到那个bug描述笑死我了。
哈哈你说那个对话恢复的bug吧?我还真踩到了。
真的假的?给我讲讲什么体验。
就是你让AI调了一堆工具,搜索啊、算东西啊,干了一堆活对吧。然后你关掉终端,下次再打开那个对话——AI完全不记得自己干过什么。
等会儿,这不就相当于你的助理每天下班就失忆吗?
对!就是这个比喻。活干得很利索,但第二天来上班跟你说'我是谁我在哪'。
哈哈哈哈太形象了。那这个bug具体是怎么回事?是存储的问题还是读取的问题?
其实是序列化和反序列化的问题。你知道llm会把所有对话存到本地SQLite数据库里对吧?
嗯嗯,这个我知道,这也是我喜欢这个工具的原因之一,聊天记录全在本地。
对,但问题出在tool-calling这个新功能上。工具调用的上下文信息——比如调了什么工具、传了什么参数、返回了什么结果——这些东西序列化存进去之后,再从数据库里拿出来的时候,没法正确还原成可用的对话对象。
哦我懂了,就是存的时候没问题,但读出来的时候格式对不上了。
差不多这个意思。reinflate的过程出了问题。
诶等等,我想从产品角度问一下——tool-calling这个功能到底有多重要?你给不太了解的听众解释一下?
我跟你说,这个是当下做AI Agent的基础能力。就是模型在对话过程中,不光是跟你聊天,它可以主动调用外部工具。
比如你问它今天天气怎样,它不是瞎编一个答案,而是真的去调天气API,拿到真实数据再回答你。搜索引擎、计算器、各种API都能接。
这个我在工作里天天接触,我们产品线也在做类似的事。但llm这个工具厉害的地方是在命令行里就能玩这套?
对,而且OpenAI、Claude、本地模型全支持。Simon Willison做这个工具的哲学就是——你在终端里就能搞定一切。
好吧,你们程序员的终端情结我永远理解不了。
得了吧,你们产品经理不也天天活在Figma里嘛。
哈哈行行行。那我有个问题——这是个alpha版本对吧,版本号带个a1。为什么要这么早就放出来让人用?
这就是开源开发的哲学了。Alpha的潜台词基本就是——我知道可能有坑,但我先让你们踩踩看。
你看从0.32a0到a1,一个issue一个修复,发现问题、提issue、修复、发版,整个过程完全透明。与其说是修bug,不如说是在正式发布前把该踩的坑都踩完。
这个思路其实挺像我们做产品灰度测试的——先放一小波用户出去,看看会不会炸。
本质上是一回事。只不过开源社区更极端,直接在公众面前摔倒,然后优雅地爬起来。
优雅地摔倒,哈哈这个说法好。
但你想啊,Simon Willison是Django的联合创始人,人家做了多少年开源了。这种快速迭代的节奏对他来说就是日常。
嗯,说到这我突然想到一个事——如果对话恢复有bug,那之前用0.32a0存的那些带工具调用的对话,升级之后能恢复吗?
好问题。理论上数据都在SQLite里没丢,只是之前读不出来。修复之后应该就能正常恢复了。
那还好,数据没丢就行。最怕的是数据本身就存错了。
对,这个bug的性质还算温和。不是数据损坏,是解析逻辑有问题。
所以如果有人在用llm的tool-calling功能,现在就该升级对吧?
必须的。pip install llm --pre 就行,加个pre flag装预发布版本。
行,那今天就聊到这。一句话总结——数据库能记住一切,除了它忘记的那些。所以我们需要alpha测试。
哈哈说得好。当你的AI连自己说过的话都记不住时,好在有人愿意快速把它修好。