{"id":2607,"date":"2023-12-20T16:05:46","date_gmt":"2023-12-20T14:05:46","guid":{"rendered":"https:\/\/davidka.net\/ru\/?p=2607"},"modified":"2025-09-20T20:33:32","modified_gmt":"2025-09-20T18:33:32","slug":"personalizing-llms-prompts-fine-tuning-models-code-examples","status":"publish","type":"post","link":"https:\/\/de.davidka.net\/de\/2023\/12\/20\/personalizing-llms-prompts-fine-tuning-models-code-examples\/","title":{"rendered":"Spickzettel. Personalisierung von LLM: Prompts, Feinabstimmung von Modellen, Codebeispiele."},"content":{"rendered":"\n<p class=\"has-medium-font-size wp-block-paragraph\">In diesem Artikel:<\/p>\n\n\n\n<ol class=\"wp-block-list has-neve-link-color-color has-text-color has-link-color has-medium-font-size wp-elements-c3aabc205b51a7803c9c35155a8055a8\">\n<li>Wie der &#8222;Memory-Effekt&#8220; in LLM erzeugt wird (kurzer \u00dcberblick).<\/li>\n\n\n\n<li>Warum und wann eine Feinabstimmung (Fine-tuning) eines Modells erforderlich ist.<\/li>\n\n\n\n<li>Wann Feinabstimmung nicht die beste L\u00f6sung ist.<\/li>\n\n\n\n<li>Datenvorbereitung.<\/li>\n\n\n\n<li>Beispiele f\u00fcr die Feinabstimmung f\u00fcr <strong>OpenAI (GPT)<\/strong>, <strong>Google (Gemini)<\/strong> und <strong>Anthropic (Claude)<\/strong> (unterscheidet sich).<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">1. Wie LLM &#8222;sich erinnert&#8220; und &#8222;sich anpasst&#8220;: Die Illusion des Kontexts<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bevor wir \u00fcber Feinabstimmung sprechen, ist es wichtig zu verstehen, wie LLM es \u00fcberhaupt schafft, ein Gef\u00fchl der Personalisierung zu erzeugen.<br>Dies ist wichtig, um sich nicht in eine kostspielige Feinabstimmung zu st\u00fcrzen, wenn die Aufgabe mit einfacheren Methoden gel\u00f6st werden kann:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00dcber das <strong>Kontextfenster (Kurzzeitged\u00e4chtnis):<\/strong> Innerhalb eines einzelnen Dialogs senden Sie dem Modell nicht nur eine neue Frage, sondern auch <strong>die gesamte oder einen Teil der vorherigen Korrespondenz<\/strong>. Das Modell verarbeitet diesen gesamten Text als einen einzigen &#8222;Kontext&#8220;. Dank dessen &#8222;erinnert&#8220; es sich an fr\u00fchere Bemerkungen und setzt den Gedanken fort. Die Einschr\u00e4nkung hier ist die L\u00e4nge des Kontextfensters (Anzahl der Token).<\/li>\n\n\n\n<li>Erstellung von <strong>Systemanweisungen (System Prompt):<\/strong> Sie k\u00f6nnen dem Modell eine Rolle, einen Ton und Verhaltensregeln zuweisen. Zum Beispiel: &#8222;Sie sind ein Python-Experte, antworten Sie kurz.&#8220;<\/li>\n\n\n\n<li>Aufnahme mehrerer Beispiele f\u00fcr das gew\u00fcnschte Verhalten in die Anfrage <strong>Few-Shot Learning:<\/strong> (Eingabe-\/Ausgabe-Paare) erm\u00f6glicht es dem Modell, dieses Muster direkt innerhalb der aktuellen Anfrage zu &#8222;lernen&#8220;.<\/li>\n\n\n\n<li><strong>Anwendungsseitiges Zustandsmanagement:<\/strong> Die leistungsst\u00e4rkste Methode. Die Anwendung (die auf die API zugreift) kann Benutzerinformationen (Pr\u00e4ferenzen, Verlauf, Profildaten) speichern und diese dynamisch dem Prompt hinzuf\u00fcgen, bevor sie an das Modell gesendet werden.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Feinabstimmung ist der Prozess des weiteren Trainings eines bereits vorbereiteten Basis-LLM auf Ihrem eigenen, spezifischen Datensatz. Dies erm\u00f6glicht dem Modell:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Stil und Ton anzupassen:<\/strong> Das Modell spricht &#8222;Ihre Sprache&#8220; \u2013 sei es streng wissenschaftlich, freundlich marketingorientiert oder der Slang einer bestimmten Gemeinschaft.<\/li>\n\n\n\n<li><strong>Spezifische Anweisungen und Formate zu befolgen:<\/strong> Wenn Sie Antworten in einer streng definierten JSON-Struktur oder immer mit einem bestimmten Satz von Feldern ben\u00f6tigen.<\/li>\n\n\n\n<li><strong>Dom\u00e4nenspezifische Sprache zu verstehen:<\/strong> Das Training mit Ihrer internen Dokumentation oder branchenspezifischen Texten hilft dem Modell, die Terminologie Ihrer Nische besser zu verarbeiten.<\/li>\n\n\n\n<li><strong>Die Leistung bei engen Aufgaben zu verbessern:<\/strong> F\u00fcr bestimmte Arten von Anfragen (z. B. Sentiment-Klassifizierung, Codegenerierung in einem bestimmten Framework) kann die Feinabstimmung genauere und relevantere Antworten liefern als das Basismodell.<\/li>\n\n\n\n<li><strong>Die Prompt-L\u00e4nge zu reduzieren:<\/strong> Wenn das Modell das gew\u00fcnschte Verhalten durch Feinabstimmung bereits &#8222;kennt&#8220;, m\u00fcssen Sie es nicht jedes Mal im Prompt daran erinnern, was Token spart und die Latenz reduziert.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Feinabstimmung ist ein leistungsstarkes, aber kein universelles Werkzeug. Sie sollten es nicht verwenden, wenn:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Das Modell auf neues Wissen zugreifen muss:<\/strong> Feinabstimmung \u00e4ndert die Gewichte des Modells, aber es &#8222;l\u00e4dt&#8220; keine neuen Fakten in Echtzeit in es. Wenn Ihre Aufgabe darin besteht, Fragen auf der Grundlage einer sich st\u00e4ndig \u00e4ndernden Wissensbasis (Unternehmensdokumente, neueste Nachrichten) zu beantworten, ist es besser, <strong>Retrieval Augmented Generation (RAG)<\/strong> zu verwenden. Hier erh\u00e4lt das Basismodell den Kontext aus Ihrer Datenbank <em>w\u00e4hrend der Abfrageausf\u00fchrung<\/em>.<\/li>\n\n\n\n<li><strong>Eine einfache Aufgabe durch Prompt-Engineering gel\u00f6st werden kann:<\/strong> Beginnen Sie immer mit dem effektivsten Prompt-Engineering. Wenn die Aufgabe mit einfachen Anweisungen und Few-Shot-Beispielen gel\u00f6st werden kann, ist die Feinabstimmung \u00fcberfl\u00fcssig und kostspieliger.<\/li>\n\n\n\n<li><strong>Sie nicht \u00fcber gen\u00fcgend hochwertige Daten verf\u00fcgen:<\/strong> Schlechte Daten = schlecht abgestimmtes Modell.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. Datenvorbereitung.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die Qualit\u00e4t und Quantit\u00e4t Ihrer Daten sind von entscheidender Bedeutung. Das Modell lernt aus Ihren Beispielen, daher m\u00fcssen diese genau, vielf\u00e4ltig und konsistent sein.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Format:<\/strong> Meistens JSON Lines (<code class=\"\" data-line=\"\">.jsonl<\/code>) oder CSV (<code class=\"\" data-line=\"\">.csv<\/code>).<\/li>\n\n\n\n<li><strong>Datenstruktur:<\/strong> Abh\u00e4ngig von der Aufgabe.\n<ul class=\"wp-block-list\">\n<li><strong>Instruction Tuning (Anweisung-Antwort):<\/strong> Geeignet f\u00fcr verallgemeinerte Aufgaben wie Frage-Antwort, Umformulierung, Zusammenfassung.<br><code class=\"\" data-line=\"\">json {&quot;input_text&quot;: &quot;Formulieren Sie den Satz um: &#039;KI-Technologie entwickelt sich rasant.&#039;&quot;, &quot;output_text&quot;: &quot;K\u00fcnstliche Intelligenz zeigt rasante Fortschritte.&quot;} {&quot;input_text&quot;: &quot;Nennen Sie die Hauptstadt Frankreichs.&quot;, &quot;output_text&quot;: &quot;Die Hauptstadt Frankreichs ist Paris.&quot;}<\/code><\/li>\n\n\n\n<li><strong>Chat Tuning (Chat):<\/strong> Ideal, um das Modell darin zu schulen, einen Dialog in einer bestimmten Rolle oder einem bestimmten Stil zu f\u00fchren.<br><code class=\"\" data-line=\"\">json <\/code><br><code class=\"\" data-line=\"\">{&quot;messages&quot;: [<\/code><br>     <code class=\"\" data-line=\"\">{&quot;author&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Hallo! Was empfehlen Sie zum Abendessen?&quot;}, <\/code><br>     <code class=\"\" data-line=\"\">{&quot;author&quot;: &quot;model&quot;, &quot;content&quot;: &quot;Guten Abend! Heute ist ein gro\u00dfartiger Tag f\u00fcr Pasta Carbonara, oder, wenn Sie etwas Leichtes bevorzugen, einen Caesar-Salat.&quot;}<\/code><br><code class=\"\" data-line=\"\">]} <\/code><br><code class=\"\" data-line=\"\">{&quot;messages&quot;: [<\/code><br>    <code class=\"\" data-line=\"\">{&quot;author&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Erz\u00e4hlen Sie mir von neuen Funktionen in Python 3.12.&quot;}, <\/code><br>    <code class=\"\" data-line=\"\">{&quot;author&quot;: &quot;model&quot;, &quot;content&quot;: &quot;In Python 3.12 wurden f-Strings mit Einr\u00fcckungen, eine neue Syntax f\u00fcr universelle Generika und eine verbesserte Unicode-Fehlerbehandlung eingef\u00fchrt.&quot;}<\/code><br><code class=\"\" data-line=\"\">]}<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Menge:<\/strong> Mindestens 100-200 hochwertige Beispiele, aber je mehr, desto besser (Tausende f\u00fcr ernsthafte Aufgaben).<\/li>\n\n\n\n<li><strong>Qualit\u00e4t:<\/strong> Genauigkeit, Konsistenz von Stil, Ton und Format im gesamten Datensatz.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5. Modelle und Plattformen<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">5.1. OpenAI<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">OpenAI bietet eine recht einfache und intuitive API zur Feinabstimmung.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Prozess:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Bereiten Sie die Daten im JSONL-Format vor, wobei jede Zeile ein Objekt mit einem Array von <code class=\"\" data-line=\"\">messages<\/code> ist (wie in der Chat Completions API).<\/li>\n\n\n\n<li>Laden Sie die Datendatei \u00fcber die API hoch.<\/li>\n\n\n\n<li>Erstellen Sie einen Feinabstimmungsauftrag, indem Sie die hochgeladene Datei und das Basismodell angeben.<\/li>\n\n\n\n<li>\u00dcberwachen Sie den Fortschritt.<\/li>\n\n\n\n<li>Verwenden Sie das neue, feinabgestimmte Modell anhand seiner ID.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Beispieldaten (Datei <code class=\"\" data-line=\"\">training_data.jsonl<\/code>):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{&quot;messages&quot;: &#091;\n    {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;Sie sind ein freundlicher Assistent f\u00fcr den Kundensupport eines IT-Unternehmens.&quot;}, \n    {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Mein Internet funktioniert nicht.&quot;}, \n    {&quot;role&quot;: &quot;assistant&quot;, &quot;content&quot;: &quot;Oh, entschuldigen Sie die Unannehmlichkeiten! Lassen Sie uns versuchen, das Problem zu l\u00f6sen. Wie sind Sie mit dem Internet verbunden \u2013 \u00fcber Wi-Fi oder \u00fcber Kabel?&quot;}]}\n{&quot;messages&quot;: &#091;\n    {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;Sie sind ein freundlicher Assistent f\u00fcr den Kundensupport eines IT-Unternehmens.&quot;}, \n    {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Wie kann ich mein Passwort zur\u00fccksetzen?&quot;}, \n    {&quot;role&quot;: &quot;assistant&quot;, &quot;content&quot;: &quot;Gerne! Um Ihr Passwort zur\u00fcckzusetzen, gehen Sie bitte zur Anmeldeseite und klicken Sie unter dem Eingabefeld auf &#039;Passwort vergessen?&#039;. Befolgen Sie dann die Anweisungen auf dem Bildschirm.&quot;}]}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Beispiel Python-Code:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vorher installieren: <code class=\"\" data-line=\"\">pip install openai<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import openai\nfrom openai import OpenAI\nimport os\n\n# Legen Sie Ihren OpenAI API-Schl\u00fcssel fest. Es wird empfohlen, eine Umgebungsvariable zu verwenden.\n# os.environ&#091;&quot;OPENAI_API_KEY&quot;] = &quot;sk-...&quot;\nclient = OpenAI()\n\n# 1. Hochladen der Datendatei\ntry:\n    file_response = client.files.create(\n        file=open(&quot;training_data.jsonl&quot;, &quot;rb&quot;),\n        purpose=&quot;fine-tune&quot;\n    )\n    file_id = file_response.id\n    print(f&quot;Datei erfolgreich hochgeladen. Datei-ID: {file_id}&quot;)\nexcept openai.APIStatusError as e:\n    print(f&quot;Fehler beim Hochladen der Datei: {e.status_code} - {e.response}&quot;)\n    exit()\n\n# 2. Erstellen eines Feinabstimmungsauftrags\ntry:\n    ft_job_response = client.fine_tuning.jobs.create(\n        training_file=file_id,\n        model=&quot;gpt-3.5-turbo&quot; # Sie k\u00f6nnen eine bestimmte Version angeben, z. B. &quot;gpt-3.5-turbo-0125&quot;\n    )\n    job_id = ft_job_response.id\n    print(f&quot;Feinabstimmungsauftrag erstellt. Auftrags-ID: {job_id}&quot;)\n    print(&quot;\u00dcberwachen Sie den Auftragsstatus \u00fcber die API oder im OpenAI Playground.&quot;)\nexcept openai.APIStatusError as e:\n    print(f&quot;Fehler beim Erstellen des Auftrags: {e.status_code} - {e.response}&quot;)\n    exit()\n\n# Beispiel f\u00fcr die Status\u00fcberwachung und das Abrufen des Modellnamens (nach Auftragserstellung ausf\u00fchren):\n# # job_id = &quot;ftjob-...&quot; # Ersetzen Sie dies durch Ihre Auftrags-ID\n# # job_status = client.fine_tuning.jobs.retrieve(job_id)\n# # print(f&quot;Aktueller Auftragsstatus: {job_status.status}&quot;)\n# # if job_status.status == &quot;succeeded&quot;:\n# #     fine_tuned_model_name = job_status.fine_tuned_model\n# #     print(f&quot;Name des feinabgestimmten Modells: {fine_tuned_model_name}&quot;)\n\n# 3. Verwenden des feinabgestimmten Modells (nachdem es bereit ist)\n# # Ersetzen Sie dies durch den tats\u00e4chlichen Namen Ihres Modells, der nach erfolgreicher Feinabstimmung erhalten wurde\n# # fine_tuned_model_name = &quot;ft:gpt-3.5-turbo-0125:my-org::abcd123&quot;\n\n# # if &#039;fine_tuned_model_name&#039; in locals() and fine_tuned_model_name:\n# #     try:\n# #         response = client.chat.completions.create(\n# #             model=fine_tuned_model_name,\n# #             messages=&#091;\n# #                 {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Ich habe ein Anmeldeproblem.&quot;}\n# #             ]\n# #         )\n# #         print(&quot;\\nAntwort des feinabgestimmten Modells:&quot;)\n# #         print(response.choices&#091;0].message.content)\n# #     except openai.APIStatusError as e:\n# #         print(f&quot;Fehler bei der Verwendung des Modells: {e.status_code} - {e.response}&quot;)<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5.2. Anthropic<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Anthropic <strong>bietet keine \u00f6ffentliche API zur Feinabstimmung seiner Claude 3-Modelle (Opus, Sonnet, Haiku) in dem Sinne an, wie es OpenAI oder Google tun.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Anthropic konzentriert sich auf die Erstellung sehr leistungsstarker Basismodelle, die nach eigenen Angaben hervorragend mit fortschrittlichem Prompt-Engineering und RAG-Mustern funktionieren und die Notwendigkeit einer Feinabstimmung in den meisten F\u00e4llen minimieren.<br>F\u00fcr gro\u00dfe Unternehmenskunden oder Partner kann es Programme zur Erstellung von &#8222;benutzerdefinierten&#8220; Modellen oder spezialisierten Integrationen geben, aber dies ist keine \u00f6ffentlich zug\u00e4ngliche Feinabstimmungsfunktion \u00fcber die API.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie mit Claude 3 arbeiten, sollten Sie sich haupts\u00e4chlich auf Folgendes konzentrieren:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Hochwertiges Prompt-Engineering:<\/strong> Experimentieren Sie mit Systemanweisungen, Few-Shot-Beispielen und klarer Formatierung von Anfragen. Claude ist bekannt f\u00fcr seine F\u00e4higkeit, Anweisungen, insbesondere in XML-Tags, streng zu befolgen.<\/li>\n\n\n\n<li><strong>RAG-Systeme:<\/strong> Verwenden Sie externe Wissensdatenbanken, um dem Modell relevanten Kontext bereitzustellen.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5.3. Google (Gemini)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Google entwickelt aktiv Feinabstimmungsfunktionen \u00fcber seine Plattform <strong>Google Cloud Vertex AI<\/strong>.<br>Dies ist eine vollwertige ML-Plattform, die Tools zur Datenvorbereitung, zum Ausf\u00fchren von Trainingsauftr\u00e4gen und zum Bereitstellen von Modellen bereitstellt.<br>Die Feinabstimmung ist f\u00fcr Modelle der Gemini-Familie verf\u00fcgbar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Prozess:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Bereiten Sie Daten (JSONL oder CSV) im Format <code class=\"\" data-line=\"\">input_text<\/code>\/<code class=\"\" data-line=\"\">output_text<\/code> (f\u00fcr Instruction Tuning) oder <code class=\"\" data-line=\"\">messages<\/code> (f\u00fcr Chat Tuning) vor.<\/li>\n\n\n\n<li>Laden Sie Daten in Google Cloud Storage (GCS) hoch.<\/li>\n\n\n\n<li>Erstellen und f\u00fchren Sie einen Feinabstimmungsauftrag \u00fcber die Vertex AI Console oder das SDK aus.<\/li>\n\n\n\n<li>Stellen Sie das feinabgestimmte Modell an einem Endpunkt bereit.<\/li>\n\n\n\n<li>Verwenden Sie das feinabgestimmte Modell \u00fcber diesen Endpunkt.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Beispieldaten (Datei <code class=\"\" data-line=\"\">gemini_tuning_data.jsonl<\/code>):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{&quot;input_text&quot;: &quot;Fassen Sie die Hauptideen dieses Buches zusammen: &#039;Das Buch erz\u00e4hlt von der Reise eines Helden, der Hindernisse \u00fcberwindet und sich selbst findet.&#039;&quot;, &quot;output_text&quot;: &quot;Die Hauptfigur des Buches begibt sich auf eine transformative Reise, stellt sich Herausforderungen und erlangt Selbsterkenntnis.&quot;}\n{&quot;input_text&quot;: &quot;Erkl\u00e4ren Sie das Funktionsprinzip eines thermonuklearen Reaktors in einfachen Worten.&quot;, &quot;output_text&quot;: &quot;Ein thermonuklearer Reaktor versucht, den Prozess zu reproduzieren, der auf der Sonne stattfindet: die Fusion leichter Atomkerne bei sehr hohen Temperaturen, wodurch enorme Energiemengen freigesetzt werden.&quot;}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Beispiel Python-Code (erfordert <code class=\"\" data-line=\"\">google-cloud-aiplatform<\/code>):<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vorher installieren: <code class=\"\" data-line=\"\">pip install google-cloud-aiplatform<\/code> und <code class=\"\" data-line=\"\">pip install google-cloud-storage<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import os\nfrom google.cloud import aiplatform\nfrom google.cloud import storage\n\n# --- Einstellungen ---\n# ERSETZEN Sie durch Ihre Werte:\nPROJECT_ID = &quot;your-gcp-project-id&quot;\nREGION = &quot;us-central1&quot;               # W\u00e4hlen Sie eine Region, die Gemini und Vertex AI unterst\u00fctzt\nBUCKET_NAME = &quot;your-gcs-bucket-for-tuning&quot; # Name Ihres GCS-Buckets (muss vorher erstellt werden)\nDATA_FILE_LOCAL_PATH = &quot;gemini_tuning_data.jsonl&quot;\nGCS_DATA_URI = f&quot;gs:\/\/{BUCKET_NAME}\/{DATA_FILE_LOCAL_PATH}&quot;\nTUNED_MODEL_DISPLAY_NAME = &quot;my-tuned-gemini-model&quot;\n# --- Ende der Einstellungen ---\n\n# Initialisierung von Vertex AI\naiplatform.init(project=PROJECT_ID, location=REGION)\n\n# 1. Erstellen der Datendatei (falls nicht vorhanden)\nwith open(DATA_FILE_LOCAL_PATH, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:\n    f.write(&#039;{&quot;input_text&quot;: &quot;Fassen Sie die Hauptideen dieses Buches zusammen: \\&#039;Das Buch erz\u00e4hlt von der Reise eines Helden, der Hindernisse \u00fcberwindet und sich selbst findet.\\&#039;&quot;, &quot;output_text&quot;: &quot;Die Hauptfigur des Buches begibt sich auf eine transformative Reise, stellt sich Herausforderungen und erlangt Selbsterkenntnis.&quot;}\\n&#039;)\n    f.write(&#039;{&quot;input_text&quot;: &quot;Erkl\u00e4ren Sie das Funktionsprinzip eines thermonuklearen Reaktors in einfachen Worten.&quot;, &quot;output_text&quot;: &quot;Ein thermonuklearer Reaktor versucht, den Prozess zu reproduzieren, der auf der Sonne stattfindet: die Fusion leichter Atomkerne bei sehr hohen Temperaturen, wodurch enorme Energiemengen freigesetzt werden.&quot;}\\n&#039;)\nprint(f&quot;Datendatei &#039;{DATA_FILE_LOCAL_PATH}&#039; erstellt.&quot;)\n\n\n# 2. Hochladen der Daten in Google Cloud Storage\ndef upload_blob(bucket_name, source_file_name, destination_blob_name):\n    &quot;&quot;&quot;L\u00e4dt eine Datei in einen GCS-Bucket hoch.&quot;&quot;&quot;\n    storage_client = storage.Client(project=PROJECT_ID)\n    bucket = storage_client.bucket(bucket_name)\n    blob = bucket.blob(destination_blob_name)\n    blob.upload_from_filename(source_file_name)\n    print(f&quot;Datei &#039;{source_file_name}&#039; hochgeladen nach &#039;gs:\/\/{bucket_name}\/{destination_blob_name}&#039;.&quot;)\n\ntry:\n    upload_blob(BUCKET_NAME, DATA_FILE_LOCAL_PATH, DATA_FILE_LOCAL_PATH)\nexcept Exception as e:\n    print(f&quot;Fehler beim Hochladen der Datei in GCS. Stellen Sie sicher, dass der Bucket existiert und Sie Berechtigungen haben: {e}&quot;)\n    exit()\n\n# 3. Erstellen und Ausf\u00fchren des Feinabstimmungsauftrags\nprint(f&quot;\\nStart der Feinabstimmung des Modells &#039;{TUNED_MODEL_DISPLAY_NAME}&#039;...&quot;)\ntry:\n    # `tune_model` startet den Auftrag und gibt das feinabgestimmte Modell nach Abschluss zur\u00fcck\n    tuned_model = aiplatform.Model.tune_model(\n        model_display_name=TUNED_MODEL_DISPLAY_NAME,\n        source_model_name=&quot;gemini-1.0-pro-001&quot;, # Basismodell Gemini Pro\n        training_data_path=GCS_DATA_URI,\n        tuning_method=&quot;SUPERVISED_TUNING&quot;,\n        train_steps=100, # Anzahl der Trainingsschritte. Optimaler Wert h\u00e4ngt von der Datengr\u00f6\u00dfe ab.\n        # batch_size=16, # Kann angegeben werden\n        # learning_rate_multiplier=1.0 # Kann angegeben werden\n    )\n    print(f&quot;Modell &#039;{TUNED_MODEL_DISPLAY_NAME}&#039; erfolgreich feinabgestimmt. Modell-ID: {tuned_model.name}&quot;)\n    print(&quot;Der Feinabstimmungsprozess kann erhebliche Zeit in Anspruch nehmen.&quot;)\nexcept Exception as e:\n    print(f&quot;Fehler bei der Feinabstimmung. \u00dcberpr\u00fcfen Sie die Protokolle in der Vertex AI Console: {e}&quot;)\n    exit()\n\n# 4. Bereitstellen des feinabgestimmten Modells (zur Verwendung)\nprint(f&quot;\\nBereitstellen des feinabgestimmten Modells &#039;{TUNED_MODEL_DISPLAY_NAME}&#039; am Endpunkt...&quot;)\ntry:\n    endpoint = tuned_model.deploy(\n        machine_type=&quot;n1-standard-4&quot;, # Maschinentyp f\u00fcr den Endpunkt. W\u00e4hlen Sie den geeigneten.\n        min_replica_count=1,\n        max_replica_count=1\n    )\n    print(f&quot;Modell am Endpunkt bereitgestellt: {endpoint.name}&quot;)\n    print(&quot;Die Bereitstellung kann ebenfalls einige Minuten dauern.&quot;)\nexcept Exception as e:\n    print(f&quot;Fehler beim Bereitstellen des Modells: {e}&quot;)\n    exit()\n\n# 5. Verwenden des feinabgestimmten Modells\nprint(&quot;\\nTesten des feinabgestimmten Modells...&quot;)\nprompt = &quot;Erz\u00e4hlen Sie mir von Ihren F\u00e4higkeiten nach dem Training.&quot;\ninstances = &#091;{&quot;prompt&quot;: prompt}] # F\u00fcr Instruction Tuning. Bei Chat Tuning: {&quot;messages&quot;: &#091;...]}\n\ntry:\n    response = endpoint.predict(instances=instances)\n    print(&quot;\\nAntwort des feinabgestimmten Modells:&quot;)\n    print(response.predictions&#091;0])\nexcept Exception as e:\n    print(f&quot;Fehler bei der Verwendung des feinabgestimmten Modells: {e}&quot;)\n\n# Nach Abschluss der Arbeit nicht vergessen, den Endpunkt und das Modell zu l\u00f6schen, um unn\u00f6tige Kosten zu vermeiden:\n# endpoint.delete()\n# tuned_model.delete()<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Die Personalisierung von LLMs kann auf verschiedene Weise erfolgen: von sorgf\u00e4ltig gestalteten Prompts und Kontextsteuerung bis hin zum Fine-Tuning mit eigenen Datens\u00e4tzen. Fine-Tuning hilft dabei, Stil, Terminologie und Antwortformate zu festigen und die Genauigkeit bei dom\u00e4nenspezifischen Aufgaben zu erh\u00f6hen. Dieses Verfahren hat jedoch Grenzen und erfordert hochwertige Daten \u2013 andernfalls kann das Ergebnis schlechter sein als bei der Basismodell.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-2607","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/posts\/2607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/comments?post=2607"}],"version-history":[{"count":0,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/posts\/2607\/revisions"}],"wp:attachment":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/media?parent=2607"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/categories?post=2607"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/tags?post=2607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}