Notiz
Ab Oktober 2024 unterstützt OpenAI nun offiziell in den meisten Modellen das Caching: https://openai.com/index/api-prompt-caching/. Es wird empfohlen, stattdessen die offizielle Implementierung von OpenAI zu verwenden.
Basic Caching -Proxy für OpenAI -API, die als Cloudflare -Mitarbeiter eingesetzt werden.
Dies kann Ihnen helfen, Ihre OpenAI -Kosten zu senken (und schnellere Ergebnisse zu erzielen), indem Sie zwischengespeicherte Antworten für wiederholte Anfragen zurückgeben.
Der Proxy-Server unterstützt die Angabe von Cache TTL auf der Basis von Pro-Aussagen, sodass Sie dies basierend auf Ihren Anforderungen konfigurieren können. Das text-davinci-003 -Modell ist beispielsweise die Kosten für text-curie-001 sodass Sie für Davinci die Ergebnisse länger zwischenspeichern können.
Kundenkompatibilität:
Es Caches nur POST Anfragen, die eine JSON -Anfrage haben, da diese in der Regel am langsamsten sind und die einzigen sind, die (vorerst) Geld kosten.
Klonen Sie das Repo und installieren Sie Abhängigkeiten.
Sie müssen sich für zwei Dienste anmelden (die beide kostenlose Ebenen haben):
Richten Sie schließlich Ihre Redis -Geheimnisse basierend auf Anweisungen in wrangler.toml ein.
Abhängig von Ihrer Verwendung können Sie versuchen, Redis durch CloudFlare KV zu ersetzen, der letztendlich konsistent ist, aber wahrscheinlich eine bessere Lesenlatenz liefert. Überprüfen Sie wrangler.toml auf Setup -Anweisungen.
Starten Sie den Proxy -Server unter http: // localhost: 8787 mit:
yarn start
In Ihrem separaten Projekt, in dem Sie Ihre OpenAI/OpenAI-Node-Konfiguration haben, geben Sie den neuen basePath weiter, damit sie Anfragen über Ihren Proxy und nicht direkt nach OpenAI sendet:
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
+ // Point this to your local instance or Cloudflare deployment:
+ basePath: 'http://localhost:8787/proxy',
});
const openai = new OpenAIApi(configuration);Sie können dann einige Beispielanfragen ausprobieren. Der erste wird nach OpenAI verprügelt, da eine zwischengespeicherte Antwort noch nicht dafür gespeichert ist, aber die zweite wiederholte/doppelte Anfrage gibt stattdessen das zwischengespeicherte Ergebnis zurück.
const options = { model : 'text-ada-001' , prompt : 'write a poem about computers' } ;
// This first request will be proxied as-is to OpenAI API, since a cached
// response does not yet exist for it:
const completion = await openai . createCompletion ( options ) ;
console . log ( 'completion:' , completion ) ;
// This second request uses the same options, so it returns nearly instantly from
// local cache and does not make a request to OpenAI:
const completionCached = await openai . createCompletion ( options ) ;
console . log ( 'completionCached:' , completionCached ) ; Wenn Sie nicht auf unbestimmte Weise Ergebnisse zwischenspeichern möchten oder keine Richtlinien für Ihre REDIS-Instanz eingerichtet sind, können Sie mit dem X-Proxy-TTL Header eine TTL in Sekundenschnelle angeben.
const configuration = new Configuration({
...
+ baseOptions: {
+ // In this example, we specify a cache TTL of 24 hours before it expires:
+ headers: { 'X-Proxy-TTL': 60 * 60 * 24 }
+ }
}); Wenn Sie den Cache aktualisieren müssen, können Sie den Header X-Proxy-Refresh verwenden. Dadurch wird eine neue Antwort von OpenAI abgerufen und diese neue Antwort zwischengespeichert.
const configuration = new Configuration({
...
+ baseOptions: {
+ headers: { 'X-Proxy-Refresh': 'true' }
+ }
}); Sehen Sie /examples/ Verzeichnisse für ein vollständiges Beispiel dafür, wie Sie diesen Proxy mit Ihrem OpenAI -Kunden nennen.
Dies umfasst sowohl node.js-, Python- als auch Ruby -Client -Nutzungsbeispiele.