以下の記事でも扱った、LangChain.js と Azure OpenAI Service を組み合わせた話です。
●LangChain.js の公式情報などを見つつ Azure OpenAI Service(モデルは GPT-4 Turbo)との組み合わせを試してみる #JavaScript - Qiita
https://qiita.com/youtoy/items/5df56af0cc45dfaa62cb
上記の記事では、シンプルな入力に対して APIレスポンスを得る、ということをやりましたが、今回は以下の内容をさらに試します。
- 試す内容
- 入力にリストを使う: 「Batch」の利用
- APIレスポンス出力をシンプルにする: 「StringOutputParser」の利用
前提
今回の内容を試すのにあたって、上記の記事と同様に npmコマンドを用いたパッケージのインストールを行います。コマンドの内容は、以下のとおりです。
$ npm install @langchain/openai
また内容は後述しますが、環境変数を使った設定も用います。
入力にリストを使う
まずは、以下の「Batch」を使って、入力にリストを用いるというのを試します。
●Interface | 🦜️🔗 Langchain
https://js.langchain.com/docs/expression_language/interface#batch
作成したプログラム
作成したプログラムは以下のとおりです。
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({
temperature: 0.9,
azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY,
azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION,
azureOpenAIApiInstanceName: process.env.AZURE_OPENAI_API_INSTANCE_NAME,
azureOpenAIApiDeploymentName: process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME,
});
const message1 = "あなたは誰?",
message2 = "あなたはいつまでの知識を持ってる?";
console.log("== 処理を実行 ==");
console.log({ message1 });
console.log({ message2 });
const res = await model.batch([message1, message2]);
console.log(res);
上記の model の中で「process.env.・・・」となっている部分は、環境変数からの読みこみを行っています。これらの内容は、ご自身が Azure OpenAI Service で設定したものを利用するようにしてください。
プログラムの実行結果
上記のプログラムを実行した結果は、以下のとおりです。
2つの入力に対して、それぞれ 1つずつのレスポンスが得られていることが分かります。
APIレスポンス出力をシンプルな出力にする
次は、APIレスポンス出力をシンプルな出力にする話です。
それには、以下のパーサーを用います。
●String output parser | 🦜️🔗 Langchain
https://js.langchain.com/docs/modules/model_io/output_parsers/types/string
作成したプログラム
作成したプログラムは以下のとおりです。
import { ChatOpenAI } from "@langchain/openai";
import { StringOutputParser } from "@langchain/core/output_parsers";
const model = new ChatOpenAI({
temperature: 0.9,
azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY,
azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION,
azureOpenAIApiInstanceName: process.env.AZURE_OPENAI_API_INSTANCE_NAME,
azureOpenAIApiDeploymentName: process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME,
});
const message1 = "あなたは誰?",
message2 = "あなたはいつまでの知識を持ってる?";
const parser = new StringOutputParser();
console.log("== 処理を実行 ==");
console.log({ message1 });
console.log({ message2 });
const res = await model.pipe(parser).batch([message1, message2]);
console.log(res);
1つ目のお試しと同様、model の中で「process.env.・・・」となっている部分は、ご自身が Azure OpenAI Service で設定したものを設定して利用してください。
プログラムの実行結果
上記のプログラムを実行した結果は、以下のとおりです。
API のレスポンスに関して、返ってきた文字列の部分のみが 1つずつ出力されているのが分かります。
【おまけ】 冒頭で掲載した記事の中で得た APIレスポンスの出力をシンプルな出力にする
冒頭に記載していた記事に書いていたお試しでは、以下が出力されていました。
これについても、今回のお試し 2つ目の内容を適用して、APIレスポンスをシンプルな出力にするというのをやってみます。
用いるプログラム
プログラム全体は以下のとおりです。
import { ChatOpenAI } from "@langchain/openai";
import { StringOutputParser } from "@langchain/core/output_parsers";
const model = new ChatOpenAI({
temperature: 0.9,
azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY,
azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION,
azureOpenAIApiInstanceName: process.env.AZURE_OPENAI_API_INSTANCE_NAME,
azureOpenAIApiDeploymentName: process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME,
});
const message = "あなたは誰?";
const outputParser = new StringOutputParser();
const chain = model.pipe(outputParser);
console.log("== 処理を実行 ==");
console.log({ message });
const response = await chain.invoke(message);
console.log(response);
得られる出力
上記のプログラムを実行した結果、出力は以下のようにシンプルになりました。