Want to Become a Sponsor? Contact Us Now!🎉

claude
Claude-ception: Claude beibringen, sich selbst mit LangChain zu prompten

Claude-ception: Claude beibringen, sich selbst mit LangChain zu prompten

Published on

Dieser Artikel zeigt einen innovativen Ansatz zur automatischen Prompt-Generierung unter Verwendung des leistungsfähigen Claude 3 KI-Modells von Anthropic und des LangChain-Frameworks. Die Kernidee besteht darin, die Fähigkeit von Claude zur Prompt-Generierung zu nutzen, um die Prompts für eine gegebene Aufgabe iterativ zu verbessern durch eine Rückkopplungsschleife.

Einführung

Claude, der leistungsstarke KI-Assistent von Anthropic, hat bemerkenswerte Fähigkeiten im Verständnis und in der Generierung von Sprache gezeigt. Das kürzlich veröffentlichte Claude 3 Modell, insbesondere die Opus-Variante, excelviert in der Prompt-Generierung - der Kunst, effektive Prompts zu entwerfen, um qualitativ hochwertige Ausgaben von Sprachmodellen zu erzielen.

Dies eröffnet eine aufregende Möglichkeit: Was wäre, wenn wir die Prompt-Generierungsfähigkeiten von Claude nutzen könnten, um seine eigenen Prompts iterativ zu verbessern? Indem wir Claude 3 analysieren lassen, wie die Qualität der Ausgaben eines initialen Prompts ist und Verbesserungen vorschlagen, könnten wir eine automatisierte Rückkopplungsschleife erstellen, um Prompts für eine bestimmte Aufgabe zu optimieren.

In diesem Artikel zeigen wir, wie man diese selbstverbessernde Prompt-Strategie mit Claude 3 Opus und LangChain, einem beliebten Framework zur Erstellung von Anwendungen mit Sprachmodellen, implementiert. Wir wenden sie auf die Aufgabe an, wissenschaftliche Arbeiten im engagierten Stil des KI-Forschers Elvis Saravia (@omarsar0 (opens in a new tab) auf Twitter) zusammenzufassen.

Anakin AI - The Ultimate No-Code AI App Builder

Der Workflow zur Prompt-Generierung

Alex Albert (@alexalbert__ (opens in a new tab) auf Twitter) hat vor kurzem einen effektiven Workflow für die Prompt-Generierung mit Claude 3 Opus vorgestellt:

  1. Einen initialen Prompt für die Aufgabe schreiben
  2. Eine Testmenge von Eingaben generieren, um den Prompt zu bewerten
  3. Den Prompt auf den Testfällen ausführen
  4. Die Ausgaben manuell überprüfen und bewerten
  5. Die bewerteten Beispiele zurück an Claude 3 Opus geben und ihn bitten, den Prompt zu überarbeiten
  6. Wiederholen

Will Hinthorn (@WHinthorn (opens in a new tab)) und Ross Lance Martin (@rlancemartin (opens in a new tab)) zeigen, wie man diesen Prozess mit LangSmith optimieren kann:

  1. Eine Datensatz von Testfällen erstellen
  2. Die generierten Ausgaben mit Feedback annotieren
  3. Das Feedback an Claude 3 Opus weitergeben, um den Prompt neu zu schreiben
  4. Dies als iterativen Verbesserungszyklus ausführen

Schauen wir uns an, wie wir diesen Ansatz für die Aufgabe, wissenschaftliche Arbeiten im Stil von Elvis Saravias hervorragenden Twitter-Threads zusammenzufassen, umsetzen können.

Schritt 1: Laden Sie die Arbeiten in einen Datensatz

Zunächst wählen wir einige Arbeiten aus, über die Elvis getwittert hat, und laden sie mit dem ArxivLoader von LangChain:

from langchain_community.document_loaders import ArxivLoader 
 
ids = ["2403.05313", "2403.04121", "2402.15809"] 
 
