本文将指导您使用 C# 和 .NET 8 构建基于控制台的 ChatGPT 客户端。
我们将使用适用于 OpenAI API (https://github.com/openai/openai-dotnet) 的官方 .NET 库和 Spectre.Console 来构建此应用程序。Spectre.Console 是一个 .NET 库,可以更轻松地创建美观的控制台应用程序。
获取 OpenAI API 密钥
如果您还没有 API 密钥,请访问此页面以创建新的 OpenAI API 密钥:https://platform.openai.com/api-keys
创建 Console App 项目
打开 Visual Studio 并创建新的 Console App 项目。
设置项目名称和位置。选择.NET 8作为框架后,点击 [创建] 按钮。
安装 OpenAI 和 Spectre.Console 软件包
打开 NuGet 包管理器并安装 OpenAI 库:
接下来,搜索 Spectre.Console 并安装它:
编写代码
配置
打开 Program.cs 文件。需要两个 using 语句:
using OpenAI.Chat;
using Spectre.Console;
我们需要定义模型和 API Key:
const string model = "gpt-4o";
const string apiKey = "YOUR OPEN AI API KEY";
创建 ChatClient
var client = new ChatClient(model, apiKey);
var messages = new List<ChatMessage>();
这是一个使用模型和 API 密钥与 OpenAI 的 API 通信的实例。该列表跟踪用户与 GPT 之间的对话历史记录以维护上下文。ChatClientmessages
用户界面设置
AnsiConsole.Write(new FigletText("ConsoleGPT").Centered().Color(Color.Yellow));
AnsiConsole.Write(new Text("Type '/q' to quit the program.\\n", new Style(Color.Grey)).Centered());
控制台顶部以黄色大字体显示 “ConsoleGPT”。在它下方,以灰色显示简单的说明,告诉用户如何退出应用程序。FigletTextText
主聊天循环
循环一直持续,直到用户决定退出:
while (true)
{
AnsiConsole.Write(new Rule { Style = "grey" });
var input = AnsiConsole.Ask<string>("[blue]You:[/]");
AnsiConsole.Write(new Rule { Style = "grey dim" });
if (input?.ToLower() == "/q") break;
messages.Add(new UserChatMessage(input));
此代码部分管理控制台中的用户输入。它首先绘制一条灰线,然后提示用户输入他们的消息,并带有蓝色的 “You:”。
捕获输入后,为了清晰起见,将绘制另一条暗淡的灰色线。如果输入为 “/q”,则循环退出并结束聊天。否则,用户的消息将作为 a 添加到列表中,以跟踪对话历史记录以供 ChatGPT 处理。messagesUserChatMessage
处理用户输入
var completion = await AnsiConsole.Status()
.StartAsync("ChatGPT is thinking...", async ctx =>
await client.CompleteChatAsync(messages.TakeLast(10)));
该代码用于显示“ChatGPT 正在思考......”等待 API 响应。然后,它调用将最后 10 条消息发送到 OpenAI API 以维护对话上下文。AnsiConsole.StatusCompleteChatAsync
显示响应
var responseText = completion.Value.Content[0].Text;
AnsiConsole.Markup("[green]ChatGPT:[/]\n");
Console.WriteLine(responseText.Trim());
messages.Add(new AssistantChatMessage(responseText));
此代码通过访问内容的第一个元素并将其分配给 ,从对象中提取响应的文本。completionresponseText
然后它用于在控制台上以绿色显示“ChatGPT:”。使用 method 将实际响应文本打印到控制台。AnsiConsole.MarkupConsole.WriteLine
最后,将响应文本添加到列表中,以确保在发送下一个聊天时具有对话上下文。messagesAssistantChatMessage
完整代码
这是整个代码,简明扼要,只有 35 行:
using OpenAI.Chat;
using Spectre.Console;
const string model = "gpt-4o";
const string apiKey = "YOUR OPEN AI API KEY";
var client = new ChatClient(model, apiKey);
var messages = new List<ChatMessage>();
AnsiConsole.Write(new FigletText("ConsoleGPT").Centered().Color(Color.Yellow));
AnsiConsole.Write(new Text("Type '/q' to quit the program.\n", new Style(Color.Grey)).Centered());
while (true)
{
AnsiConsole.Write(new Rule { Style = "grey" });
var input = AnsiConsole.Ask<string>("[blue]You:[/]");
AnsiConsole.Write(new Rule { Style = "grey dim" });
if (input?.ToLower() == "/q") break;
messages.Add(new UserChatMessage(input));
var completion = await AnsiConsole.Status()
.StartAsync("ChatGPT is thinking...", async ctx =>
await client.CompleteChatAsync(messages.TakeLast(10)));
var responseText = completion.Value.Content[0].Text;
AnsiConsole.Markup("[green]ChatGPT:[/]\n");
Console.WriteLine(responseText.Trim());
messages.Add(new AssistantChatMessage(responseText));
}
运行应用程序
按 F5 并开始询问 ChatGPT:
该项目展示了使用简单的代码将 AI 添加到应用程序是多么容易。它为那些有兴趣在 .NET 环境中探索生成式 AI 的人提供了一个很好的起点。
点击下方卡片关注DotNet NB
一起交流学习
▲ 点击上方卡片关注DotNet NB,一起交流学习
请在公众号后台