Ukládání relace chatu umožňuje vaší aplikaci .NET přežít restartování, poskytuje zálohu konverzace a umožňuje přesunout relaci mezi počítači. V tomto průvodci si projdeme Ukládání a obnovení relace chatu v C# pomocí Aspose.LLM, přičemž se zaměříme na to, kdy použít tento vzor, jak ukládat a načítat relace, jaká data se ukládají, úvahy o přenositelnosti a osvědčené postupy v oblasti zabezpečení.

Proč uchovávat a obnovovat chatovou relaci?

Vývojáři často vytvářejí interaktivní asistenty, podpůrné boty nebo dlouhodobé pracovní postupy pro analýzu dat. V mnoha scénářích musí kontext chatu přetrvávat i po ukončení jedné instance procesu:

  • Desktopový nástroj podpory, kde uživatelé očekávají, že jejich předchozí dotazy zůstanou dostupné po zavření aplikace.
  • Serverová automatizace, která zahrnuje více kroků a může být restartována kvůli údržbě.
  • Auditorské nebo souladové požadavky, které vyžadují snímek celé konverzace.
  • Přesunutí sezení řešení problémů z laptopu vývojáře na produkční server.

Uložením relace do souboru JSON zachytíte kompletní historii zpráv a interní KV mezipaměť potřebnou pro přesné pokračování, což usnadňuje implementaci výše uvedených případů použití.

Začínáme s Aspose.LLM

Nejprve přidejte balíček Aspose.LLM do svého projektu:

Install-Package Aspose.LLM

Další podrobnosti o produktu najdete na Aspose.LLM .NET product page. SDK vyžaduje platnou licenci, takže se ujistěte, že máte připravený dočasný nebo trvalý licenční soubor.

Požadavky

  • Nainstalujte balíček NuGet Aspose.LLM.
  • Použijte licenci Aspose.LLM pomocí Aspose.LLM.License.
  • Vytvořte instanci AsposeLLMApi (například s Qwen25Preset).

Kdy použít tento vzor

Tento vzor vyniká, když potřebujete, aby konverzace přetrvala i po ukončení aktuálního procesu, nebo když chcete spolehlivý snímek pro zálohování či migraci. Typické scénáře zahrnují:

  • Desktopové nebo serverové aplikace, kde uživatelé očekávají, že chat bude přetrvávat mezi spuštěními.
  • Dlouho běžící pracovní postupy, které potřebují, aby konverzace přežila proces.
  • Zálohování a auditní účely pomocí pořízení snímku aktivní konverzace.
  • Migrace stavu relace mezi stroji se stejnou verzí SDK a přednastavením.

Požadavky

Než budete moci uložit nebo obnovit relaci, ujistěte se, že jsou splněny následující podmínky:

  1. Aspose.LLM NuGet balíček – nainstalován pomocí příkazu uvedeného dříve.
  2. Licence – vytvořte objekt Aspose.LLM.License a zavolejte SetLicense s vaším souborem .lic.
  3. Instance API – vytvořte instanci AsposeLLMApi s požadovaným přednastavením (např. new Qwen25Preset()).

Tyto kroky jsou demonstrovány v úplném příkladu později v článku.

Uložit relaci

SDK nabízí tři pohodlné způsoby, jak zachovat chatovou relaci. Postupujte podle níže uvedených kroků a poté si prohlédněte ukázkový kód.

  1. Zavolejte SaveChatSession s explicitní cestou k souboru, pokud potřebujete soubor na známém místě.
  2. Vynechte cestu, aby SDK zapsalo <sessionId>.json vedle spustitelného souboru.
  3. Vytvořte dočasnou cestu pomocí Path.Combine, ujistěte se, že adresář existuje, a uložte tam pro izolované nebo sandboxové scénáře.

Ukázkový kód – Ukládání relace

Následující příklad demonstruje všechny tři přístupy:

api.SaveChatSession(sessionId, "session-42.json");

api.SaveChatSession(sessionId); // writes <sessionId>.json next to the executable

string path = Path.Combine(Path.GetTempPath(), "chats", $"{sessionId}.json");
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
api.SaveChatSession(sessionId, path);

api.SaveChatSession(sessionId, "session-42.json") zapisuje soubor JSON na zadané místo.
Pokud zavoláte SaveChatSession bez cesty, SDK vytvoří soubor pojmenovaný podle ID relace v aktuálním pracovním adresáři.
Když potřebujete deterministické nebo dočasné umístění, kombinujte Path.GetTempPath se svou vlastní strukturou složek a vytvořte adresář před uložením.

Poznámka: Tyto úryvky jsou převzaty z oficiální dokumentace Aspose a nebyly spuštěny v sandboxu. Ověřte je ve svém prostředí, než je použijete v produkci.

Obnovit relaci

