Note
En octobre 2024, Openai soutient désormais officiellement la mise en cache rapide dans la plupart des modèles: https://openai.com/index/api-prompt-caching/. Il est recommandé d'utiliser la mise en œuvre officielle d'OpenAI à la place.
Proxy de mise en cache de base pour l'API OpenAI, déployable en tant que travailleur CloudFlare.
Cela peut vous aider à réduire vos coûts OpenAI (et à obtenir des résultats plus rapides) en renvoyant des réponses mises en cache pour les demandes répétées.
Le serveur proxy prend en charge la spécification du cache TTL sur une base par demande, vous pouvez donc configurer cela en fonction de vos besoins. Par exemple, le modèle text-davinci-003 est 10x le coût de text-curie-001 afin que vous puissiez choisir de mettre en cache les résultats plus longtemps pour Davinci.
Compatibilité des clients:
Il ne cache que les demandes POST qui ont un corps de demande JSON, car celles-ci ont tendance à être les plus lentes et sont les seules qui coûtent de l'argent (pour l'instant).
Clone le dépôt et l'installation des dépendances.
Vous devrez vous inscrire à deux services (qui ont tous deux des niveaux gratuits):
Enfin, configurez vos secrets Redis en fonction des instructions dans wrangler.toml .
Selon votre utilisation, vous pouvez essayer de remplacer Redis par CloudFlare KV à la place, ce qui est finalement cohérent, mais offrira probablement une meilleure latence de lecture. Vérifiez wrangler.toml pour les instructions de configuration.
Démarrez le serveur proxy sur http: // localhost: 8787 avec:
yarn start
Ensuite, dans votre projet séparé où vous avez votre configuration OpenAi / Openai-Node, passez dans le nouveau basePath afin qu'il envoie des demandes via votre proxy plutôt que directement à Openai:
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);Vous pouvez ensuite essayer quelques exemples de demandes. La première sera procassée à OpenAI, car une réponse en cache n'est pas encore enregistrée pour cela, mais la deuxième demande répétée / en double renverra le résultat mis en cache à la place.
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 ) ; Si vous ne souhaitez pas mettre en cache indéfiniment les résultats ou si vous n'avez pas de stratégie d'expulsion configurée sur votre instance redis, vous pouvez spécifier un TTL en secondes à l'aide de l'en-tête X-Proxy-TTL .
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 }
+ }
}); Si vous devez forcer la rafraîchissement du cache, vous pouvez utiliser l'en-tête X-Proxy-Refresh . Cela rapportera une nouvelle réponse d'OpenAI et cache cette nouvelle réponse.
const configuration = new Configuration({
...
+ baseOptions: {
+ headers: { 'X-Proxy-Refresh': 'true' }
+ }
}); Voir /examples/ répertoire pour un exemple complet de la façon d'appeler ce proxy avec votre client OpenAI.
Cela inclut les exemples d'utilisation de Node.js, Python et Ruby.