赞
踩
目录
我花了两天时间研究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相同的:
类和行为是一样的。这证明了类架构设计对于REST API客户端库来说绝对是很好的。实际上,我完成了6个小时的工作来实现HigLabo.Anthropic的完整代码。你可以从这两个库源代码中学习如何设计类和库,如果你有计划实现一些REST API客户端库,它可能会对你有所帮助。
https://www.codeproject.com/Articles/5379174/Csharp-Anthropic-Claude-Library-You-Can-Call-Claud
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。