👏
discord botにAIのべりすとを使ったコマンドを実装する
はじめに
ミドラボというコミュニティでゲーム開発を行っています。その中でADV開発におけるシナリオ作成のサポートとして、AIのべりすとを使ったシナリオ作成支援コマンドをdiscordに実装することになりました!
開発環境
- python 3.10.5
- AIのべりすと(β2.0)
実装
AIのべりすとへのリクエスト
import json, requests
import os
APIの設定は、[公式サイトのパラメータ](https://ai-novel.com/account_api_help.php)をほぼそのまま使用しています
# novelist AIを扱うクラス
class novelist:
# 初期化
def __init__(self):
self.novelist_key = os.getenv("NOVELIST_AI_KEY")
self.api_server_url = 'https://api.tringpt.com/'
# 推論を実行
async def generate(self, text: str) -> str:
headers = {'Authorization': 'Bearer {}'.format(self.novelist_key)}
send_body = {
'text': text,
'length': 10, # 出力するトークン数(1~300) 出力が重いと途中で強制終了する場合があります
'temperature': 0.7, # ランダム度(0~2.5) 語彙が単調に感じる場合は上げてみてください
'top_p': 0.7, # Top Pサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。極端に関係のない語彙が出ることを防ぎます
'rep_pen': 1.15, # 繰り返しペナルティ(1.0~2.0) 値が高すぎると出力が突飛になりすぎる可能性があります
'top_k': 140, # Top Kサンプリング(1~500) 上位nトークンのみを採用する
'top_a': 0.1, # Top Aサンプリング(0~1.0) 確率が(一番確率の高いトークン^2 * Top A)以下のトークンを除外
}
response = requests.post(self.api_server_url + '/api', headers=headers, json=send_body)
response_array = json.loads(response.text)
return response_array['data'][0]
コマンドの実装
discordのスラッシュコマンドは、一定時間以内に返信がないとエラーになるため一度仮の返信を送ってから後から正式な返信を行うようにしています。(1 → 2の順番)
await ctx.response.defer()
await ctx.followup.send(message)
@com.command(name="novel", description="小説・シナリオ作製サポートコマンド")
async def novel(
self,
ctx: discord.ApplicationContext,
content: Option(
str,
description="小説・シナリオの内容",
)
):
# 一度「考え中」というレスポンスを返す
await ctx.response.defer()
result = await self.novelist.generate(content)
# discordにメッセージを送信します
try:
await ctx.followup.send(f"{result}")
except Exception as e:
print(f"An error occurred: {e}")
midra-lab.notion.site/MidraLab-dd08b86fba4e4041a14e09a1d36f36ae 個人が興味を持ったこと × チームで面白いものや興味を持ったものを試していくコミュニティ
Discussion