不务正业地蹭个热点。
笔者目前在维护Unity脚本库PuerTS。许多同学都知道,维护开源库有一个十分常见的痛苦:你的使用者压根不看你辛苦写的文档。
不只是开源库,哪怕像小程序这样的闭源库、或是更加接近用户的一些产品,也都会出现这样的困扰 —— 对于一个确切的疑问,直接提问无疑比在文档里漫无目的的搜寻更符合人的直觉。
ChatGPT出来之后,普洱TS社区马上也有人尝试去ChatGPT上问普洱相关的问题,然而得到的都是这样的答案:
答案显然是错的,普洱TS明明是在Unity和Unreal里执行Javascript的环境!
出现这个原因是因为ChatGPT内部的数据,仅截止2021(无论是gpt-3.5 API或是浏览器ChatGPT都是
当然,它内部的数据里没有,就有人想到了给他喂数据。给ChatGPT相关提示之后,他就能得出正确的结论:
但是,喂数据的方式,也并没有那么好用。首先你的技术/产品文档会有很多页很多字,你不可能在浏览器端完成这个工作。如果用API的话,OpenAI的API是按token数(约等于字数)来收费的,如果用户每次问问题,都将整个文档给它的话,你的成本将会非常惊人。
更何况,GPT3.5是限制一次只能给4096token的(GPT4可以到32K,但是GPT4要贵几十倍,你的成本更加惊人)
解决ChatGPT数据来源问题的思路
为了解决GPT的这两个问题:
-
内部数据源旧
-
外部输入数据长度受限、且与成本正相关
openai官方cookbook其实有提供思路。思路比较长,笔者直接总结:用搜索引擎的思路将相关资料汇总、裁剪后,喂给GPT。
这就是new Bing所做的事,这也是为什么new Bing看起来会比GPT3.5棒。对于搜索引擎能搜索到的内容,他的回答就准确了很多,并且会把出处告诉你。
但是,如果SEO做的差些,页面藏得深一些,甚至比如说你的文档不是外网可见的,就不能用这个办法了。
而且new Bing的脾气大的不行。
llama_Index
(这段是new Bing写的)llama_index库是一个项目,它提供了一个中心接口,可以将您的语言模型(LLM)与外部数据连接起来[2]。它提供了一组数据结构,可以为各种LLM任务索引大量数据,并消除了关于提示大小限制和数据摄入的问题[1]。它还支持与LangChain和LlamaHub等其他工具或库的集成[2] [3] [4]。
有了llama_index之后,我们就可以将自己的文档库通过llama_index生成一份index文件。当用户提问时,llama_index通过的index文件能索引到相关的资料,将他们一起喂给GPT。这样,最终能得到更精确的答案。llama_index的使用也非常简单,只要你有一台可以访问GPT3.5 API的机器,有OPENAPI_KEY,分分钟就能搞定:
# make_index.py 生成index文件
import os
os.environ["OPENAI_API_KEY"] = ''
from llama_index import GPTSimpleVectorIndex, SimpleDirectoryReader
# doc是你文档所存放的位置,recursive代表递归获取里面所有文档
documents = SimpleDirectoryReader(input_dir='doc',recursive=True).load_data();
index = GPTSimpleVectorIndex(documents);
index.save_to_disk('index.json');
# query_index.py 从index文件里获得相关资料并向GPT提问
import os
import sys
os.environ["OPENAI_API_KEY"] = ''
from llama_index import GPTSimpleVectorIndex
index = GPTSimpleVectorIndex.load_from_disk(os.path.dirname(__file__) + 'https://b2.7b2.com/index.json')
print(index.query('你有什么问题'))
效果展示
笔者做了个discord机器人来测试。对puerts有了解的朋友可以直接上普洱的discord用/gpt 指令来询问。
对比一下上面我问new Bing关于扩展函数的问题的效果,显然好了太多。当然没有提供参考链接稍微有点麻烦。
上面这个问题在普洱里的文档在 https://puerts.github.io/docs/puerts/unity/wrapper/extension 。可以看到GPT3.5对md的处理似乎还不够好。
另外,如果文档里本来就比较长篇大论,没有给到重点,llama_index+GPT3.5的效果就略显一般:
上述完全是错的,原文在: https://puerts.github.io/docs/puerts/unity/other/debugging
当然,我可以通过人为的手段修改我的文档,将它改得对GPT更友好一些。总之用来解决大部分不看文档的人是没问题了。
上面这是一个语料比较好的问题,它就答得不错。
结论
- 如果要让GPT作为检索型应用,像llama_index这样的辅助数据索引库会非常有用。有了它的帮助,做开源库、闭源库、其他带文档的产品的朋友,可以轻松减少用户的教育成本。
- 虽然目前不确定GPT-4效果。但从成本方向考虑,以后的文字内容,也许会像搜索引擎时代有SEO一样,要考虑AIO。即写文字的时候要考虑AI能否总结出正确的内容。