COHERE API(Command R+)で遊ぶ with Discord bot
はじめに
CohereはAI Platformです、、って、えるさんもよくわかってませんが。。
とりあえず公式は以下!
そんなCohereよりCommand R+という
つよつよmodelが出て、しかもコスパが良いらしいので
いつものようにAPIを試しつつDiscord botさんに組み込んで遊ぶことにしました
ちなみに他の類似Noteは以下
Claude3 API編
ChatGPT API編
…なんだかシリーズ化してるような?
API Keyの取得
まずはAPI Keyの取得をします
公式Webの右上「TRY NOW」をぽちー
そしてまずはアカウントを作ります
アカウント作成後にログインすると、おそらく以下のダッシュボードに入ると思います
左の方のAPI Keysをぽちります
すると以下の形でAPI Keyページにいけますが、
なんとフリーで使えるTrial keysとかがある…!素敵✨
お試しはこれで十分な気がします
rate-limitもあるみたいなので、結局のところはProduction keyも必要になる気がするのでついでに作っておきます
眼のマークをぽちるとKEY情報をコピーできるようになるので、
コピーして後ほど使います
環境設定と実装
公式Webのドキュメントをみつつ正直手探りなのですが、、
以下を見たりして実装を進めます
インストール
pip install cohere
実装
過去のClaude3 API 実装 Discord Botと同じ感じにしました
環境変数としてCO_API_KEYに取得したAPI Keyを設定しています
import discord
import os
import cohere
my_api_key = os.environ.get('CO_API_KEY')
co = cohere.Client(my_api_key)
### discord initial
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
def split_text(text, chunk_size=1500):
# テキスト文字列をchunk_sizeで指定した大きさに分割し、リストに格納する
return [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]
@client.event
async def on_ready():
print(f'We have logged in as {client.user}')
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.author.bot == True:
return
await message.channel.send("---")
input_text = message.content
answer = co.chat(
model='command-r-plus',
#chat_history=[
# {"role": "USER", "message": "xxx"},
# {"role": "CHATBOT", "message": "xxx"}
#],
message=input_text,
# perform web search before answering the question. You can also use your own custom connector.
#connectors=[{"id": "web-search"}]
)
splitted_text = split_text(answer.text)
for chunk in splitted_text:
await message.channel.send(chunk)
print(answer)
client.run(os.environ['BOT_KEY'])
cohereに関連するところは、
import cohere
my_api_key = os.environ.get('CO_API_KEY')
co = cohere.Client(my_api_key)
と
answer = co.chat(
model='command-r-plus',
#chat_history=[
# {"role": "USER", "message": "xxx"},
# {"role": "CHATBOT", "message": "xxx"}
#],
message=input_text,
# perform web search before answering the question. You can also use your own custom connector.
#connectors=[{"id": "web-search"}]
)
splitted_text = split_text(answer.text)
くらいでしょうか、その他はClaude3 APIも同じ共通です
モデルは一応Command R+を指定してますが、指定できてるのかなあ
デフォルトはcommandみたいです
ChatHistoryは今のところ実装してないですが、実装しやすそうな印象もありますね
それとWeb-search機能…!!
ChatGPT APIやClaude3 APIは案外Web検索機能付けるのが手間なのですが、
それが簡単にできそうなのは素晴らしいです
結果
以下の感じに出来ました✨
補足:APIコスト比較(2024/4月 現在)
それぞれ以下の感じです
GPT4並みにいい感じとも言われているCommand R+がこの価格なのは嬉しいですね
Command R (128K context)
Claude 3 (200K context)
GPT4 turbo (128K context)
この記事が気に入ったらサポートをしてみませんか?