你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

了解如何生成或操作文本

Azure OpenAI 服务提供可用于各种任务的补全终结点。 该终结点可为任何 Azure OpenAI 模型提供一个简单但功能强大的文本输入、文本输出接口。 若要触发补全功能,请输入一些文本作为提示。 该模型会生成补全内容并尝试匹配上下文或模式。 假设你向 API 提供提示“正如笛卡尔所说,我认为,因此”。 对于此提示,Azure OpenAI 很可能会返回补全终结点“我是”。

若要开始探索补全功能,最佳方法是使用 Azure OpenAI Studio 中的操场。 这是一个简单的文本框,你可以在其中输入提示以生成补全内容。 可以从如下所示的简单提示开始:

write a tagline for an ice cream shop

输入提示后,Azure OpenAI 会显示补全内容:

we serve up smiles with every scoop!

你看到的补全结果可能会有所不同,因为 Azure OpenAI API 会为每个交互生成新的输出。 即使提示保持不变,每次调用该 API 时,你也可能会得到略有不同的补全内容。 可以使用 Temperature 设置控制此行为。

这个简单的文本输入、文本输出接口意味着,你可以提供说明或仅提供几个想要的操作示例来给 Azure OpenAI 模型“编程”。 输出是否成功通常取决于任务的复杂度和提示的质量。 一般规则是考虑如何写出一道能让初中生解决的应用题。 写得好的提示可提供足够的信息,便于模型了解你想要什么以及它应该如何回复。

注意

每种模型的模型训练数据可能不同。 最新模型的训练数据目前仅延续到 2021 年 9 月。 根据你的提示,模型可能不了解相关的当前事件。

设计提示

从生成原创故事到执行复杂文本分析,Azure OpenAI 服务模型可执行各种操作。 由于它们能做的事情太多,因此必须明确表示你需要什么。 好提示的秘诀在于“展示”而不仅仅是“说明”。

模型尝试根据提示预测你的需要。 如果输入提示“给我一份猫的品种列表”,则模型不会自动假设你只需要一份列表。 你可能想要开始一段对话,你的第一句话是“给我一份猫的品种列表”,然后是“我会告诉你我喜欢哪些品种”。如果模型只假设你想要一份猫的列表,那它在内容创建、分类或其他任务方面就不那么擅长了。

创建可靠提示的指导原则

创建有用提示有三个基本指导原则:

  • 展示并说明。 通过提供说明和/或示例,明确表示你想要什么。 如果你希望模型按字母顺序对项目列表进行排名或按情绪对段落进行分类,请在提示中包含这些详细信息以显示模型。

  • 提供优质数据。 如果尝试生成分类器或让模型遵循某种模式,请确保提供足够的示例。 请务必校对你的示例。 该模型足够智能,可以解决基本的拼写错误,并为你提供有意义的响应。 相反,模型可能会假设错误是故意的,这可能会影响响应。

  • 检查设置。 概率设置(如 TemperatureTop P)控制模型生成响应时的确定程度。 如果你请求的响应只有一个正确答案,则应该为这些设置指定较低的值。 如果你希望得到含糊的回复,则可能需要使用更高的值。 在使用这些设置时,用户最常犯的错误是认为他们控制了模型响应中的“聪明”或“创造力”。

提示问题疑难解答

如果在使 API 按预期执行时遇到问题,请检查以下实施要点:

  • 它是否清楚预期生成的内容应该是什么?
  • 是否有足够的示例?
  • 是否检查了示例中有无错误? (API 不会直接告诉你。)
  • 是否正确使用了 TemperatureTop P 概率设置?

对文本进行分类

为了使用 API 创建文本分类器,你需要提供任务描述和一些示例。 在此演示中,将向 API 展示如何对文本消息的情绪进行分类。 情绪在文本中表达了整体感受或情感。

This is a text message sentiment classifier

Message: "I loved the new adventure movie!"
Sentiment: Positive

Message: "I hate it when my phone battery dies." 
Sentiment: Negative

Message: "My day has been 👍"
Sentiment: Positive

Message: "This is the link to the article"
Sentiment: Neutral

Message: "This new music video is unreal"
Sentiment:

设计文本分类器的指导原则

此演示介绍了设计分类器的几个指导原则:

  • 使用通俗易懂的语言来描述输入和输出。 对输入“消息”和表达“情绪”的预期值使用通俗易懂的语言。作为最佳做法,请从简单的语言描述开始。 在构建提示时,通常可以使用简写或键来指示输入和输出,但最好从尽可能具有描述性开始。 然后,只要提示的表现一致,就可以向后工作并删除多余的单词。

  • 向 API 展示如何针对任何情况进行响应。 该演示提供了多个结果:“积极”、“消极”和“中性”。支持中性结果很重要,因为在很多情况下,即使是人类也难以确定某些内容是积极的还是消极的。

  • 根据常用表达方式使用表情符号和文字。 该演示显示分类器可以是文本和表情符号 👍 的组合。 API 可以读取表情符号,甚至可以将它们与表达式进行转换。 为了获得最佳响应,请在示例中使用常见的表达形式。

  • 对熟悉的任务使用较少的示例。 此分类器只提供了几个示例,因为 API 已了解情绪和文本消息的概念。 如果要为 API 不熟悉的内容生成分类器,可能需要提供更多示例。

