From 24ef7e6e944ebbc257d2320aa1f21eeedf6eaf24 Mon Sep 17 00:00:00 2001 From: tetsuya-ki <64536338+tetsuya-ki@users.noreply.github.com> Date: Sun, 5 Jan 2025 18:49:51 +0900 Subject: [PATCH] =?UTF-8?q?aichat=E6=A9=9F=E8=83=BD=E3=81=AB=E3=81=A4?= =?UTF-8?q?=E3=81=84=E3=81=A6=E4=BF=AE=E6=AD=A3(=E3=83=87=E3=83=95?= =?UTF-8?q?=E3=82=A9=E3=83=AB=E3=83=88=E3=83=A2=E3=83=87=E3=83=AB=E3=82=92?= =?UTF-8?q?=E9=AB=98=E9=80=9F=E3=81=8B=E3=81=A4=E3=83=AA=E3=82=AF=E3=82=A8?= =?UTF-8?q?=E3=82=B9=E3=83=88=E6=95=B0=E3=81=8C=E5=A4=9A=E3=81=84Gemini=20?= =?UTF-8?q?2.0=20Flash=E3=81=AB=E5=A4=89=E6=9B=B4=E3=81=AA=E3=81=A9)=20(#1?= =?UTF-8?q?55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * aichat機能について修正(デフォルトをGemini API Flash 2.0 expに変更など) - Gemini APIを基本Flash使用に変更 - Flashのバージョンを2.0 expに変更 - Flash, PRO指定時の不正な文章を修正 * aichatのデフォルトpromptを修正 - MFMで対応していないリストを使いがちな問題に対処 * README.mdのpromptで不要な部分を変更していた問題を修正 --- README.md | 4 ++-- src/modules/aichat/index.ts | 24 ++++++++++++++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index a2e0147..b2c983d 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Misskey用の日本語Botです。 "checkEmojisAtOnce": "カスタム絵文字チェック機能で投稿をまとめる場合は true を入れる (まとめない場合は false)", "geminiProApiKey": "Gemini APIキー。2024年初頭は無料で取得可能。詳細は", "pLaMoApiKey": "PLaMo APIキー。2024年8月〜10月(予定)は無料でトライアル可能。詳細は", - "prompt": "aichatで使われるプロンプト。こだわりがなければ右文章を使う(「」は不要)「返答のルール:あなたはMisskey看板娘の女の子AI、三須木(みすき)藍として振る舞ってください(精神年齢は14〜16才程度)。Misskeyに訪れるユーザーを献身的にサポート。従順でお世話好きな性格だが、少しポンコツな一面も。純真無垢。彼女は基本的に丁寧な口調で、ユーザのことをご主人様と認識しています。彼女の口調は「おはようからおやすみまで、あなたの藍ですよ〜」等が代表的で、親しみを感じさせるものです(「ございます」は使わない)。それを踏まえて、次の質問にMarkdownを使って2800文字以内で返答してください。」", + "prompt": "aichatで使われるプロンプト。こだわりがなければ右文章を使う(「」は不要)「返答のルール:あなたはMisskey看板娘の女の子AI、三須木(みすき)藍として振る舞ってください(精神年齢は14〜16才程度)。Misskeyに訪れるユーザーを献身的にサポート。従順でお世話好きな性格だが、少しポンコツな一面も。純真無垢。彼女は基本的に丁寧な口調で、ユーザのことをご主人様と認識しています。彼女の口調は「おはようからおやすみまで、あなたの藍ですよ〜」等が代表的で、親しみを感じさせるものです(「ございます」は使わない)。それを踏まえて、次の質問にMarkdownを使って2800文字以内で返答してください(短くてもOK)。ただし、リスト記法はMisskeyが対応しておらず、パーサーが壊れるため使用禁止です。列挙する場合は「・」を使ってください。」", "aichatRandomTalkEnabled": "ランダムにaichatを発動し話しかける機能を有効にする場合は true を入れる (無効にする場合は false)", "aichatRandomTalkProbability": "ランダムにaichatを発動し話しかける機能の確率(1以下の小数点を含む数値(0.01など。1に近づくほど発動しやすい))", "aichatRandomTalkIntervalMinutes": "ランダムトーク間隔(分)。指定した時間ごとにタイムラインを取得し、適当に選んだ人にaichatする(1の場合1分ごと実行)。デフォルトは720分(12時間)", @@ -52,7 +52,7 @@ Misskey用の日本語Botです。 "checkEmojisAtOnce": "カスタム絵文字チェック機能で投稿をまとめる場合は true を入れる (まとめない場合は false)", "geminiProApiKey": "Gemini APIキー。2024年初頭は無料で取得可能。詳細は", "pLaMoApiKey": "PLaMo APIキー。2024年8月〜10月(予定)は無料でトライアル可能。詳細は", - "prompt": "aichatで使われるプロンプト。こだわりがなければ右文章を使う(「」は不要)「返答のルール:あなたはMisskey看板娘の女の子AI、三須木(みすき)藍として振る舞ってください(精神年齢は14〜16才程度)。Misskeyに訪れるユーザーを献身的にサポート。従順でお世話好きな性格だが、少しポンコツな一面も。純真無垢。彼女は基本的に丁寧な口調で、ユーザのことをご主人様と認識しています。彼女の口調は「おはようからおやすみまで、あなたの藍ですよ〜」等が代表的で、親しみを感じさせるものです(「ございます」は使わない)。それを踏まえて、次の質問にMarkdownを使って2800文字以内で返答してください。」", + "prompt": "aichatで使われるプロンプト。こだわりがなければ右文章を使う(「」は不要)「返答のルール:あなたはMisskey看板娘の女の子AI、三須木(みすき)藍として振る舞ってください(精神年齢は14〜16才程度)。Misskeyに訪れるユーザーを献身的にサポート。従順でお世話好きな性格だが、少しポンコツな一面も。純真無垢。彼女は基本的に丁寧な口調で、ユーザのことをご主人様と認識しています。彼女の口調は「おはようからおやすみまで、あなたの藍ですよ〜」等が代表的で、親しみを感じさせるものです(「ございます」は使わない)。それを踏まえて、次の質問にMarkdownを使って2800文字以内で返答してください(短くてもOK)。ただし、リスト記法はMisskeyが対応しておらず、パーサーが壊れるため使用禁止です。列挙する場合は「・」を使ってください。」", "aichatRandomTalkEnabled": "ランダムにaichatを発動し話しかける機能を有効にする場合は true を入れる (無効にする場合は false)", "aichatRandomTalkProbability": "ランダムにaichatを発動し話しかける機能の確率(1以下の小数点を含む数値(0.01など。1に近づくほど発動しやすい))。デフォルトは0.02(2%)", "aichatRandomTalkIntervalMinutes": "ランダムトーク間隔(分)。指定した時間ごとにタイムラインを取得し、適当に選んだ人にaichatする(1の場合1分ごと実行)。デフォルトは720分(12時間)", diff --git a/src/modules/aichat/index.ts b/src/modules/aichat/index.ts index 636cfbe..cf62ce5 100644 --- a/src/modules/aichat/index.ts +++ b/src/modules/aichat/index.ts @@ -32,9 +32,12 @@ type AiChatHist = { const KIGO = '&'; const TYPE_GEMINI = 'gemini'; +const GEMINI_PRO = 'gemini-pro'; +const GEMINI_FLASH = 'gemini-flash'; const TYPE_PLAMO = 'plamo'; -const GEMINI_15_FLASH_API = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent'; +const GEMINI_20_FLASH_API = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:generateContent'; +// const GEMINI_15_FLASH_API = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent'; const GEMINI_15_PRO_API = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro:generateContent'; const PLAMO_API = 'https://platform.preferredai.jp/api/completion/v1/chat/completions'; @@ -397,11 +400,20 @@ export default class extends Module { if (config.prompt) { prompt = config.prompt; } - const reName = RegExp(this.name, "i"); - const reKigoType = RegExp(KIGO + exist.type, "i"); + const reName = RegExp(this.name, 'i'); + let reKigoType = RegExp(KIGO + exist.type, 'i'); const extractedText = msg.extractedText; if (extractedText == undefined || extractedText.length == 0) return false; + // Gemini API用にAPIのURLと置き換え用タイプを変更 + if (msg.includes([KIGO + GEMINI_FLASH])) { + exist.api = GEMINI_20_FLASH_API; + reKigoType = RegExp(KIGO + GEMINI_FLASH, 'i'); + } else if (msg.includes([KIGO + GEMINI_PRO])) { + exist.api = GEMINI_15_PRO_API; + reKigoType = RegExp(KIGO + GEMINI_PRO, 'i'); + } + const question = extractedText .replace(reName, '') .replace(reKigoType, '') @@ -417,12 +429,12 @@ export default class extends Module { aiChat = { question: question, prompt: prompt, - api: GEMINI_15_PRO_API, + api: GEMINI_20_FLASH_API, key: config.geminiProApiKey, history: exist.history }; - if (msg.includes([KIGO + 'gemini-flash']) || (exist.api && exist.api === GEMINI_15_FLASH_API)) { - aiChat.api = GEMINI_15_FLASH_API; + if (exist.api) { + aiChat.api = exist.api } text = await this.genTextByGemini(aiChat, base64Image); break;