메모
2024 년 10 월 현재 OpenAi는 이제 대부분의 모델에서 프롬프트 캐싱을 공식적으로 지원합니다 : https://openai.com/index/api-prompt-caching/. 대신 OpenAI의 공식 구현을 사용하는 것이 좋습니다.
OpenAI API의 기본 캐싱 프록시, CloudFlare 작업자로 배포 할 수 있습니다.
이를 통해 반복 요청에 대한 캐시 된 응답을 반환하여 OpenAI 비용을 줄이고 더 빠른 결과를 얻을 수 있습니다.
프록시 서버는 요청별로 캐시 TTL 지정을 지원하므로 요구 사항에 따라이를 구성 할 수 있습니다. 예를 들어, text-davinci-003 모델은 text-curie-001 의 비용이 10 배이므로 Davinci의 경우 결과를 더 오래 캐시하도록 선택할 수 있습니다.
클라이언트 호환성 :
JSON 요청 본문이있는 POST 요청 만 캐시합니다. 왜냐하면 가장 느린 경향이 있으며 비용이 드는 유일한 비용 (현재).
레포를 복제하고 종속성을 설치하십시오.
두 가지 서비스 (모두 무료 계층이 있음)에 가입해야합니다.
마지막으로 wrangler.toml 의 지침을 기반으로 Redis 비밀을 설정하십시오.
사용량에 따라 Redis를 CloudFlare KV로 교체하려고 시도 할 수 있습니다. 대신 일관되지만 더 나은 읽기 대기 시간을 제공 할 수 있습니다. 설정 지침은 wrangler.toml 확인하십시오.
http : // localhost : 8787에서 프록시 서버를 시작하십시오.
yarn start
그런 다음 OpenAi/OpenAi-Node 구성이있는 별도의 프로젝트에서 New 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 인스턴스에 퇴거 정책이 설정되어 있지 않으면 X-Proxy-TTL 헤더를 사용하여 몇 초 안에 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' }
+ }
}); OpenAI 클라이언트 와이 프록시를 호출하는 방법에 대한 전체 예는 /examples/ 디렉토리를 참조하십시오.
여기에는 Node.js, Python 및 Ruby Client 사용 예제가 모두 포함됩니다.