Načtení dříve uložené relace je stejně jednoduché. API načte soubor JSON, znovu vytvoří vnitřní stav a vrátí identifikátor relace, takže můžete pokračovat v zasílání zpráv bez nutnosti ručně předávat ID znovu.

  1. Zavolejte LoadChatSession s cestou k souboru JSON.
  2. Uložte vrácené sessionId.
  3. Použijte SendMessageToSessionAsync s obnoveným ID k pokračování konverzace.

Ukázka kódu – Obnovení relace

string sessionId = await api.LoadChatSession("session-42.json");
string reply = await api.SendMessageToSessionAsync(sessionId, "What did we discuss?");

LoadChatSession načte soubor a vrátí obnovené ID relace.
Obnovená relace je automaticky nastavena jako aktivní, což umožňuje okamžité volání SendMessageToSessionAsync.

Poznámka: Tyto úryvky jsou převzaty z oficiální dokumentace Aspose a nebyly spuštěny v sandboxu. Ověřte je ve svém prostředí, než je použijete v produkci.

Kompletní příklad — Uložení, restart, obnovení

Níže je kompletní, end‑to‑end demonstrace. První blok spustí chat, odešle několik zpráv a uloží relaci. Druhý blok simuluje nový proces, který načte uložený soubor a pokračuje v konverzaci.

Ukázka kódu – End‑to‑End workflow

using Aspose.LLM;
using Aspose.LLM.Abstractions.Parameters.Presets;

// ---------- First run: save ----------
{
    var license = new Aspose.LLM.License();
    license.SetLicense("Aspose.LLM.lic");

using var api = AsposeLLMApi.Create(new Qwen25Preset());

string sessionId = await api.StartNewChatAsync(sessionId: "support-ticket-1234");

await api.SendMessageToSessionAsync(sessionId,
        "Customer reports that the migration from v25 to v26 broke their startup script.");
    await api.SendMessageToSessionAsync(sessionId,
        "Their environment: Windows Server 2022, .NET 8, CUDA 12.6.");
    await api.SendMessageToSessionAsync(sessionId,
        "What questions should I ask them next?");

api.SaveChatSession(sessionId, "support-ticket-1234.json");
    Console.WriteLine("Session saved.");
}

// ---------- Second run: resume ----------
{
    var license = new Aspose.LLM.License();
    license.SetLicense("Aspose.LLM.lic");

using var api = AsposeLLMApi.Create(new Qwen25Preset());

string sessionId = await api.LoadChatSession("support-ticket-1234.json");
    Console.WriteLine($"Resumed session: {sessionId}");

string reply = await api.SendMessageToSessionAsync(sessionId,
        "They replied that they use a custom build step that copies native DLLs. How should I proceed?");
    Console.WriteLine(reply);
}

První blok vytvoří licenci, vytvoří instanci API s Qwen25Preset, spustí nový chat pojmenovaný support-ticket-1234, odešle tři zprávy pro vytvoření kontextu a nakonec zapíše relaci do support-ticket-1234.json. Druhý blok znovu vytvoří licenci a API, načte soubor JSON a pokračuje v dialogu, což ukazuje, že model si uchovává předchozí zprávy.

Poznámka: Tyto úryvky jsou převzaty z oficiální dokumentace Aspose a nebyly spuštěny v sandboxu. Ověřte je ve svém prostředí, než je použijete v produkci.

Co je uloženo?

SaveChatSession vytváří JSON dokument se třemi základními sekcemi:

  1. Session Identifier – jedinečné ID, které jste zadali při zahájení chatu.
  2. Message History – uspořádaný seznam všech uživatelských a asistenčních zpráv, včetně role, obsahu a jakýchkoli metadat médií.
  3. KV Cache Metadata – interní pozice a velikosti mezipaměti klíč‑hodnota pro každou zprávu, což umožňuje modelu přesně pokračovat tam, kde skončil.

Protože jsou zahrnuta data mezipaměti, obnovená relace může pokračovat v generování bez přepočítávání předchozí pozornosti, což činí operaci obnovení rychlou a deterministickou.

Omezení přenositelnosti

Ačkoli JSON soubor obsahuje vše potřebné pro dokonalé pokračování, je přenosný pouze za určitých podmínek:

  • Stejná hlavní verze SDK – formát souboru se může mezi hlavními vydáními měnit, takže obě strany musí používat stejnou hlavní verzi Aspose.LLM.
  • Identický soubor modelu – podkladový model Hugging Face (včetně kvantizace) musí být naprosto shodný; jinak se KV cache stane nekompatibilní.
  • Shodný BinaryManagerParameters.ReleaseTag – verze runtime llama.cpp použité k načtení modelu musí být stejná, jinak se liší nízkoúrovňové rozložení tenzorů.

Pokud jsou porušena některá z těchto omezení, můžete vidět chyby jako InvalidOperationException nebo poškozený výstup.

Známá nuance při načítání

Když zavoláte LoadChatSession, SDK obnoví konverzaci, ale použije výchozí ContextParameters, ChatParameters a SamplerParameters. Jakékoli vlastní nastavení (např. teplota, maximální počet tokenů, systémové výzvy), které jste během původní relace použili, nejsou automaticky obnovena. Chcete‑li zachovat přesné chování generování, znovu použijte své vlastní parametry po načtení, nebo přehrajte konverzaci v nové relaci s požadovaným nastavením.

