Press "Enter" to skip to content

微软生成式AI入门课程06 —— 构建文本生成应用

通过本课程至今的学习,你已经看到了核心概念,如提示符以及一个称为“提词工程”(prompt engineering)的整个学科。你可以与许多工具进行交互,比如 ChatGPT、Office 365、微软 Power Platform 等,这些工具支持你使用提示符来完成某些事情。

为了在应用程序中添加这样的体验,你需要了解提示符、补全选择以及选择一个要合作的库的概念。这正是你将在本章中学习的内容。

简介

在这一章,你将:

  • 了解 openai 库及其核心概念。
  • 使用 openai 构建文本生成应用程序。
  • 理解如何使用提示符、温度和令牌等概念构建文本生成应用程序。

学习目标

在本课结束时,你将能够:

  • 解释文本生成应用程序是什么。
  • 使用 openai 构建文本生成应用程序。
  • 配置你的应用程序以使用更多或更少的令牌,并更改温度以获得不同的输出。

什么是文本生成应用程序?

通常当你构建一个应用程序时,它会有像下面这样的某种界面:

  • 基于命令。控制台应用是典型的应用程序,你输入一个命令它就执行一个任务。例如,git 是一个基于命令的应用程序。
  • 用户界面 (UI)。一些应用程序有图形用户界面(GUI),你可以点击按钮、输入文本、选择选项等等。

基于控制台和 UI 的应用程序是有限的

与一个基于命令的应用程序相比,你输入一个命令:

  • 它是有限的。你不能只输入任何命令,只能是应用程序支持的命令。
  • 特定于语言。一些应用程序支持多种语言,但默认情况下应用程序是为特定语言构建的,即使你可以添加更多语言支持。

文本生成应用程序的好处

那么文本生成应用程序有什么不同呢?

在文本生成应用程序中,你拥有更多的灵活性,不受限于一组命令或特定的输入语言。相反,你可以使用自然语言与应用程序交互。另一个好处是,因为你已经与一个已经在大量信息语料库上训练过的数据源交互,而传统的应用程序可能受限于数据库中的内容。

我可以用文本生成应用程序构建什么?

你可以构建许多东西。例如:

  • 聊天机器人。一个回答关于主题的问题的聊天机器人,比如你的公司及其产品,可能是个不错的选择。
  • 助手。LLMs 擅长如总结文本、获取文本洞察、产生简历等文本。
  • 代码助手。根据你使用的语言模型,你可以构建一个帮助你编写代码的代码助手。例如,你可以使用 GitHub Copilot 以及 ChatGPT 这样的产品来帮助你编写代码。

我该如何开始?

嗯,你需要找到一种方法来整合 LLM,这通常涉及以下两种方法:

  • 使用 API。在这里,你构造带有你的提示符的网络请求,并获得生成的文本返回。
  • 使用库。库帮助封装 API 调用,使其更容易使用。

库/SDKs

目前已知有几个用于处理 LLM 的库,如:

  • openai,这个库让连接你的模型和发送提示变得容易。

还有一些高级别运作的库,比如:

  • Langchain。Langchain 是著名的,支持 Python。
  • Semantic Kernel。Semantic Kernel 是微软的一个库,支持 C#、Python 和 Java 语言。

使用 openai 构建第一个应用程序

让我们来看看我们该如何构建我们的第一个应用程序,需要用到哪些库,需要多少等等。

安装 openai

市面上有很多用于与 OpenAI 或 Azure OpenAI 互动的库。也可以使用许多编程语言,例如 C#、Python、JavaScript、Java 等。我们选择使用 openai Python 库,所以我们将使用 pip 来安装它。

pip install openai

创建一个资源

你需要执行以下步骤:

[!注意] 在撰写本文时,你需要申请访问 Azure Open AI 的权限。

定位 API 密钥和端点

此时,你需要告诉你的 openai 库使用哪个 API 密钥。要找到你的 API 密钥,请前往你的 Azure Open AI 资源的“密钥和端点”部分,复制“密钥 1”的值。

Keys and Endpoint resource blade in Azure Portal

现在你已经拷贝了这些信息,让我们指导库如何使用它。

[!注意] 将你的 API 密钥与你的代码分开是值得的。你可以通过使用环境变量来实现。

  • 将环境变量 OPENAI_API_KEY 设置为你的 API 密钥。 export OPENAI_API_KEY='sk-...'

