调用扣子
#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);
    }
}
上一篇
下一篇