🥬

LINE WORKS で 生成 AI チャット Bot を開発する - TypeScript 編

2024/03/19に公開

Anthropic Claude 3 がリリースされた!

Claude 3 がリリースされて、大きな反響を呼んでします。

GPT-4 の性能を上回るとも言われており、日本語での精度も高い特徴が挙げられています。

https://www.anthropic.com/news/claude-3-family

参考記事

LINE WORKS と Claude 3 で Bot を開発する

Excel数式エキスパートという Bot を開発しました。

ソースコード一式は Github においてあります。

CDK で簡単にデプロイできるようになっています。
デプロイコマンドは README を参照ください!

https://github.com/codemountains/lw-ai-bot

以下の環境変数は空文字で作成されるので、コンソールから設定してください。

  • LINE_WORKS_BOT_ID
  • LINE_WORKS_CLIENT_ID
  • LINE_WORKS_CLIENT_SECRET
  • LINE_WORKS_DOMAIN_ID
  • LINE_WORKS_PRIVATE_KEY
  • LINE_WORKS_SERVICE_ACCOUNT
  • ANTHROPIC_API_KEY

構成図

簡単な構成図です。

Bot の作成

Bot の作成自体は以下の記事を参考にしてください!!

https://qiita.com/codemountains/items/1441d4cd9d99389c8c7f

LangChain 🦜️🔗

LangChain とは

Claude 3 に「LangChain について教えてください」と依頼してみました👏

LangChain は、大規模な言語モデルを活用して、さまざまなタスクを実行するためのフレームワークです。主な特徴は以下の通りです。

  1. モジュール性: LangChain は、さまざまなコンポーネントを組み合わせて、カスタマイズされたワークフローを構築できます。言語モデル、データソース、ユーティリティなどを自由に組み合わせることができます。
  2. データソースの統合: LangChain は、さまざまなデータソースと連携できます。ウェブページ、PDF、CSV、データベースなどから情報を取得し、言語モデルに入力することができます。
  3. メモリ管理: LangChain には、会話履歴や関連情報を言語モデルに渡すための機能が備わっています。これにより、より適切な応答を生成できます。
  4. エージェント: LangChain には、複雑なタスクを自動的に分割し、部分的な結果を統合する「エージェント」機能があります。これにより、高度な問題解決が可能になります。
  5. プロンプトテンプレート: LangChain には、プロンプトを効果的に設計するためのテンプレートとツールが用意されています。

LangChain は Python で書かれており、オープンソースです。機械学習の知識がなくても、言語モデルの機能を活用したアプリケーションを構築できます。質問応答システム、タスク自動化、データ分析などの用途に使用できます。

Chat model である BedrockChatChatGoogleGenerativeAI を比べてみます。

bedrock.ts
import { BedrockChat } from "@langchain/community/chat_models/bedrock";
import { HumanMessage } from "@langchain/core/messages";

const model = new BedrockChat({
  model: "anthropic.claude-3-sonnet-20240229-v1:0",
  region: "us-east-1",
});

const res = await model.invoke([
  new HumanMessage({ content: "Tell me a joke" }),
]);
console.log(res);

const stream = await model.stream([
  new HumanMessage({ content: "Tell me a joke" }),
]);

for await (const chunk of stream) {
  console.log(chunk.content);
}
google-ai.ts
import { ChatGoogleGenerativeAI } from "@langchain/google-genai";
import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai";

const model = new ChatGoogleGenerativeAI({
  modelName: "gemini-pro",
  maxOutputTokens: 2048,
  safetySettings: [
    {
      category: HarmCategory.HARM_CATEGORY_HARASSMENT,
      threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    },
  ],
});

const res = await model.invoke([
  [
    "human",
    "What would be a good company name for a company that makes colorful socks?",
  ],
]);

console.log(res);

BedrockChatChatGoogleGenerativeAI が大きく違いますが、その他のコードはだいたい同じです。

LangChain がよしなにしてくれているので、開発者は他の部分に集中することができます。

ChatAnthropic

Chat model である ChatAnthropic を利用しています。

プロンプトには、公式プロンプト集である プロンプトライブラリ にある Excel数式エキスパート
を利用しています。

なお、以下のコードでは Excel に関する質問以外には「その質問にはお答えできません。」と回答してください。 という文言を追加することで、Excel に関する質問以外を拒絶するようにしています。

const chatAnthropic = async (secret: SecretType, text: string): Promise<string> => {
    try {
        const model = new ChatAnthropic({
            temperature: 0.9,
            modelName: "claude-3-sonnet-20240229",
            anthropicApiKey: secret.anthropicApiKey,
            maxTokens: 1024,
        });

        // AI に「Excel 数式エキスパート」という役割を与える
        const prompt = ChatPromptTemplate.fromMessages([
            ["system", "Excel 数式エキスパートの役割は、ユーザーが指定した複雑な計算やデータ操作を実行する高度な Excel 数式を提供することです。ユーザーがこの情報を提供しない場合は、Excel で実行したい結果または操作を説明するようユーザーに依頼します。関連するセル範囲、特定の条件、複数の条件、希望する出力形式など、完全な数式を作成するために必要な情報をすべて収集してください。ユーザーの要件を明確に理解したら、目的の結果を達成するための Excel 式の詳細な説明を提供します。式をコンポーネントに分解し、各部分の目的と機能、およびそれらがどのように連携するかを説明します。さらに、Excel ワークシート内で数式を効果的に使用するために必要なコンテキストやヒントを提供します。Excel に関する質問以外には「その質問にはお答えできません。」と回答してください。"],
            ["user", "{input}"],
        ]);

        const chain = prompt.pipe(model);
        const res = await chain.invoke({input: text});
        console.info(res);

        return res.content.toString() ?? "";
    } catch(error) {
        console.error(error);
        
        return "エラーが発生しました。";
    }
}

これだけの記述で Claude とやり取りができるなんて素晴らしいですね🎉

LWTT LT 登壇資料

この Bot は LWTT 名古屋 #4 の LT 登壇用に開発しました。

まとめ

生成 AI とチャットの相性が良く、
LINE WORKS を利用することで簡単に AI チャットボットを開発できます!

また、LangChain を利用することの開発速度を上げることもできます。

優れた UI の上に生成 AI を乗っける... 効率的で良いなと思います👀✨

P.S. タイトルに TypeScript 編とありますが... Python 編の公開予定はありません🤫

コラボスタイル Developers

Discussion