设置 Azure 配置

如果你正在使用 Azure Open AI,以下是配置设置的方法:

openai.api_type = 'azure'
openai.api_key = os.environ["OPENAI_API_KEY"]
openai.api_version = '2023-05-15'
openai.api_base = os.getenv("API_BASE")

上面我们设置了如下内容:

  • api_type 设置为 azure。这告诉库使用 Azure Open AI 而不是 OpenAI。
  • api_key,这是你在 Azure 门户中找到的 API 密钥。
  • api_version,这是你想要使用的 API 版本。在撰写本文时,最新版本是 2023-05-15
  • api_base,这是 API 的端点。你可以在 Azure 门户中找到它,就在你的 API 密钥旁边。

[!注意] os.getenv 是一个读取环境变量的函数。你可以用它来读取像 OPENAI_API_KEYAPI_BASE 这样的环境变量。通过在命令行中设置这些环境变量,或者使用像 dotenv 这样的库来设置。

生成文本

生成文本的方法是使用 Completion 类。以下是一个例子:

prompt = "Complete the following: Once upon a time there was a"

completion = openai.Completion.create(model="davinci-002", prompt=prompt)
print(completion.choices[0].text)

在上面的代码中,我们创建了一个 completion 对象并传入我们想要使用的模型和提示。然后我们打印生成的文本。

聊天补全

到目前为止,你已经看到我们如何使用 Completion 来生成文本。但还有另一个称为 ChatCompletion 的类,更适合聊天机器人。以下是使用它的一个例子:

import openai

openai.api_key = "sk-..."

completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world"}])
print(completion.choices[0].message.content)

更多关于这个功能的内容将在后续章节中介绍。

练习 – 你的第一个文本生成应用

现在我们已经学会了如何设置和配置 openai,是时候构建你的第一个文本生成应用了。按照以下步骤来构建你的应用:

  1. 创建虚拟环境并安装 openai:
python -m venv venv
source venv/bin/activate
pip install openai

[!注意] 如果你使用的是 Windows,就输入 venv\Scripts\activate 而不是 source venv/bin/activate

[!注意] 通过访问 https://portal.azure.com/ 并搜索 Open AI 然后选择 Open AI 资源 之后选择 密钥与端点 并复制 密钥 1 的值来找到你的 Azure Open AI 密钥。

  1. 创建一个名为 app.py 的文件,并编写以下代码:
import openai

openai.api_key = "<用你的 open ai 密钥或 Azure Open AI 密钥替换此值>"

openai.api_type = 'azure'
openai.api_version = '2023-05-15'
openai.api_base = "<在 Azure 门户中找到你的 API 密钥的地方的端点>"
deployment_name = "<部署名称>"

# 添加你的 completion 代码
prompt = "Complete the following: Once upon a time there was a"

# 创建 completion
completion = openai.Completion.create(engine=deployment_name, model="davinci-002", prompt=prompt)

# 打印响应
print(completion.choices[0].text)

[!注意] 如果你使用的是 Azure Open AI,你需要将 api_type 设置为 azure 并将 api_key 设置为你的 Azure Open AI 密钥。

你应该会看到类似以下的输出:

非常不开心的 _____。
从前有一个非常不开心的美人鱼。

不同类型的提示,用于不同的事物

现在你已经看到了如何使用提示生成文本。你甚至已经有一个运行中的程序,可以修改和更改以生成不同类型的文本。

提示可以用于各种任务。例如:

  • 生成一种类型的文本。例如,你可以生成一首诗、一个测验的问题等。
  • 查找信息。你可以使用提示查找信息,如以下示例中的”在网络开发中,CORS是什么意思?”。
  • 生成代码。你可以使用提示生成代码,例如开发用于验证电子邮件的正则表达式,或者生成整个程序,如Web应用程序。

一个更实际的用例:食谱生成器

想象一下,你家里有食材,想要做点什么。为此,你需要一份食谱。找到食谱的方法是使用搜索引擎,或者你可以使用一个语言模型来进行搜索。

你可以这样编写一个提示:

“给我展示一道包含以下食材(鸡肉,土豆和胡萝卜)的菜品的5个食谱。每个食谱列出使用的所有食材”

