💬

Rekaに対応したLINE Chatbotを作成する

2024/04/18に公開

-1. Reka Core

AI分野で注目されているスタートアップの「Reka」が、数ヶ月という短い開発期間で先行のOpenAIのChatGPTやAnthropicのClaudeに匹敵する高性能なマルチモーダル言語モデル「Reka Core」を発表しました。


https://www.reka.ai/news/reka-core-our-frontier-class-multimodal-language-model より

Rekaは以前に、日常的な質問に最適化されたモデルの「Reka Flash」と軽量なモデルである「Reka Edge」を発表しており、満を持して最上位の性能を持つ「Reka Core」が発表されたということです。

ということで、Reka APIをGoogle Apps Scriptで早速試してみましょう。

0. 何を作るのか

LINEでメッセージを送信するとReka Coreが回答してくれるようなChatbotを作ります。
ChatGPTとClaudeに対応したLINE Chatbotを作成するのReka版です。文脈に対応していないので劣化版でもあります。

1. LINEとGoogle Apps Script(GAS)の接続

1-1. LINEチャネルの開設

LINE Developpers Consoleでチャネル設定からMessaging APIを選択して、必要項目を入力してチャネルを作成。

1-2. GASプロジェクトの作成

LINE Developpers Consoleとは別のタブでGoogle Apps Scriptを開いて新しいプロジェクトを作成。
コード.gsに以下のコードを入力。

// LINE developersのMessaging API設定のチャネルアクセストークン(長期)
const LINE_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN';
const LINE_URL = 'https://api.line.me/v2/bot/message/reply';

function doPost(e) {
  let event = JSON.parse(e.postData.contents).events[0];
  let replyToken = event.replyToken;
  let lineType = event.type;
  const uid = event.source.userId;

  if (typeof replyToken === undefined || lineType === 'follow' || lineType === 'unfollow') {
    return;
  }

  let messages = [];  // 送信するメッセージを初期化

  // ユーザーのメッセージを取得
  let userMessage = event.message.text;
  if (userMessage) {
    messages.push({ type: "text", text: getRekaAPIResponse(userMessage) });       

  UrlFetchApp.fetch(LINE_URL, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': `Bearer ${LINE_TOKEN}`,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': messages,
    }),
  });
  ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

とりあえずチャネルアクセストークンは設定せずにウェブアプリとしてデプロイし、ウェブアプリのURLをコピーする(末尾がexec)。

1-3. LINEとGASをWebHookで接続

LINE Developpers Consoleのタブに戻る。
Messaging API設定のタブにある、Webhook URLに先ほどコピーしたGASのウェブアプリのURLを設定し検証が通ることを確認し、Webhookの利用をオンにする。

Messaging API設定ページ末尾でチャネルアクセストークンを取得してコピーする。
GASのタブに戻ってコードに入力する。(セキュリティ的には直書きでなくGASのスクリプトプロパティを使うほうがよい。)

これでこのLINEチャネルに投稿されたメッセージがGASに届くようになりました。

2. Rekaの設定

2-1. Reka API keyの取得

まずはRekaに登録して、ここhttps://platform.reka.ai/ )のBillingにてクレジットカードを登録し、Creditsにて$10からのReka API Creditsを購入します。ちなみに、APIの初期価格は、入力100万トークンあたり10ドル、出力100万トークンあたり25ドルです。
次に、API KeysにてAPIキーを取得します。

2-2. GASでコーディング

Reka APIのドキュメントを参照しつつ、GASで以下のような関数を書きます。
ここではモデルとしてReka Coreを使用してChatをする関数となっています。

const API_URL = 'https://api.reka.ai/chat';
const API_TOKEN = 'YOUR_REKA_API_KEY' // 適切なトークンに置き換えてください

function getRekaAPIResponse(prompt) {
  let headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': API_TOKEN
  };

  let data = {
    'conversation_history': [
      {
        'text': prompt,
        'type': 'human'
      }
    ],
    'frequency_penalty': 1.0,
    'length_penalty': 1.0,
    'model_name': 'reka-flash',  // 使用したいmodelを設定
    'presence_penalty': 1.0,
    'random_seed': 42,
    'request_output_len': 2048,
    'runtime_top_k': 1024,
    'runtime_top_p': 0.95,
    'stop_words': [],
    'temperature': 0.9,
    'use_search_engine': false
  };

  let options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(data)
  };

  let text = '';
  try {
    let response = UrlFetchApp.fetch(API_TOKEN, options);
    let jsonResponse = JSON.parse(response.getContentText());
    if (jsonResponse.text && jsonResponse.text.length > 0) {
      text = jsonResponse.text; // 応答テキストを取得
    }
  } catch (error) {
    text = error.message;
  }
  console.log(text);
  return text;
}

3. デプロイ

すべての設定が終わったら、GASのデプロイを管理から新しいバージョンとしてデプロイしましょう。

Discussion