Prompt Engineering, OpenAI und Modi
Eingabeaufforderungen und Prompt-Engineering sind ein wesentlicher Bestandteil erfolgreicher LLM-Implementierungen (Large Language Model). Das Schöne an LLMs sind die unterschiedlichen Reaktionen, die ein Gefühl der Lebendigkeit erzeugen. Allerdings können diese Abweichungen zu groß werden und zu falschen und ungenauen Daten führen. Dieses Phänomen wird oft als Halluzination bezeichnet .
Eingabeaufforderungen können verbessert werden durch:
- Aufsicht und Beobachtbarkeit
- Genaue, zeitnahe Zusammenstellung
- Schnelle Struktur
Stephen Broadhurst hielt kürzlich auf dem European Chatbot Summit einen sehr guten Vortrag über Aufsicht und Beobachtbarkeit aus LLM-Perspektive. Mehr zu den Grundprinzipien können Sie hier lesen .
Genaue, zeitnahe Zusammenstellung
Für eine LLM-basierte Echtzeit-Konversationsschnittstelle (Chatbot/Voicebot) kann ein Wenig-Schuss-Ansatz verfolgt werden, um dem LLM gerade genug Kontext und Anleitung zu geben, um im aktuellen Dialogkontext präzise zu reagieren.
Die Herausforderung besteht darin, die Eingabeaufforderung in Echtzeit aus oft unterschiedlichen Datenquellen präzise zu erstellen/zu kompilieren , um sie an ein LLM zu übermitteln.
Mehr über die Architektur einer solchen Implementierung können Sie hier lesen .
Schnelle Struktur
Eine zeitnahe Strukturierung und Zusammenstellung ist von größter Bedeutung. Weitere Informationen zu den Grundprinzipien des Prompt Engineering finden Sie hier .
Die Textgenerierung ist eine Meta-Fähigkeit großer Sprachmodelle und Prompt Engineering ist der Schlüssel zu ihrer Erschließung. Sie können nicht direkt mit einem generativen Modell sprechen, es ist kein Chatbot. Sie können ein generatives Modell nicht explizit auffordern, etwas zu tun. Vielmehr benötigen Sie eine Vision dessen, was Sie erreichen möchten, und Sie müssen die Umsetzung dieser Vision nachahmen. Der Vorgang der Nachahmung wird als Prompt Design, Prompt Engineering oder Casting bezeichnet.
Eingabeaufforderungen müssen den Kontext enthalten und kontextuell korrekt sein. Eine gute Grundstruktur ist unten dargestellt:
Ein Python-Beispiel, wie eine solche Eingabeaufforderung für eine OpenAI-Implementierung aussehen wird:
prompt = """Answer the question as truthfully as possible using the provided text, and if the answer is not contained within the text below, say "I don't know"
Context:
The men's high jump event at the 2020 Summer Olympics took place between 30 July and 1 August 2021 at the Olympic Stadium.
33 athletes from 24 nations competed; the total possible number depended on how many nations would use universality places
to enter athletes in addition to the 32 qualifying through mark or ranking (no universality places were used in 2021).
Italian athlete Gianmarco Tamberi along with Qatari athlete Mutaz Essa Barshim emerged as joint winners of the event following
a tie between both of them as they cleared 2.37m. Both Tamberi and Barshim agreed to share the gold medal in a rare instance
where the athletes of different nations had agreed to share the same medal in the history of Olympics.
Barshim in particular was heard to ask a competition official "Can we have two golds?" in response to being offered a
'jump off'. Maksim Nedasekau of Belarus took bronze. The medals were the first ever in the men's high jump for Italy and
Belarus, the first gold in the men's high jump for Italy and Qatar, and the third consecutive medal in the men's high jump
for Qatar (all by Barshim). Barshim became only the second man to earn three medals in high jump, joining Patrik Sjöberg
of Sweden (1984 to 1992).
Q: Who won the 2020 Summer Olympics men's high jump?
A:"""
openai.Completion.create(
prompt=prompt,
temperature=0,
max_tokens=300,
top_p=1,
frequency_penalty=0,
presence_penalty=0,
model=COMPLETIONS_MODEL
)["choices"][0]["text"].strip(" \n")
Based on the context provided:
Relevant facts:
{Add relevant facts and context here}
Conditions:
{Place any relevant conditions here}
Answer:
Based on the context provided:
Relevant facts:
{Add relevant facts and context here}
Reasoning:
{Add reasoning and conditiosn here}
Answer:
OpenAI erzwingt auch die Vorlagenstruktur über seinen Playground. Betrachten Sie den folgenden Python-Code für den OpenAI-Bearbeitungsmodus :
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.Edit.create(
model="text-davinci-edit-001",
input="We is going to the market.",
instruction="Fix the grammar.",
temperature=0.7,
top_p=1
)
Hier sind drei Spielplatzansichten. Unten sehen Sie die OpenAI-Chat-Modus-Vorlage:
Der OpenAI-Einfügemodus oder die Vorlage:
Und schließlich der Bearbeitungsmodus:
Sicherheit
OpenAI ist bestrebt, die Sicherheit, Qualität und Konsistenz der LLM-Ergebnisse zu verbessern.
Die Sicherheit wird über ChatML angesprochen , insbesondere im Hinblick auf Prompt-Injection-Angriffe .
Dieser Ansatz fügt den Eingabeaufforderungen Struktur hinzu und verhindert nicht nur, wie bereits erwähnt, Prompt-Injection-Angriffe.
Aber durch eine gute Strukturierung der Eingabeaufforderungen ( Prompt Engineering ) kann die Halluzination weitgehend negiert werden.
Unten sehen Sie das zuvor gezeigte Format, dieses Mal ist ihm jedoch die OpenAI ChatML-Struktur auferlegt:
Und unten, wie der Chat-Modus oder die Vorlage im Python-Code aussehen wird:
[{"role": "system",
"content" : "You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible.\nKnowledge cutoff: 2021-09-01\nCurrent date: 2023-03-02"},
{"role": "user",
"content" : "How are you?"},
{"role": "assistant",
"content" : "I am doing well"},
{"role": "user",
"content" : "What is the mission of the company OpenAI?"}]
Ich bin derzeit der Hauptevangelist bei HumanFirst . Ich erforsche und schreibe über alle Dinge an der Schnittstelle von KI und Sprache; von LLMs , Chatbots , Voicebots , Entwicklungs-Frameworks, datenzentrierten latenten Räumen und mehr.

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































