Rekaに対応したLINE Chatbotを作成する
-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