ChatGPT + LangChain でリバーシの対戦データベースに自然言語で問い合わせてみた
はじめに
株式会社ウェイブでCoolmicのエンジニアをしているあーもんどです。
Coolmicは、海外向けに日本のコミックを配信するWEBサービスとなります。
最近はエンジニア社員全体でAIに対するモチベが高くなっております。
そこで、私もとにかく何かやってみよう!と思い、ChatGPTとLangChainを触ってみました。
LangChainとは
Langchainは、大規模な言語モデルを使ったアプリケーションを簡単に開発できるPythonライブラリです。 自然言語処理のタスクを効率的に行うためのツールセットを提供します。
やること
LangChainを利用することでDBに対して自然言語で問い合わせができるとのことで、自前のリバーシの対戦データが入ったDBに対して実践したいと思います!
データは自前となりますが、皆さんも業務で扱うDBや個人開発で扱ったDBなどに対して試してみると面白いと思います!
リバーシの対戦データについて
ER図はこんな感じとなります。毎ターンごとの配置・動きを記録しているイメージです。
対戦データ内容は黒始まりで最速で終わる場合の対戦となります。
MySQLを利用していたのですが、参考記事がSQLiteでやっているものが多かったので、参考にするためにmysqlのdumpファイルをmysql2sqliteでSQLiteに変換しました。
コードについて
そこまで複雑なコードではないのであまり説明せずに貼ってしまいます、ごめんなさい。
google colabにDBファイルをアップロードして実行しました。
詳しく知りたい方は参考記事などご確認ください。
!pip install openai
!pip install langchain
!pip install langchain_experimental
import platform
import os
import openai
from langchain import OpenAI, SQLDatabase
from langchain_experimental.sql import SQLDatabaseChain
db = SQLDatabase.from_uri("sqlite:///sqlite.db")
os.environ["OPENAI_API_KEY"] = '〜〜〜〜'
openai.api_key = os.getenv("OPENAI_API_KEY")
LLM = OpenAI(model_name = "text-davinci-003", # 利用するモデル
temperature = 0, # 出力する単語のランダム性(0から2の範囲) 0であれば毎回返答内容固定
verbose = False, # プロンプトの動的表示有無
)
_DEFAULT_TEMPLATE = """Given an input question, first create a syntactically correct {dialect} query to run, then look at the results of the query and return the answer.
Use the following format:
Question: "Question here"
SQLQuery: "SQL Query to run"
SQLResult: "Result of the SQLQuery"
Answer: "Final answer here"
Only use the following tables:
{table_info}
Question: {input}"""
from langchain import PromptTemplate
PROMPT = PromptTemplate(
input_variables=["input", "table_info", "dialect"], template=_DEFAULT_TEMPLATE
)
db_chain = SQLDatabaseChain(llm=LLM, database=db, prompt=PROMPT, verbose=True, return_intermediate_steps=True)
問い合わせてみた
そりゃそうやろ
君、面白いこと言うね
(データの保存の仕方で0ターン目が最初のターンと認識されてしまっている)
補足です
使用モデルについて
モデルをgpt3.5-turboにしたらエラー出ました。
深追いはしませんでした。
トークンの上限について
LangChainにはトークンの上限があります。
gpt-3.5-turboの上限は4096トークンです。
データベースのレコード数が多いと上限を超えやすいかもしれないので、ご注意ください。
まとめ
プロンプトにDBの内容について補足したり、ルールについてちゃんと説明すればもっとゲームに対する理解度が上がって回答の精度も上がるのかなと思うので時間があったらやってみたいと思います!
AI面白い!もっと勉強します!
宣伝
株式会社ウェイブでは、電子コミックやアニメ配信サービスなどを自社開発で運営しております。
一緒に働くメンバーを募集中ですので、ご興味ある方はぜひご覧ください!
参考記事
株式会社ウェイブのエンジニアによるテックブログです。 弊社では、電子コミック、アニメ配信などのエンタメコンテンツを自社開発で運営しております! ve.jp/service/
Discussion