由组件驱动的新GPT操作
使用AWS Lambda和Bit Components构建GPT Actions
创建GPT动作是将您的应用程序连接到ChatGPT提示的激动人心的方式。这是通过连接您的API端点并在OpenAPI规范中描述API来完成的。在内部,GPT操作利用功能调用来执行API调用。一旦定义,ChatGPT会根据您与其进行的对话来理解何时调用。
在这篇文章中,我们探讨如何使用可组合的AWS Lambda函数和Bit组件构建一个GPT操作。这个示例的重点是创建一个天气API操作,其中ChatGPT与实时天气数据进行交互,并响应与天气相关的提示。
行动概述
ChatGPT使用天气API的操作处理用户提示,将其映射到天气操作输入(如果需要还会转换任何输入),以直接获取实时天气数据。以下是它的工作原理:
- 用户提示和意图:ChatGPT识别意图来检查天气,并使用OpenAPI模式来理解如何发出请求。
- 结构导向请求:模式告诉ChatGPT使用哪个端点,需要的参数,以及响应格式,确保有效的API调用。
- Lambda执行:请求被发送到托管天气API的AWS Lambda函数,该函数获取指定位置的实时天气数据。
- 回复用户:ChatGPT 解释 API 响应,并以对话方式返回天气详细信息。
开放API模式使得ChatGPT能够自动化请求和响应,为用户创造出无缝、实时的交互体验。
API与组件
使用AWS Lambda和组件创建API具有几个优点。AWS Lambda允许您使用按需付费模型和慷慨的免费套餐创建API。同时,组件提高可维护性,并支持持续更新和向后兼容性。
首先,我们设计一个可组合的API,作为我们GPT行动的基础。这个API将从Open Weather Service获取天气数据。让我们分别创建每个组件。
- GPT 动作实体:定义 API 结构和参数。
- GPT操作逻辑:连接API与ChatGPT,用于解释和回复天气请求。
- GPT操作(Lambda):此操作处理请求并公开两个端点,一个用于天气数据,另一个用于返回OpenAPI模式。
每个组件将作为独立的 Bit 组件开发,允许在更大的 GPT 动作架构中进行隔离测试和平滑集成。
步骤1:创建GPT动作实体
此组件使用 Weather 接口处理天气数据,该接口定义了从外部 API(如 OpenWeatherMap)提取的天气信息的结构。
您可以在这里找到该组件。按照以下步骤创建它很容易。
- 在 bit.cloud 中创建一个账户。
- 创建一个作用域(例如my-gpt-scope)来存储您的组件。
- 前往范围URL,并单击右上角的“编辑范围”按钮。这将立即启动一个Bit Cloud Workspace实例,并使用现成的工具来创建新组件。
4. 创建一个新的组件。 (您可以通过运行 bit templates 命令找到所有可用的组件模板)。
bit create entity "gpt-action-entity"
5. 更新您的组件代码以返回天气模式,并更新其单元测试(规范文件)。
export type Weather = {
main: {
temp: number; // Temperature in Celsius
};
weather: {
description: string; // Weather condition description
}[];
name: string; // City name
};
步骤1:创建GPT动作逻辑
与上面类似,创建一个新实体,并编写逻辑以从Open Weather API获取天气数据。为了创建这个组件,让我们使用模块模板。
bit create module "gpt-action-logic"
import type { Weather } from "@aws-lambda/demos.gpt-action-entity";
import axios from 'axios';
/**
* Fetches weather data based on the provided city and apiKey.
*
* @param city The city for which to fetch weather data.
* @param apiKey The API key for accessing the weather data.
* @returns A string with the weather data or an error message.
*/
export async function gptActionLogic(city: string, apiKey: string): Promise<string> {
// Move the getWeather logic inside gptActionLogic
const getWeather = async (city: string, apiKey: string): Promise<Weather> => {
const apiUrl = `http://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=metric`;
const response = await axios.get(apiUrl);
return response.data as Weather; // Cast response data to the Weather type
};
try {
const weather = await getWeather(city, apiKey);
return `It's ${weather.main.temp}°C in ${city} with ${weather.weather[0].description}.`;
} catch (error) {
return 'Failed to fetch weather data. Please try again.';
}
}
实体组件被导入并在其实现中用于绑定天气数据。您可以在这里找到该组件。
步骤3:创建GPT操作(函数)
在这一步中,我们将创建AWS Lambda功能组件,作为API来返回天气数据及其Open API模式。
为此,我们不需要从头开始创建一个组件,而是可以克隆一个现有的Lambda组件,并修改其代码以从GPT Action逻辑组件获取天气数据。
bit fork aws-lambda.demos/http-lambda@0.0.5 gpt-action
复制后,您需要修改其环境变量(传递Open Weather API的API密钥)并暴露两个端点。
- 架构端点:这在OpenAPI 3.1规范中公开了预定义的API架构。通过提供您的函数实现,您可以轻松使用HopeAI(内置AI与Bit)或ChatGPT来生成此架构。
- 天气终端点: 这个终端点用于响应 API 请求以检索天气信息。
您可以在这里找到该函数的实现。一旦所有组件连接完成,依赖图看起来如下。
在定义函数之后,您还可以在作用域、Ripple CI 变量和标签中设置 WEATHER API KEY、AWS ACCESS KEY ID 和 AWS SECRET ACCESS KEY,并将组件导出到 Bit 云。这会触发 Ripple CI 将您的函数部署到 AWS,并显示您可以用来调用 API 的 HTTP URL。
连接这些点
最后,您可以在ChatGPT的MyGPT部分注册此端点。您需要一个付费的ChatGPT计划才能使用此功能。
要做到这一点,请按照以下步骤进行。
打开右上方菜单 -> 我的GPTs -> 创建一个GPT -> 填写信息 -> 创建新动作
您可以使用“从URL导入”按钮导入模式并测试您的操作。例如,你可以问“纽约的天气如何?”然后ChatGPT知道自己需要调用API来生成结果,而不是从LLM生成结果。
结论
通过使用AWS Lambda函数和Bit组件构建一个GPT动作,我们创建了一个简单的API,使ChatGPT可以根据用户提示与实时天气数据进行交互。
这种基于组件的方法可以将实现扩展到多个功能,根据需要在各个逻辑组件之间共享。总的来说,这种结构支持一种可靠、可扩展的方式,通过第三方集成扩展ChatGPT的功能。
希望您觉得这篇文章有用。谢谢阅读。干杯!