大家好,我是宝弟!
今天给大家分享一个用于访问 OpenAI GPT-3 API的.NET SDK。此SDK包装了OpenAI原始的RestAPI。.
PM> NuGet\Install-Package OpenAI -Version 1.3.0
var api = new OpenAI_API.OpenAIAPI();
var result = await api.Completions.CreateCompletionAsync("One Two Three One Two", temperature: 0.1);
Console.WriteLine(result.ToString());
// should print something starting with "Three"
此库基于 .NET Standard 2.0,因此它应该适用于 .NET Framework >=4.7.2 和 .NET Core >= 3.0。所以此库支持winforms,wpf,asp.net 等,可以工作在Windows,Linux和Mac上。
使用OpenAI API,需要提供API密匙,密匙的获取不在本文的讨论范围内,搜索引擎一搜有很多解决办法。
按优先级顺序,可通过 3 种方式提供 API 密钥:
将键直接传递给构造函数
APIAuthentication(string key)
为OPENAI_API_KEY设置环境变量(或OPENAI_KEY用于向后兼容)
在本地目录或用户目录中包含一个配置文件,命名并包含以下行:
.openai
OPENAI_API_KEY=sk-aaaabbbbbccccddddd
初始化 API 时,可以使用如下所示:APIAuthentication
// for example
OpenAIAPI api = new OpenAIAPI("YOUR_API_KEY"); // shorthand
// or
OpenAIAPI api = new OpenAIAPI(new APIAuthentication("YOUR_API_KEY")); // create object manually
// or
OpenAIAPI api = new OpenAIAPI(APIAuthentication LoadFromEnv()); // use env vars
// or
OpenAIAPI api = new OpenAIAPI(APIAuthentication LoadFromPath()); // use config file (can optionally specify where to look)
// or
OpenAIAPI api = new OpenAIAPI(); // uses default, env, or config file
您可以选择包含一个 openAIOrganization(OPENAI_ORGANIZATION 在 env 或配置文件中),指定用于 API 请求的组织。这些 API 请求的使用量将计入指定组织的订阅配额。可以在OpenAI的组织设置页面上找到组织 ID。
// for example
OpenAIAPI api = new OpenAIAPI(new APIAuthentication("YOUR_API_KEY","org-yourOrgHere"));
通过api获取Completions
CreateCompletionAsync(CompletionRequest request)
// for example
var result = await api.Completions.CreateCompletionAsync(new CompletionRequest("One Two Three One Two", model: Model.CurieText, temperature: 0.1));
// or
var result = await api.Completions.CreateCompletionAsync("One Two Three One Two", temperature: 0.1);
// or other convenience overloads
可以创建一个帮助类来返回Completions,因为SDK访问api获取的是元数据,因此要访问结果,可以使用CompletionRequestCompletionResult.ToString()。
流式处理允许您在生成结果时获得结果,这可以帮助您的应用程序感觉响应更快,尤其是在像 Davinci 这样的慢速模型上。
使用新的 C# 8.0 异步迭代器:
IAsyncEnumerable<CompletionResult> StreamCompletionEnumerableAsync(CompletionRequest request)
// for example
await foreach (var token in api.Completions.StreamCompletionEnumerableAsync(new CompletionRequest("My name is Roger and I am a principal software engineer at Salesforce. This is my resume:", Model.DavinciText, 200, 0.5, presencePenalty: 0.1, frequencyPenalty: 0.1)))
{
Console.Write(token);
}
由于OpenAI的API文档搜索已在2022年12月3日删除掉了。因此SKD包含了大量的智能提示。所以,此SDK应该是目前OpenAI比较好用的API SDK了。
资源获取方式
https://github.com/OkGoDoIt/OpenAI-API-dotnet