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;