hono.jsでOpenAI APIのStreamを受け流すAPIをつくる。
hono.js v3.7.0にて、SSE (Server-Sent Event) がサポートされました!
本当に嬉しいです。待ってました。
これを利用して、OpenAI API と(だいたい)互換なチャンクを Cloudflare Workers から流してみます。
コード
const openai = new OpenAI({ apiKey: c.env.OPENAI_API_KEY })
const chatStream = await openai.chat.completions.create({
messages: PROMPT(body.messages),
model: 'gpt-3.5-turbo-0613',
stream: true
})
c.header('Content-Type', 'text/event-stream')
return c.streamText(async (stream) => {
for await (const message of chatStream) {
await stream.write(`data: ${JSON.stringify(message)}\n\n`);
}
await stream.write(`data: [DONE]\n\n`);
});
なお、PROMPTは以下のような感じです。
const PROMPT = (messages: OpenAI.Chat.ChatCompletionMessage[]) => [
{
role: 'system' as const,
content:
'<システムプロンプト>'
},
...messages,
]
インポートもおわすれなく。
import { Hono } from 'hono'
import { OpenAI } from 'openai'
二度手間なことをしている気がしなくもないですが、これでうまくいきます。
Cloudflare WorkersでAPIをラップするとSecret Keyが秘匿できるので良いですね。
Xのフォローもお願いします。
https://twitter.com/31pi_
この記事が気に入ったらサポートをしてみませんか?