docs = [] 
for paper_id in ids: 
    doc = ArxivLoader(query=paper_id, load_max_docs=1).load() 
    docs.extend(doc) 

Wir fügen dann den Text der Arbeit zu einem LangSmith-Datensatz hinzu:

from langsmith import Client 
 
client = Client() 
 
ds_name = "Tweet-Generator" 
ds = client.create_dataset(dataset_name=ds_name) 
client.create_examples( 
    inputs=[{"paper": doc.page_content} for doc in docs], dataset_id=ds.id 
) 

Schritt 2: Testen mit einem initialen Prompt

Als nächstes schreiben wir einen vernünftigen Ausgangsprompt für Claude 3 Opus, um Zusammenfassungs-Tweets von wissenschaftlichen Arbeiten zu generieren:

from langchain_anthropic import ChatAnthropic 
from langchain_core.prompts import ChatPromptTemplate 
 
chat = ChatAnthropic(temperature=0, model_name="claude-3-opus-20240229") 
 
system = ( 
    "<role> Du bist ein Assistent, der Tweets generiert, um wissenschaftliche Arbeiten oder Open-Source-Projekte zusammenzufassen </role>" 
    "Es sollte gut gemacht sein, aber auf Gimmicks oder übermäßige Nutzung von Buzzwords verzichten. </role>" 
) 
human = "Hier ist eine Arbeit, die in einen Tweet umgewandelt werden soll: <paper> {paper} </paper>" 
current_prompt_str = system + human 
prompt = ChatPromptTemplate.from_messages([("system", system), ("human", human)]) 
 
tweet_generator = prompt | chat 

Wir können es anhand eines Beispiel-Papiers testen:

tweet_example = tweet_generator.invoke({"paper": docs[0].page_content}) 
print(tweet_example) 

Dies generiert eine anständige Zusammenfassung des Papiers in einem Tweet.

Schritt 3: Auf dem Datensatz ausführen

Um den Prompt gründlicher zu bewerten, führen wir ihn auf unserem vollständigen Datensatz von Arbeiten aus:

res = client.run_on_dataset( 
    dataset_name=ds_name, 
    llm_or_chain_factory=tweet_generator, 
) 

Schritt 4: Die Ausgaben manuell bewerten

Wir können die Anmerkungs-Warteschlange-Funktion von LangSmith verwenden, um die generierten Tweets manuell zu überprüfen und Feedback zu geben:

q = client.create_annotation_queue(name="Tweet Generator") 
client.add_runs_to_annotation_queue( 
    q.id, 
    run_ids=[ 
        r.id 
        for r in client.list_runs(project_name=res["project_name"], execution_order=1) 
    ], 
) 

Um die Bewertung zu erleichtern, können wir uns an einigen von Elvis' tatsächlichen Twitter-Zusammenfassungen von Arbeiten orientieren, um den gewünschten Stil und Inhalt zu zeigen.

Schritt 5: Den Prompt verbessern

Nachdem wir die Ausgaben annotiert haben, ziehen wir das strukturierte Feedback heran:

formatted_feedback = get_formatted_feedback(res["project_name"]) 

Wir geben dies dann wieder an Claude 3 Opus weiter, indem wir eine Prompt-Optimierungsvorlage aus dem LangChain Hub verwenden:

from langchain import hub 
from langchain_core.output_parsers import StrOutputParser 
 
optimizer_prompt = hub.pull("rlm/prompt-optimizer-tweet-drafts") 
optimizer = optimizer_prompt | chat | StrOutputParser() | extract_new_prompt 
new_prompt_str = optimizer.invoke( 
    { 
        "current_prompt": current_prompt_str, 
        "annotated_predictions": "\n\n".join(formatted_feedback).strip(), 
    } 
) 

Dies generiert eine verbesserte Anfrage, die das Feedback integriert, um besser zum Schreibstil und zur Themenstruktur von Elvis zu passen.

