C# Anthropic Claude 库!您可以轻松直观地调用 Claude API
C# Anthropic Claude 库
引言
我花了两天时间研究 Anthropic
API,并完成了 C# 库的创建,名为 HigLabo.Anthropic
。 你可以通过这个库轻松调用 Claude AI。 本文将解释如何使用它。
背景
几乎每天都有 AI 提供商推出新的服务。 速度之快,往往只有 REST API 端点,而没有现成的库。 因此,我们必须自行开发库来调用 API 端点。 我创建了一个库,希望能帮助计划开发 Claude API 的人。 我在这里分享它。
通过 Nuget 下载。
HigLabo.Anthropic
所有源代码都在 https://github.com/higty/higlabo/tree/master/Net8 上。
HigLabo.Anthropic
就是这样的。
你可以在 这里 找到示例代码。
Using the Code
通过服务器发送事件 (server sent event) 以 stream
方式接收 Messages
端点。
var cl = new AnthropicClient("API KEY");
var result = new MessagesStreamResult();
await foreach (string text in cl.MessagesStreamAsync
("How to enjoy coffee?", ModelNames.Claude3Opus, result, CancellationToken.None))
{
Console.Write(text);
}
if (result.MessageDelta != null)
{
Console.WriteLine("StopReason: " + result.MessageDelta.Delta.Stop_Reason);
Console.WriteLine("Usage: " + result.MessageDelta.Usage.Output_Tokens);
}
你可以使用 MessagesParameter
类传递所有 API 参数。
var cl = new AnthropicClient("API KEY");
var p = new MessagesParameter();
p.AddUserMessage("How to enjoy coffee?");
p.Model = ModelNames.Claude3Opus;
p.Max_Tokens = 1024;
// set other properties...
var result = new MessagesStreamResult();
await foreach (var item in cl.MessagesStreamAsync(p, result, CancellationToken.None))
{
Console.Write(item);
}
if(result.MessageDelta != null)
{
Console.WriteLine("StopReason: " + result.MessageDelta.Delta.Stop_Reason);
Console.WriteLine("Usage: " + result.MessageDelta.Usage.Output_Tokens);
}
完成之后,你可以通过 MessagesStreamResult
获取所有服务器发送事件信息。
这是函数调用的代码。
var cl = new AnthropicClient("API KEY");
var tools = new AnthropicTools();
var tool = new AnthropicTool("GetTickerSymbol",
"Gets the stock ticker symbol for a company searched by name.
Returns str: The ticker symbol for the company stock. Raises
TickerNotFound: if no matching ticker symbol is found.");
tool.Parameters.Add(new AnthropicToolParameter("company_name", "string",
"The name of company"));
tools.Add(tool);
var toolXml = tool.ToString();
var p = new MessagesParameter();
p.Messages.Add(new ChatMessage(ChatMessageRole.User,
$"What is the current stock price of Microsoft?"));
p.SetTools(tools);
p.Model = ModelNames.Claude3Opus;
p.Max_Tokens = 1024;
p.Stream = true;
var result = new MessagesStreamResult();
await foreach (var item in cl.MessagesStreamAsync(p, result, CancellationToken.None))
{
Console.Write(item);
}
var calls = AnthropicFunctionCalls.Parse(result.GetText());
if (calls.InvokeList.Count > 0)
{
Console.WriteLine();
Console.WriteLine("■Function call list");
Console.WriteLine(calls.ToString());
var invoke = calls.InvokeList.Find(el => el.ToolName == "GetTickerSymbol");
if (invoke != null)
{
var companyName = invoke.GetParameterValue("company_name") ?? "";
var tickerSymbol = GetTickerSymbol(companyName);
}
}
这是发送图像并获取解释的代码。
var p = new MessagesParameter();
p.Model = "claude-3-opus-20240229";
p.Max_Tokens = 1024;
var msg = new ChatImageMessage(ChatMessageRole.User);
msg.AddTextContent($"What is this image include?");
msg.AddImageFile(Path.Combine(Environment.CurrentDirectory, "Image", "Rock.jpg"));
p.Messages.Add(msg);
p.Stream = true;
var result = new MessagesStreamResult();
await foreach (var item in cl.MessagesStreamAsync(p, result, CancellationToken.None))
{
Console.Write(item);
}
关注点
所有类设计架构与 HigLabo.OpenAI
相同。 请参阅 这篇文章。
你可以像使用 HigLabo.OpenAI
一样使用它。 HigLabo.Anthropic
包含
AnthropicClient
XXXParameter
XXXAsync
XXXResponse
RestApiResponse
类,行为相同。 这证明了该类架构设计对于 REST API 客户端库来说是绝对优秀的。 实际上,我花了 6 个小时完成了 HigLabo.Anthropic
的整个代码实现。 你可以从这两个库的源代码中学习如何设计类和库,如果你计划实现一些 REST API 客户端库,它可能会帮助你。
历史
- 2024年3月17日:
HigLabo.Anthropic
的初始发布