使用C#开发OpenAI ChatGPT插件
目录
- 项目设置
- 安装NuGet包
- 配置Swagger生成
- 添加控制器方法
- 创建插件所需的文件和文件夹
- 调试和测试插件
- 在OpenAI中注册插件
- 使用插件进行简单操作
- 进行复杂操作
- 总结
1. 项目设置
首先,我们需要在Visual Studio中打开一个新项目,并选择创建Blazor服务器应用程序。我们将把项目命名为Blazor聊天插件。
2. 安装NuGet包
接下来,我们需要安装一些NuGet包以实现所需的功能。首先,安装OpenAPI包,这是与OpenAI API进行通信所必需的。
Install-Package Microsoft.OpenApi -Version 1.1.4
然后,安装Swashbuckle包,以生成Swagger文档和UI。
Install-Package Swashbuckle.AspNetCore -Version 5.6.3
最后,我们还需要安装Swashbuckle Annotations包,以支持在Swagger文档中添加注释。
Install-Package Swashbuckle.AspNetCore.Annotations -Version 5.6.3
3. 配置Swagger生成
接下来,我们需要打开Program.cs
文件,并进行一些配置以生成Swagger文档。首先,我们需要添加跨域策略,以允许OpenAI API调用我们的项目。
public static readonly STRING MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
public static void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy(name: MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("https://localhost:5001/")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
// 添加其他服务配置
// ...
}
接下来,我们需要添加控制器,以处理调用API时的请求。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
然后,我们需要添加生成Swagger文档所需的代码。
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Blazor Chat Plugin API V1");
});
最后,我们需要禁用HTTPS重定向,因为在本地调试时,OpenAI无法使用HTTPS。
app.UseHttpsRedirection();
保存所有更改,并关闭Program.cs
文件。
4. 添加控制器方法
接下来,我们需要添加一些控制器方法,以供OpenAI调用我们的插件。首先,我们需要在项目中创建一个名为Controllers
的文件夹。
在Controllers
文件夹上右键单击,选择添加,然后选择类。将类名设置为TodosController
。
接下来,我们需要在TodosController
类中添加基本的代码框架,包括用于存储待办事项的集合以及添加、获取和删除待办事项的方法。
[ApiController]
[Route("api/[controller]")]
public class TodosController : ControllerBase
{
private static List<string> todos = new List<string>();
[HttpPost]
public IActionResult AddTodo([FromBody] string todo)
{
todos.Add(todo);
return Ok();
}
[HttpGet]
public IActionResult GetTodos()
{
return Ok(todos);
}
[HttpDelete("{index}")]
public IActionResult DeleteTodo(int index)
{
if (index >= 0 && index < todos.Count)
{
todos.RemoveAt(index);
return Ok();
}
else
{
return NotFound();
}
}
}
保存所有更改。
5. 创建插件所需的文件和文件夹
接下来,我们需要为插件创建一些文件和文件夹。首先,我们需要创建一个名为.well-known
的文件夹。这个文件夹是OpenAI在注册插件时会查找的。
将favicon.png
文件复制到.well-known
文件夹中,这将作为插件的图标显示。
右键单击.well-known
文件夹,选择新建项,然后选择文本文件。将文件名设置为ai-plugin.json
。这个文件是OpenAI在调用插件时会查找的。
在ai-plugin.json
文件中,我们需要添加一些信息,以告诉OpenAI如何调用我们的插件。
{
"schema": "https://openai.plugin.schema/v1",
"url": "http://localhost:5000",
"iconUrl": "/.well-known/favicon.png"
}
确保将url
字段中的端口号与我们的项目匹配,并保存所有更改。
6. 调试和测试插件
我们的插件代码已经完成,现在让我们确保一切都正确无误。首先,我们需要重新构建项目,以确保所有代码都被正确编译。
然后,我们需要确保在调试项目时使用HTTP而不是HTTPS。通过选择菜单栏上的Debug
下拉菜单中的Blazor Chat Plugin Properties
,将Enable SSL
设置为False
。
点击运行按钮,使用HTTP运行项目。此时,浏览器将自动打开,并显示我们的插件的Swagger页面。
在Swagger文档中,我们可以看到我们的控制器方法以及它们接受的参数和返回的数据。这是OpenAI了解我们插件的方法。
7. 在OpenAI中注册插件
我们现在可以前往OpenAI的插件商店,并选择自己开发的插件。在插件页面中,输入我们在本地开发时使用的网址,并点击安装插件。
确保将插件旁边的复选框选中,以启用插件。
现在,我们可以切换回我们的控制器文件,并在AddTodo
方法中设置一个断点。
切换回OpenAI页面,在Add Two New Todo Items
步骤中点击按钮,我们将会看到我们的断点被命中。
我们还可以查看各种调用和它们传递的数据。
继续测试插件,我们可以删除"Step One"的待办事项,并验证只剩下"Step Two"。
8. 使用插件进行简单操作
我们已经成功地创建了一个可以与OpenAI进行通信的插件。现在,让我们来尝试一些简单的操作。
首先,我们需要使用POST请求来添加一个新的待办事项。
POST /api/todos HTTP/1.1
Content-Type: application/json
"Go grocery shopping"
接下来,我们可以使用GET请求来获取所有的待办事项。
GET /api/todos HTTP/1.1
最后,我们可以使用DELETE请求来删除指定索引的待办事项。
DELETE /api/todos/0 HTTP/1.1
9. 进行复杂操作
我们也可以执行一些复杂的操作,例如添加待办事项并检查剩下的事项。
POST /api/todos HTTP/1.1
Content-Type: application/json
"Step One"
POST /api/todos HTTP/1.1
Content-Type: application/json
"Step Two"
GET /api/todos HTTP/1.1
DELETE /api/todos/0 HTTP/1.1
GET /api/todos HTTP/1.1
我们将看到只剩下"Step Two"的待办事项。
10. 总结
恭喜!我们已经成功开发了一个能够与OpenAI进行通信的Blazor插件。我们通过Visual Studio设置了项目,并安装了必要的NuGet包。我们配置了Swagger生成,并编写了控制器方法来处理与插件的交互。我们还创建了插件所需的文件和文件夹,并在OpenAI中注册并测试了我们的插件。我们还演示了如何执行简单和复杂的操作来操作待办事项的集合。
现在,我们可以根据自己的需求扩展和改进插件,以提供更多的功能和交互选项。
FAQ
Q: 我可以在插件中添加其他的控制器方法吗?
A: 是的,您可以根据需要添加其他控制器方法。只需在TodosController
类中添加新的方法,并在Swagger文档中进行配置即可。
Q: 如何在插件中返回自定义数据而不是字符串?
A: 您可以在控制器方法中返回任何您想要的数据类型,而不仅仅是字符串。例如,您可以返回一个自定义的DTO对象,其中包含更多的属性和数据。
Q: 插件是否支持身份验证和授权?
A: 是的,您可以在控制器方法上使用[Authorize]属性进行身份验证和授权的配置。这将确保只有经过身份验证的用户才能访问插件的功能。
Q: 我可以将插件部署到生产环境中吗?
A: 是的,您可以将插件部署到生产环境中。只需将项目部署到适当的服务器,并配置需要的端口和URL即可。
资源