Claudia简介
Claudia是由Cysharp开发的非官方Anthropic Claude API .NET客户端库。它为.NET开发者提供了一种简单而强大的方式来集成和使用Claude的AI能力。Claudia支持.NET Standard 2.1、.NET 6.0和.NET 8.0,可以用于各种.NET项目中,包括Unity游戏引擎。
主要特性
Claudia提供了许多强大的功能:
1. 简单易用的API
Claudia的API设计类似于官方的Python和TypeScript SDK,但充分利用了C#的特性,使用起来更加自然流畅。例如:
var anthropic = new Anthropic
{
ApiKey = Environment.GetEnvironmentVariable("ANTHROPIC_API_KEY")
};
var message = await anthropic.Messages.CreateAsync(new()
{
Model = Models.Claude3_5Sonnet,
MaxTokens = 1024,
Messages = [new() { Role = "user", Content = "Hello, Claude" }]
});
Console.WriteLine(message);
2. 流式响应支持
Claudia支持使用Server Sent Events (SSE)进行流式响应,让您能够实时获取Claude的输出:
var stream = anthropic.Messages.CreateStreamAsync(new()
{
Model = "claude-3-opus-20240229",
MaxTokens = 1024,
Messages = [new() { Role = "user", Content = "Hello, Claude" }]
});
await foreach (var messageStreamEvent in stream)
{
Console.WriteLine(messageStreamEvent);
}
3. 函数调用
Claudia提供了简单而强大的函数调用功能。只需定义带有[ClaudiaFunction]
属性的静态方法,C#源生成器就会自动生成必要的代码:
public static partial class FunctionTools
{
[ClaudiaFunction]
public static string TimeOfDay(string timeZone)
{
var time = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, timeZone);
return time.ToString("HH:mm:ss");
}
}
4. 文件上传
Claudia支持上传各种文件类型,包括图像、PDF等:
var message = await anthropic.Messages.CreateAsync(new()
{
Model = Models.Claude3Opus,
MaxTokens = 1024,
Messages = [new()
{
Role = Roles.User,
Content = [
new(imageBytes, "image/jpeg"),
"Describe this image."
]
}],
});
5. 错误处理
Claudia提供了详细的错误处理机制,包括自定义异常类型和重试逻辑:
try
{
var msg = await anthropic.Messages.CreateAsync(new()
{
Model = Models.Claude3Opus,
MaxTokens = 1024,
Messages = [new() { Role = "user", Content = "Hello, Claude" }],
});
}
catch (ClaudiaException ex)
{
Console.WriteLine((int)ex.Status); // 400(ErrorCode.InvalidRequestError)
Console.WriteLine(ex.Name); // invalid_request_error
Console.WriteLine(ex.Message); // Field required. Input:...
}
安装和使用
要开始使用Claudia,只需通过NuGet安装包:
PM> Install-Package Claudia
然后,您就可以在您的.NET项目中使用Claudia了。以下是一个简单的示例:
using Claudia;
var anthropic = new Anthropic
{
ApiKey = "your-api-key-here"
};
var message = await anthropic.Messages.CreateAsync(new()
{
Model = Models.Claude3Opus,
MaxTokens = 1024,
Messages = [new() { Role = Roles.User, Content = "Explain quantum computing in simple terms." }]
});
Console.WriteLine(message.Content);
高级用法
自定义HTTP客户端
Claudia允许您自定义底层的HttpClient:
var anthropic = new Anthropic(new HttpClientHandler(), true);
anthropic.HttpClient.DefaultRequestHeaders.ConnectionClose = true;
访问原始响应数据
您可以使用DelegatingHandler
来访问原始的HTTP响应数据,例如头信息:
public class RateLimitDetailsHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var response = await base.SendAsync(request, cancellationToken);
if ((int)response.StatusCode == (int)ErrorCode.RateLimitError)
{
// 处理速率限制信息
}
return response;
}
}
保存和加载对话
Claudia支持使用System.Text.Json.JsonSerializer
序列化和反序列化所有请求和响应模型:
void Save()
{
var json = JsonSerializer.Serialize(chatMessages, AnthropicJsonSerializerContext.Default.Options);
File.WriteAllText("chat.json", json);
}
void Load()
{
chatMessages = JsonSerializer.Deserialize<List<Message>>("chat.json", AnthropicJsonSerializerContext.Default.Options)!;
}
在Blazor中使用Claudia
Claudia可以轻松集成到Blazor应用中,创建类似官方Claude聊天界面的UI:
@page "/"
@inject Anthropic Anthropic
<div class="chat-container">
@foreach (var message in chatMessages)
{
<div class="@(message.Role == "user" ? "user-message" : "assistant-message")">
@message.Content
</div>
}
</div>
<input @bind="userInput" @onkeyup="@HandleKeyUp" />
<button @onclick="SendMessage">Send</button>
@code {
private List<Message> chatMessages = new();
private string userInput = "";
private async Task SendMessage()
{
if (string.IsNullOrWhiteSpace(userInput)) return;
chatMessages.Add(new Message { Role = "user", Content = userInput });
userInput = "";
var response = await Anthropic.Messages.CreateAsync(new()
{
Model = Models.Claude3Haiku,
MaxTokens = 1024,
Messages = chatMessages
});
chatMessages.Add(new Message { Role = "assistant", Content = response.Content.ToString() });
}
private async Task HandleKeyUp(KeyboardEventArgs e)
{
if (e.Key == "Enter") await SendMessage();
}
}
结论
Claudia为.NET开发者提供了一个强大而灵活的工具,使得在.NET应用中集成Claude AI变得简单而直接。无论您是构建聊天机器人、智能助手,还是需要AI能力的其他应用,Claudia都能满足您的需求。
通过提供流式响应、函数调用、文件上传等高级功能,Claudia让您能够充分发挥Claude AI的潜力。同时,其简洁的API设计和全面的错误处理机制,也确保了开发过程的顺畅和稳定。
随着AI技术的不断发展,Claudia将继续更新和优化,为.NET开发者提供最新、最强大的Claude AI集成方案。无论您是经验丰富的开发者还是AI领域的新手,Claudia都是您探索和应用Claude AI能力的理想选择。
立即开始使用Claudia,体验Claude AI为您的.NET项目带来的无限可能吧!