当前位置: 首页 > news >正文

Azure Machine Learning - 使用 Azure OpenAI 服务生成文本

使用 Azure OpenAI 服务生成文本

关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

file

环境准备

  • Azure 订阅 - 免费创建订阅

  • 已在所需的 Azure 订阅中授予对 Azure OpenAI 的访问权限

    目前,仅应用程序授予对此服务的访问权限。 可以通过在 https://aka.ms/oai/access 上填写表单来申请对 Azure OpenAI 的访问权限。

  • Python 3.7.1 或更高版本

  • 以下 Python 库:os、requests、json

  • 已部署 gpt-35-turbo-instruct 模型的 Azure OpenAI 服务资源。

设置

使用以下项安装 OpenAI Python 客户端库:

  • [OpenAI Python 0.28.1]
  • [OpenAI Python 1.x]
pip install openai==0.28.1
pip install openai

检索密钥和终结点

若要成功对 Azure OpenAI 服务发出调用,需要准备好以下各项:

变量名称
ENDPOINT从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 也可在“Azure OpenAI Studio”>“操场”>“代码视图”中找到该值。 示例终结点为:https://docs-test-001.openai.azure.com/
API-KEY从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 可以使用 KEY1KEY2
DEPLOYMENT-NAME此值将对应于在部署模型时为部署选择的自定义名称。 此值可在 Azure 门户中的“资源管理”>“部署”下,或者在 Azure OpenAI Studio 中的“管理”>“部署”下找到此值。

在 Azure 门户中转到你的资源。 可以在“资源管理”部分找到“终结点和密钥”。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1KEY2。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。
file
为密钥和终结点创建和分配持久环境变量。

环境变量

为密钥和终结点创建和分配持久环境变量。

  • [命令行]
  • [PowerShell]
  • [Bash]
setx AZURE_OPENAI_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 
[System.Environment]::SetEnvironmentVariable('AZURE_OPENAI_KEY', 'REPLACE_WITH_YOUR_KEY_VALUE_HERE', 'User')
[System.Environment]::SetEnvironmentVariable('AZURE_OPENAI_ENDPOINT', 'REPLACE_WITH_YOUR_ENDPOINT_HERE', 'User')
echo export AZURE_OPENAI_KEY="REPLACE_WITH_YOUR_KEY_VALUE_HERE" >> /etc/environment && source /etc/environment
echo export AZURE_OPENAI_ENDPOINT="REPLACE_WITH_YOUR_ENDPOINT_HERE" >> /etc/environment && source /etc/environment

创建新的 Python 应用程序

  1. 创建名为 quickstart.py 的新 Python 文件。 然后在你偏好的编辑器或 IDE 中打开该文件。

  2. 将 quickstart.py 的内容替换为以下代码。 修改代码以添加密钥、终结点和部署名称:

  • [OpenAI Python 0.28.1]
  • [OpenAI Python 1.x]
import os
import openaiopenai.api_key = os.getenv("AZURE_OPENAI_KEY")
openai.api_base = os.getenv("AZURE_OPENAI_ENDPOINT") # your endpoint should look like the following https://YOUR_RESOURCE_NAME.openai.azure.com/
openai.api_type = 'azure'
openai.api_version = '2023-05-15' # this might change in the futuredeployment_name='REPLACE_WITH_YOUR_DEPLOYMENT_NAME' #This will correspond to the custom name you chose for your deployment when you deployed a model. # Send a completion call to generate an answer
print('Sending a test completion job')
start_phrase = 'Write a tagline for an ice cream shop. '
response = openai.Completion.create(engine=deployment_name, prompt=start_phrase, max_tokens=10)
text = response['choices'][0]['text'].replace('\n', '').replace(' .', '.').strip()
print(start_phrase+text)
import os
from openai import AzureOpenAIclient = AzureOpenAI(api_key=os.getenv("AZURE_OPENAI_KEY"),  api_version="2023-10-01-preview",azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"))deployment_name='REPLACE_WITH_YOUR_DEPLOYMENT_NAME' #This will correspond to the custom name you chose for your deployment when you deployed a model. # Send a completion call to generate an answer
print('Sending a test completion job')
start_phrase = 'Write a tagline for an ice cream shop. '
response = client.completions.create(model=deployment_name, prompt=start_phrase, max_tokens=10)
print(response.choices[0].text)
  1. 使用快速入门文件中的 python 命令运行应用程序:

    python quickstart.py
    

输出

输出将包含 Write a tagline for an ice cream shop. 提示后的响应文本。 在此示例中,Azure OpenAI 返回了 The coldest ice cream in town!

Sending a test completion job
Write a tagline for an ice cream shop. The coldest ice cream in town!

再运行代码几次,以查看会得到其他哪些类型的响应,因为响应并不始终相同。

理解结果

由于我们的 Write a tagline for an ice cream shop. 示例提供的上下文有限,因此模型通常不会始终返回预期结果。 如果响应似乎是意外响应或被截断,可以调整最大令牌数。

Azure OpenAI 还会对提示输入和生成的输出执行内容审核。 检测到有害内容时,可能会筛选提示或响应。

关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

相关文章:

  • pytorch学习9-优化器学习
  • RepidJson将内容格式化后写入文件
  • 安卓adb【备忘录】
  • linux的权限741
  • uniapp-hubildx配置
  • 更改AndroidStudio模拟器位置
  • Linux系统调试课:PCIe调试手段
  • Verilog if语句阻断z状态传播
  • 【CSP】202309-2_坐标变换(其二)Python实现
  • 【python】pip install 国内源
  • PHP 判断给定两个时间是否在同一周,月,年
  • Android 手机屏幕适配方式和原理
  • javafx-在listview中添加了点击事件后会执行多次
  • C++ 预处理详解
  • C语言进阶之路-数组与指针
  • 《Java编程思想》读书笔记-对象导论
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Asm.js的简单介绍
  • docker-consul
  • hadoop集群管理系统搭建规划说明
  • Java知识点总结(JavaIO-打印流)
  • webpack4 一点通
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 读懂package.json -- 依赖管理
  • 多线程 start 和 run 方法到底有什么区别?
  • 官方解决所有 npm 全局安装权限问题
  • 什么软件可以剪辑音乐?
  • 实战|智能家居行业移动应用性能分析
  • 智能合约开发环境搭建及Hello World合约
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • #NOIP 2014#Day.2 T3 解方程
  • #pragma预处理命令
  • (1)(1.13) SiK无线电高级配置(六)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (70min)字节暑假实习二面(已挂)
  • (C++17) optional的使用
  • (LeetCode C++)盛最多水的容器
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (五)IO流之ByteArrayInput/OutputStream
  • (一一四)第九章编程练习
  • (转)树状数组
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET连接MongoDB数据库实例教程
  • .NET上SQLite的连接
  • .NET文档生成工具ADB使用图文教程
  • .net与java建立WebService再互相调用
  • .net中生成excel后调整宽度
  • ?
  • @javax.ws.rs Webservice注解
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [BUAA软工]第一次博客作业---阅读《构建之法》
  • [BZOJ 3680]吊打XXX(模拟退火)