来自单个 API 调用的多个结果

现在,你已了解如何构建分类器,接下来让我们扩展第一个演示,使其更加高效。 你希望使用分类器从单个 API 调用中获取多个结果。

This is a text message sentiment classifier

Message: "I loved the new adventure movie!"
Sentiment: Positive

Message: "I hate it when my phone battery dies"
Sentiment: Negative

Message: "My day has been 👍"
Sentiment: Positive

Message: "This is the link to the article"
Sentiment: Neutral

Message text
1. "I loved the new adventure movie!"
2. "I hate it when my phone battery dies"
3. "My day has been 👍"
4. "This is the link to the article"
5. "This new music video is unreal"

Message sentiment ratings:
1: Positive
2: Negative
3: Positive
4: Neutral
5: Positive

Message text
1. "He doesn't like homework"
2. "The taxi is late. She's angry 😠"
3. "I can't wait for the weekend!!!"
4. "My cat is adorable ❤️❤️"
5. "Let's try chocolate bananas"

Message sentiment ratings:
1.

该演示展示了 API 如何按情绪对文本消息进行分类。 你可以提供具有编号的消息列表和具有相同数字索引的情绪评分列表。 该 API 使用第一个演示中的信息来了解如何对单个文本消息的情绪进行分类。 在第二个演示中,该模型将了解如何将情绪分类应用于文本消息列表。 这种方法允许 API 在单个 API 调用中对 5 条(甚至更多)文本消息进行评分。

重要

要求 API 创建列表或评估文本时,帮助 API 避免偏移非常重要。 以下是一些需要遵循的要点:

  • 请特别注意 Top PTemperature 概率设置的值。
  • 运行多次测试,确保正确校准概率设置。
  • 不要使用长列表。 长列表可能会导致偏移。

触发创意

在可以使用 API 完成的任务中,最强大又最简单的一项任务是生成新想法或输入版本。 假设你正在写一部悬疑小说,并且需要一些故事创意。 可以向 API 提供一些创意的列表,它会尝试向你的列表添加更多创意。 该 API 可以通过少量示例创建商业计划、角色描述、营销口号等等。

在下一个演示中,将使用该 API 创建更多关于如何在课堂中使用虚拟现实的示例:

Ideas involving education and virtual reality

1. Virtual Mars
Students get to explore Mars via virtual reality and go on missions to collect and catalog what they see.

2.

此演示为 API 提供了列表的基本描述以及一个列表项。 然后,使用不完整的提示“2.”触发来自 API 的响应。 该 API 会将这一不完整的条目解释为生成类似项并将其添加到列表的请求。

触发创意的指导原则

虽然此演示使用简单的提示,但它强调了触发新创意的几个指导原则:

  • 说明列表的意图。 与文本分类器的演示类似,首先告知 API 列表的内容。 此方法可帮助 API 专注于补全列表,而不是尝试通过分析文本来确定模式。

  • 为列表中的项设置模式。 当你提供单句描述时,API 会在为列表生成新项时尝试遵循该模式。 如果需要更详细的响应,则需要通过向 API 输入更详细的文本来建立该意图。

  • 使用不完整的条目提示 API 以触发新创意。 当 API 遇到看似不完整的文本(如提示文本“2.”)时,它首先会尝试确定任何可能补全该条目的文本。 由于该演示包含列表标题、编号为“1.”的示例以及附带的文本,因此 API 会将不完整的提示文本“2.”解释为继续向列表添加项的请求。

  • 探索高级生成技术。 可以通过在提示中列出更长且更多样化的列表来提高回复质量。 一种方法是从一个示例开始,让 API 生成更多示例,然后选择你最喜欢的示例并将其添加到列表中。 这些示例中的一些高质量的变体可以显著提高响应质量。

进行对话

GPT-35-Turbo 和 GPT-4 的发布开始,我们建议使用支持聊天补全终结点的模型来创建对话生成和聊天机器人。 聊天补全模型和终结点需要与补全终结点不同的输入结构。

该 API 擅长与人类甚至自己进行对话。 只需几行指令,API 就能表现得像一个客服聊天机器人,它可以智能地回答问题,毫不慌乱;又像是一位聪明的对话伙伴,会讲笑话和双关语。 关键是告诉 API 应该怎么做,然后提供一些示例。

