ローカルにセットアップしたMemGPTにWebAPIで回答を取得する
2024/09/02
2024/09/04
📰 アフィリエイト広告を利用しています
はじめに
※自己責任でお願いします。
2024/9/2時点での情報です。MemGPTは活発に開発されているようなのですぐに変更される可能性あり
ChatGPTとVoicevox、VRoidStudioのモデルを使ってAIと会話するページを作成しました。
その中で長期記憶を保持できるMemGPTを知り、以下のページで使えるようにセットアップした時のメモです。
https://dev.hy-clear.com/webapp/assistant/
MemGPT
環境
必要なアプリケーションはDockerとgitです。
事前にChatGPTのAPI Keyの取得が必要です。
参考にしたページ
セットアップ手順
- githubからコードを取得する
- nginxのcorsを設定
- (option) modelをgpt-4o-miniに変更する
- dokcer compose upで立ち上げる
コードの取得
githubからコードを取得します。
git clone https://github.com/cpacker/MemGPT.git
.env.exampleを.envにリネームし、ChatGPTのAPIキーを設定します。
管理画面のパスワードを変更したいときはMEMGPT_SERVER_PASSを変更します。
MEMGPT_SERVER_PASS=passowrd
OPENAI_API_KEY=YOUR_API_KEY
NginxのCORSを設定
CORSを設定しないとWebページからのアクセスを拒否されるので設定します。
フォルダの直下にあるnginx.confの localtion /に以下のようにadd_headerを追加します。
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
resolver 127.0.0.11; # docker dns
proxy_pass $api_target;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
# Preflightリクエストの処理
if ($request_method = OPTIONS) {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
add_header 'Access-Control-Max-Age' 86400;
return 204;
}
}
(option) modelをgpt-4o-miniに変更する
デフォルトだとgpt-4しか選択できず、Tokenの消費が激しいためgpt-4o-miniに変更している。
以下のファイルのgpt-4の部分をgpt-4o-miniに変更して起動したところ適用されていた。
- ./configs/server_config.yaml
- ./configs/openai.json
- ./configs/llm_model_configs\gpt-4.json
docker compose up
docker compose up
正常に立ち上がると http://memgpt.localhost/で管理画面にアクセスできる。
MemGPTの設定
http://memgpt.localhost/にアクセスしてログインします。
パスワードは.envファイルに設定したMEMGPT_SERVER_PASSの値を使います。
MemGPTではAI側の設定をpersona、ユーザー側の設定をhumanとしてテンプレートを作成する。
二つのテンプレートを設定したAgentを作成します。
WebAPIにアクセスするときにAgentのIDを使用します。
humanを設定する
User Templateから+ Create Humanを選択し、名前とユーザーの設定を入力する。
ここでのNameのInputはあくまでTemplateの名前なので設定には含まれない。名前を設定したい場合はname: tarouなどのようにtextareaのほうに入力する
personaを設定する
Persona Tempaltesから + Create Personaを選択し、名前とAIの設定を入力する。
Agentを設定する
Agentsから + Create Agentを選択し、名前や作成したHuman、Personaを設定していく。
WebAPIからアクセスする時はAgentsから作成したAgentのChatを開いて右上のAgentIDを使用する。
OPENAI_API_KEYを設定し忘れてたら作成できませんでした。設定してから新しいHumanとPersonaを作成して設定する
gpt-4o-miniに変えたせいかブラウザ上のチャットはうまく動かなかった。API経由でのメッセージはOK
- MemGPT URL:http://memgpt.localhost
- MemGPT Token:passowrd (MEMGPT_SERVER_PASSの値)
- MemGPT AgentID:上で取得したID
WebAPI
APIを呼び出すときは以下のページのSend Messageを使う。
上記のリンクでShellリクエストを作成するとPOSTのボディが以下のようになるがこれだとエラーが出る
{
"messages": [
{
"role": "user",
"text": "hello"
}
]
}
以下のようにすると成功する
roleの設定する方法は不明
"message": "hello"