65.9K
CodeProject 正在变化。 阅读更多。
Home

C# Anthropic Claude 库!您可以轻松直观地调用 Claude API

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2024年3月17日

CPOL

1分钟阅读

viewsIcon

9356

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 的初始发布
© . All rights reserved.