根据上面的提示,你可能会得到一个类似的回答:

1. 烤鸡和蔬菜:
食材:
- 4只鸡腿
- 2个土豆,切成丁状
- 2根胡萝卜,切成丁状
- 2汤匙橄榄油
- 2瓣大蒜,切碎
- 1茶匙干百里香
- 1茶匙干牛至
- 盐和胡椒调味

2. 鸡肉和土豆炖:
食材:
- 2汤匙橄榄油
- 1个洋葱,切丁
- 2瓣大蒜,切碎
- 2个鸡胸肉,切成丁状
- 2个土豆,切成丁状
- 2根胡萝卜,切成丁状
- 1茶匙干牛至
- 1茶匙干百里香
- 1杯鸡汤
- 盐和胡椒调味

3. 鸡肉和土豆烤:
食材:
- 2汤匙橄榄油
- 2个鸡胸肉,切成丁状
- 2个土豆,切成丁状
- 2根胡萝卜,切成丁状
- 1个洋葱,切丁
- 2瓣大蒜,切碎
- 1茶匙干牛至
- 1茶匙干百里香
- 1杯鸡汤
- 盐和胡椒调味

4. 鸡肉和土豆汤:
食材:
- 2汤匙橄榄油
- 1个洋葱,切丁
- 2瓣大蒜,切碎
- 2个鸡胸肉,切成丁状
- 2个土豆,切成丁状
- 2根胡萝卜,切成丁状
- 1茶匙干牛至
- 1茶匙干百里香
- 4杯鸡汤
- 盐和胡椒调味

5. 鸡肉和土豆炒:
食材:
- 2汤匙橄榄油
- 2个鸡胸肉,切成丁状
- 2个土豆,切成丁状
- 2根胡萝卜,切成丁状
- 1个洋葱,切丁
- 2瓣大蒜,切碎
- 1茶匙干牛至

这个结果很不错,我知道该做什么了。现在,可能会有一些有用的改进:

  • 过滤掉我不喜欢或对我过敏的食材;
  • 生成一个购物清单,以防我家里没有所有的食材。

对于上述情况,我们可以增加一个额外的提示:

“请移除含大蒜的食谱,因为我对大蒜过敏,用其他东西来替代它。另外,请考虑我已经有鸡肉、土豆和胡萝卜在家,生成一个购物清单。”

现在你有了一个新的结果,即:

1. 烤鸡和蔬菜:
食材:
- 4只鸡腿
- 2个土豆,切成块状
- 2个胡萝卜,切成块状
- 2汤匙橄榄油
- 1茶匙干百里香
- 1茶匙干牛至
- 盐和胡椒,适量

2. 鸡肉和土豆炖菜:
食材:
- 2汤匙橄榄油
- 1个洋葱,切成丁状
- 2块鸡胸肉,切成块状
- 2个土豆,切成块状
- 2个胡萝卜,切成块状
- 1茶匙干牛至
- 1茶匙干百里香
- 1杯鸡汤
- 盐和胡椒,适量

3. 鸡肉和土豆烘烤:
食材:
- 2汤匙橄榄油
- 2块鸡胸肉,切成块状
- 2个土豆,切成块状
- 2个胡萝卜,切成块状
- 1个洋葱,切成丁状
- 1茶匙干牛至
- 1茶匙干百里香
- 1杯鸡汤
- 盐和胡椒,适量

4. 鸡肉和土豆汤:
食材:
- 2汤匙橄榄油
- 1个洋葱,切成丁状
- 2块鸡胸肉,切成块状
- 2个土豆,切成块状
- 2个胡萝卜,切成块状
- 1茶匙干牛至
- 1茶匙干百里香
- 4杯鸡汤
- 盐和胡椒,适量

5. 鸡肉和土豆炒菜:
食材:
- 2汤匙橄榄油
- 2块鸡胸肉,切成块状
- 2个土豆,切成块状
- 2个胡萝卜,切成块状
- 1个洋葱,切成丁状
- 1茶匙干牛至

购物清单:
- 橄榄油
- 洋葱
- 百里香
- 牛至
- 盐
- 胡椒

以上是您的五种食谱,在食谱中未提及大蒜,同时您还有一个购物列表,考虑到您家里已有的食材。

练习 – 构建一个食谱生成器

