見出し画像

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)

この記事が気に入ったらサポートをしてみませんか?