Anthropic API — anropa Claude från C#
Anthropics Messages API låter dig integrera Claude i din applikation. Anropet är ett vanligt HTTP POST med JSON.
Förutsättningar
- API-nyckel från console.anthropic.com
- Nyckeln i en miljövariabel:
ANTHROPIC_API_KEY
Grundläggande anrop
using System.Net.Http;using System.Net.Http.Json;using System.Text.Json;
public class ClaudeKlient{ private readonly HttpClient _http; private readonly string _apiKey; private const string ApiUrl = "https://api.anthropic.com/v1/messages"; private const string Model = "claude-opus-4-5";
public ClaudeKlient(string apiKey) { _apiKey = apiKey; _http = new HttpClient(); }
public async Task<string> FrågaAsync(string question, string systemPrompt = "") { var request = new { model = Model, max_tokens = 1024, system = systemPrompt, messages = new[] { new { role = "user", content = question } } };
using var req = new HttpRequestMessage(HttpMethod.Post, ApiUrl); req.Headers.Add("x-api-key", _apiKey); req.Headers.Add("anthropic-version", "2023-06-01"); req.Content = JsonContent.Create(request);
var response = await _http.SendAsync(req); response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync(); var doc = JsonDocument.Parse(json);
return doc.RootElement .GetProperty("content")[0] .GetProperty("text") .GetString() ?? ""; }}Använda klienten
var apiKey = Environment.GetEnvironmentVariable("ANTHROPIC_API_KEY") ?? throw new InvalidOperationException("ANTHROPIC_API_KEY saknas");
var claude = new ClaudeKlient(apiKey);
string answer = await claude.FrågaAsync( question: "Vad är skillnaden mellan List<T> och IEnumerable<T>?", systemPrompt: "Du är en C#-lärare. Förklara kortfattat med kodexempel.");
Console.WriteLine(answer);Request-strukturen
{ "model": "claude-opus-4-5", "max_tokens": 1024, "system": "Du är en hjälpsam assistent.", "messages": [ { "role": "user", "content": "Hej!" }, { "role": "assistant", "content": "Hej! Hur kan jag hjälpa dig?" }, { "role": "user", "content": "Förklara async/await" } ]}messages-arrayen är hela konversationshistoriken. Skicka den med varje anrop för att bibehålla kontext (se Chatbot-exemplet).
Response-strukturen
{ "id": "msg_01...", "type": "message", "role": "assistant", "content": [ { "type": "text", "text": "Svaret från Claude..." } ], "model": "claude-opus-4-5", "usage": { "input_tokens": 25, "output_tokens": 187 }}Felhantering
try{ var answer = await claude.FrågaAsync(question); Console.WriteLine(answer);}catch (HttpRequestException ex) when (ex.StatusCode == System.Net.HttpStatusCode.Unauthorized){ Console.WriteLine("Ogiltig API-nyckel.");}catch (HttpRequestException ex) when (ex.StatusCode == System.Net.HttpStatusCode.TooManyRequests){ Console.WriteLine("Rate limit nått — försök igen om en stund.");}Aktuella modell-ID:n
Kontrollera aktuella modellnamn på docs.anthropic.com/en/docs/models — de uppdateras regelbundet.