一直在研究怎么让LLM学会与屏幕交互,但不是很成功。
首先,怎么让模型点击屏幕呢?在早期ChatMika中,我直接让模型返回点击坐标。
显然效果很差。毕竟就算是人类,也无法准确说出图片中某个物体的坐标。
最近我做了一个简单的辅助类,可以显著增加Gemini-1.5-flash点击屏幕的准确率。
于是,Mika可以玩一些静止的游戏了,例如国际象棋。
还可以让她打开浏览器,在地址栏输入Google的网址,搜索感兴趣的内容,滑动滚轮翻页等。
实现这些仅涉及提示词工程。Gemini API提供了OpenAPI Schema来限制模型的返回格式。
但是,我很快意识到了一个问题,即LLM模型没有增量学习的能力。
例如,Mika看着“卷心菜投手”说它是“倭瓜”,我纠正Mika:“这是卷心菜投手”。
在本次聊天记录上下文中,她或许能够记得这株植物。但是一旦没有了聊天记录,她还是会认错。
因此,LLM永远无法学会玩PVZ,因为它连植物都认不全,除非,我每次将全部历史聊天记录发给LLM(显然,这是效率很低且极不稳定的做法)。
那么,能否通过一些外部模块,让LLM“看起来”具备一些视觉学习能力呢?
算法概述
我的设想是利用一个预训练的ViT(视觉Transformer)模型来处理输入图像,并从中提取特征向量。这些特征向量需要被映射到一个固定维度的特征空间,以便进行相似度比较。
同时,我们会维护一个“记忆库”,用于存储多个特征向量及其对应的标签。其中,一部分特征向量被称为“原型向量”(Proto Vecs),每个原型向量代表某一类实体的典型特征。
补充
该算法主要依赖于ViT模型提取图像深层特征的能力。
ViT模型可以被替换为CLIP模型,具体哪个模型更好需要通过实际测试来确定。
几分钟后:我刚刚在想什么来着,还是去打Galgame吧。