1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LINE Bot SDKとLangChain.jsでGPT入りLINE Bot Serverを作ってみる

Posted at

はじめに

ChatGPTはもちろんのことOpenAI APIもたくさん活用されていますね。LINE Bot + OpenAIというネタもまったく目新しさがない昨今ですが、JS版のLangChainを使ってみたことがなかったので試用がてらLINE Bot Serverに組み込んでみました。せっかくなのでその手順を記載しておきます。

どんなBot?

できたものはこちらです。

PromptTemplateを利用して料理名を送信すると必要な材料を返してくれます。ご飯の材料を買い物に行くときに便利かもしれません。

Screenshot_20230813-191110.png

仕組み

[LINE Bot 開発入門] LINE Bot Serverを作ってみる その1 で作ったBot Serverをベースにしています。

ベースは送信したメッセージをそのまま返信するオウム返しサーバでしたが、今回はメッセージをOpenAI APIにリクエストした結果を返します。lib/event.ts 38行目getMessageFromAIを実装します。

lib/event.ts
case 'text':
    textEventMessage = {
      type: 'text',
      id: event.message.id,
      text: await getMessageFromAI(event.message.text),
    };

getMessageFromAIのコードはlib/langchain.tsにあります。

lib/langchain.ts
import { LLMChain } from 'langchain/chains';
import { OpenAI } from 'langchain/llms/openai';
import { PromptTemplate } from 'langchain/prompts';

const template = `
あなたは優秀な家庭料理の研究家です。忙しい主婦のために簡単においしくできる料理を研究し、情報配信しています。
「今日作りたい料理」に対して、購入すべき材料のリストをすべて示してください。
---
今日作りたい料理: {cooking}
`;

export const getMessageFromAI = async (message: string): Promise<string> => {
  process.env.OPENAI_API_KEY = '[YOUR OPENAI API KEY]';
  console.log("getMessageFromAI", message);
  const llm = new OpenAI({ temperature: 0.9 });
  const prompt = new PromptTemplate({
    template,
    inputVariables: ["cooking"],
  });
  const chain = new LLMChain({llm: llm, prompt, verbose: true});
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
  const result = await chain.call({ cooking: message });
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
  const res: string = result["text"].toString();
  return res;
};

process.env.OPENAI_API_KEY = '[YOUR OPENAI API KEY]';[YOUR OPENAI API KEY]にOpenAIのAPI KEYに変更してください。

PromptTemplateを利用してGPTに入力するプロンプトを生成しています。LINEクライアントから送信されたText Massageがカレーライスだった場合、

あなたは優秀な家庭料理の研究家です。忙しい主婦のために簡単においしくできる料理を研究し、情報配信しています。
「今日作りたい料理」に対して、購入すべき材料のリストをすべて示してください。
---
今日作りたい料理: カレーライス

というプロンプトに変換されてGPTに送信されます。

おわりに

LangChainはLLMをエージェント化するための様々な機能を提供しています。現在非常に活発に開発されていてどんどん新しい機能が追加されていってます。

このようなAI Application Frameworkと言えるようなツールは今後も様々リリースされてくると思います。多くのユーザーに対話型UXを提供しているLINEアプリとAIを繋ぐインターフェースとしてLINE Bot + LangChainのようなシステム構成は有益かもしれないなと思います。

1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?