LoginSignup
5
0

More than 1 year has passed since last update.

LangChain JSでChatGPT APIを試す

Last updated at Posted at 2023-03-05

今大流行中で先日APIも発表されたChatGPTをLangChainを使って試そうと思います。
「LangChain」は、「LLM」 (Large language models) と連携するアプリの開発を支援するライブラリです。
詳しくはnpakaさんという人の記事がとてもわかりやすかったので調べてみてください。

LangChainは現在、PythonとJS/TSライブラリが存在するのですが、今回はJS/TSの方を使ってみようと思います。

準備

OpenAIのAPIKEYの取得

今回はChatGPTのAPIを使うのでOpenAIのAPI KEYを発行します
OpenAIにログインして右上メニューから View APIKeysCreate new secret key から発行してください

環境変数ファイルにAPI KEYを記述

.env
OPEN_AI_API_KEY=*****

インストール

typescript関連

  • typescript
  • @types/node
  • ts-node

LangChain関連

  • langchain
  • openai
  • dotenv

注意
langchainでChatGPTAPIがサポートされたのはv0.018以上になるのでそれよりも上のバージョンをインストールしてください

tsconfig, package.jsonの設定

自分の環境によってよしなにカスタマイズしてください。

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"
    }
}
tsconfig.json
{
    "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が使えるのもありがたいです!

5
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0