Časté chyby

Níže je rychlý kontrolní seznam typických problémů, na které můžete narazit při načítání relace:

  • FileNotFoundException – Ověřte cestu k souboru; relativní cesty se řeší vůči aktuálnímu pracovnímu adresáři.
  • InvalidOperationException při načtení – Naznačuje nekompatibilní verzi SDK nebo poškozený soubor JSON.
  • Poškozený výstup po načtení – Obvykle způsobeno neodpovídajícím souborem modelu nebo ReleaseTag. Ujistěte se, že na načítacím počítači je přítomen přesně stejný binární soubor modelu.

Zpracování těchto výjimek s elegancí a zaznamenávání podrobných diagnostik učiní vaši aplikaci robustnější.

Bezpečnost

Uložený soubor JSON obsahuje plain‑text kopie každé uživatelské a asistenční zprávy. Uložení na nechráněném místě může odhalit citlivá data. Zvažte následující opatření:

  • Šifrujte soubor před zápisem na disk (např. Windows DPAPI, Azure Key Vault nebo multiplatformní knihovnu jako libsodium).
  • Omezte oprávnění souborového systému tak, aby pouze servisní účet, který aplikaci spouští, mohl soubor číst/zapisovat.
  • Pokud soubor musí být přenášen přes síť, použijte TLS‑šifrované kanály a zvažte podepisování souboru pro detekci manipulace.

Co dál

Nyní, když můžete uchovávat a obnovovat chaty, můžete prozkoumat související funkce:

  • Případy použití víceotáčkových chatů – udržujte delší dialogy napříč mnoha interakcemi.
  • Vlastní konfigurace předvoleb – přizpůsobte předvolbu modelu vašemu doménovému prostředí před uložením.
  • Kompletní reference perzistence relace – prohlédněte si referenci API pro podrobnější sémantiku kolem SaveChatSession a souvisejících metadat.

Výběr správného přístupu

Článek představil tři způsoby, jak uložit relaci, a jednoduchou metodu načtení. Vyberte přístup, který odpovídá vašemu scénáři nasazení.

  • Explicitní cesta – nejlepší, když soubor musí být umístěn na známém místě, například ve složce specifické pro uživatele nebo na sdíleném síťovém disku.
  • Výchozí název souboru – pohodlné pro rychlé prototypy nebo když relace běží vedle spustitelného souboru.
  • Dočasná cesta s vytvořením adresáře – ideální pro sandboxová prostředí, CI pipeline nebo když chcete, aby operační systém spravoval úklid.

Všechny přístupy používají stejné podkladové API; liší se pouze v tom, jak spravujete souborový systém.

Získat bezplatnou licenci

Pokud ještě nemáte trvalou licenci, můžete získat dočasnou zkušební licenci na Stránka dočasné licence Aspose.

Bezplatné doplňkové zdroje

Závěr

Ukládání chatové relace pomocí Aspose.LLM vám poskytuje trvanlivost, auditovatelnost a flexibilitu přesouvat konverzace mezi procesy nebo stroji. Naučili jste se, kdy tento vzor použít, jak uložit relaci třemi různými způsoby, jak ji obnovit, co JSON soubor obsahuje, a jaké jsou kompatibilní a bezpečnostní úvahy, které je třeba mít na paměti. S plným příkladem můžete nyní integrovat perzistenci relace do jakéhokoli .NET chat řešení.

Často kladené otázky

  1. Kdy je užitečné ukládat chatovou relaci?
    Ukládání je užitečné pro desktopové nebo serverové aplikace, které potřebují stav konverzace mezi spuštěními, dlouhodobé pracovní postupy, požadavky na audit nebo zálohování a migraci relací mezi počítači se stejnou verzí SDK.
  2. Jak mohu při ukládání relace zadat vlastní cestu k souboru?
    Zavolejte api.SaveChatSession(sessionId, "myfolder\myfile.json"); nebo vytvořte cestu pomocí Path.Combine a ujistěte se, že adresář existuje před uložením.
  3. Co vrací LoadChatSession?
    Vrací identifikátor obnovené relace, což vám umožní pokračovat v odesílání zpráv bez nutnosti znovu zadávat ID.
  4. Mohu přesunout uložený soubor relace na jiný počítač?
    Ano, pokud cílový počítač používá stejnou hlavní verzi SDK, identický soubor modelu a odpovídající ReleaseTag pro llama.cpp.
  5. Je uložený soubor JSON zabezpečený?
    Soubor ukládá konverzační data v prostém textu, proto jej před uložením na nedůvěryhodná místa doporučujeme zašifrovat.
  6. Proč se po načtení neobnoví moje vlastní nastavení sampleru nebo kontextu?
    LoadChatSession použije výchozí parametry; po načtení znovu aplikujte vlastní nastavení nebo přehrajte historii v nové relaci.

Číst dál