如何在.Net 6 中使用 SignalR 和 Claudia 传输 Claude 响应

问题描述 投票:0回答:1

我正在尝试使用 Claude 和 SignalR 建立聊天。我们使用的是 .Net 6,目前无法升级到 .Net 8。我发现 Claudia 应该支持 .Net 6,但示例代码无法编译。我已经在 github 存储库上添加了一个问题,但到目前为止尚未收到任何帮助。我希望这里有人能给我一些关于如何修改我的中心中的代码以使其正常工作的建议。

public async IAsyncEnumerable<string> Chat(AiChatRequestViewModel requestViewModel,
    [EnumeratorCancellation]
    CancellationToken cancellationToken)
{
    var anthropic = new Anthropic()
    {
        ApiKey = _anthropicApiKey
    };

    var stream = anthropic.Messages.CreateStreamAsync(new()
    {
        Model = "claude-3-opus-20240229",
        MaxTokens = requestViewModel.Samples,
        Temperature = 0.0,
        Messages = [new () { Role = "user", Content = requestViewModel.AIPrompt }]
    }, cancellationToken: cancellationToken);
    
    await foreach (var messageStreamEvent in stream)
    {
        yield return messageStreamEvent.Type;
    }
}

它抱怨的地方是在消息行上出现错误 -

Invalid expression term '['
该行给出了
Constructor 'Claudia.Message.Message()' is obsolete: Constructors of types with required members are not supported in this version of your compiler.

的智能感知错误
signalr .net-6.0 signalr-hub claude
1个回答
0
投票

如果其他人需要做类似的事情,我找到了 Anthropic.Sdk 并能够使用下面的代码让它工作。

public async IAsyncEnumerable<string> Chat(AiChatRequestViewModel requestViewModel)
{
    var client = new AnthropicClient()
    {
        Auth = new APIAuthentication(_anthropicApiKey)
    };
    
    var messages = new List<Message>();
    messages.Add(new Message()
    {
        Role = RoleType.User,
        Content = new List<ContentBase>()
        {
            new TextContent()
            {
                Text = requestViewModel.AIPrompt
            }
        }
    });
    var parameters = new MessageParameters()
    {
        Messages = messages,
        MaxTokens = requestViewModel.Samples,
        Model = AnthropicModels.Claude3Opus,
        Stream = true,
        Temperature = requestViewModel.Temperature,
    };
    
    var outputs = new List<MessageResponse>();
    await foreach (var res in client.Messages.StreamClaudeMessageAsync(parameters))
    {
        if (res.Delta != null)
        {
            yield return res.Delta.Text;
        }

        outputs.Add(res);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.