在此演示中,API 充当回答问题的 AI 角色:

The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.

Human: Hello, who are you?
AI: I am an AI created by OpenAI. How can I help you today?
Human: 

让我们看看名为“Cramer”的聊天机器人的变体,它是一个有趣且有点有用的虚拟助手。 为了帮助 API 了解角色的特征,请提供一些问题和答案示例。 只要有一两句回复具有讽刺意味,API 就能很快学会这种模式,然后提供无数类似的回复。

Cramer is a chatbot that reluctantly answers questions.

###
User: How many pounds are in a kilogram?
Cramer: This again? There are 2.2 pounds in a kilogram. Please make a note of this.
###
User: What does HTML stand for?
Cramer: Was Google too busy? Hypertext Markup Language. The T is for try to ask better questions in the future.
###
User: When did the first airplane fly?
Cramer: On December 17, 1903, Wilbur and Orville Wright made the first flights. I wish they'd come and take me away.
###
User: Who was the first man in space?
Cramer: 

设计对话的指导原则

我们的演示展示了如何轻松地创建能够进行对话的聊天机器人。 虽然看起来很简单,但此方法遵循了几个重要的指导原则:

  • 定义对话的意图。 与其他提示一样,需要描述与 API 交互的意图。 在本例中为“对话”。此输入可使 API 准备好根据初始意图处理后续输入。

  • 告诉 API 如何进行交互。 该演示中的一个关键细节是关于 API 应如何交互的明确说明:“助手非常有用、富有创意、聪明且非常友好。”如果没有明确的说明,则 API 可能会偏离并模仿与之交互的人员。 该 API 可能会变得不友好或表现出其他不良行为。

  • 为 API 提供身份。 一开始,API 将作为 OpenAI 创建的 AI 进行响应。 虽然 API 没有固有身份,但角色描述有助于该 API 以尽可能接近真实情况的方式进行响应。 可以通过其他方式使用角色身份描述来创建不同类型的聊天机器人。 如果让 API 以生物学研究科学家的身份进行回复,则你将从该 API 收到经过深思熟虑的、富有见地的评论,该评论与你期望从专业人士那里得到的评论类似。

转换文本

API 是一种语言模型,它熟悉使用单词和角色身份来表达信息的各种方式。 知识数据支持将文本从自然语言转换为代码,并且支持其他语言和英语之间的翻译。 API 还对内容有一定程度的理解,从而能够以不同方式汇总、转换和表达内容。 请看以下几个示例。

将一种语言翻译成另一种语言

本演示指导 API 如何将英语短语转换为法语:

English: I do not speak French.
French: Je ne parle pas français.
English: See you later!
French: À tout à l'heure!
English: Where is a good restaurant?
French: Où est un bon restaurant?
English: What rooms do you have available?
French: Quelles chambres avez-vous de disponible?
English:

此示例之所以有效,是因为 API 已经掌握了法语。 无需尝试向 API 教授语言。 只需提供足够的示例来帮助 API 理解从一种语言转换为另一种语言的请求。

如果要从英语翻译成 API 无法识别的语言,则需要为 API 提供更多示例和可以生成流畅翻译的微调模型。

在文本和表情符号之间转换

此演示将电影名称从文本转换为表情符号字符。 此示例展示了 API 在学习各种模式和处理其他字符方面的适应能力。

Carpool Time: 👨👴👩🚗🕒
Robots in Cars: 🚗🤖
Super Femme: 👸🏻👸🏼👸🏽👸🏾👸🏿
Webs of the Spider: 🕸🕷🕸🕸🕷🕸
The Three Bears: 🐻🐼🐻
Mobster Family: 👨👩👧🕵🏻‍♂️👲💥
Arrows and Swords: 🏹🗡🗡🏹
Snowmobiles:

汇总文本

该 API 能够掌握文本上下文,并以不同的方式改述文本。 在此演示中,API 采用文本块并创建小学年龄儿童可以理解的解释。 此示例说明 API 对语言有深刻的理解。

My ten-year-old asked me what this passage means:
"""
A neutron star is the collapsed core of a massive supergiant star, which had a total mass of between 10 and 25 solar masses, possibly more if the star was especially metal-rich.[1] Neutron stars are the smallest and densest stellar objects, excluding black holes and hypothetical white holes, quark stars, and strange stars.[2] Neutron stars have a radius on the order of 10 kilometres (6.2 mi) and a mass of about 1.4 solar masses.[3] They result from the supernova explosion of a massive star, combined with gravitational collapse, that compresses the core past white dwarf star density to that of atomic nuclei.
"""

