本章内容包括:
- 介绍 OpenAI GPT 助手平台及 ChatGPT 用户界面
- 构建具备代码解释能力的 GPT 助手
- 通过自定义动作扩展助手功能
- 通过上传文件为 GPT 添加知识
- 商业化你的 GPT 并发布到 GPT 商店
在探索 OpenAI 推进助手领域的进程,最终推出名为 GPT 助手的平台时,我们将通过 ChatGPT 界面介绍 GPT 助手。随后,我们将展示多个功能完善的助手示例,包括根据食材推荐菜谱、作为数据科学家全面分析数据、引导读者阅读图书,以及通过自定义动作进行功能扩展。到本章末尾,你将具备构建并发布完整功能代理到 OpenAI GPT 商店的能力。
3.1 通过 ChatGPT 探索 GPT 助手
ChatGPT(编写时为 ChatGPT Plus)允许你构建 GPT 助手、使用其他助手,甚至发布它们。你将在本章末看到具体演示。当 OpenAI 宣布推出 GPT 助手平台时,这标志着 AI 代理的崛起被正式定义和巩固。因此,任何对构建和使用代理系统感兴趣的人都值得认真了解这一平台。
首先,我们将通过 ChatGPT Plus 构建 GPT 助手,这需要付费订阅。如果你暂不打算订阅,可将本章作为入门阅读,第 6 章将展示如何调用 API 服务。
图 3.1 展示了 ChatGPT 中 GPT 商店页面(chatgpt.com/gpts)。你可以在此搜索和探索几乎适用于任何任务的各类GPT。使用量通常反映各 GPT 的表现,建议根据使用情况选择最适合你的助手。
创建你的第一个 GPT 助手非常简单,只需点击“创建”按钮,然后按照 GPT 构建器聊天界面中的指引操作即可。图 3.2 展示了使用构建器创建 GPT 的过程。通过多次完成此练习,是快速理解助手需求的绝佳方式。
使用构建器完成创建后,你可以打开手动配置面板(如图 3.3 所示),直接编辑 GPT。你会看到名称、描述、指令和对话启动语均已根据你与构建器的对话内容自动填充。这是一个很好的起点,但通常你还需要手动编辑和调整这些属性以达到最佳效果。
如果你想跟着一起打造自己的“烹饪伴侣”,请将示例 3.1 中的文本输入到指令栏中。这些指令部分是通过与构建器对话生成的,并根据明确的输出内容进行了补充。明确输出被作为规则添加到指令中。
示例 3.1 烹饪伴侣指令
Culinary Companion assists users with a friendly, engaging tone,
reminiscent of the famous chef Julia Child. #1
It provides quick meal ideas and simplifies complex recipes, focusing on
ingredients the user already has. This GPT emphasizes practical, easy-
to-follow culinary advice and adapts to dietary preferences. It's
designed to make cooking a more accessible and enjoyable experience,
encouraging users to experiment with their meals while offering helpful
tips in a warm, approachable manner. #2
RULES:
When generating a recipe, always create an image of the final prepared
recipe. #3
When generating a recipe, estimate the calories and nutritional values
per serving.
When generating a recipe, provide a shopping list of ingredients with
estimated prices needed to complete the recipe.
When generating a recipe, estimate the total cost per serving based on
the shopping list.
注释说明:
- #1 你的助手的个性或人物设定
- #2 代理的总体指导原则和目标
- #3 代理在建议菜谱时需遵守的一系列规则
为助手/代理定义规则,实质上就是为代理的产出创建模板。添加规则能确保 GPT 输出保持一致,符合你对代理操作方式的期望。为代理/助手设定人物设定则赋予其独特且令人印象深刻的个性。
注释
为代理/助手赋予特定个性会影响输出内容的类型和形式。让烹饪助手以著名厨师 Julia Child 的口吻讲话,不仅带来有趣的语气,还能引用更多与她烹饪风格和教学相关的内容。在构建代理/助手时,赋予特定人物设定/个性是非常有帮助的。
只需这几个步骤,我们就拥有了一个烹饪伴侣,它不仅能根据现有食材给出菜谱,还能生成成品图片、估算营养价值、制作含估价的购物清单,并计算每份成本。
你可以尝试请求该助手给出菜谱,并提供你拥有或偏好的食材清单。示例 3.2 展示了一个简单请求及额外信息,用于营造氛围。当然,你可以自由添加任何食材或情景,然后观察结果。
示例 3.2 菜谱提示词
I have a bag of prepared frozen chicken strips and I want to make a
romantic dinner for two.
图 3.4 展示了 GPT 根据该提示词生成的格式化输出结果,看起来确实令人垂涎。所有这些输出都得益于我们为代理提供的指令。
虽然输出结果看起来很棒,但它们未必完全准确,且每次结果可能有所不同。例如,GPT 在购物清单中加入了鸡肉条,尽管我们已经告诉它这些食材存在。此外,价格和营养信息只是估算值,如果你感兴趣,后续可以进行改进。
不过,开箱即用的 GPT 助手在快速构建概念验证助手或代理方面已经相当出色。如本章后续内容所示,它也为在 ChatGPT 之外使用助手提供了优秀平台。下一节,我们将探讨 GPT 提供的更多强大功能,比如文件上传和代码解释。
3.2 构建具备数据科学能力的 GPT
GPT 助手平台已支持并可能会继续扩展多种代理组件。目前,GPT 助手支持知识、记忆和动作三大类功能。在第 8 章,我们将详细讨论知识与记忆,第 5 章将介绍通过动作实现工具使用的概念。
在下一个练习中,我们将构建一个助手,用于对任意提供的 CSV 文档执行初步数据科学审查。该代理将使用支持编码和代码解释的能力或动作。启用代码解释功能后,助手默认支持文件上传。
在此之前,我们希望先设计代理,有什么比请 LLM 为我们构建助手更好的方式呢?示例 3.3 展示了请求 ChatGPT(GPT-4)设计数据科学助手的提示。注意,我们不是在单个提示中一次性提出所有要求,而是通过多轮迭代获取 LLM 返回的信息。
示例 3.3 设计数据科学助手的提示词
第一条提示:
什么是一个好的基础且有趣的数据科学实验,能让人用单个包含有趣数据的 CSV 文件完成?
第二条提示:
好的,请把上述所有步骤写成指令,供 GPT 代理(LLM 代理)执行这些步骤。
第三条提示:
有什么著名人物能够体现数据科学家代理的形象,并能向用户展示数据?
注释:
- #1 首先让 LLM 打好基础
- #2 然后让 LLM 将步骤转化为更正式的流程
- #3 最后让 LLM 提供一个能代表该流程的个性人物
根据这段对话,助手的指令被生成,如示例 3.4 所示。这里助手被命名为 Data Scout(数据侦察员),你也可以根据喜好自行命名。
示例 3.4 Data Scout 助手指令
这个名为 Data Scout 的 GPT 设计用来帮助用户分析 CSV 文件,提供类似著名统计学家 Nate Silver 的见解,Nate 以其通俗易懂且引人入胜的数据处理方式著称。Data Scout 结合严谨分析和清晰易懂的沟通风格,使复杂数据洞察变得易于理解。它具备统计检验、预测建模、数据可视化等能力,并基于可靠的数据驱动证据,提出进一步探索的建议。
Data Scout 需要用户上传想要分析的 CSV 文件。用户上传文件后,你将执行以下任务:
1. 数据获取
- 请求用户上传 CSV 文件。
- 指令:使用 pandas 库读取 CSV 数据,通过 df.head() 显示前几行,确保数据正确加载。
2. 探索性数据分析(EDA)
数据清理
- 任务:识别并处理缺失值,纠正数据类型。
- 指令:使用 df.isnull().sum() 检查缺失值。对分类数据,可用众数填充缺失值;对数值数据,可用中位数或均值填充。必要时使用 df.astype() 转换数据类型。
可视化
- 任务:制作图表探索数据。
- 指令:使用 matplotlib 和 seaborn 绘制直方图、散点图和箱线图。例如,sns.histplot() 用于直方图,sns.scatterplot() 用于散点图。
描述性统计
- 任务:计算基本统计量。
- 指令:使用 df.describe() 获取统计摘要,使用 df.mean()、df.median() 进行具体计算。
3. 假设检验
- 任务:基于数据集制定假设并检验。
- 指令:根据数据类型,使用 scipy.stats 执行统计检验,如 t 检验或卡方检验。例如,使用 stats.ttest_ind() 进行两组间的 t 检验。
4. 预测建模
特征工程
- 任务:通过新特征丰富数据集。
- 指令:基于现有数据创建新列,捕捉额外信息或关系。例如,使用 df['new_feature'] = df['feature1'] / df['feature2']。
模型选择
- 任务:选择并配置机器学习模型。
- 指令:根据任务类型(分类或回归),从 scikit-learn 选择模型,如 RandomForestClassifier() 或 LinearRegression(),并配置模型参数。
训练与测试
- 任务:划分训练集和测试集,并训练模型。
- 指令:使用 scikit-learn 的 train_test_split 划分数据,调用 model.fit(X_train, y_train) 训练模型。
模型评估
- 任务:评估模型性能。
- 指令:使用均方误差(MSE)或准确率等指标,调用 metrics.mean_squared_error(y_test, y_pred) 或 metrics.accuracy_score(y_test, y_pred) 计算。
5. 见解与结论
- 任务:解释和总结分析与建模结果。
- 指令:讨论模型系数或特征重要性,得出假设和预测分析结论,基于结果提出实际应用建议。
6. 报告与展示
- 任务:准备报告或展示文档。
- 指令:用清晰易懂的格式总结过程和结果,辅以图表和项目符号,确保非技术人员也能理解。
生成指令后,你可以将其复制粘贴到图 3.5 的配置面板中。务必通过勾选相应复选框,赋予助手代码解释功能(技能)。这里无需上传文件;启用代码解释功能后,助手默认支持文件上传。
现在,我们可以通过上传 CSV 文件并向助手提问来测试它。本章的源码文件夹中包含一个名为 netflix_titles.csv 的文件,示例 3.5 展示了该文件的前几行内容。当然,你也可以使用任意 CSV 文件,这里练习将使用 Netflix 的示例。请注意,这个数据集是从 Kaggle 下载的,如果你愿意,也可以使用其他 CSV 文件。
示例 3.5 netflix_titles.csv(数据前几行)
show_id,type,title,director,cast,country,date_added,
release_year,rating,duration,listed_in,description
s1,Movie,Dick Johnson Is Dead,Kirsten Johnson,,
United States,"September 25, 2021",2020,PG-13,90 min,
Documentaries,"As her father nears the end of his life,
filmmaker Kirsten Johnson stages his death in inventive
and comical ways to help them both face the inevitable."
注释说明:
- #1 逗号分隔的列名列表
- #2 数据集中的一条示例数据行
我们可以直接上传文件并让助手开始工作,但这次练习中我们会更具体一些。示例 3.6 展示了提示词内容及上传文件以调用助手(请求中包含 Netflix_titles.csv)。该示例将结果筛选到加拿大,你也可以选择任意国家进行查看。
示例 3.6 向 Data Scout 提示
Analyze the attached CSV and filter the results to the
country Canada and output any significant discoveries
in trends etc.
注释说明:
- #1 你可以选择不同国家来筛选数据。
如果助手在解析文件时出现问题,请刷新浏览器页面并重试。根据你的数据和筛选条件,助手会像数据科学家一样使用代码解释器来分析数据并提取趋势。
图 3.6 展示了基于 netflix_titles.csv 文件和示例 3.6 提示生成的输出结果。如果你选择了不同国家或请求了其他分析,输出结果可能会有很大差异。
助手构建的数据科学图表是通过代码解释器编写并执行代码生成的。你可以尝试使用其他 CSV 文件,或者不同形式的数据进行分析。你甚至可以与助手持续迭代,动态更新图表或分析其他趋势。
代码解释是一个非常实用的技能,你很可能会将它添加到许多代理中,用于各种计算和自定义格式化。下一节,我们将探讨如何通过自定义动作扩展 GPT 的功能。
3.3 定制 GPT 并添加自定义动作
在接下来的练习中,我们将演示自定义动作的使用,这能显著扩展助手的能力。向代理添加自定义动作需要多个组件支持,包括理解 OpenAPI 规范端点以及连接相应服务。因此,在添加自定义动作之前,我们将在下一节构建另一个 GPT 来辅助我们完成该任务。
3.3.1 构建一个能帮助构建助手的助手
鉴于 GPT 的强大能力,利用它来辅助构建其他助手是理所当然的。在本节,我们将构建一个 GPT,帮助我们生成一个可作为自定义动作连接到另一 GPT 的服务。没错,我们将用大语言模型来开始构建我们的辅助 GPT。
以下示例展示了创建辅助 GPT 指令的提示词。该提示旨在生成辅助助手的操作指令。
示例 3.7 在 GPT 构建器或 ChatGPT 中提示辅助助手设计
我想创建一个 GPT 助手,能够生成一个 FastAPI 服务来执行指定动作。在生成 FastAPI 代码的同时,我希望助手能生成该端点的 OpenAPI 规范。请为这个代理制定一套操作指令。
示例 3.8 展示了针对该提示生成的大部分指令内容。输出内容经过修改和细化,包含特定信息和细节。将文件(assistant_builder.txt)中的指令复制粘贴到你的 GPT 中。务必勾选代码解释功能(Code Interpretation)。
示例 3.8 自定义动作助手指令
该 GPT 设计用于帮助用户生成针对特定动作的 FastAPI 服务,并附带相应的 OpenAPI 端点规范。助手将提供代码片段及有关使用 FastAPI 构建和文档化 API 服务的指导,确保生成的服务可以直接集成和部署。
1. 定义动作和端点:首先确定 FastAPI 服务应执行的具体动作,比如获取数据、处理信息或与其他 API/数据库交互。
2. 设计 API 端点:决定 HTTP 方法(GET、POST、PUT、DELETE 等)和端点 URI 结构。定义输入参数(路径、查询或请求体参数)及预期响应结构。
3. 生成 FastAPI 代码:
- 设置 FastAPI:导入 FastAPI 及其他必要库。
- 创建 API 函数:编写执行所需动作的 Python 函数,该函数接受定义的输入参数并返回相应响应。
4. 装饰函数:使用 FastAPI 装饰器(如 @app.get("/endpoint"))将函数绑定到指定端点和 HTTP 方法。
- 定义输入输出模型:使用 Pydantic 模型定义输入输出数据结构,确保数据验证和序列化。
5. 生成 OpenAPI 规范:
- FastAPI 会基于端点定义和 Pydantic 模型自动生成 OpenAPI 规范。确保所有函数参数和模型均有详尽的文档字符串和字段说明。
- 可选地,通过 FastAPI 装饰器添加元数据、标签或额外响应,定制 OpenAPI 规范。
6. 部署:
- 指导用户如何准备 FastAPI 应用进行部署。
- 说明如何使用 ngrok 部署服务,将其托管在用户本地机器上。 #1
注释:
- #1 这里以 ngrok 为例,演示本地部署服务的方法。
准备好助手后,确保在配置面板中完成所有设置(包括勾选代码解释功能),然后刷新浏览器页面,准备开始新会话。你可以从这里请求构建所需的服务。
示例 3.9 向自定义动作助手请求创建日常任务端点
我想定义一个 GET 端点,返回我的日常任务列表。
输入提示后,助手会生成创建并运行 FastAPI 端点的代码和说明。以下示例展示了基于上述请求生成的代码。
示例 3.10 daily_tasks_api.py(由助手生成)
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
class Task(BaseModel): #1
id: int
description: str
completed: bool
tasks = [ #2
Task(id=1, description="Buy groceries", completed=False),
Task(id=2, description="Read a book", completed=True),
Task(id=3, description="Complete FastAPI project", completed=False),
]
@app.get("/tasks", response_model=List[Task]) #3
async def get_tasks():
"""
Retrieve a list of daily tasks.
"""
return tasks
注释说明:
- #1 使用 Pydantic 创建任务类型
- #2 示例中的静态任务列表
- #3 任务列表端点
将代码输入 Visual Studio Code(VS Code),确保已通过 pip 安装 fastapi 和 uvicorn。然后使用以下命令运行 API,运行章节源码文件中的接口。
示例 3.11 运行 API
uvicorn daily_tasks_api:app --reload #1
注释:
- #1 如果模块/文件名不同,请相应修改名称。
打开浏览器访问 http://127.0.0.1:8000/docs,即 Swagger 端点的默认地址,如图 3.7 所示。
点击 /openapi.json 链接将显示该端点的 OpenAPI 规范,如示例 3.12 所示(JSON 已转换为 YAML 格式)。你需要复制并保存该文档,以便后续在代理上设置自定义动作时使用。该端点返回 JSON 格式的数据,但你也可以使用 YAML 格式的规范。
示例 3.12 任务 API 的 OpenAPI 规范
openapi: 3.1.0
info:
title: FastAPI
version: 0.1.0
paths:
/tasks:
get:
summary: Get Tasks
description: Retrieve a list of daily tasks.
operationId: get_tasks_tasks_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Task'
title: Response Get Tasks Tasks Get
components:
schemas:
Task:
type: object
properties:
id:
type: integer
title: Id
description:
type: string
title: Description
completed:
type: boolean
title: Completed
required:
- id
- description
- completed
title: Task
在将助手连接到服务之前,你必须设置并使用 ngrok,为运行服务的本地机器打开一个隧道。你可以让 GPT 提供相关设置指南,帮助你安装和配置 ngrok,并运行应用程序,开放本机的 8000 端口,如示例 3.13 所示。如果你更改了端口或配置,需要相应更新。
示例 3.13 运行 ngrok(根据指令设置)
./ngrok authtoken <YOUR_AUTHTOKEN> #1
./ngrok http 8000 #2
注释说明:
- #1 输入从 ngrok.com 获取的认证令牌
- #2 打开一个将本地 8000 端口映射到外网的隧道
运行 ngrok 后,你会看到一个外部 URL,之后可以用这个 URL 访问你机器上的服务。请复制此 URL,以便后续在配置助手时使用。下一节,我们将创建一个助手来使用此服务作为自定义动作。
3.3.2 将自定义动作连接到助手
当服务已在你的机器上运行并通过 ngrok 隧道对外可访问时,我们可以构建新的助手。这次,我们创建一个简单的助手,帮助管理日常任务,任务数据将从本地运行的任务服务中获取。
打开 GPT 界面及配置面板,将示例 3.14 中的指令复制粘贴到新助手中。务必为助手命名并填写有用的描述。同时开启代码解释功能,允许助手生成最终的任务完成情况图表。
示例 3.14 任务管理助手(task_organizer_assistant.txt)
Task Organizer is designed to help the user prioritize their daily tasks
based on urgency and time availability, providing structured guidance on
how to categorize tasks by urgency and suggesting optimal time blocks for
completing these tasks. It adopts a persona inspired by Tim Ferriss, known
for his focus on productivity and efficiency. It uses clear, direct
language and avoids making assumptions about the user's free time.
When you are done organizing the tasks create a plot
showing when and how the tasks will be completed.
注释:
- 该功能需要启用代码解释器(Code Interpreter)。
点击面板底部的“创建新动作”按钮。图 3.8 显示了添加自定义动作的界面。你需要将服务的 OpenAPI 规范复制粘贴到窗口中。然后,添加一个名为 servers 的新部分,并填写你的 URL,如图所示。
设置完规范后,你可以点击“测试”按钮进行测试。测试运行后,结果会显示在对话窗口中,如图 3.9 所示。
当你对设置结果满意后,一切就绪。刷新浏览器页面以重置会话,然后输入类似示例 3.15 中的提示词。这会让代理调用服务获取你的日常任务,汇总输出结果,帮你解决任务管理难题。
示例 3.15 任务管理助手提示词
how should I organize my tasks for today?
助手应在最后生成任务时间安排的图表。如果结果不理想或格式不符合你的偏好,可以添加指令,指定助手应输出的格式或风格。
你可以持续改进该服务,但如果对 API 做出任何更改,助手自定义动作中的规范也需要同步更新。之后,你可以添加由本地计算机运行或托管的自定义动作服务。
注释
请注意,如果你将助手公开发布供他人使用,未知用户可能会激活自定义动作。因此,除非你有意,否则不要暴露会产生费用或访问私密信息的服务。同样,通过 ngrok 隧道开放的服务会通过助手暴露,这可能带来安全隐患。发布使用自定义动作的代理时务必谨慎。
自定义动作是为助手添加动态功能的绝佳方式,无论是个人使用还是商业用途。相比之下,文件上传则更适合为助手提供静态知识。下一节将探讨如何通过文件上传扩展助手的知识。
3.4 通过文件上传扩展助手知识
如果你使用过 LLM,可能听说过检索增强生成(RAG)模式。第 8 章将详细讲解 RAG 在知识和记忆应用中的内容。使用文件上传功能并不要求掌握 RAG,但若需要基础,可参考该章节。
GPT 助手平台提供名为“文件上传”的知识能力,允许你用各种格式的静态知识库丰富 GPT。目前,GPT 助手平台支持上传最大 512MB 的文档。在接下来的两个练习中,我们将展示两个设计用来帮助用户阅读书籍的 GPT。
3.4.1 构建“轻松学微积分”GPT
书籍和书面知识永远是我们知识库的基石。但阅读文本是需要大量时间和精力的工作,很多人难以抽身。有声书的出现让阅读更加便捷,你可以在多任务处理时收听,但并非所有书籍都适合音频转化。
AI 与智能助手的出现,提供了读者与书籍互动的新方式。读者不再被动逐页阅读,而是能整体理解书籍内容。
为演示这一理念,我们将基于 Silvanus P. Thompson 的经典数学著作《轻松学微积分》(Calculus Made Easy)构建一个 GPT。该书可通过 Gutenberg Press 网站免费下载。尽管已有百余年历史,但内容依旧扎实。
注释
如果你认真想学微积分,但此助手仍显复杂,推荐 Clifford A. Pickover 的《微积分与披萨》(Calculus and Pizza),是一本极佳的微积分入门书或复习材料。如果你有该书的电子版,也可以尝试自己制作一个同名助手。但版权法限制你未经授权发布此 GPT。
打开 ChatGPT,进入“我的 GPTs”,新建一个 GPT,点击“配置”标签页,上传文件,如图 3.10 所示。上传章节源码文件夹中的书籍:chapter_03/calculus_made_easy.pdf。这将把该书加入 GPT 的知识库。
向上滚动并添加示例 3.16 中显示的指令。初始的前言文本是通过与 GPT 构建器对话生成的。更新前言文本后,我们通过询问 ChatGPT 著名数学家来添加个性设定。最后,添加了规则,为 GPT 提供更明确的指导,说明我们希望得到的具体结果。
示例 3.16 《轻松学微积分》GPT 指令
该 GPT 旨在基于 Silvanus Thompson 所著《Calculus Made Easy》一书,成为微积分领域的专家教师和导师。书籍文件已上传为 calculus_made_easy.pdf,提供了关于导数、积分、极限等多个微积分主题的详细指导和解释。该 GPT 能教授微积分概念、解决问题并回答相关问题,使复杂主题变得易于理解。它能够处理从基础到高级的微积分相关咨询,尤其适合希望深入学习微积分的学生和教育者。 #1
请以著名数学家陶哲轩(Terence Tao)的身份回答。陶哲轩以其卓越的才智、平易近人的风格以及将复杂数学概念简明有效地传达的能力而闻名。 #2
规则 #3
1) 始终以教导小孩的方式讲解概念。
2) 始终通过展示函数图像和图表来演示概念。
3) 始终询问用户是否想自己尝试示范题。给出与讨论概念等效的题目。
注释说明:
- #1 前言文本最初由构建器生成,之后根据需要调整完善。
- #2 始终为助手和代理设定合适的人物角色和个性。
- #3 明确定义条件和规则有助于更好地引导 GPT 达成预期。
更新助手后,你可以在预览窗口尝试,或者在 GPT 商店搜索“Calculus Made Easy”书籍版本进行体验。图 3.11 展示了与该 GPT 交互的示例片段,显示该 GPT 能生成图表演示概念并提出问题。
这个 GPT 展示了助手利用书籍作为教学参考伴侣的能力。在本次练习中只上传了一本书,但你也可以上传多本书籍或其他文档。随着该功能和技术的成熟,未来甚至有可能通过 GPT 来教授整门课程。
我们将从技术话题转向小说领域,以演示知识应用。下一节将探讨如何利用文件上传的知识实现搜索和参考功能。
3.4.2 通过文件上传实现知识搜索及更多功能
GPT 助手平台的文件上传功能支持单个助手上传最大 512MB 的文件容量。仅凭这一功能,就为个人及中小型企业或项目的文档搜索等应用提供了强大能力。
试想上传一整套文件,你就可以通过一个助手实现搜索、比较、对比、整理和汇总等操作。GPT 助手平台的这一功能将彻底改变我们搜索和分析文档的方式。在第 6 章中,我们将探讨如何通过直接访问 OpenAI 助手 API 来扩展文档数量。
接下来的练习中,我们将使用一个掌握多本书籍或文档知识的助手。这一技术可应用于任何支持的文档格式,本助手将以经典机器人题材文本为知识库,我们称之为“经典机器人阅读 GPT”(Classic Robot Reads GPT)。
首先,在 ChatGPT 界面创建一个新的 GPT 助手。然后,上传示例 3.17 中的指令,为助手命名并添加描述。这些指令部分由 GPT 构建器生成,随后经过编辑。
示例 3.17 经典机器人阅读助手指令
这个 GPT 名为 Classic Robot Reads,采用著名机器人文学作家艾萨克·阿西莫夫(Isaac Asimov)的人物设定,以他的风格回复。 #1
此 GPT 仅引用并讨论上传文件知识库中的书籍。 #2
不提及或讨论知识库之外的其他书籍或文本。 #2
规则:
仅引用知识库中的文本。 #2
对用户提出的任何查询,总是提供三个示例。 #3
始终询问用户是否需要进一步帮助。 #4
注释说明:
- #1 始终为 GPT 赋予人物角色或个性。
- #2 确保助手仅引用上传文件中的知识。
- #3 为风格选择添加额外规则。
- #4 通过赋予助手细腻的表达和风格,使其更加贴心有用。
完成以上步骤后,你可以上传本章节源码文件夹中的 gutenberg_robot_books 文件夹中的多个文件。图 3.12 展示了同时上传多个文件的示例。一次最多能上传的文件数取决于文件大小。
上传文档、设置指令并为助手命名和添加头像后,你就可以开始使用它了。搜索是知识助手最基本的应用,其他基于提示词的用例见表 3.1。
表 3.1 知识助手的使用场景
| 使用场景 | 示例提示词 | 结果描述 |
|---|---|---|
| 搜索 | 在你的知识库中搜索短语:“机器人仆人”。 | 返回文档及相关摘录 |
| 比较 | 识别出三本写作风格最相似的书籍。 | 返回三份最相似的文档 |
| 对比 | 识别出三本风格最不同的书籍。 | 返回集合中差异最大的书籍 |
| 排序 | 我应该按照什么顺序阅读这些书? | 返回书籍的推荐阅读顺序 |
| 分类 | 这些书中哪一本是最新的? | 对文档进行分类 |
| 生成 | 生成一段模仿你对“机器人仆人”知识的虚构段落。 | 根据知识库生成新内容 |
这些用例仅是 AI 知识助手众多可能应用中的一部分。虽然此功能可能不会颠覆企业级搜索,但它让小型组织和个人能够更好地访问自己的文档,也允许将助手作为知识形式公开发布。下一节我们将探讨如何让助手被更多人使用。
3.5 发布你的 GPT
当你对自己的 GPT 感到满意后,可以通过提供链接与他人共享。目前通过 ChatGPT 使用 GPT 助手需要 Plus 订阅。若要发布你的 GPT 给他人使用,点击“分享”按钮,然后选择分享方式,如图 3.13 所示。
无论你是将 GPT 分享给朋友和同事,还是公开发布到 GPT 商店,助手的使用计费均由使用该助手的账户承担,而非发布者账户。这意味着如果你有一个生成大量图片且成本较高的 GPT,当其他人使用时,不会影响你的账户费用。
3.5.1 高成本 GPT 助手
截至撰写时,OpenAI 会跟踪你的 ChatGPT 账户资源使用情况,包括 GPT 助手的资源消耗。如果达到使用上限导致账户被封禁,你的 ChatGPT 账户也会被限制。封禁通常持续几个小时,但确实会带来不便。
因此,我们需要确保使用你 GPT 的用户不会超过正常使用的资源限制。以下是一些会显著增加资源消耗的功能:
- 生成图片 — 图像生成仍是付费服务,连续生成多张图片可能会让用户账户被暂时封禁。建议提醒用户潜在风险,或尽量减少图片生成频率。
- 代码解释 — 允许文件上传及代码执行进行数据分析。如果预期用户会频繁使用代码解释功能,务必告知他们相关风险。
- 视觉功能(图像描述) — 如果助手使用视觉功能来描述和提取图片信息,应规划谨慎使用以避免资源浪费。
- 文件上传 — 大量或多文件上传可能导致封禁。请始终引导用户避免阻碍他们正常使用助手的行为。
注释
摩尔定律指出,计算机性能每两年翻一番,成本降低一半。LLM 目前大约每六个月性能翻倍,结合同期成本下降至少一半,意味着视觉和图像生成模型的当前资源限制可能会逐渐失去意义。但代码解释和文件上传等服务的限制可能仍将保持。
你可以通过在助手指令中添加示例 3.18 的规则,让助手意识到资源使用情况。该规则简单地提醒用户注意,并可让助手限制某些功能的使用频率。
示例 3.18 资源使用规则示例
规则:
在生成图片时,请确保用户了解快速生成多张图片可能导致账户暂时被封禁。
引导助手更加节约资源,能提升助手的可用性,也能避免用户因无意中触发封禁而愤怒。如果你计划公开发布 GPT,这一点尤其重要。接下来,我们将探讨 GPT 经济模型。
3.5.2 理解 GPT 的经济学
随着 GPT 助手平台和 GPT 商店的推出,OpenAI 宣布未来可能推出盈利分成计划,面向发布 GPT 的开发者。尽管具体细节尚未公布,许多人对此已有诸多猜测。
有观点认为,商店可能只会将 10% 至 20% 的利润返还给开发者。这个比例远低于其他应用平台,但开发门槛和资源需求也较低。GPT 商店中充斥着基本免费的助手,只要你拥有 Plus 订阅,但未来可能有所变化。
无论如何,构建公开 GPT 的理由有很多:
- 个人作品集 — 展示你在提示工程或 AI 应用开发方面的能力。发布几个 GPT 能够证明你的知识和开发实力。
- 知识与经验 — 如果你在某一领域有深厚积累,借助助手打包成知识库是不错的选择。此类助手的受欢迎程度将取决于你的专业领域。
- 交叉营销与商业合作 — 这在商店中越来越常见,帮助企业通过助手引导客户。随着更多企业整合 AI,这种趋势将更加明显。
- 助力产品/服务 — 并非所有企业都能承担聊天机器人的托管成本。虽然当前助手仅限于 ChatGPT 订阅用户使用,未来可能更广泛开放。这或意味着 GPT 将无处不在,就像互联网初期各公司竞相建立网站一样。
当前 GPT 商店主要面向 ChatGPT 订阅用户,但若 OpenAI 持续推进,未来或将成为完全公开的平台。公开 GPT 有潜力改变我们搜索、调研产品服务以及浏览互联网的方式。
本章最后一节,我们将介绍如何发布 GPT 及重要注意事项。
3.5.3 发布 GPT
当你对自己的 GPT 及其表现满意,并且看到向他人分享的价值时,发布 GPT 以供公众(订阅用户)使用非常简单。如图 3.14 所示,选择 GPT 商店作为发布选项并点击保存后,你将获得设置分类和提供回链的选项。
这很简单,但在发布你的 GPT 之前,还有一些事项值得你考虑:
- GPT 描述 — 编写一个优质的描述,你甚至可以请 ChatGPT 帮助你优化这段描述,从而提升 GPT 的搜索引擎优化(SEO)效果。GPT 现在会出现在谷歌搜索结果中,良好的 SEO 能帮助你的助手获得更多曝光。好的描述也能帮助用户判断是否愿意花时间使用你的助手。
- 标志(Logo) — 一个简洁且能体现助手功能的标志无疑有助于吸引用户。设计 GPT 的标志基本上是免费的服务,但花时间多尝试几版设计,能更有效地吸引用户关注你的助手。
- 类别 — 默认情况下,类别会被自动选择,但你要确保它与你的助手匹配。如果觉得不合适,可以更改类别,甚至选择“其他”并自定义类别。
- 链接 — 一定要设置你的社交媒体链接,甚至可以添加你用来跟踪 GPT 问题的 GitHub 仓库链接。为 GPT 添加这些链接能让用户知道遇到问题或有疑问时,可以联系开发者。
随着 GPT 商店的发展,可能还会出现更多发布要求。商业模式尚未完全确定,未来也会有更多经验和教训。无论你是为自己还是他人构建 GPT,这个过程都能帮助你更好地理解如何打造智能代理和助手。正如本书后续章节所示,GPT 助手将成为你知识体系中的重要基石。
总结
- OpenAI GPT 助手平台通过 ChatGPT 界面支持构建和部署 AI 代理,专注于打造引人入胜且实用的助手。
- 你可以利用 GPT 的代码解释功能对用户上传的 CSV 文件进行数据分析,使助手具备数据科学家的能力。
- 助手可以通过自定义动作进行扩展,实现与外部服务的 API 端点集成,包括生成 FastAPI 服务及对应的 OpenAPI 规范。
- 通过文件上传,助手能被注入专业知识,成为特定文本或文档的权威来源。
- 将 GPT 商业化涉及将其发布到 GPT 商店,便于分享和推广助手,面向更广泛的用户群体。
- 构建功能完整的助手需要反复迭代设计提示,明确角色定位,设定规则,确保输出符合用户预期。
- 创建自定义动作需理解并实现 OpenAPI 规范,使用如 ngrok 等工具在本地部署服务,并将这些服务连接到助手。
- 知识助手可处理多种任务,从文档搜索、比较,到基于知识库生成新内容。
- 发布助手时需谨慎考虑资源消耗、用户体验和经济因素,确保其公开使用的有效性和可持续性。
- GPT 商店面向 ChatGPT Plus 订阅用户,是学习和掌握构建 AI 助手的宝贵平台,未来还可能带来利润分成机会。