長期記憶を持って相談できるLLMが欲しい
LLMが流行っていますが人生相談など、トークン数が膨大になるような内容を相談したくなったりしませんか?
chatGPTでは32,000トークンまでの入力しか受け付けてくれません。これでは昨日の晩御飯のレシピぐらいしか覚えられないため、何か別の手段を考える必要があります。
そこで色々と調べたところ、制約はありますが実質無限のトークン数で会話が可能なmemGPTというLLMがありましたのでご紹介します。
MemGPTとは
ただ、API呼び出しを行う際、自身でメモリ上にインデックスを貼りメモとして蓄積する機能がついており、これによりトークン制約がない様な会話をすることができます。
discordでは厳密にはメモリ上でも40mトークンまでが完璧に覚えられる限界との噂もありますが、直でgeminiやchatGPTをを使用するよりも10倍以上のトークンを記憶できます。
あまりweb上での文献がなく、公式サイトもかなりシンプルなものとなっています。
discordでのユーザーコミュニティに向けた発信で具体的な使用やバージョン情報、環境などの資料が詰まっているため何かトラブルシューティングをする場合はdiscordコミュニティに参加する事をお勧めします。環境構築
$ pip install -U pymemgpt
$ memgpt run
環境構築は公式サイトに記載されている通り上記のコマンドで構築できるらしいです、、、が、実際にはpythonのバージョンやコンフィグ設定が必要なのでうまくいかないことも多いと思います。
リファレンスなどはありませんが、公式のエンジニアが推奨しているpythonのバージョンは最新のものに合わせてあります。2024年2月20日時点では3.12が推奨されています。
こちら、正常にインストールができた場合は
以下のログが出ます。
$pip install -U pymemgpt
~~~~~
Successfully installed aiohttp-3.9.3 aiosignal-1.3.1 annotated-types-0.6.0 anyio-4.3.0 asgiref-3.7.2 async-timeout-4.0.3 attrs-23.2.0 backoff-2.2.1 bcrypt-4.1.2 build-1.0.3 cachetools-5.3.2 certifi-2024.2.2 charset-normalizer-3.3.2 chroma-hnswlib-0.7.3 chromadb-0.4.23 click-8.1.7 colorama-0.4.6 coloredlogs-15.0.1 dataclasses-json-0.6.4 decorator-5.1.1 demjson3-3.0.6 deprecated-1.2.14 deprecation-2.1.0 dirtyjson-1.0.8 distro-1.9.0 docstring-parser-0.15 docx2txt-0.8 exceptiongroup-1.2.0 fastapi-0.110.0 filelock-3.13.1 flatbuffers-23.5.26 frozenlist-1.4.1 fsspec-2024.2.0 google-auth-2.28.1 googleapis-common-protos-1.62.0 greenlet-3.0.3 grpcio-1.62.0 h11-0.14.0 html2text-2020.1.16 httpcore-1.0.4 httptools-0.6.1 httpx-0.25.2 huggingface-hub-0.20.3 humanfriendly-10.0 idna-3.6 importlib-metadata-6.11.0 importlib-resources-6.1.2 joblib-1.3.2 kubernetes-29.0.0 lancedb-0.3.6 llama-index-0.9.48 markdown-it-py-3.0.0 marshmallow-3.20.2 mdurl-0.1.2 mmh3-4.1.0 monotonic-1.6 mpmath-1.3.0 multidict-6.0.5 mypy-extensions-1.0.0 nest-asyncio-1.6.0 networkx-3.2.1 nltk-3.8.1 numpy-1.26.4 oauthlib-3.2.2 onnxruntime-1.17.1 openai-1.12.0 opentelemetry-api-1.23.0 opentelemetry-exporter-otlp-proto-common-1.23.0 opentelemetry-exporter-otlp-proto-grpc-1.23.0 opentelemetry-instrumentation-0.44b0 opentelemetry-instrumentation-asgi-0.44b0 opentelemetry-instrumentation-fastapi-0.44b0 opentelemetry-proto-1.23.0 opentelemetry-sdk-1.23.0 opentelemetry-semantic-conventions-0.44b0 opentelemetry-util-http-0.44b0 orjson-3.9.15 overrides-7.7.0 packaging-23.2 pandas-2.2.1 posthog-3.4.2 prettytable-3.10.0 prompt-toolkit-3.0.36 protobuf-4.25.3 pulsar-client-3.4.0 py-1.11.0 pyarrow-15.0.0 pyasn1-0.5.1 pyasn1-modules-0.3.0 pydantic-2.6.2 pydantic-core-2.16.3 pygments-2.17.2 pylance-0.8.21 pymemgpt-0.3.3 pypdf-3.17.4 pypika-0.48.9 pyproject-hooks-1.0.0 python-dateutil-2.8.2 python-dotenv-1.0.1 pytz-2023.4 pyyaml-6.0.1 questionary-2.0.1 ratelimiter-1.2.0.post0 regex-2023.12.25 requests-2.31.0 requests-oauthlib-1.3.1 retry-0.9.2 rich-13.7.0 rsa-4.9 semver-3.0.2 setuptools-68.2.2 shellingham-1.5.4 six-1.16.0 sniffio-1.3.1 sqlalchemy-2.0.27 sqlalchemy-json-0.7.0 starlette-0.36.3 sympy-1.12 tenacity-8.2.3 tiktoken-0.5.2 tokenizers-0.15.2 tomli-2.0.1 tqdm-4.66.2 typer-0.9.0 typing-extensions-4.10.0 typing-inspect-0.9.0 tzdata-2024.1 urllib3-2.2.1 uvicorn-0.27.1 uvloop-0.19.0 watchfiles-0.21.0 wcwidth-0.2.13 websocket-client-1.7.0 websockets-12.0 wrapt-1.16.0 yarl-1.9.4 zipp-3.17.0
$ memgpt run
? How would you like to set up MemGPT? (Use arrow keys)
Use the free MemGPT endpoints
Use OpenAI (requires an OpenAI API key)
» Other (OpenAI Azure, custom LLM endpoint, etc)
上記の内容に沿ってAPI keyなどを設定すれば使用可能となるらしいです。
自分の場合設定がおかしいとエラーが出ていたので以下のコマンドで設定を追加しました。
$ memgpt configure
? Select LLM inference provider: openai
? Enter your OpenAI API key (starts with 'sk-', see https://platform.openai.com/api-keys): ***************************************************
? Override default endpoint: https://api.openai.com/v1
? Select default model (recommended: gpt-4): gpt-4
? Select embedding provider: openai
? Select default preset: memgpt_chat
? Select default persona: sam_pov
? Select default human: cs_phd
? Select storage backend for archival data: chroma
? Select chroma backend: http
? Enter chroma ip (e.g. localhost:8000): localhost:8000
? Select storage backend for recall data: sqlite
📖 Saving config to /Users/sakamoto/.memgpt/config
この状態でmemgpt runを実行したら起動しました。
初回起動時はsqLiteにデータが無く、フォーミュラ1に興味がある人物像にされていますが、自分自己紹介を細かく書いてくことでこちらの職業や趣味、生活について覚えてくれます。
次回起動時はagentを指定すれば記憶の引き継ぎをした状態で稼働させることができます。
まとめ
40mトークン以上になると精度が落ちてしまいますがそれでも使用可能な為、今後の更新に期待しています。
夢みたいな話ではありますが人間よりも多くの情報を処理できるトークン制限なしのLLMが登場すれば、もう人間が物事を覚える必要もない世界が来るのではないかとワクワクしています。
Discussion