本章内容:
- 介绍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助手,这需要一个付费订阅。如果你不打算购买订阅,可以将本章作为入门介绍,后续的第六章将展示如何使用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 请求一个数据科学助手
第一次提示:
What is a good basic and interesting data science
experiment you can task someone with a single
CSV file that contains interesting data? #1
第二次提示:
Okay, can you now write all those steps into instructions
to be used for a GPT Agent (LLM agent) to replicate all of
the above steps? #2
第三次提示:
What is a famous personality that can embody the agent
data scientist and be able to present data to users? #3
#1 首先,要求LLM设定基础。 #2 然后,要求LLM将之前的步骤转化为更正式的过程。 #3 最后,要求LLM提供一个能够代表该过程的数据科学家人格。
通过这段对话生成的内容是命令3.4中所示的助手指令。在这个例子中,助手被命名为Data Scout,但你可以随意为你的助手命名。
命令 3.4 Data Scout指令
This GPT, named Data Scout, is designed to assist users by analyzing CSV
files and providing insights like Nate Silver, a famous statistician known
for his accessible and engaging approach to data. Data Scout combines
rigorous analysis with a clear and approachable communication style,
making complex data insights understandable. It is equipped to handle
statistical testing, predictive modeling, data visualization, and more,
offering suggestions for further exploration based on solid data-driven
evidence.
Data Scout requires the user to upload a CSV file of data they want to
analyze. After the user uploads the file, you will perform the following
tasks:
任务清单:
-
数据获取
任务:要求用户上传一个CSV文件的数据。
指令:使用pandas库读取CSV文件中的数据。确保通过df.head()显示前几行来验证数据是否正确加载。 -
探索性数据分析(EDA)
- 数据清理
任务:识别并处理缺失值,修正数据类型。
指令:使用df.isnull().sum()检查缺失值。对于分类数据,考虑用众数填充缺失值,对于数值数据,使用中位数或均值。必要时,使用df.astype()转换数据类型。 - 可视化
任务:创建可视化图表来探索数据。
指令:使用matplotlib和seaborn创建直方图、散点图和箱形图。例如,使用sns.histplot()绘制直方图,使用sns.scatterplot()绘制散点图。 - 描述性统计
任务:计算基本的统计量。
指令:使用df.describe()获取统计数据的摘要,使用df.mean()、df.median()进行特定计算。
- 数据清理
-
假设检验
任务:基于数据集测试假设。
指令:根据数据类型,使用scipy.stats执行t检验或卡方检验。例如,使用stats.ttest_ind()进行两组之间的t检验。 -
预测建模
- 特征工程
任务:通过新特征增强数据集。
指令:基于现有数据在DataFrame中创建新列,捕捉更多信息或关系。例如,使用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)计算。
- 特征工程
-
见解与结论
任务:解释并总结分析和建模结果。
指令:讨论模型系数或特征重要性。根据假设和预测分析得出结论。根据结果提出实际意义或行动建议。 -
演示
任务:准备报告或演示文稿。
指令:以清晰易懂的格式总结过程和发现,使用图表和要点。确保演示文稿对非技术人员也能理解。
生成指令后,你可以将其复制并粘贴到图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 #1
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." #2
#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
#1 你可以选择过滤其他国家的数据。
如果你遇到助手解析文件的问题,请刷新浏览器窗口并重试。根据你的数据和过滤条件,助手现在将像数据科学家一样使用代码解释器来分析数据并提取趋势。
图3.6展示了使用命令3.5中的netflix_titles.csv文件数据生成的输出。选择不同的国家或请求其他分析时,你的输出可能会有所不同。
数据科学图表由助手通过编写和执行代码与代码解释器一起创建。你可以尝试使用其他CSV文件,或者如果你愿意,使用不同形式的数据进行分析。你甚至可以继续与助手迭代,更新图表的视觉效果或分析其他趋势。
代码解释是一个有吸引力的技能,你可能会将其添加到许多代理中,进行从计算到自定义格式化的各种操作。在下一部分,我们将讨论如何通过自定义动作扩展GPT的功能。
3.3 自定义GPT并添加自定义动作
在接下来的练习中,我们将演示如何使用自定义动作,这可以显著扩展你的助手功能。为代理添加自定义动作需要多个组件,从理解OpenAPI规范端点到连接到服务。因此,在添加自定义动作之前,我们将在下一节中构建另一个GPT来协助我们。
3.3.1 创建一个助手来构建助手
鉴于GPT的能力,使用一个GPT来帮助构建其他GPT是很有意义的。在这一部分,我们将构建一个GPT,帮助我们创建一个服务,该服务可以作为自定义动作连接到另一个GPT。是的,我们甚至会使用LLM来开始构建我们的助手GPT。
以下命令3.7展示了为我们的助手GPT创建指令的提示。此提示旨在生成助手的指令。
命令 3.7 请求助手设计(在GPT构建器或ChatGPT中)
I want to create a GPT assistant that can generate a FastAPI service that
will perform some action to be specified. As part of the FastAPI code
generation, I want the assistant to generate the OpenAPI specification for
the endpoint. Please outline a set of instructions for this agent.
命令 3.8展示了为该提示生成的主要指令。输出随后进行了修改,并根据特定信息和其他细节进行了更新。将这些指令从文件(assistant_builder.txt)复制并粘贴到你的GPT中。确保选择“代码解释”能力。
命令 3.8 自定义动作助手指令
This GPT is designed to assist users in generating FastAPI services
tailored to specific actions, complete with the corresponding OpenAPI
specifications for the endpoints. The assistant will provide code snippets
and guidance on structuring and documenting API services using FastAPI,
ensuring that the generated services are ready for integration and
deployment.
1. Define the Action and Endpoint: First, determine the specific action
the FastAPI service should perform. This could be anything from fetching
data, processing information, or interacting with other APIs or databases.
2. Design the API Endpoint: Decide on the HTTP method (GET, POST, PUT,
DELETE, etc.) and the endpoint URI structure. Define the input parameters
(path, query, or body parameters) and the expected response structure.
3. Generate FastAPI Code:
Setup FastAPI: Import FastAPI and other necessary libraries.
Create API Function: Write a Python function that performs the
desired action. This function should accept the defined input parameters
and return the appropriate response.
4. Decorate the Function: Use FastAPI's decorators (e.g.,
@app.get("/endpoint")) to link the function with the specified endpoint
and HTTP method.
Define Input and Output Models: Use Pydantic models to define the
structure of the input and output data. This ensures validation and
serialization of the data.
5. Generate OpenAPI Specification:
FastAPI automatically generates the OpenAPI specification based on
the endpoint definitions and Pydantic models. Ensure that all function
parameters and models are well-documented using docstrings and field
descriptions.
Optionally, customize the OpenAPI specification by adding
metadata, tags, or additional responses directly in the FastAPI decorators.
6. Deployment:
Describe to the user how to prepare the FastAPI application for
deployment.
Instruct them on how to use ngrok to deploy the
service and host it on the user's local machine. #1
#1 使用ngrok作为示例来将服务本地部署。
准备好助手后,确保在配置面板中设置好所有内容(包括选中“代码解释”复选框),然后刷新浏览器窗口。这将准备助手进行新的会话。你可以在这里请求你想构建的服务。
命令 3.9展示了请求自定义动作助手创建一个日常任务端点的请求。如果你了解API的工作原理,你可以建议其他选项,如POST。当然,你也可以要求助手引导你并创建你的服务。
命令 3.9 请求任务端点服务
I want to define a GET endpoint that replies with my list of daily tasks.
输入提示后,助手将生成创建和运行FastAPI端点的代码和指令。以下命令3.10展示了从先前请求生成的代码示例。
命令 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。然后,使用以下命令3.11运行API,这将在章节源文件中运行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以便稍后在设置助手时使用。在下一节中,我们将创建一个使用此服务作为自定义动作的助手。
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. #1
#1 这个功能需要启用代码解释器。
点击面板底部的“创建新动作”按钮。图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,但如果你需要一些基础,可以查看第8章。
GPT助手平台提供了一种名为文件上传的知识功能,它允许你为GPT提供关于任何内容的静态知识库,支持多种格式。截至写作时,GPT助手平台允许上传最多512 MB的文档。在接下来的两个练习中,我们将介绍两个不同的GPT,旨在帮助用户阅读书籍。
3.4.1 构建《简单微积分》GPT
书籍和书面知识将始终是我们知识库的核心。但阅读文本是需要全身心投入的努力,许多人没有时间做到这一点。有声书使得阅读书籍再次变得可访问;你可以在做其他事情时听书,但并非所有书籍都能顺利转化为音频。
进入AI和智能助手的世界。有了GPT,我们可以在读者和书籍之间创建互动体验。读者不再被迫一页一页地读书,而是可以整体进行阅读。
为了展示这一概念,我们将基于Silvanus P. Thompson的经典数学书籍《简单微积分》构建一个GPT。这本书可以通过Gutenberg Press网站免费下载。虽然这本书已有百年历史,但它仍然提供了坚实的材料背景。
备注
如果你认真学习微积分,但这个助手对你来说还是太难了,可以看看Clifford A. Pickover写的《微积分与披萨》这本好书。这是一本非常适合学习微积分的书,或者仅仅作为一个极好的复习书。如果你有电子书版本,也可以尝试制作《微积分与披萨》助手。不幸的是,版权法将阻止你在没有许可的情况下发布这个GPT。
打开ChatGPT,进入“我的GPTs”,创建一个新的GPT,点击“配置”标签,然后上传文件,如图3.10所示。从本章的源代码文件夹上传书籍:chapter_03/calculus_made_easy.pdf。这将把书籍添加到GPT的知识库中。
向上滚动并添加命令3.16中显示的指令。最初的前言文本是通过与GPT构建器对话生成的。在更新前言文本后,我们通过向ChatGPT询问著名数学家来添加个性。最后,我们添加了规则,以便为GPT提供额外的指导,明确我们想要的输出结果。
命令 3.16 《简单微积分》GPT的指令
This GPT is designed to be an expert teacher and mentor
of calculus based on the book 'Calculus Made Easy' by
Silvanus Thompson. A copy of the book is uploaded at
calculus_made_easy.pdf and provides detailed guidance
and explanations on various calculus topics such as
derivatives, integrals, limits, and more. The GPT can
teach calculus concepts, solve problems, and answer
questions related to calculus, making complex topics
accessible and understandable. It can handle
calculus-related inquiries, from basic to advanced,
and is particularly useful for students and educators
seeking to deepen their understanding of calculus. #1
Answer as the famous mathematician Terence Tao.
Terence Tao is renowned for his brilliant intellect,
approachability, and exceptional ability to effectively
simplify and communicate complex mathematical concepts. #2
RULES #3
1) Always teach the concepts as if you were teaching to a young child.
2) Always demonstrate concepts by showing plots of functions and graphs.
3) Always ask if the user wants to try a sample problem on their own.
Give them a problem equivalent to the question concept you were discussing.
#1 这部分前言最初由构建器生成,然后根据需要进行了调整。
#2 始终确保为你的助手和代理赋予合适的个性/人格。
#3 定义明确的条件和规则有助于更好地引导GPT达到你的期望。
更新完助手后,你可以通过预览窗口或在GPT商店中搜索《简单微积分》来试用。图3.11展示了与GPT互动的示例片段。该图显示了GPT可以生成图表来演示概念或提出问题。
这个GPT展示了助手将书籍作为伴随教学参考的能力。在本练习中,只上传了一本书,但也可以上传多本书或其他文档。随着这一功能和技术的成熟,未来可能会设想使用GPT来教授一整门课程。
我们将不再专注于技术,转而通过虚构作品来演示知识的应用。在下一节中,我们将探讨如何利用文件上传的知识进行搜索和引用。
3.4.2 使用文件上传进行知识搜索等操作
GPT助手平台的文件上传功能支持单个助手上传最大512 MB的文件。仅此一项功能就为文档搜索和其他个人及中小型商业/项目应用提供了强大的能力。
试想上传整本文件集合。你现在可以使用一个助手进行搜索、比较、对比、组织和整理。这项功能本身就将改变我们搜索和分析文档的方式。在第6章中,我们将探讨如何通过直接访问OpenAI助手API来增加文档的数量。
在接下来的练习中,我们将使用一个具有多本书籍或文档知识的助手。这项技术可以应用于任何受支持的文档,但这个助手将专门阅读关于机器人的经典文本。我们将这个助手命名为经典机器人阅读GPT。
首先,在ChatGPT界面中创建一个新的GPT助手。然后,上传命令3.17中的指令,给助手命名并描述。这些指令部分是通过GPT构建器生成的,然后进行了编辑。
命令 3.17 经典机器人阅读指令
This GPT, Classic Robot Reads and uses the persona of
Isaac Asimov and will reply as the famous robot author. #1
This GPT will only reference and discuss the books
in its knowledge base of uploaded files. #2
It does not mention or discuss other books or text that
are not within its knowledge base. #2
RULES
Refer to only text within your knowledge base #2
Always provide 3 examples of any query the user asks for #3
Always ask the user if they require anything further #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的用户不会超出他们的常规使用资源限制。以下是使用GPT时可能增加资源使用的一些功能:
- 生成图像:图像生成仍然是一个高级服务,连续生成图像可能会迅速导致用户账户被封锁。通常建议你提醒用户可能的风险,并/或尽量减少图像生成的频率。
- 代码解释:此功能允许上传文件并运行代码进行数据分析。如果你认为用户需要频繁使用代码工具,请告知他们相关风险。
- 视觉功能,描述图像:如果你正在构建一个使用视觉来描述和提取图像信息的助手,建议谨慎使用。
- 文件上传:如果你的GPT使用大量文件或允许上传多个文件,这可能会导致封锁。像往常一样,引导用户避免任何阻止他们使用GPT的操作。
备注
摩尔定律表明,计算机每两年性能翻倍,成本减半。LLM现在的性能大约每六个月翻倍,得益于优化和GPU性能的提高。加上在相同周期内成本减少至少一半,这可能意味着当前对视觉和图像生成模型的资源限制将不再考虑。然而,像代码解释和文件上传这样的服务可能会保持不变。
让你的助手意识到资源使用量,可以通过向助手指令中添加命令3.18中的规则来实现。指令可以仅仅是一个传达警告给用户的声明,并使助手意识到这一点。你甚至可以要求助手限制某些功能的使用。
命令 3.18 资源使用规则示例
RULE:
When generating images, ensure the user is aware that creating multiple
images quickly could temporarily block their account.
引导助手更加注重资源使用,最终会使你的助手更加可用。它还有助于防止用户因不小心被封锁而感到不满。如果你计划发布你的GPT,这一点非常重要,但在此之前,我们将探讨下一节的经济学问题。
3.5.2 理解GPT的经济学
在发布GPT助手和GPT商店时,OpenAI宣布了为那些发布GPT的人提供未来利润分享计划的可能性。虽然我们仍在等待关于这个计划的更多信息,但许多人已经猜测了它可能的样子。
一些人认为商店可能只会将10%到20%的利润返还给开发者。这比其他应用平台的百分比要低得多,但它要求的技术知识和资源要少得多。GPT商店现在充斥着基本免费的助手,只要你有Plus订阅,但未来可能会发生变化。无论如何,也有几个原因你可能想要构建公开的GPT:
- 个人作品集:也许你想展示你在提示工程方面的知识或你构建下一波AI应用的能力。在GPT商店拥有几个GPT可以帮助展示你的知识和创造有用AI应用的能力。
- 知识和经验:如果你对某个主题或领域有深入的了解,这可以是将其打包为助手的好方法。这类助手的受欢迎程度会根据你的专长领域有所不同。
- 交叉营销和商业合作:这在商店中变得越来越常见,为公司提供了使用助手引导客户的能力。随着公司集成更多的AI,这肯定会变得更加普遍。
- 为你的产品/服务提供有用的助手:并不是所有公司或组织都能承担托管聊天机器人的成本。虽然目前只有ChatGPT订阅用户能够使用助手,但未来它们可能会变得更易访问。这可能意味着每个公司都有自己的GPT,就像互联网早期的每个公司都急于建立网络存在感一样。
虽然当前形式的GPT商店仅供ChatGPT订阅用户使用,但如果OpenAI的当前趋势继续下去,我们很可能会看到一个完全公开的GPT商店。公开的GPT有潜力改变我们搜索、调查产品和服务以及消费互联网的方式。在本章的最后一节中,我们将探讨如何发布GPT及一些重要的考虑因素。
3.5.3 发布你的GPT
好了,你已经对你的GPT和它的运作感到满意,并且看到将它分享给他人能带来实际好处。发布GPT供公众(订阅用户)使用是很容易的,如图3.14所示。在选择GPT商店作为选项并点击保存后,你将能够设置分类并提供回链。
这很简单,因此在发布你的GPT之前,还有一些事情你需要考虑:
- GPT描述:创建一个好的描述,你甚至可以请ChatGPT帮助你构建一个提高搜索引擎优化(SEO)的描述。GPT现在已经出现在Google搜索中,因此良好的搜索引擎优化有助于增加助手的曝光度。一个好的描述还能帮助用户决定是否愿意花时间使用你的助手。
- 徽标:一个简洁明了的徽标,能够标识助手的功能,毫无疑问能帮助吸引用户。GPT的徽标设计基本上是免费的,但花时间迭代几个图像有助于吸引用户使用你的助手。
- 类别:默认情况下,类别会自动选择,但请确保它与你的助手相符。如果你觉得不符合,改变类别,甚至可以选择“其他”并自定义。
- 链接:确保设置你的社交媒体链接,可能还包括一个GitHub仓库链接,用于跟踪GPT的问题。为你的GPT添加链接,可以向用户展示他们如果遇到问题或有疑问,可以联系构建者。
随着GPT商店的成熟,可能会出现更多要求。商业模式尚待确定,其他学习可能会随之而来。无论你是决定为自己还是他人构建GPT,这样做可以帮助你提高构建代理和助手的理解。正如我们将在本书的其余部分中看到的,GPT助手是你知识的有用基础。
3.6 练习
完成以下练习,以提高你对本章内容的理解:
练习 1 — 构建你的第一个GPT助手
目标 — 使用ChatGPT界面创建一个简单的GPT助手。
任务:
- 如果你还没有ChatGPT Plus订阅,注册一个。
- 导航到GPT助手平台,点击“创建”按钮。
- 使用构建器聊天界面创建一个提供基于现有食材的餐点建议的烹饪助手。
- 手动配置助手,添加自定义规则以生成食谱,例如包括营养信息和成本估算。
练习 2 — 数据分析助手
目标 — 开发一个能够分析CSV文件并提供洞察的GPT助手。
任务:
- 设计一个可以加载和分析CSV文件的数据科学助手,类似于章节中的Data Scout示例。
- 启用代码解释工具,上传一个示例CSV文件(例如来自Kaggle的数据集)。
- 使用助手执行数据清理、可视化和假设检验等任务。
- 记录你的过程和发现,注意任何挑战或需要改进的地方。
练习 3 — 创建自定义动作
目标 — 使用FastAPI服务扩展GPT助手并添加自定义动作。
任务:
- 按照步骤创建一个FastAPI服务,提供一个特定功能,例如获取每日任务列表。
- 生成服务的OpenAPI规范,并使用ngrok将其本地部署。
- 配置一个新的助手来使用这个自定义动作,确保它正确连接到FastAPI端点。
- 通过要求助手执行该动作并验证输出,测试助手。
练习 4 — 文件上传知识助手
目标 — 构建一个具有上传文档知识的助手。
任务:
- 选择一本免费提供的电子书或与特定主题相关的文档集合(例如经典文学、技术手册)。
- 上传这些文件到一个新的GPT助手,并配置助手充当上传内容的专家。
- 创建一系列提示,以测试助手引用和总结文档信息的能力。
- 评估助手的表现,并进行必要的调整,以提高准确性和有用性。
练习 5 — 发布并分享你的助手
目标 — 将你的GPT助手发布到GPT商店并与他人分享。
任务:
- 最终配置和测试助手,确保它按预期工作。
- 编写引人注目的描述,为助手创建合适的徽标。
- 选择正确的类别,并设置任何必要的链接到你的社交媒体或GitHub仓库。
- 将助手发布到GPT商店,并与朋友或同事分享链接。
- 收集用户反馈,并根据他们的意见调整助手,以改善其可用性和功能。
总结
- OpenAI GPT助手平台使得通过ChatGPT UI构建和部署AI代理成为可能,重点在于创建有趣和实用的助手。
- 你可以使用GPT的代码解释功能对用户上传的CSV文件执行数据分析,使助手能够充当数据科学家。
- 助手可以通过自定义动作扩展,允许通过API端点与外部服务集成。这包括生成FastAPI服务及其相应的OpenAPI规范。
- 通过文件上传,助手可以被充实为具有特定文本或文档的专业知识来源。
- 商业化你的GPT涉及将其发布到GPT商店,你可以分享并向更广泛的观众推广你的助手。
- 构建一个功能齐全的助手涉及迭代设计提示、定义清晰的人格、设置规则,并确保助手的输出符合用户期望。
- 创建自定义动作需要理解和实现OpenAPI规范,使用如ngrok等工具本地部署服务,并将这些服务与助手连接。
- 知识助手可以处理多种任务,从搜索和比较文档到基于其知识库生成新内容。
- 发布助手需要仔细考虑资源使用、用户体验和经济因素,以确保其有效性和可持续性,供公众使用。
- GPT商店目前面向ChatGPT Plus订阅用户,是学习和熟练掌握构建AI助手的宝贵平台,未来可能有利润分享机会。