I rephrased it for him, in plain language a ten-year-old can understand:
"""

生成文本摘要的指导原则

文本摘要通常涉及向 API 提供大量文本。 为了防止 API 在处理大型文本块后发生偏移,请遵循以下指导原则:

  • 用三个双引号将要生成摘要的文本引起来。 在此示例中,在要生成摘要的文本块前后的单独行上输入三个双引号 (""")。 此格式设置样式清楚地定义了要处理的大型文本块的开头和结尾。

  • 在摘要前后解释摘要意图和目标受众。 请注意,此示例与其他示例不同,因为你向 API 提供了两次说明:在要处理的文本之前和之后。 冗余说明可帮助 API 专注于预期任务并避免偏移。

补全部分文本和代码输入

尽管所有提示都可以得到补全,但如果你希望 API 从停止的位置继续,将文本补全视为它自己的任务可能会有所帮助。

在此演示中,你将向 API 提供一个似乎并不完整的文本提示。 将文本输入停止在单词“and”处。API 会将不完整的文本解释为继续思考的触发器。

Vertical farming provides a novel solution for producing food locally, reducing transportation costs and

下一个演示将展示如何使用补全功能来帮助编写 React 代码组件。 首先将一些代码发送到 API。 使用左括号 ( 停止代码输入。 API 会将不完整的代码解释为补全 HeaderComponent 常量定义的触发器。 API 可以补全此代码定义,因为它了解相应的 React 库。

import React from 'react';
const HeaderComponent = () => (

生成补全内容的指导原则

下面是使用 API 生成文本和代码补全内容的一些有用指导原则:

  • 降低温度以使 API 保持专注。 为 Temperature 设置设置较低的值,以指示 API 提供专注于提示中所述意图的响应。

  • 提高温度以允许 API 进行无关的响应。 为 Temperature 设置设置较高的值,以允许 API 以与提示中所述的意图无关的方式进行响应。

  • 使用 GPT-35-Turbo 和 GPT-4 Azure OpenAI 模型。 对于涉及理解或生成代码的任务,Microsoft 建议使用 GPT-35-TurboGPT-4 Azure OpenAI 模型。 这些模型使用新的聊天补全格式

生成真实响应

API 已经学习了基于训练期间审查的实际数据构建的知识。 它使用学到的数据来形成响应。 但是,API 还能够以听起来真实但实际上是虚构的方式做出响应。

可以通过多种方法来限制 API 根据你的输入编造答案的可能性。 可以定义真实响应的基础,以便 API 根据你的数据草拟其响应。 你还可以设置较低的 Temperature 概率值,并向 API 展示在数据无法用于真实答案时如何响应。

以下演示展示如何指导 API 以更加真实的方式进行响应。 你可以向 API 提供其所理解的问题和答案示例。 你还可以提供其可能无法识别的问题示例(“Q”),并对答案(“A”)输出使用问号。 此方法可指导 API 如何回答其无法如实回答的问题。

作为一项安全措施,请将 Temperature 概率设置为零,以便 API 更有可能在对真实响应有任何疑问时使用问号 (?) 进行响应。

Q: Who is Batman?
A: Batman is a fictional comic book character.

Q: What is torsalplexity?
A: ?

Q: What is Devz9?
A: ?

Q: Who is George Lucas?
A: George Lucas is an American film director and producer famous for creating Star Wars.

Q: What is the capital of California?
A: Sacramento.

Q: What orbits the Earth?
A: The Moon.

Q: Who is Egad Debunk?
A: ?

Q: What is an atom?
A: An atom is a tiny particle that makes up everything.

Q: Who is Alvan Muntz?
A: ?

Q: What is Kozar-09?
A: ?

Q: How many moons does Mars have?
A: Two, Phobos and Deimos.

Q:

生成真实响应的指导原则

让我们回顾一下指导原则,以帮助限制 API 编造答案的可能性:

  • 为 API 提供基本事实。 指示 API 使用什么作为根据你的意图创建真实响应的基础。 如果向 API 提供用于回答问题的文本正文(如维基百科条目),则 API 不太可能伪造响应。

  • 使用低概率。 设置一个较低的 Temperature 概率值,以便 API 始终专注于你的意图,而不会转向创建虚构或捏造的响应。

  • 向 API 展示如何回复“我不知道”。 可以输入示例问题和答案,以指导 API 对无法找到真实答案的问题使用特定响应。 在本示例中,将指导 API 在找不到相应数据时使用问号 (?) 进行响应。 此方法还可以帮助 API 了解何时回答“我不知道”比编造答案更“正确”。

使用代码

Codex 模型系列是 OpenAI 基础 GPT-3 系列的后代,它经过了自然语言和数十亿行代码的训练。 该模型系列精通十几种语言,包括 C#、JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScript、SQL,甚至 Shell,但最擅长 Python。

有关生成代码补全内容的详细信息,请参阅 Codex 模型和 Azure OpenAI 服务

后续步骤