บันทึก
เมื่อวันที่ตุลาคม 2567 ตอนนี้ Openai สนับสนุนการแคชอย่างเป็นทางการในรูปแบบส่วนใหญ่: https://openai.com/index/api-prompt-caching/ ขอแนะนำให้คุณใช้การใช้งานอย่างเป็นทางการของ OpenAI แทน
พร็อกซีแคชขั้นพื้นฐานสำหรับ OpenAI API ซึ่งสามารถปรับใช้เป็นคนงาน CloudFlare
สิ่งนี้สามารถช่วยคุณลดค่าใช้จ่าย OpenAI (และรับผลลัพธ์ได้เร็วขึ้น) โดยส่งคืนคำตอบที่แคชสำหรับคำขอซ้ำ
พร็อกซีเซิร์ฟเวอร์รองรับการระบุแคช TTL แบบต่อเนื่องเพื่อให้คุณสามารถกำหนดค่าสิ่งนี้ตามความต้องการของคุณ ตัวอย่างเช่นโมเดล text-davinci-003 คือ 10x ค่าใช้จ่ายของ text-curie-001 เพื่อให้คุณสามารถเลือกที่จะแคชผลลัพธ์นานขึ้นสำหรับ Davinci
ความเข้ากันได้ของลูกค้า:
มันมีเพียงแคช POST คำขอที่มีร่างกายคำขอ JSON เนื่องจากสิ่งเหล่านี้มีแนวโน้มที่จะช้าที่สุดและเป็นสิ่งเดียวที่ต้องเสียเงิน (สำหรับตอนนี้)
โคลน repo และติดตั้งการพึ่งพา
คุณจะต้องสมัครใช้งานสองบริการ (ซึ่งทั้งคู่มีระดับฟรี):
ในที่สุดตั้งค่าความลับ Redis ของคุณตามคำแนะนำใน wrangler.toml
ขึ้นอยู่กับการใช้งานของคุณคุณอาจลองเปลี่ยน Redis ด้วย CloudFlare KV แทนซึ่งในที่สุดก็สอดคล้องกัน แต่มีแนวโน้มที่จะให้เวลาแฝงอ่านที่ดีขึ้น ตรวจสอบ wrangler.toml สำหรับคำแนะนำการตั้งค่า
เริ่มพร็อกซีเซิร์ฟเวอร์ที่ http: // localhost: 8787 ด้วย:
yarn start
จากนั้นในโครงการแยกต่างหากของคุณที่คุณมีการกำหนดค่า OpenAI/OpenAI-Node ของคุณผ่าน 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 ของคุณ
ซึ่งรวมถึงตัวอย่างการใช้ไคลเอนต์ Python และ Ruby Client