OpenAIモデルをインスタンス化
環境変数を呼び出し
type Bindings = { OPENAI_API_KEY: string;};
const app = new Hono<{ Bindings: Bindings }>();まず、型名をBindingsで、OPENAI_API_KEYにstring型を指定しています。
また、Honoアプリケーションのインスタンスに、Bindingsプロパティに型Bindingsを指定しています。
バインディングについて、ドキュメントに次のように説明があります。
バインディングは、Cloudflare WorkersからCloudflare Developer Platform上のリソースへのアクセスを可能にする仕組みです。
たとえば、R2バケットへのファイルの読み書き、KV名前空間へのデータの保存、Durable Objectsとのやり取りなどが可能です。
バインディングは、権限とAPIを一体化したものと考えることができます。
ワーカーにバインディングを宣言すると、Cloudflareアカウント上のリソースにアクセスするための特定の権限が付与されます。
重要な点は、ワーカーのコードにシークレットキーやトークンを追加する必要がなく、権限はAPI自体に埋め込まれていることです。
基盤となるシークレットはワーカーのコードに公開されないため、誤って漏洩する可能性はありません。
つまり、ここでは、OPENAI_API_KEYにstring型を指定することで、.dev.varsにアクセスして安全に環境変数のOPENAI_API_KEYを取得できます。
環境変数を取得
const apiKey = c.env.OPENAI_API_KEY;環境変数からOpenAI APIキーを取得して、定数apiKeyに代入します。
OpenAIモデルをインスタンス化
最初に@langchain/openaiからChatOpenAIをインポートします。
import { ChatOpenAI } from "@langchain/openai";new ChatOpenAI() でChatOpenAIクラスのインスタンスを作成します。
また、apiKeyプロパティに定数apiKeyを渡します。
そして、modelプロパティに"gpt-4o-mini"を指定します。
ここでは、GPT-4o miniモデルを使用します。
const model = new ChatOpenAI({ apiKey: apiKey, model: "gpt-4o-mini" });ここまでのコード
ここまでのコードは以下の通りです。
import { zValidator } from "@hono/zod-validator";import { ChatOpenAI } from "@langchain/openai";import { Hono } from "hono";import { z } from "zod";
type Bindings = { OPENAI_API_KEY: string;};
const app = new Hono<{ Bindings: Bindings }>();
const schema = z.object({ prompt: z.string(),});
app.post("/", zValidator("json", schema), async (c) => { const apiKey = c.env.OPENAI_API_KEY; const model = new ChatOpenAI({ model: "gpt-4o-mini", apiKey: apiKey }); const body = await c.req.valid("json"); return c.json(body);});
export default app;