Azure OpenAI 入门指南:令牌和消息概念
如果您想要构建一个系统,那么需要解决的不仅仅是一个问题或对 API 的简单调用。
所以在接下来的内容中,我将分享一些使用Azure OpenAI或其他主要语言模型来构建复杂应用程序的方法。
今天我们先来看看Token的相关话题以及如何处理聊天完成通知。
关于大型语言模型如何工作
前面我们学习了通过Python SDK调用Azure OpenAI。至此,我认为您可以轻松实现以下问答功能。
我们将上面的方法稍微封装一下,我们就可以非常轻松地通过提交查询来快速调用GPT。
我们换个问题,问GPT模型,要求它把“lollipop”这个词颠倒过来。你会发现一个神奇的现象。 GPT 错误地回答了这么简单的问题。
为什么GPT不能解决这个看似简单的问题呢?
Tokens
这会引发更多关于Tokens的概念。我们知道像LLM这样的Azure OpenAI在调用的时候会消耗Token,并且也会有最大Token的限制。
Token 这个概念出现在自然语言处理技术的研究中。当您将文本输入计算机时,必须对其进行分段。文本的大部分将被分解成小块。这些共享的“位”被称为连续的子串——令牌。
而且这个分割符号与单词数不太匹配。
例如下面的英文单词就很常见。此时,单词和符号可能最初匹配。 6 个单词将消耗 6 个标记
并且如果你的英语单词不是很常见,它们只会分成更多的标记。例如,下面的问题是一个单词,但它被分为3个token。
lollipop就是这样的词。他分为3个代币。此时GPT会将其倒着排列,会有点难以理解,导致错误。
解决办法也很简单。如果你把 lollipop 中的每个字母分开并向后排列,GPT 就能做到。
这是因为GPT会将每个字母视为一个符号。这样的话,直接翻转代币就很容易了。
在英语中,一个标记大约是 4 个字符,或者大约是一个单词的四分之三。如果英文同一句话有4个token,中文就可以消耗10多个token。这是因为LLM模型使用的分词技术基本上是针对英语进行优化的。其他语言的代币会高于英语,这会导致其他语言的成本高于英语。
不同的LLM语言模型对token会有不同的限制。这个限制是输入+完成将被一起计算为令牌数量,而不仅仅是问题。
下图显示了 Azure 中不同模型的令牌限制。当输入+完成超过最大值时代币,GPT模型会报错。
过度掌握Token使用情况
由于Token存在限制,当我们基于ChatGPT创建应用程序时,我们必须想知道Token的消耗情况。
这个token的消耗实际上是在调用API的时候返回给我们的。
prompt_tokens 为提示词的 token
completion_tokens 为输出结果的 token
total_tokens 为总 token
系统、s 和助手我们看一下中的 Chat Completion 操作中间。它是在发送消息参数之前引入的。 该参数必须指定每个会话内容的角色和内容。 而且角色是固定的三类系统,用户和助理 看看这三种角色的使用。 首先我们改一下代码,让每次调用的时候都能发送消息。 然后我在系统中描述“你是Excel专家”。这些信息实际上是用来指定AI模型的,可以让AI模型发挥作用或者让模型改变后续通用响应的方式。 因为我在这里指定了Excel专家,所以当我直接在用户中提问时,模型会以Excel专家的身份进行回答。 所以系统是用来设置AI模型的,也就是Assistant的行为。 Assistant是LLM大语言模型的响应结果,而User是用户的即时输入。 此时,如果你想让GPT模型知道回答问题时的上下文信息,那么你在发送消息时必须包含之前的整个对话,包括用户和助手的内容。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。