hy clear Blog

ローカルにセットアップした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の取得が必要です。

参考にしたページ

セットアップ手順

  1. githubからコードを取得する
  2. nginxのcorsを設定
  3. (option) modelをgpt-4o-miniに変更する
  4. dokcer compose upで立ち上げる

コードの取得

githubからコードを取得します。

git clone https://github.com/cpacker/MemGPT.git

.env.example.envにリネームし、ChatGPTのAPIキーを設定します。
管理画面のパスワードを変更したいときはMEMGPT_SERVER_PASSを変更します。

.env
MEMGPT_SERVER_PASS=passowrd
OPENAI_API_KEY=YOUR_API_KEY

NginxのCORSを設定

CORSを設定しないとWebページからのアクセスを拒否されるので設定します。
フォルダの直下にあるnginx.conf localtion /に以下のようにadd_headerを追加します。

nginx.conf
        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"

⭐ 同じカテゴリの記事