Schritt 6: Bewertung der neuen Anfrage

Schließlich können wir die aktualisierte Anfrage erneut auf unserem Datensatz ausführen, um Verbesserungen zu überprüfen:

new_prompt = ChatPromptTemplate.from_messages([("user", new_prompt_str)])
tweet_generator_v2 = new_prompt | chat
 
updated_results = client.run_on_dataset(
    dataset_name=ds_name,
    llm_or_chain_factory=tweet_generator_v2, 
)

Ein Vergleich der Ausgaben der Original- und der überarbeiteten Anfragen zeigt, dass die Feedbackschleife mit Claude 3 Opus effektiv war, um die Anfrage so anzupassen, dass sie ansprechendere Zusammenfassungen im Elvis-Stil erzeugt.

Hier sind zum Beispiel Tweets, die von den ursprünglichen und den verbesserten Anfragen für ein neues Testpapier generiert wurden:

Ursprüngliche Anfrage:

Neue Studie zur Verwendung großer Sprachmodelle (LLMs) für tabellarische Datenaufgaben wie Vorhersage, Generierung und Fragenbeantwortung. Deckt grundlegende Techniken wie Serialisierung, Anfragegestaltung und Benchmarks ab. Identifiziert Chancen und Herausforderungen.

Verbesserte Anfrage:

Das Potenzial von LLMs für tabellarische Daten 🔑

Diese umfassende Studie untersucht, wie große Sprachmodelle auf tabellarische Daten angewendet werden können, um Aufgaben wie Vorhersage, Generierung und Verständnis zu bewältigen.

Behandelte Schlüsseltechniken:

  • Tabellen in von LLM lesbare Formate serialisieren
  • Tabellenmanipulationen zur Anpassung an die Kontextlänge
  • Trick der Anfragegestaltung
  • Aufbau von End-to-End-Systemen

Das Papier liefert eine Taxonomie von Datensätzen, Metriken und Methoden für jeden Anwendungsbereich. Es diskutiert auch aktuelle Einschränkungen und zukünftige Forschungsrichtungen.

LLMs zeigen großes Potenzial für die Arbeit mit strukturierten Daten, wenn sie mit geeigneten Vorverarbeitungsschritten und Anfragestrategien kombiniert werden. Dies eröffnet aufregende Möglichkeiten für intelligentere und automatisierte Systeme zur Analyse tabellarischer Daten.

Welche innovativen Anwendungen von LLMs auf strukturierte Daten sehen Sie voraus? 🤔

Der überarbeitete Tweet zerlegt die Hauptpunkte besser, fügt Emojis für visuelles Interesse hinzu und endet mit einer nachdenklichen Frage, um das Publikum einzubeziehen - alles charakteristische Elemente von Elvis' Stil.

Schlussfolgerung

Durch die Kombination der Anfragegestaltungsfähigkeiten von Claude 3 Opus mit den Frameworks LangChain und LangSmith konnten wir eine automatisierte Feedbackschleife erstellen, um eine Anfrage zur Zusammenfassung von Papieren in einem bestimmten Schreibstil schrittweise zu optimieren.

Dies demonstriert einen leistungsstarken allgemeinen Ansatz zur Anpassung von Sprachmodellen, um eine Aufgabe gemäß bestimmten Spezifikationen auszuführen oder einen Zielstil zu emulieren. Die gleiche Technik könnte angewendet werden, um Anfragen für eine Vielzahl anderer Textgenerierungsaufgaben automatisch zu verbessern.

Mit der Weiterentwicklung von Sprachmodellen können wir weitere anspruchsvolle Anfragegestaltungswerkzeuge und -workflows erwarten, um deren Potenzial zu maximieren. Frameworks wie LangChain werden eine wichtige Rolle dabei spielen, dies für eine breitere Entwicklergemeinschaft zugänglich zu machen und aufregende neue Anwendungen zu eröffnen.

Anakin AI - The Ultimate No-Code AI App Builder