【AI】使用Azure OpenAI创建自己的AI应用!

【AI】使用Azure OpenAI创建自己的AI应用!

目录

  • 【AI】使用Azure OpenAI创建自己的AI应用!
    • 创建工作区
    • 模型介绍
    • 部署模型
    • API参数
    • 计算Token
    • 使用Python SDK
      • 调用补全模型
      • 调用对话模型
      • 流式调用
      • 异步调用
    • 提示技巧
      • 生成
      • 对话
      • 分类

推荐超级课程:

  • Docker快速入门到精通
  • Kubernetes入门到大师通关课
  • AWS云服务快速入门实战

这里将以 Azure 提供的 Openai 端口为例,并使用 OpenAI 提供的Python SDK进行模型的调用。

创建工作区

进入Azure首页,在搜索栏输入OpenAI,点击进入OpenAI页面。

1

点击创建。

2

选择订阅,资源组,工作区名称,工作区地区,点击创建。这里我们的地区选择“美东”,因为目前只有这个地区支持chatgpt对话模型。如果你需要对话模型,可以选择其他模型种类更多的“西欧”。

3

选择下一步,确认无误后点击创建。

4

等他创建完成后,点击“探索”进入工作区。

5

模型介绍

在使用模型之前,我们先来了解一下Azure提供了哪些OpenAI模型。Azure提供的模型从功能上可以分为三大类:补全(completion)、对话(chat)、嵌入(embeddings)。

补全模型可以根据输入的文本,补全剩余的文本。这类模型顾名思义,就是根据前文续写后续的部分。他可以用来续写文章,补全程序。不仅如此,你其实也可以通过固定的文字格式来实现对话的效果。

对话模型相信用过ChatGPT的同学应该很熟悉。对话模型可以根据输入的文本方面,生成对话的回复。这类模型可以用来实现聊天机器人,也可以用来实现对话式的问答系统。在调用,对话模型与补全模型列表的区别是:你需要一个列表来存储对话的历史记录。

没有接触过NLP(自然语言处理)的同类可能会对“嵌入”这个词感到怀疑。“嵌入”显然就是将文本转换为支持的操作,而这个支持可以用来表示文本的语义信息,这样就可以方便地比较相似度的相似度。而嵌入模型就是用来实现这个操作的。

大多数模型拥有多个能力等级,能力越强处理的文字也计算复杂度,但相对的处理速度和使用成本调谐。通常有 4 个等级:达芬奇 > 居里 > 巴贝奇 > 阿达,其中达芬奇最强而Ada是最快的(有兴趣的同学可以查一下这4位名人)。在使用模型时,你可以根据自己的需求选择合适的等级。

具体的模型介绍可以参考Azure OpenAI 服务模型。

部署模型

在了解了模型的功能和等级之后,我们就可以开始使用模型了。在使用模型之前,我们需要先部署模型。在Azure OpenAI工作区中,进入“部署”页面。

6

选择模型,点击创建。这里我配置了一个补全模型和对话模型。

7

部署后你就可以用 API 调用模型了,当然你也可以现在 Playground 中测试一下。

8

API参数

在 Playground 中测试模型时,我们可以看到 API 的参数。这里我们来介绍一下这些参数。具体的参数细节可以参考API 参考。

  • model指定使用的模型。
  • prompt是输入给模型的文本。
  • temperature控制了生成文本的随机程度,值越大,生成的文本越随机,值越小,生成的文本越稳定。这个值的范围在 0.0 到 2.0 之间(虽然在 Playground 中最高设置为 1) 。
  • top_ptemperature类似,也是控制生成文本的随机程度。但这个参数简单的说是控制候选词的范围,值越大,候选词的范围越大,值越小,候选词的范围越小。这个值的范围在 0.0 到 1.0 之间。通常来说,这两个参数只需要设置一个就可以了。
  • max_tokens是模型生成的文本的最大长度,这其中的“令牌”不是指字符长度,你可以理解为模型眼中的“词”。令牌与我们所使用的词不一定是一一对应的。
  • stop是生成文本的条件停止,当生成的文本中包含这个字符串时,生成过程就会停止,最终生成的文本中将不包含这个字符串。这个参数可以是一个字符串,也可以是一个长度至多为4的字符串列表。
  • presence_penalty控制生成文本的多样性。他会惩罚那些在生成文本中已经出现过的令牌,以减少未来生成这些令牌的概率。这个值的范围在 -2.0 到 2.0 之间。如果设为负值,那么惩罚就会奖励,这样就会增加生成这些Token的概率。
  • frequency_penaltypresence_penalty类似,也是控制生成文本的多样性。但不同,presence_penalty是瞬时惩罚,而frequency_penalty累计惩罚。如果一个词在生成文本中出现了多次,那么这个词在未来生成的概率就会越来越多小。这个值的范围同样在 -2.0 到 2.0 之间。

