目录
介绍
我花了两天时间研究Anthropic API,并完成了一个名为HigLabo.Anthropic。您可以通过此库轻松调用Claude AI。本文将解释如何使用它。
背景
几乎每天都有人工智能提供商推出一项新服务。它是如此之快,以至于没有库,只有REST API端点。因此,我们必须开发DIY库来使用API端点。我刚刚创建了一个库,可以帮助那些计划开发Claude API的人。我在这里分享它。
通过Nuget下载。
HigLabo.Anthropic
所有源代码都在 https://github.com/higty/higlabo/tree/master/Net8 上。
HigLabo.Anthropic。
您可以在此处查看示例代码。
使用代码
通过服务器发送的事件将Messages端点接收为stream。
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.OpenAIHigLabo.Anthropic相同的:
- AnthropicClient
- XXXParameter
- XXXAsync
- XXXResponse
- RestApiResponse
类和行为是一样的。这证明了类架构设计对于REST API客户端库来说绝对是很好的。实际上,我完成了6个小时的工作来实现HigLabo.Anthropic的完整代码。你可以从这两个库源代码中学习如何设计类和库,如果你有计划实现一些REST API客户端库,它可能会对你有所帮助。
https://www.codeproject.com/Articles/5379174/Csharp-Anthropic-Claude-Library-You-Can-Call-Claud