今大流行中で先日APIも発表されたChatGPTをLangChainを使って試そうと思います。
「LangChain」は、「LLM」 (Large language models) と連携するアプリの開発を支援するライブラリです。
詳しくはnpakaさんという人の記事がとてもわかりやすかったので調べてみてください。
LangChainは現在、PythonとJS/TSライブラリが存在するのですが、今回はJS/TSの方を使ってみようと思います。
準備
OpenAIのAPIKEYの取得
今回はChatGPTのAPIを使うのでOpenAIのAPI KEYを発行します
OpenAIにログインして右上メニューから View APIKeys → Create new secret key から発行してください
環境変数ファイルにAPI KEYを記述
OPEN_AI_API_KEY=*****
インストール
typescript関連
- typescript
- @types/node
- ts-node
LangChain関連
- langchain
- openai
- dotenv
注意
langchainでChatGPTAPIがサポートされたのはv0.018以上になるのでそれよりも上のバージョンをインストールしてください
tsconfig, package.jsonの設定
自分の環境によってよしなにカスタマイズしてください。
{
"type": "module",
"private": true,
"scripts": {
"start": "node outDir/index.js",
"build-ts": "tsc",
"dev-ts": "ts-node root/index.ts",
"llm": "yarn build-ts && yarn start"
},
"devDependencies": {
"@types/node": "^18.14.2",
"ts-node": "^10.9.1",
"typescript": "^4.9.5",
},
"dependencies": {
"dotenv": "^16.0.3",
"langchain": "^0.0.21",
"openai": "^3.1.0"
}
}
{
"compilerOptions": {
"target": "es2020",
"module": "esnext",
"lib": ["es2020", "dom"],
"sourceMap": true,
"outDir": "./outDir",
"rootDir": "./root",
"strict": true,
"moduleResolution": "node",
"baseUrl": "src",
"esModuleInterop": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["root/**/*"],
"compileOnSave": false
}
LangChainはesModuleになっているので
pakage.jsonの targetはmodule、
tsconfig.jsonの moduleはesnextかnodenextにしてください
ERR_PACKAGE_PATH_NOT_EXPORTED系のエラーについて
インポートする際のERR_PACKAGE_PATH_NOT_EXPORTED
エラーは大体上記のpackage.jsonやtsconfig.jsonが原因となっています。
LangChainはcommonJSではなくESModulesになっているのでそこらへんの設定を確認してみてください
追記
commonJSでもインポートの仕方によっては使えるみたいです
https://hwchase17.github.io/langchainjs/docs/getting-started#commonjs-in-nodejs
実行
コード
それでは準備が整ったのでAPIを動かしてみようと思います
import * as dotenv from 'dotenv';
import {OpenAIChat} from "langchain/llms";
dotenv.config();
const model = new OpenAIChat({openAIApiKey: process.env.OPEN_AI_API_KEY, modelName: "gpt-3.5-turbo"});
const run = async () => {
const question = '日本一高い山はなんですか?'
const res = await model.call(question);
console.log({Q: question, A: res});
};
run()
LangChainのドキュメントによれば環境変数を自動で読み込んでくれるみたいなのですが、なぜかできなかったので今回はprocess.env
からAPIKEYを呼び出しました
実行結果
# yarn llm
{ Q: '日本一高い山はなんですか?', A: '\n\n日本一高い山は、富士山(ふじさん)です。標高は3,776.24メートルです。' }
まとめ
LangChainを使うとLLMを独自の拡張ができるのでこれからどんどん使われるようになりそうですね
しかも自分はPythonには強くないのでJS/TSが使えるのもありがたいです!