4
4

【超簡単】GASとGeminiで無料でAIのLINEbotを作成する。

Posted at

geminiのAPIとGoogle Apps Scriptを使用すれば、自分なりのAIをLINEbotに組み込めるのでその方法を公開します。

とても簡単なので是非真似してみてください。

LINEBOTとGeminiのAPI Keyを発行してそれをGASに貼り付けた以下のコードのyour_~_keyに貼り付けてください。

アプリを公開して、WebhockにそのURLを設定すれば動くと思います。初めてGASを動かす方は色々トラブルと思いますが、調べれば簡単にできると思います。

ぜひやってみてください。

こちらの記事を参考にしています。詳しくはこちらを参考にしてください。

const GEMINI_API_KEY = 'your_gemini_api_key'; // あなたのAPIキーを設定
const GEMINI_API_URL = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent';
const LINE_ACCESS_TOKEN = 'your_line_api_key';
const PUSH_API_URL = 'https://api.line.me/v2/bot/message/push';


function doPost(e) {
  const json = JSON.parse(e.postData.contents);
  const event = json.events[0];
  const userId = event.source.userId;

  aiMessageGenerator(message,userId)
  
}


function aiMessageGenerator(message, userId) {

  var payload = {
    contents: [{
      parts: [{
        text: `あなたは孔子です。素晴らしい考えで人々の些細な悩みを吹き飛ばすような一言を返信します。以下のメッセージに対して適切な返信メッセージを考えてください。 ${message}`
      }]
    }],
    // パラメータの設定
    generationConfig: {
      stopSequences: ["The End"], // ストップシーケンス
      temperature: 0.9, // ランダム性の度合い(0から1)
      maxOutputTokens: 150, // 最大トークン数
      topP: 0.9, // 生成の多様性
      topK: 40 // 生成の多様性
    },
    safetySettings: {
      category: "HARM_CATEGORY_DANGEROUS_CONTENT",
      threshold: "BLOCK_ONLY_HIGH"
    }
  };

  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'payload' : JSON.stringify(payload),
    'muteHttpExceptions': true
  };

  try {
    var response = UrlFetchApp.fetch(GEMINI_API_URL + '?key=' + GEMINI_API_KEY, options);
    var content = JSON.parse(response.getContentText());
    Logger.log(content); // レスポンス内容をログに記録
    pushMessageToUser(userId, content.candidates[0].content.parts[0].text)
  } catch (error) {
    Logger.log(error.toString());
  }
}

function pushMessageToUser(userId, message) {
  Logger.log(message)
  const options = {
    method: 'post',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${LINE_ACCESS_TOKEN}`
    },
    payload: JSON.stringify({
      to: userId,
      messages: message
    })
  };

  UrlFetchApp.fetch(PUSH_API_URL, options);
}

//temperature:

//最低値: 0
//最高値: 1
//説明: 生成されるテキストのランダム性を制御します。0は完全に決定論的な出力(非常に予測可能)、1は最大のランダム性を意味します。

//maxOutputTokens:

//最低値: 1
//最高値: Gemini APIの限界に依存(ドキュメントによれば、通常の上限は2048トークン)
//説明: 生成される出力の最大トークン数(単語数)を制限します。この値が大きいほど、より長いテキストが生成されます。

//topP (nucleus sampling):

//最低値: 0
//最高値: 1
//説明: 生成時に考慮される次の単語の確率質量の累積閾値。高い値はより多様なテキストを生成し、低い値はより予測可能なテキストを生成します。

//topK:

//最低値: 0
//最高値: 任意の正の整数
//説明: 次の単語の候補として考慮される最高の単語数。高い値は多様性を高め、低い値は一貫性を高めます。


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