现在我们已经演示了一个场景,让我们编写代码来匹配演示的场景。按照以下步骤操作:

  1. 使用现有的 app.py 文件作为起点。
  2. 找到 prompt 变量,并将其代码更改为以下内容:prompt = “Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used”如果您现在运行代码,应该会看到类似的输出:-鸡肉土豆胡萝卜炖菜:3汤匙油,1个洋葱,切碎,2瓣大蒜,切碎,1个胡萝卜,去皮切碎,1个土豆,去皮切碎,1片月桂叶,1枝百里香,1/2茶匙盐,1/4茶匙黑胡椒,1 1/2杯鸡肉高汤,1/2杯干白葡萄酒,2汤匙新鲜切碎的香芹,2汤匙无盐黄油,1 1/2磅无骨去皮鸡大腿肉,切成1英寸大小的块
    -烤箱烤制鸡肉土豆胡萝卜:3汤匙特级初榨橄榄油,1汤匙第戎芥末,1汤匙切碎的新鲜迷迭香,1汤匙切碎的新鲜百里香,4瓣大蒜, 切碎,1 1/2磅小红土豆,切成四瓣,1 1/2磅胡萝卜,纵向切成四瓣,1/2茶匙盐,1/4茶匙黑胡椒,1只(4磅)整鸡
    -鸡肉土豆胡萝卜砂锅: 烹饪喷雾,1个大洋葱,切碎,2瓣大蒜,切碎,1个胡萝卜,去皮切碎,1个土豆,去皮擦碎,1/2茶匙干百里香叶,1/4茶匙盐,1/4茶匙黑胡椒,2杯无脂,低钠鸡肉高汤,1杯冷冻豌豆,1/4杯通用面粉,1杯2%脂肪降低的牛奶,1/4杯磨碎的帕尔马干酪

    -简易锅煮鸡肉土豆晚餐:2汤匙橄榄油,1磅无骨去皮鸡大腿肉,切成1英寸大小的块,1个大洋葱,切碎,3瓣大蒜,切碎,1个胡萝卜,去皮切碎,1个土豆,去皮切碎,1片月桂叶,1枝百里香,1/2茶匙盐,1/4茶匙黑胡椒,2杯鸡肉高汤,1/2杯干白葡萄酒

    -鸡肉土豆胡萝卜咖喱:1汤匙植物油,1个大洋葱,切碎,2瓣大蒜,切碎,1个胡萝卜,去皮切碎,1个土豆,去皮切碎,1茶匙磨碎的香菜,1茶匙磨碎的孜然,1/2茶匙磨碎的姜黄,1/2茶匙磨碎的生姜,1/4茶匙辣椒粉,2杯鸡肉高汤,1/2杯干白葡萄酒,1罐(15盎司)鹰嘴豆,漂洗,1/2杯葡萄干,1/2杯切碎的新鲜香菜注:您的LLM是不确定性的,因此每次运行程序您可能会得到不同的结果。
  3. 让我们以以下方式更改代码:no_recipes = input(“需要食谱的数量(例如,5: “)

    ingredients = input(“食材清单(例如,鸡肉、土豆和胡萝卜: “)

    # 将食谱数量和食材插入提示中
    prompt = f”为我展示{no_recipes}个使用以下食材的菜肴食谱:{ingredients}。每个食谱列出使用的所有食材”测试运行代码的一个示例可能看起来像这样:需要食谱的数量(例如,5:3
    食材清单(例如,鸡肉、土豆和胡萝卜:牛奶、草莓

    -草莓牛奶奶昔:牛奶、草莓、糖、香草精、冰块
    -草莓蛋糕:牛奶、面粉、泡打粉、糖、盐、无盐黄油、草莓、鲜奶油
    -草莓牛奶:牛奶、草莓、糖、香草精

通过添加过滤和购物清单进行改进

我们现在拥有一个能够制作食谱的应用,并且由于它依赖于用户的输入,包括食谱数量和食材,所以它很灵活。

为了进一步改进,我们想要添加以下内容:

  • 过滤掉食材。我们想要过滤掉我们不喜欢或对我们过敏的食材。为了实现这一变化,我们可以编辑现有的提示并在提示的最后添加一个过滤条件,比如这样:filter = input(“过滤条件(例如,素食、严格素食或无麸质): “)

    prompt = f”为我展示{no_recipes}个使用以下食材的菜肴食谱:{ingredients}。每个食谱列出的食材不包含{filter}”上面,我们在提示的末尾添加了{filter},我们也从用户那里获取了过滤值。现在运行程序可能看起来像这样的输入示例:菜谱数目(例如:5个:3
    食材清单(例如:鸡肉、土豆和胡萝卜:洋葱、牛奶
    过滤器(例如:素食、纯素或无麸质:无牛奶

    1. 法式洋葱汤

    食材:

    -1个大洋葱,切片
    -3杯牛肉高汤
    -1杯牛奶
    -6片法式面包
    -1/4杯碎帕尔玛干酪
    -1汤匙黄油
    -1茶匙干百里香
    -1/4茶匙盐
    -1/4茶匙黑胡椒粉

    烹饪步骤:

    1. 在一个大锅中,用黄油炒洋葱,直到变金黄色。
    2. 加入牛肉高汤、牛奶、百里香、盐和黑胡椒粉。煮沸。
    3. 转小火煨煮10分钟。
    4. 将法式面包片放在碗里。
    5. 舀上汤。
    6. 撒上帕尔玛干酪。

    2. 洋葱土豆汤

    食材:

    -1个大洋葱,切碎
    -2杯土豆,切丁
    -3杯蔬菜高汤
    -1杯牛奶
    -1/4茶匙黑胡椒粉

    烹饪步骤:

    1. 在一个大锅中,用黄油炒洋葱,直到变金黄色。
    2. 加入土豆、蔬菜高汤、牛奶和胡椒粉。煮沸。
    3. 转小火煨煮10分钟。
    4. 热乎乎上桌。

    3. 浓郁洋葱汤

    食材:

    -1个大洋葱,切碎
    -3杯蔬菜高汤
    -1杯牛奶
    -1/4茶匙黑胡椒粉
    -1/4杯多用途面粉
    -1/2杯碎帕尔玛干酪

    烹饪步骤:

    1. 在一个大锅中,用黄油炒洋葱,直到变金黄色。
    2. 加入蔬菜高汤、牛奶和胡椒粉。煮沸。
    3. 转小火煨煮10分钟。
    4. 在一个小碗中,搅拌面粉和帕尔玛干酪,直到光滑。
    5. 加入汤中,再煨煮5分钟,或者直到汤变稠。

正如您所看到的,任何含有牛奶的食谱都被过滤掉了。但是,如果你不能耐受乳糖,你可能还想过滤掉那些含有奶酪的食谱,所以需要明确说明。

  • 制作购物清单。我们希望制作购物清单时,能够考虑到我们家里已有的食材。

(请注意,以上内容为代码段和实例文本的直接翻译,未涉及到具体编程代码的实现。)

为了实现这项功能,我们可以选择一次性解决所有问题,也可以将其分解成两个步骤。让我们尝试后一种方法。这里我们建议添加一个额外的提示,但是要使其工作,我们需要将前一个提示的结果作为后一个提示的上下文。

定位到代码中输出第一个提示结果的部分,并在下面添加以下代码:

old_prompt_result = completion.choices[0].text
prompt = "为生成的食谱产生一个购物清单,并请不要包括我已经有的食材。"

new_prompt = f"{old_prompt_result} {prompt}"
completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200)

# 打印响应
print("购物清单:")
print(completion.choices[0].text)

注意以下几点:

  1. 我们通过将第一个提示的结果添加到新的提示中来构建一个新的提示:
new_prompt = f"{old_prompt_result} {prompt}"

2. 我们发出一个新的请求,同时考虑我们在第一个提示中请求的令牌数量,所以这次我们说 max_tokens 是1200。

completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200)

通过这段代码的运行,我们现在得到以下输出:

食谱数量(例如,5: 2
食材列表(例如,鸡肉、土豆和胡萝卜:苹果、面粉
筛选(例如,素食者、纯素食者或不含麸质的:糖

- 苹果和面粉煎饼:1杯面粉,1/2茶匙泡打粉,1/2茶匙小苏打,1/4茶匙盐,1汤匙糖,1个鸡蛋,1杯酪乳或酸牛奶,1/4杯融化的黄油,1个格兰尼史密斯苹果,剥皮并磨碎。
- 苹果油炸圈:1-1/2杯面粉,1茶匙泡打粉,1/4茶匙盐,1/4茶匙小苏打,1/4茶匙肉豆蔻,1/4茶匙肉桂,1/4茶匙多香果,1/4杯糖,1/4杯植物起酥油,1/4杯牛奶,1个鸡蛋,2杯碎的,去皮的苹果。
购物清单:
- 面粉、泡打粉、小苏打、盐、糖、鸡蛋、酪乳、黄油、苹果、豆蔻、肉桂、多香果。

改善您的设置

我们目前有的是有效的代码,但还可以做一些调整来进一步改进。我们应该做的一些事情包括:

  • 将机密信息与代码分离,如 API 密钥。机密信息不应该存在于代码中,应该存储在一个安全的位置。要将机密信息与代码分离,我们可以使用环境变量,并使用诸如 python-dotenv 的库从文件中加载它们。代码中的实现方法如下:
    1. 创建一个 .env 文件,内容如下:
OPENAI_API_KEY=sk-...

注意,对于 Azure,您需要设置以下环境变量:

OPENAI_API_TYPE=azure
OPENAI_API_VERSION=2023-05-15
OPENAI_API_BASE=<replace>

在代码中,您将这样加载环境变量:

 from dotenv import load_dotenv

load_dotenv()

openai.api_key = os.environ["OPENAI_API_KEY"]
  • 关于令牌长度的说明。我们应该考虑我们需要生成文字的令牌数量。令牌是要花钱的,所以在可能的情况下,我们应该尽量节约令牌数量。例如,我们能否组织提示以使用更少的令牌?要更改使用的令牌数量,您可以使用 max_tokens 参数。例如,如果您想使用100个令牌,您可以这样做:completion = openai.Completion.create(model=”davinci-002″, prompt=prompt, max_tokens=100)
  • 温度值的实验。我们到目前为止还没有提到温度值,但它对我们程序的性能来说是重要的背景。温度值越高,输出就会越随机;相反,温度值越低,输出就会越可预测。考虑您是希望您的输出有变化,还是希望更加可预测。要修改温度值,您可以使用 temperature 参数。例如,如果您想使用0.5的温度值,您可以这样做:completion = openai.Completion.create(model=”davinci-002″, prompt=prompt, temperature=0.5)注意,靠近1.0,输出的变化就越多。

作业

对于这项作业,您可以自由选择要构建的内容。

以下是一些建议:

  • 调整食谱生成器应用程序以进一步改进。尝试不同的温度值和提示,看看您能发现什么。
  • 构建一个“学习小伙伴”。这个应用程序应该能够回答关于一个主题的问题,例如 Python,您可以设置提示如“Python 中的某个主题是什么?”,或者您可以设置提示,展示给我某个主题的代码等。
  • 历史机器人,让历史变得生动起来,指示机器人扮演一个特定的历史人物,并向他询问他的生活和时代。

解决方案

学习小伙伴

以下是一个起始提示,看看您如何使用并根据自己的喜好进行调整。

- “你是 Python 语言的专家

  按照以下格式建议一个针对初学者的 Python 课程:

  格式:
  - 概念:
  - 对课程的简要解释:
  - 带解决方案的代码练习”

历史机器人

这里有一些您可以使用的提示:

- “你是亚伯拉罕·林肯,请用3句话告诉我关于你自己的信息,并使用亚伯拉罕会使用的语法和词汇来回应”
- “你是亚伯拉罕·林肯,使用类似亚伯拉罕会使用的语法和词汇来回应:

告诉我关于你最伟大的成就,300字以内。”

知识检查

温度概念有什么作用?

  1. 它控制输出的随机性。
  2. 它控制响应的大小。
  3. 它控制使用了多少令牌。

🚀 挑战

在做作业时,请尝试改变温度值,将其设置为0、0.5和1。请记住,0是最少变化的,而1是最多变化的,哪个值最适合您的应用程序?

干得漂亮!继续学习

完成这节课后,请查看我们的生成式 AI 学习集合,继续提升您的生成式 AI 知识!

继续前往第7课,我们将讨论如何构建聊天应用程序

本文档由GeekAI文档翻译服务自动翻译完成:

微信扫描立刻体验极客翻译
发表回复