这应该是全网首篇,c#调用Betalgo.OpenAI.GPT3库,实现简单的gpt连贯对话

网上找了半天完整版的调用Betalgo.OpenAI.GPT3的方法,但都不够完整,研究了一下源库的属性和方法,参考python的openai库的调用方法,我找到了以下方法实现完整对话:

static async Task Main(string[] args)

{

Console.WriteLine("****************************");

OpenAIService openAIService = GetService();

ChatCompletionCreateResponse completionResult = new ChatCompletionCreateResponse();

ChatCompletionCreateRequest cr = new ChatCompletionCreateRequest

{

Messages = new List

{

//ChatMessage.FromSystem("You are a helpful assistant."),

//ChatMessage.FromUser("Who won the world series in 2020?"),

//ChatMessage.FromAssistant("The Los Angeles Dodgers won the World Series in 2020."),

ChatMessage.FromUser(Console.ReadLine())

},

Model = Models.ChatGpt3_5Turbo,

MaxTokens = 1000//optional

};

await GetResult(openAIService, completionResult, cr);//注意,这里使用异步,我们下文再说

//Task.WaitAll(Task.Delay(1000));

}

//这里定义一个异步方法,因为原库的openAIService.ChatCompletion.CreateCompletion()是一个异步方法,我在原库的GitHub社区看到有人建议在方法名后面加一个async强调异步,看来不少人中招了,把它当同步方法用,哈哈哈。

private static async Task GetResult(OpenAIService openAIService, ChatCompletionCreateResponse completionResult, ChatCompletionCreateRequest cr)

{

try

{

completionResult = await openAIService.ChatCompletion.CreateCompletion(cr);

}

catch (Exception e)

{

Console.WriteLine(e);

}

if (completionResult.Successful)

{

Console.WriteLine(completionResult.Choices.First().Message.Content);

cr.Messages.Add(ChatMessage.FromUser(Console.ReadLine()));

await GetResult(openAIService, completionResult,cr);//维持现有会话不变,继续问答

}

}

public static OpenAIService GetService()

{

var handler = new HttpClientHandler()//这里使用了代理

{

Proxy = new WebProxy("192.168.1.67", 1082),

UseProxy = true

};

var client = new HttpClient(handler);

var openAiService = new OpenAIService(new OpenAiOptions()

{

ApiKey = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxk", /*哦对了,我这里只是简单的设置了一下apikey,建议采用依赖注入,这样更安全*/

}, client);

return openAiService;

}

}

你可能感兴趣的:(c#,gpt-3,人工智能)