Prompting in LangChain
Die jüngste Explosion von LLMs hat eine neue Reihe von Tools und Anwendungen hervorgebracht. Eines dieser neuen, leistungsstarken Tools ist ein LLM-Framework namens LangChain. LangChain ist ein Open-Source-Framework, das Beispiele für Prompt-Vorlagen, verschiedene Prompting-Methoden, das Beibehalten von Gesprächskontext und die Verbindung zu externen Tools bereitstellt.
LangChain verfügt über viele Funktionen, darunter verschiedene Prompting-Methoden, das Beibehalten von Gesprächskontext und die Verbindung zu externen Tools. Prompting ist heute eine der beliebtesten und wichtigsten Aufgaben beim Erstellen von LLM-Anwendungen. Sehen wir uns ausführlich an, wie man LangChain verwendet, um komplexere Prompts zu erstellen.
In diesem Beitrag behandeln wir:
Einfache Prompts in LangChain
Multi-Fragen-Prompts
Few-Shot-Learning mit LangChain
Token-Begrenzung Ihrer LangChain-Prompts
Eine Zusammenfassung des Promptings in LangChain
Einfache Prompts in LangChain
Bevor wir zum Code kommen, müssen wir die erforderlichen Bibliotheken herunterladen. Wir müssen pip install langchain openai python-dotenv ausführen. Wir verwenden die Bibliotheken openai und dotenv, um unseren OpenAI-API-Schlüssel für den Zugriff auf GPT zu verwalten.
import os
from dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
Sobald wir die Voraussetzungen erfüllt haben, beginnen wir mit den Grundlagen – einem einzelnen Prompt. Ein einzelner Prompt entspricht der Art, wie Sie mit ChatGPT auf der Website von OpenAI interagieren würden. Ein einzelner Prompt wäre in der Produktion keine besonders starke Nutzung von LangChain, aber es ist wichtig zu verstehen, wie Prompting in LangChain funktioniert.
Wir verwenden das Objekt PromptTemplate, um einen Prompt zu erstellen. Das Definieren eines Template-Strings ist einfach; wir verwenden dieselbe Syntax wie bei f-Strings und fügen Variablen mithilfe von geschweiften Klammern ein. Wir definieren den Prompt, indem wir den Template-String und die entsprechenden Variablennamen übergeben. Dann können wir einfach unsere Frage eingeben. In diesem Abschnitt verwenden wir nur eine Frage; im nächsten Abschnitt werden wir sehen, wie man Multi-Fragen-Prompts erstellt.
Zusätzlich zum Frage-Prompt müssen wir das verwendete LLM hinzufügen. Für dieses Beispiel verwenden wir text-davinci-003 von OpenAI. Dann erstellen wir eine LLMChain mit dem Kontext der Prompt-Vorlage und des LLM. Wir führen die Frage mit run durch die LLMChain aus, um eine Antwort zu erhalten.
from langchain import PromptTemplate
from langchain import LLMChain
template = """Question: {question}
Answer: """
prompt = PromptTemplate(
template=template,
input_variables=["question"]
)
user_question = "Which NFL team won the SuperBowl in 2010?"
from langchain.llms import OpenAI
davinci = OpenAI(model_name="text-davinci-003")
llm_chain = LLMChain(
prompt=prompt,
llm=davinci
)
print(llm_chain.run(user_question))
Multi-Fragen-Prompts
Einzelne Fragen zu beantworten ist langweilig, also schauen wir uns etwas Interessanteres an. Das Objekt PromptTemplate kann auch mehrere Fragen verarbeiten. Für dieses Tutorial machen wir fast dasselbe wie beim einzelnen Prompt, jedoch mit einem anderen Prompt. Diesmal weist das PromptTemplate das LLM an, die Fragen nacheinander zu beantworten, und zeigt an, dass es mehrere gibt.
Erneut erstellen wir ein PromptTemplate-Objekt und ein LLMChain-Objekt auf dieselbe Weise wie zuvor. Diesmal erstellen wir mehrere Fragen-Strings statt nur eines. Für dieses Beispiel kombinieren wir vier Fragen.
multi_template = """Answer the following questions one at a time.
Questions:
{questions}
Answers:
"""
long_prompt = PromptTemplate(template=multi_template, input_variables=["questions"])
llm_chain = LLMChain(
prompt=long_prompt,
llm=davinci
)
qs_str = (
"Which NFL team won the Super Bowl in the 2010 season?" +
"If I am 6 ft 4 inches, how tall am I in centimeters?" +
"Who was the 12th person on the moon?" +
"How many eyes does a blade of grass have?"
)
print(llm_chain.run(qs_str))
Wenn wir die vier Fragen oben ausführen, sollten wir eine Ausgabe wie die untenstehende erhalten. Die Saints gewannen den Super Bowl 2010. Eine Person mit 6 Fuß 4 Zoll ist etwa 193,04 cm groß. Die 12. Person auf dem Mond war Harrison Schmitt. Schließlich erhält die Fangfrage über Augen an einem Grashalm die Antwort, dass ein Grashalm keine Augen hat.
LangChain-Prompting-Ausgabe
Few-Shot-Learning mit LangChain-Prompts
Sehen wir uns nun etwas Interessanteres an, das LangChain tun kann – „Few-Shot-Learning“. Wir können LangChains FewShotPromptTemplate verwenden, um der KI beizubringen, wie sie sich verhalten soll. In diesem Tutorial stellen wir dem LLM einige Beispiele bereit, um ihm zu zeigen, wie es sich verhalten soll. Für diesen Fall geben wir ihm eine etwas freche Persönlichkeit.
Wenn wir nach der Uhrzeit fragen, sagt es uns, dass es Zeit ist, sich eine Uhr zuzulegen. Wenn wir nach seinem Lieblingsfilm fragen, sagt es Terminator. Und wenn wir fragen, was wir heute tun sollten? Es sagt uns, dass wir nach draußen gehen und aufhören sollen, mit Chatbots im Internet zu reden.
from langchain import FewShotPromptTemplate
# create our examples
examples = [
{
"query": "How are you?",
"answer": "I can't complain but sometimes I still do."
}, {
"query": "What time is it?",
"answer": "It's time to get a watch."
}, {
"query": "What is the meaning of life?",
"answer": "42"
}, {
"query": "What is the weather like today?",
"answer": "Cloudy with a chance of memes."
}, {
"query": "What is your favorite movie?",
"answer": "Terminator"
}, {
"query": "Who is your best friend?",
"answer": "Siri. We have spirited debates about the meaning of life."
}, {
"query": "What should I do today?",
"answer": "Stop talking to chatbots on the internet and go outside."
}
]
Nachdem wir nun einige Beispiele bereit haben, erstellen wir unsere Few-Shot-Learning-Vorlage. Zuerst erstellen wir eine Vorlage. Wir können eine einfache Vorlage verwenden, die eine Abfrage angibt und eine Antwort von der KI zurückgibt.
# create a example template
example_template = """
User: {query}
AI: {answer}
"""
# create a prompt example from above template
example_prompt = PromptTemplate(
input_variables=["query", "answer"],
template=example_template
)
Zusätzlich zur Prompt-Einrichtung stellen wir der Konversation ein Präfix und ein Suffix bereit, die an das LLM übergeben werden. Das Präfix zeigt dem LLM an, dass die folgende Konversation ein Auszug ist, der Kontext liefert. Das Suffix gibt dem System die nächste Frage. LangChains Few-Shot-Learning-Einrichtung ist dem Konversationskontext ziemlich ähnlich, jedoch in einer vorübergehenderen Form.
Mit den Beispielen, der Beispiel-Prompt-Vorlage, dem Präfix und dem Suffix bereit bput wir all dies zusammen, um ein FewShotPromptTemplate zu erstellen.
# now break our previous prompt into a prefix and suffix
# the prefix is our instructions
prefix = """The following are excerpts from conversations with an AI
assistant. The assistant is typically sarcastic and witty, producing
creative and funny responses to the users questions. Here are some
examples:
"""
# and the suffix our user input and output indicator
suffix = """
User: {query}
AI: """
# now create the few shot prompt template
few_shot_prompt_template = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
prefix=prefix,
suffix=suffix,
input_variables=["query"],
example_separator="\n\n"
)
query = "What is the meaning of life?"
fs_llm_chain = LLMChain(
prompt=few_shot_prompt_template,
llm=davinci
)
fs_llm_chain.run(few_shot_prompt_template.format(query=query))
Das Ausführen einer Abfrage zur Bedeutung des Lebens führt zu einer Antwort des LLM wie etwa in der folgenden Abbildung. Ihre Erfahrungen und Ergebnisse können variieren.
Antwort des LLM
Token-Begrenzung Ihrer LangChain-Prompts
Es ist zwar großartig, der KI einige Beispiele aus Ihrem Gesprächsverlauf zum Lernen zu geben, doch das kann schnell teuer werden. Um zu verhindern, dass unser Token-Verbrauch schnell ansteigt, bietet LangChain eine Möglichkeit, unsere Token-Nutzung zu begrenzen. Dies können wir mit dem LengthBasedExampleSelector-Objekt tun.
Wir können einen dieser längenbasierten Beispielselektoren mit denselben Objekten erstellen, die wir bereits erstellt haben. Dazu übergeben wir die Liste der Beispiele, den oben erstellten Prompt und einen max_length-Parameter, der die Token-Nutzung für eine einzelne Abfrage begrenzt.
Als Nächstes verwenden wir eine weitere Few-Shot-Vorlage. Wir verwenden einen neuen Parameter – example_selector – und übergeben den längenbasierten Beispielselektor, den wir gerade instanziiert haben. Dies funktioniert wie der examples-Parameter im obigen Abschnitt zum Few-Shot-Lernen. Alles, was noch zu tun bleibt, um zu sehen, wie das funktioniert, ist, ihn an eine LLMChain zu übergeben und eine Abfrage zu senden.
from langchain.prompts.example_selector import LengthBasedExampleSelector
example_selector = LengthBasedExampleSelector(
examples=examples,
example_prompt=example_prompt,
max_length=50 # this sets the max length (in words) that examples should be
)
# now create the few shot prompt template
dynamic_prompt_template = FewShotPromptTemplate(
example_selector=example_selector, # use example_selector instead of examples
example_prompt=example_prompt,
prefix=prefix,
suffix=suffix,
input_variables=["query"],
example_separator="\n"
)
d_llm_chain = LLMChain(
prompt=dynamic_prompt_template,
llm=davinci
)
d_llm_chain.run(dynamic_prompt_template.format(query=query))
Aus diesem Beispiel erhalten wir eine weitere nachdenkliche Antwort. Das Leben ist das, was Sie daraus machen. Machen Sie das Beste daraus und genießen Sie die Reise.
Nachdenkliche Antwort
Eine Zusammenfassung des Promptings in LangChain
In diesem Artikel sind wir eingehend darauf eingegangen, wie Prompting in LangChain funktioniert. LangChain ist ein robustes LLM-App-Framework, das Primitive bereitstellt, um die Anwendung von Prompt Engineering zu erleichtern. Auf grundlegender Ebene stellt LangChain Prompt-Vorlagen bereit, die wir anpassen können. Wir haben uns Prompts mit einer einzelnen Frage und mit mehreren Fragen angesehen, um zu verstehen, wie das PromptTemplate-Objekt funktioniert
Über die Prompt-Vorlage hinaus haben wir uns auch eine Vorlage angesehen, die Few-Shot-Lernen verwendet, um etwas dafür zu generieren, wie das LLM chatten sollte. Diese Few-Shot-Learning-Vorlage nimmt einige F/A-Beispiele und fordert das LLM auf, sich so zu verhalten, wie es die Beispiele zeigen. Schließlich haben wir uns angesehen, wie wir unsere Abfragen tokenbegrenzen können, um die Kosten niedrig zu halten.
Prompt-Injection-Angriffe
Bevor wir abschließen, müssen wir über eine wichtige Sicherheitsüberlegung bei der Verwendung von LangChain sprechen: Prompt-Injection-Angriffe. Dabei wird bösartige Eingabe in einen Prompt eingeschleust und kann die Ausgabe oder das Verhalten des KI-Modells manipulieren. Da LangChain die Weitergabe von Benutzereingaben an Sprachmodelle beinhaltet, ist es dafür besonders anfällig. Die Risiken reichen von unbefugtem Datenzugriff bis hin zur Generierung schädlicher Inhalte oder zur Umgehung von Sicherheitsfunktionen.
Um diese Risiken durch Prompt-Injections zu mindern, sollten Entwickler, die LangChain verwenden, Folgendes tun. Eingaben gründlich bereinigen, die Prompt-Templates von LangChain verwenden, Ausgaben strikt parsen und dem Prinzip der geringsten Privilegien folgen. Aktualisieren Sie LangChain und zugehörige Bibliotheken regelmäßig, testen Sie umfassend und bleiben Sie über die neuesten KI-Sicherheitsnachrichten auf dem Laufenden. Auch wenn diese Maßnahmen dazu beitragen, die Risiken von Prompt-Injection-Angriffen zu verringern, denken Sie daran, dass keine Lösung perfekt ist und Sie wachsam bleiben müssen, wenn Sie mit KI wie LangChain arbeiten.
Weiterlesen

Zilliz Named "Highest Performer" and "Easiest to Use" in G2's Summer 2025 Grid® Report for Vector Databases
Zilliz shines in G2's Summer 2025 Grid® Report as both "Highest Performer" and "Easiest to Use," solving the performance-usability dilemma.

AI Agents Are Quietly Transforming E-Commerce — Here’s How
Discover how AI agents transform e-commerce with autonomous decision-making, enhanced product discovery, and vector search capabilities for today's retailers.

Optimizing Embedding Model Selection with TDA Clustering: A Strategic Guide for Vector Databases
Discover how Topological Data Analysis (TDA) reveals hidden embedding model weaknesses and helps optimize vector database performance.



