Machen Sie Ihre LLM-Eingabeaufforderungen ausführbar und versioniert.
Auf Ihrem Express-Server:
yarn add spellbook-forge
import { spellbookForge } from "spellbook-forge" ;
const app = express ( )
. use ( spellbookForge ( {
gitHost : 'https://github.com'
} ) )
und dann:
GET http://localhost:3000/your/repository/prompt?execute
<-- HTTP 200
{
"prompt-content": "Complete this phrase in coders’ language: Hello …",
"model": "gpt3.5",
"result": "Hello, World!"
}
Sehen Sie sich Live-Beispiele an, um es auszuprobieren!
Dabei handelt es sich um eine ExpressJS-Middleware, mit der Sie eine API-Schnittstelle für Ihre LLM-Eingabeaufforderungen erstellen können. Es generiert automatisch einen Server für Ihre Eingabeaufforderungen, die in einem Git-Repository gespeichert sind. Mit Spellbook können Sie:
Hinweis: Es handelt sich um eine frühe Version. Erwarten Sie Fehler, Breaking Changes und schlechte Leistung.
Dieses Eingabeaufforderungs-Repository: https://github.com/rafalzawadzki/spellbook-prompts/hello-world
Kann wie folgt ausgeführt werden: https://book.spell.so/rafalzawadzki/spellbook-prompts/hello-world?execute
➡️ Zauberbuchserver: https://book.spell.so
Der Server verwendet spellbook-forge
und ist derzeit als Git-Host an Github angeschlossen. Sie können jedes öffentliche Repository mit Eingabeaufforderungen verwenden (sofern diese dem akzeptierten Format entsprechen).
Wenn Sie beispielsweise ein Repository rafalzawadzki/spellbook-prompts verwenden, können Sie einen Endpunkt (und vieles mehr) bilden:
https://book.spell.so/rafalzawadzki/spellbook-prompts/hello-world
Vollständige Dokumentation folgt in Kürze!
Wenn Sie die execute
auf Ihrer eigenen Spellbook-Forge-Instanz verwenden möchten, müssen Sie einen OpenAI-API-Schlüssel in der .env-Datei oder den Env-Variablen bereitstellen:
OPENAI_API_KEY=your-key
Eingabeaufforderungsdateien müssen einem bestimmten Format (JSON/YAML) entsprechen. Beispiele finden Sie hier.
├── prompt1
│ ├── prompt . json
│ └── readme . md
└── collection
└── prompt2
├── prompt . yaml
└── readme . md
Die obige Dateistruktur führt dazu, dass die folgenden API-Endpunkte generiert werden:
{host}/prompt1
{host}/collection/prompt2
prompt.json
die Hauptdatei mit dem Inhalt und der Konfiguration der Eingabeaufforderung.readme.md
zusätzliche Informationen zur prompten Verwendung, Beispiele usw. GET
{host}/path/to/prompt
– Prompt-Inhalt abrufen
POST
{host}/path/to/prompt
– Eingabeaufforderungsinhalt aktualisieren
DELETE
{host}/path/to/prompt
– Eingabeaufforderung löschen (zusammen mit Readme und Metadaten!)
GET
{host}/path/to/prompt?execute
– für einfache Eingabeaufforderungen ohne Vorlage
POST
{host}/path/to/prompt?execute
– für Eingabeaufforderungen mit Vorlagen (empfohlen)
// request body
{
"variables": [
"name": "World"
]
}
GET
{host}/path/to/prompt?execute=gpt4
– mit anderem Modell (noch nicht implementiert)Sie können den Inhalt der Eingabeaufforderung abrufen und mit LangChain ausführen:
import { PromptTemplate } from "langchain/prompts" ;
export const run = async ( ) => {
const template = await fetch (
"https://book.spell.so/rafalzawadzki/spellbook-prompts/hello-world"
) . then ( ( res ) => res . text ( ) ) ;
const prompt = new PromptTemplate ( { template , inputVariables : [ "product" ] } )
// do something with the prompt ...
}
Die vorgestellte Lösung vonc macht vor allem bei der Verkettung Sinn, für einfache Eingabeaufforderungen ist es am besten, einfach Spellbook direkt zu verwenden!
In Zukunft werde ich möglicherweise dazu beitragen, die prompt/load
Ladefunktion von LangChain zu erweitern, um das Laden von Eingabeaufforderungen aus Spellbook zu unterstützen, z. B.:
import { loadPrompt } from "langchain/prompts/load" ;
const prompt = await loadPrompt ( "{spellbook-host}/hello-world/prompt" ) ;
POST /prompt?execute
execute=gpt4