Chatbot — konversation med minne
En chatbot skickar hela konversationshistoriken med varje anrop. Det gör att AI:t “minns” vad som sagts tidigare i samma session.
Hur det fungerar
User: "Hej, jag heter Anna"AI: "Hej Anna! Vad kan jag hjälpa dig med?"User: "Vad heter jag?"AI: "Du heter Anna." ← AI:t remembers — for to vi sent historyUtan historiken: AI:t vet inte vad du hette.
Fullständigt exempel
using System.Net.Http;using System.Net.Http.Json;using System.Text.Json;
class Chatbot{ record Message(string Role, string Content);
private readonly HttpClient _http; private readonly string _apiKey; private readonly List<Message> _history = new(); private readonly string _systemPrompt;
private const string ApiUrl = "https://api.anthropic.com/v1/messages"; private const string Model = "claude-haiku-4-5-20251001"; // snabb och billig
public Chatbot(string apiKey, string systemPrompt = "Du är en hjälpsam assistent.") { _apiKey = apiKey; _systemPrompt = systemPrompt; _http = new HttpClient(); }
public async Task<string> SkickaAsync(string user) { _history.Add(new Message("user", user));
var request = new { model = Model, max_tokens = 1024, system = _systemPrompt, messages = _history.Select(m => new { role = m.Role, content = m.Content }) };
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); var answer = doc.RootElement .GetProperty("content")[0] .GetProperty("text") .GetString() ?? "";
_history.Add(new Message("assistant", answer)); return answer; }}
// Program.csvar apiKey = Environment.GetEnvironmentVariable("ANTHROPIC_API_KEY") ?? throw new InvalidOperationException("ANTHROPIC_API_KEY saknas");
var bot = new Chatbot(apiKey, "Du är en vänlig C#-tutor. Svara alltid på svenska.");
Console.WriteLine("Chatbot startad. Skriv 'sluta' för att avsluta.\n");
while (true){ Console.Write("Du: "); var input = Console.ReadLine() ?? "";
if (input.ToLower() == "sluta") break;
Console.Write("AI: "); var answer = await bot.SkickaAsync(input); Console.WriteLine(answer); Console.WriteLine();}Exempel på körning
Chatbot started. Write 'sluta' for to exit.
Du: Hej, jag isCalled Anna och teaches mig C#AI: Hej Anna! Fun to du teaches dig C#. Vad vill du veta?
Du: What isCalled jag?AI: Du isCalled Anna!
Du: Explain what en list isAI: En list (List<T>) is en dynamic collection...
Du: stopViktiga detaljer
_historybyggs upp för varje meddelande- Hela historiken skickas med varje API-anrop — kostar tokens
- Rensa historiken (eller börja nytt objekt) för en ny konversation
- Claude Haiku är bra för chatbotar — snabb och billig
Tokenhantering
Om konversationen blir lång, börjar det kosta. Enkel strategi — behåll bara de senaste N meddelandena:
const int MaxHistory = 20;if (_history.Count > MaxHistory) _history.RemoveRange(0, _history.Count - MaxHistory);