计算Token

GPT 模型使用Token来表示文本,而不是使用字符。模型能处理的文本长度是有限的,而这个长度指的是Token的数量,而不是字符的数量,而 OpenAI 使用模型的乐器方式也按照生成方式token的数量计算。因此为了能够更好地使用模型,我们需要知道生成的文本到底有多少token。

OpenAI 提供了一个 Python 库tiktoken来计算Token。

pip install tiktoken

导入tiktoken库。

import tiktoken

不同的模型使用不同的编码来将转换为令牌。

编码名称 OpenAI 模型
cl100k_base gpt-4, gpt-3.5-turbo,text-embedding-ada-002
p50k_base 法典模型text-davinci-002,,text-davinci-003
r50k_base(或者gpt2 GPT-3 模型如davinci

我们可以使用tiktoken.get_encoding()来获取编码对象。也可以使用tiktoken.encoding_for_model()通过模型名自动获取编码对象。

encoding = tiktoken.get_encoding("cl100k_base")
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")

然后用.encode()方法将文本Token化。返回的Token列表的长度,就是文本的Token数量。

encoding.encode("tiktoken is great!")
[83, 1609, 5963, 374, 2294, 0]

我们还可以使用.decode()将令牌列表转换为文本。

encoding.decode([83, 1609, 5963, 374, 2294, 0])
'tiktoken is great!'

使用Python SDK

我们首先需要到Azure的“钥匙”页面获取钥匙和结束点,两个钥匙只要其中一个即可。

9

然后安装openai库。注意,Python版本需要大于等于3.7。我们这里使用官方提供的Python SDK,其他语言的SDK可以在OpenAI Libraries找到。
另外,因为这个库没有专门的文档参考,所以我们需要查看库的和API源码参考。

pip3 install openai

以上获取的密钥和终止点初始化SDK:

import openai

openai.api_key = "REPLACE_WITH_YOUR_API_KEY_HERE"    # Azure 的密鑰
openai.api_base = "REPLACE_WITH_YOUR_ENDPOINT_HERE"  # Azure 的終結點
openai.api_type = "azure" 
openai

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/490059.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

超越Sora!StreamingT2V AI视频模型,轻松打造120秒视觉盛宴

近日,来自美国德克萨斯大学奥斯汀分校(UT奥斯丁)等机构的研究人员提出了一项名为StreamingT2V的AI视频生成技术,引起了业界的广泛关注。这项技术打破了传统视频生成的局限,实现了高度一致且长度可扩展的视频生成&#…

使用 nodejs + zx 编写脚本更新本地 hosts

在日常的开发和运维工作中,我们经常需要修改本地的 hosts 文件来实现一些特定的网络配置,比如将某个域名指向特定的 IP 地址。而使用 Node.js 结合 zx 工具可以让我们更轻松地编写和运行脚本来更新本地的 hosts 文件。 一、功能介绍 目标: 通…

黑马头条day5总结

1、surefire-reports for the individual test results. 借鉴:【已解决】surefire-reports for the individual test results.-CSDN博客 Please refer to D:\javashizhan01\heima-leadnews\heima-leadnews-service\heima-leadnews-article\target\surefire-report…

【jenkins+cmake+svn管理c++项目】Windows环境安装以及工具配置

一、目标和环境 目标:搭建一个jenkins环境,实现jenkins调用cmake和svn和VS编译c项目,并将生成的库上传svn。 环境:win10虚拟机(练习流程用,正式用的话还是放到服务器),VS2017. 二、…

54、Qt/对话框、事件机制相关学习20240325

一、完善对话框,点击登录按钮,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&#…

四大AI神器,助你开启智慧家居新生活

曾经,人工智能还只是科幻电影里的未来幻想,而今,它已悄然融入我们生活的方方面面。不再只是工厂里的自动化手臂,或是电影中的情感机器人,AI技术已经走进了寻常百姓家,让家居生活也焕发出智慧的光彩。 想象…

并发-多线程

目录 进程 线程 线程的串行 区别 多线程 进程 是指计算机中已执行的程序,曾经是分时系统的基本运作单位在面向进程设计的系统(如早期的UNIX,Linux 2.4及更早的版本)中,是程序的基本执行实体在面向线程设计的系统…

【PL理论】(1) 语法与语义:归纳的定义 | 推理规则 | 推导树 | 数学归纳法证明 (MI)

💭 写在前面:在学习编程的过程中,我们经常会听到 "语法" 和 "语义" 这两个词,这对于理解和编写高质量的代码至关重要。在本博客中,我们将深入探讨这两个概念,从而帮助读者更好地理解编…

趣味算法,猴子算法。python如何实现猴子算法

给一只猴子一台打印机,虽然这只猴子根本不识字,但会乱按,经过一段时间后,在它乱按出来的单词里总能找到一些至少看起来是有意义的部分,比如一两个简短的单词,由此可以推出:只要给它足够长的时间…

vite+vue3动态模块化导入并使用pinia

一、安装引入pinia 1.安装 pnpm install pinia # 或者使用 yarn yarn add pinia # 或者使用 npm npm install pinia 2.在main.js里引入 import { createApp } from vue import App from ./App.vue import { createPinia } from pinia createApp(App).use(createPinia()).mo…

辽渤湾海现已加入2024第七届燕窝天然滋补品博览会

参展企业介绍 大连辽渤湾海产品有限公司,是一家主营海参、鲍鱼、海胆等大连海产品的加工和销售的综合型水产企业,拥有国内精良的整条加工流水线,拥有上千平米的现代化加工办公场地的现代化企业。现已发展成为大连海参产品的主导型深加工基地。…

如何清理释放群晖客户端缓存?

任正菲说:企业最大的浪费,是经验的浪费! 而一个一个的经验,又都来自企业的每一个工作者。 因此当我们在工作过程中遇到一些问题时,我们就应该下意识的把解决问题的经验沉淀下来,从而可以与大家进行分享。…

软件设计师19--文件管理

软件设计师19--文件管理 考点1:文件相关概念例题: 考点2:树形目录结构(绝对路径与相对路径)例题: 考点3:位示图例题: 考点4:索引文件索引文件结构例题: 考点1…

武汉星起航:跨境电商行业的领军者,互帮互助共创佳绩

武汉星起航电子商务有限公司,作为跨境电商行业的领军者,以其出色的业绩和卓越的团队实力,在业内赢得了广泛的赞誉。公司自运营团队在亚马逊平台上成功开设了多家店铺,凭借着深耕跨境电商行业多年所积累的经验,取得了令…

[自研开源] 数据集成之分批传输 v0.7

开源地址:gitee | github 详细介绍:MyData 基于 Web API 的数据集成平台 部署文档:用 Docker 部署 MyData 使用手册:MyData 使用手册 试用体验:https://demo.mydata.work 交流Q群:430089673 介绍 本篇基于…

面试笔记——Java集合篇

Java集合框架体系 重点:单列集合——ArrayList、LinkedList;双列集合——HashMap、ConcurrentHashMap。 List相关 数组(Array) 是一种用连续的内存空间存储相同数据类型数据的线性数据结构。 数组获取其他元素: 为什…

为什么在vite中使用eslint报错‘__dirname‘ is not defined?

问题分析 发生这种情况是因为 ESLint 不知道 vite.config.js 中的代码在 Node.js 中使用,__dirname 未在浏览器中定义,也未在 ES 模块中定义。因此要告诉 ESLint 代码将作为 CommonJS 模块在 Node.js 中运行。 解决方案 请打开 ESLint 配置并在该 env …

关于 boost::asio::strand 初始化 socket、stream、resolver、deadline_timer 对象

在 boost::asio 之中默认情况下,大家使用 io_context 来为这些对象初始化传递的执行者,但我需要这里说明。 对于 boost::asio 构造类似 socket 对象必须构造传递 io_context 是个伪命题,boost::asio 对象并非只允许传递 boost::asio::io_cont…

pyrealsense2获取保存点云

一、第一种实现代码 Python import sys import cv2 import pyrealsense2 as rs import numpy as np import keyboard import open3d as o3d import osif __name__ "__main__":output_folder output_data/os.makedirs(output_folder, exist_okTrue)pipeline rs.p…

git cherry pick merge部分提交

cherry pick merge 指定某次提交 1. git history 选择要从哪个分支merge 2. 找到提交记录,选择cherry pick 3.这个时候就可以直接push了