背景
目前公司有需求需要通过AIGC(Artificial Intelligence Generated Content) 生成一些目标的内容(评论,回复,文章,简报等),来增加产品的交互体验。目前Azure OpenAI Service 基于 GPT3 来处理内容,可以作为技术方案的选项之一。
基础工作
创建资源
登录Azure portal, 在创建资源的地方搜索Azure OpenAI 就可以很方便的找到资源。选择自己的Subscription 和 Resource Group即可,其他的参数根据提示即可操作。
这里需要注意的是,目前Azure OpenAI属于限制资源,默认情况下并不开启,如下图,对于没有开放的Subscription会提示你不能创建,不过附带了 申请链接 , 按照表单提示填写申请信息等待审核即可。
创建Model
资源创建好之后,打开在Overview上面,有一个很醒目的链接,帮你跳转尝试使用产品,也可以直接打开 Playground 网站使用,注意如果你有多个OpenAI实例在不同的region,可以看下右上角,进行选择。
在使用之前,我们其实是需要创建Model的,Model是主要用来对你文字进行处理的实体,不同的model擅长的领域也不相同,有两个地方可以创建model,一个是在Azure Portal上面,或者在Playground上面也同样可以。
如果你不关心他们具体的差别,请忽略下面的一部分内容,无脑先选 text-davinci-003
开始体验。
这里注意部署的时候,会让你输入一个他的名字,这里尽量不要使用中文,如果没想好命名,可以直接同模型的名字代替。
Model类型
创建的过程中,会发现model有很多种类型,整体上他们的类型命名规则是 {family}-{capability}[-{input-type}]-{identifier}
family
可以理解为模型的种族吧,有如下几个值
- text: GPT-3 models
- code : 基于GPT-3 的model,用github上面所有的公开项目作为数据训练集,训练后的产物。
capability
模型相对擅长的领域,针对不同的模型种族,也有不同的值,下面展示其中一部分
GPT-Models:
- Davinci : 擅长 分析复杂的意图,因果关系,为用户作总结
- Curie: 擅长语言翻译、复杂分类、文本情感、摘要
- Babbage:简要分类,语义搜索分类
- Ada:解析文本、简单分类、地址修正、关键字
Codex Models
- Davinci
- Cushman
input type
这个是针对部分模型的特定参数,普通的模型是没有这个值的
identifier
模型的版本号,例如001
以上的内容摘自 官网 的文档,具体细节可以自取。
实际使用
选择你创建好的模型,在PlayGround的页面,输入框内输入hello word,点击下面的Generate,图中绿色的文字就是模型回复我们的内容。
每次回答之后,选中文字可以去掉绿色的背景,然后不断在下面提问,再生成,就会形成对话,例如下图,GPT 会根据前面我问他的内容,来进行进一步的回答 (其中Q是我的问题)。
代码调用
仔细看你的页面,会发现右上角有一个 View code 的按钮,里面会给一个示例,告知你如果使用代码调用,目前只有Python有library可以直接使用,其他的语言的话,还是只能通过调用http请求来进行。
示例
curl {endpoint}/openai/deployments/{deployment_name}/completions?api-version=2022-12-01 \
-H "Content-Type: application/json" \
-H "api-key: YOUR_API_KEY" \
-d '{
"prompt": "What's your name",
"max_tokens": 100,
"temperature": 1,
"frequency_penalty": 0,
"presence_penalty": 0,
"top_p": 0.5,
"best_of": 1,
"stop": null
}'
以上的内容只是一个缩略版的示例,其中有几个参数,
-
endpoint
: 正常在这个view code的地方会直接给你,也可以在Azure Resource的页面看到 -
deployment_name
: 部署model的名字,这里就是我之前提到的最好不要用中文,否则这里还涉及转码问题 -
api-key
: 相当于调用的私钥,这个在Azure Resource的 Keys and Endpoint 页面可以找到
具体请求的Body里面,也包括很多的参数,其中的 prompt
就是最重要的一个,也是后面我们会反复提到的概念。这里暂时理解为你提问的内容就可以了。
token
也是很重要的一个概念,区别于Auth的token,这里的token是指请求文本,所返回的内容文字数量。max_token
也就对应了最多返回多少文本,如果需要问题很大,但是max_token
设置很小的时候,就会有回复的内容截断的情况。通常一个token
对应4个英文字符。
而且这里提醒一下,Azure OpenAI的收费方式,最主要的收费就是请求所消耗的 token
数量,不同模型的 token
单价也不一样,这里贴个简略的价格表(注意哈,价格是每1k个 token
的价格,例如Davinci
模型是每消耗1k个token
, 2美分):
价目表 自取
局限性
数据集局限
首先,有别于New Bing里面的Chat场景,GPT3的训练数据集并不是当下最新的,如果你希望它帮你分析一些实事场景,他是无法帮助你完成的,需要你手动到告诉他发生了什么事情,才可以。
这里举个例子,你可以尝试问他,微软在2022年1月1号的股票价格,他就会告诉你他无法预测股价,所以它自身的数据集,至少是2022年以前的数据,更不用说让他帮你分析最近的新闻等等。
TBD, 请期待后续 =。=