Примечание
По состоянию на октябрь 2024 года OpenAI теперь официально поддерживает быстрое кэширование в большинстве моделей: https://openai.com/index/api-prompt-caching/. Вместо этого рекомендуется использовать официальную реализацию Openai.
Базовый прокси для кэширования для API OpenAI, развертываемый в качестве работника CloudFlare.
Это может помочь вам сократить ваши расходы на OpenaI (и получить более быстрые результаты), возвращая кэшированные ответы для повторных запросов.
Прокси-сервер поддерживает определение Cache TTL на основе для каждого рассмотрения, поэтому вы можете настроить это в зависимости от ваших потребностей. Например, модель text-davinci-003 в 10 раз больше стоимости text-curie-001 поэтому вы можете дольше кэшировать результаты для Davinci.
Совместимость клиента:
Это только POST просьбы, которые имеют тело запроса JSON, поскольку они, как правило, являются самыми медленными и единственными, кто стоит денег (пока).
Клонировать репо и установить зависимости.
Вам нужно будет зарегистрироваться на две услуги (которые имеют бесплатные уровни):
Наконец, установите свои секреты Redis на основе инструкций на wrangler.toml .
В зависимости от вашего использования, вы можете попробовать заменить Redis на Cloudflare KV, что в конечном итоге является последовательным, но, вероятно, обеспечит лучшую задержку чтения. Проверьте wrangler.toml для настройки инструкций.
Запустите прокси -сервер по адресу http: // localhost: 8787 с:
yarn start
Затем, в вашем отдельном проекте, где у вас есть конфигурация OpenAI/OpenAI-узла, передайте новый basePath , чтобы он отправил запросы через ваш прокси, а не непосредственно в 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);Затем вы можете попробовать несколько образцов запросов. Первый будет проксирован для OpenAI, так как кэшированный ответ еще не сохранен для него, но второй повторяющийся/дублированный запрос вместо этого вернет кэшированный результат.
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 ) ; Если вы не хотите, чтобы на неопределенный срок кэшировал результаты, или у вас нет политики выселения, настроенной на экземпляр Redis, вы можете указать TTL за секунды, используя заголовок 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 }
+ }
}); Если вам нужно обновить кэш, вы можете использовать заголовок X-Proxy-Refresh . Это принесет новый ответ от OpenAI и кэширует этот новый ответ.
const configuration = new Configuration({
...
+ baseOptions: {
+ headers: { 'X-Proxy-Refresh': 'true' }
+ }
}); См. /examples/ каталог для полного примера того, как позвонить в этот прокси с вашим клиентом Openai.
Это включает в себя примеры как Node.js, Python и Ruby Client.