#load "AppLib"
#load "seqlog"
// 使用了 Betalgo.OpenAI
// 使用了 coze2openai 将coze调用转为 openai api 调用
async Task Main(string[] args)
{
var app = this.CreateApp(args, $@"./logs/coze_.log", it => EnableSeqLogSystem(it, Util.GetPassword("seqKey"))); // 创建日志
var logger = this.GetLogger(app); // 创建日志
try
{
var cozeKey = Util.GetPassword("cozeKey");
var openAiService = new OpenAIService(new OpenAiOptions()
{
ApiKey = cozeKey,
BaseDomain = "http://127.0.0.1:3000"
});
var request = new ChatCompletionCreateRequest
{
Messages = new List<ChatMessage>
{
ChatMessage.FromSystem("请使用文本格式进行回复"),
ChatMessage.FromUser("请推荐 3 部上映于2023年你认为最好看的美国恐怖片,请列出上映时间,豆瓣评分并进行基本的介绍")
},
Model = "movie_expert"
//Model = "internet_expert"
};
// 流式调用
var streamResult = openAiService.CreateCompletionAsStream(request);
await foreach (var completion in streamResult)
{
this.OutputCompletion(logger, completion);
}
// 直接对话
//var completionResult = await openAiService.ChatCompletion.CreateCompletion(request);
//this.OutputCompletion(logger, completionResult);
}
catch (Exception exception)
{
logger.LogError(exception, "工作发生错误");
throw;
}
}
void OutputCompletion(ILogger logger, ChatCompletionCreateResponse completionResult)
{
if (!completionResult.Successful)
{
var errorMessage = completionResult.Error != null
? $"{completionResult.Error.Code} [{completionResult.Error.Message}]"
: "调用 ai api 失败";
throw new ApplicationException(errorMessage);
}
foreach (ChatChoiceResponse response in completionResult.Choices)
{
// logger.LogInformation(response.Message.Content);
Console.Write(response.Message.Content);
}
}