【CSDN编者按】
在过去的六个月里,我们发布了一些针对大规模语言模型的重要功能,但是我在Hacker News 上读到的有关大规模语言模型的内容与我实际遇到的非常不同,所以我想分享一些。处理后我学到的教训。大约5 亿个标签。
原文链接:https://kenkantzer.com/lessons-after-a-half-billion-gpt-tokens/
未经许可请勿转载!
作者| 肯·坎泽
编辑| 夏萌
译者|
新月
制作| CSDN(ID:CSDNnews)
首先,一些背景知识。
我正在使用OpenAI 模型。
使用率为
GPT-4:
85%,GPT-3.5:
15%。
由于我们只处理文本,
gpt-4-视觉,索拉,
耳语
ETC
我们的用例是
专注于B2B,总结/分析/提取。
5 亿个代币并不像人们想象的那么大,大约相当于75 万页文本。
第1 课:提示越少越好。
常识告诉我,我不需要在提示中枚举确切的列表,而且无需太多解释我得到的结果会更好。 GPT并不傻。过于具体可能会导致混乱。
这与编写代码有根本的不同,编写代码时一切都需要清晰。
下面的例子说明了这个问题。
我们管道的一部分是要求GPT 读取一段文本并将其分类为美国50 个州或联邦政府。任务本身并不困难,我可以使用字符串或正则表达式,但有很多非常具体的情况,所以花费了更多时间。所以我们的第一次尝试是这样的:
这是一个文本块。其中一个字段是“locality_id”,它应该是使用此列表: 的50 个州之一或联邦ID。
[{\\\’locality: \\\’阿拉巴马州\\\’, \\\’locality_id\\\’: 1}, {\\\’locality: \\\’阿拉斯加\\\’, \\\’locality_id\\\’: 2} . ]
以下为正文。其中一个字段必须是“locality_id”。这必须是使用下面列表的50 个州或联邦ID 之一。
[{\\\’locality: \\\’阿拉巴马州\\\’, \\\’locality_id\\\’: 1}, {\\\’locality: \\\’阿拉斯加\\\’, \\\’locality_id\\\’: 2} . ]
虽然此技巧有时有效(我们估计概率超过98%),但它经常失败,因此您需要更深入地研究。
在我的研究过程中,我注意到另一个字段“名称”总是返回州的全名,这是正确的州名称,但对此没有明确的要求。
因此,我使用名称进行了简单的字符串搜索,效果很好。
总的来说,我认为更好的做法是对GPT 说:“既然你熟悉50 个州,请告诉我与政府相关的法定名称或联邦名称。”
这很令人惊讶,不是吗?提示越模糊,GPT 的质量越好,泛化能力越强,代表更高层次的授权和思考。
第2 课:你不需要Langchain。您可能不需要OpenAI 在过去一年中发布的任何内容。您所需要的只是一个聊天API。
Lang 链是过早抽象的完美例子。起初我认为我应该使用这个,因为互联网上是这么说的。然而,在花费了数百万代币之后,我们的生产环境中大约有3-4 个不同的大型语言模型函数,而我们的openai_service 文件中仍然只有一个40 行的函数。
我们唯一使用的东西
API 是聊天。
提取json。
没有JSON 模式,没有函数调用,也不需要助手(尽管我们都有助手)。
它也不使用系统提示符(也许应该.)。
一旦gpt-4-turbo 发布,您只需更新代码库中的一个字符串。
这就是强大的通用模型的优势。
少即是多。
上面的函数大约包含
40行代码。其中大部分处理OpenAI API 中常见的500 个错误/套接字关闭。
有内置的自动截断功能,因此您不必担心上下文长度限制。
我们有自己独特的
令牌长度估计器。
代码将如下所示:
在极端情况下,例如当有很多句点或数字时(在这种情况下,
如果令牌比率小于每个令牌3 个字符,则此代码将失败。
所以它有自己独立的try/catch 重试逻辑。
这种方法已经取得了长足的进步,并且足够灵活,可以满足您的需求。
第3 课:使用流API 来改善延迟并以可变的速度向用户显示输出的字符实际上是ChatGPT 中的一项重大UX 创新。
我们认为这只是一个噱头,但用户反馈非常积极,字符以不确定的速率输出(就像一次输入一个字符),而AI 感觉就像鼠标/光标的UX 时刻。
第4 课:GPT 非常不擅长生成零假设
我们遇到的最容易出错的提示语言是“如果没有找到任何内容,则返回空输出”。 GPT 经常返回它不理解的内容,这可能会导致缺乏信心,甚至返回空白的次数比预期更多。
大多数提示如下:
“这是一段描述有关公司的声明的文本块。输出提取这些公司的JSON。如果没有任何相关内容,则返回空白。这是text: [文本块]。
“这里是有关公司的声明文本。我希望您输出提取这些公司的JSON。如果没有匹配的内容,请返回空白。文本为:[文本内容]”。
有一段时间,存在一个文本内容可能变空的错误。 GPT 经常返回难以理解的文本。顺便说一句,GPT 喜欢与面包店相关的单词,例如:
阳光面包店
金色谷物面包店
幸福面包店
幸运的
幸运的是,解决方案是修复
由于错误,如果没有文本,则不会发送提示。
但是,当“天空”难以以编程方式定义并且GPT 必须使用自己的判断力时,事情就会变得丑陋。
第5 课:“上下文窗口”这个名称用词不当。只有输入变大,输出却没有变大
鲜为人知的事实:GPT-4 的输入窗口有128,000 个令牌,但其输出窗口仍然只有4,000 个。 “上下文窗口”这个名字很令人困惑。
然而,实际问题要严重得多。我们经常要求GPT 返回JSON 对象列表。不要把事情搞得太复杂。它只是一个JSON 任务列表数组,每个列表都有名称和标签。
但是GPT最多只能返回10条数据。我试了15次,成功率只有15%。
起初我以为是因为上下文窗口只有4k,但是经过调查,我发现即使10条数据只有700-800个token,GPT也停止了。
当然,您也可以给出提示,一次建议一个任务,然后给出(提示+任务),然后建议下一个任务。然而,如果你需要使用GPT来玩手机游戏,你就必须处理Langchain等问题。
第6课:向量数据库和RAG/嵌入对于我们普通用户来说基本上没什么用。
我已经尝试过,但每次我认为RAG/嵌入有一个杀手级用例时,我都会感到困惑。
在我看来,矢量数据库/RAG 实际上是为搜索而设计的。仅搜索。与在Google 或Bing 上搜索相同。原因如下:
没有确定相关性的标准。有一些解决方案似乎通过启发式方法为相关性创建了截止点,但实际上它们根本不可靠。在我看来,这会破坏RAG,并且如果您过于保守,您总是会面临获得不相关结果的风险,或者错过重要结果的风险。
为什么将向量放在自己的专用数据库中,与所有其他数据分开?
除非您的数据量到达Google,或者
Bing 的规模,否则这种上下文的损失绝对不值得。
用户通常不喜欢语义搜索,除非他们正在对整个互联网进行开放式搜索。这是因为语义搜索返回的内容不是用户直接键入的。
在业务应用程序的大多数搜索中,用户是领域专家,他们会明确地告诉您他们想要什么,而不必猜测他们想要什么。
在我看来(纯粹是猜测),在大多数搜索情况下,对大型语言模型的更有效使用是对更复杂的查询使用简单的完成提示。似乎解决方案是将搜索转换为分面搜索(是的)
SQL!
)。
但这根本不是RAG。
第七课:一般不会出现幻觉。
我们的用例基本上是“这是文本,请从中提取一些内容。”一般来说,如果您要求GPT 从文本中提取公司名称(如果该公司存在),我们不会提供随机公司名称(除非您选择这样做)这样做)。正如文中所解释的,这是上面的原假设问题!)。
再说一遍,如果您是一名工程师,我相信您也知道这一点。 GPT 根本不会产生任何幻觉,并且在创建变量或重写您发送的代码块时不会引入随机拼写错误。要求它给你一些东西会让你产生标准库函数存在的错觉,但它更像是一个零假设。换句话说,我不知道如何表达“我不知道”。
但是,对于用例“这是上下文的完整详细信息。请分析/总结/提取”,这是非常可靠的。我认为最近推出的很多产品都强调了这个用例。
所以关键在于高质量的数据输入和高质量的GPT令牌响应输出。
总结
以下是常见问题的解答。
问:通用人工智能可能吗?
答:不。至少不是变压器+互联网数据+数十亿美元基础设施的方法。
问:GPT-4 真的有用吗?这都是营销吗?
答:100%有帮助。今天的人工智能就像互联网的早期。
问:我们都会因为人工智能而失去工作吗?
答:不。我认为AI只是降低了普通人使用机器学习和人工智能的门槛。
本文和图片来自网络,不代表火豚游戏立场,如若侵权请联系我们删除:https://www.huotun.com/game/626728.html