我在开发“竹子记账”时犯了一个愚蠢的错误

# 一、问题发现过程

我之前记账的时候,发现Ai有“谎报记账成功”的情况发现,我加了兜底策略:就是在记账后,拿着记账成功的账单id去查询有没有记账成功,没有的话重新记一次。

今天让ai创建一个记账分类,它回复我创建成功了,事实是数据库中没有新创建的“外卖”分类。

图片

在我多次确认后,才创建成功。

# 二、问题出现的原因

我让Ai走了一遍创建记账分类的流程,给我发的报告如下:

图片

这个报告分析的没错,在多轮消息链中,返回给大模型的数据全部是纯文本(比如前面有消息是“***创建成功”),这种文本会导致大模型出现大量的幻觉问题。

Ai给我的方案是,和前面一样,使用多层验证的兜底策略,这肯定是不行的。

图片

一来会增加Token消耗,二来还会增加用户在前端等待的时间。

我也是犯了一个愚蠢的错误,出现这个问题的原因是,在多轮对话中,如果没有把工具链传回给大模型,大模型只是从文本判断,就会“以为”某个操作成功了,但其实后续就没有调用工具了。

# 三、解决方案

我在开发“林羽凡笔记”项目的时候,就已经加入了工具链的调用,没有出现过太离谱的幻觉问题。

下图是林羽凡笔记项目中的工具链数据:

图片

知道问题出现的原因就好办多了。

重新在数据表中加入工具链的表字段,其实是可以不用加到数据表中的,直接使用Redis也可以,把每一轮的对话的工具链存入Redis。

在下次启用对话的时候,从Redis中拿数据也可以,但就怕时间久了Redis的数据因为人为清理或自动过期,我就放数据表中了。

这样的话在同一个对话中,用户即便过了1个月也可以持续对话。

# 四、后续

这个功能是后端更新的功能,鸿蒙端不需要更新就自动生效了。

功能开发完后,我巡查了一些Ai对话,发现有不少用户已经“感觉到”数据没记录成功的问题了,有机智的用户让Ai重新整理数据进行记录,这个没错,重新整理后数据就全部记录到位了。

对于数据出现错误的用户,可以单独联系我,直接补偿500积分用于后续使用。

# 五、关于端侧大模型

今天在后台突然看到一条用户的真实反馈,为什么是真实反馈呢?

因为之前的一些反馈都是我测试的,还有华为应用市场审核的一些测试数据。

图片

这位用户提到3条建议:

1、闪控球由单击修改为双击,避免误触。

2、图片识别记账修改为本地端侧大模型。

3、闪控球的图标太大。

问题1和问题2都解决了,同时在应用中增加了反馈后的管理员回复消息显示功能。

:::img-row

图片

图片

:::

问题2的实现也比较简单,比较高版本的华为电脑(手机)都有端侧大模型了,可以调用相关的接口。

不过手机的端侧大模型不给个人调用,我使用 Vision Kit 完成了这项需求。