OpenGPTsを試してみる
This is an open source effort to create a similar experience as OpenAI's GPTs. This builds upon LangChain, LangServe and LangSmith This gives you more control over the LLM you use (choose between the 60+ that LangChain offers), the prompts you use (use LangSmith to debug those), and the tools you give it (choose from LangChain's 100+ tools, or easily write your own).
2023/11/12時点
期待しすぎるとがっかりすることになるので先に書いておくと、とりあえず試してみた限りはまだまだ機能は限定的で、GPTsには全然及ばない。今後開発が進めば・・・という状況。
Dockerでやる。まずレポジトリをクローン。
$ git clone https://github.com/langchain-ai/opengpts && cd opengpts
以下のような .env
を作成する。LangSmithのAPIキーも必要になる。
OPENAI_API_KEY="sk-XXXXXXXXXX"
LANGCHAIN_TRACING_V2="true"
LANGCHAIN_API_KEY="XXXXXXXXXX"
で現時点でのDockerfileの中身はこんな感じになっている
FROM python:3.11-slim
WORKDIR /backend
COPY ./backend .
RUN rm poetry.lock
RUN pip install .
COPY ./frontend/dist ./ui
CMD exec uvicorn app.server:app --host 0.0.0.0 --port $PORT
バックエンド(Python)とフロントエンド(TypeScript)に分かれていて、このDockerfileではクローンしたレポジトリ上でフロントエンドのビルドが既に出来ていることが前提となっている。自分のローカルではNode.hjs環境を用意していなくてこのためにNode.js環境作ったりしたくないので、Dockerfileを修正してフロントエンドのビルドも行うようにした。
FROM node:latest AS frontend-build
WORKDIR /frontend
COPY ./frontend .
RUN npm install
RUN npm run build
FROM python:3.11-slim
WORKDIR /backend
COPY ./backend .
RUN rm poetry.lock
RUN pip install -r requirements.txt
COPY /frontend/dist ./ui
CMD exec uvicorn app.server:app --host 0.0.0.0 --port ${PORT:-5173}
あと、docker-compose.ymlも追加。バックエンドサーバはまだ.envを読むようにはなっていないので、ここで.envの中身を環境変数に設定するようにしている。
version: '3.8'
name: opengpts
services:
app:
build: .
ports:
- "5173:5173"
environment:
- PORT=5173
env_file:
- .env
volumes:
- ./backend:/backend
- ./frontend:/frontend
ビルドして起動
$ docker compose build
$ docker compose up -d
ブラウザからhttp://XXX.XXX.XXX.XXX:5173
にアクセスすればOK。使い方は触ってればわかると思う。
LangSmithと連携していれば以下のようにトレースが取れる。
現時点での機能
2023/11/12時点で確認した際に感じたことなどをメモしておく。
- 対応しているToolは、DuckDuckGoを使ったウェブ検索(ChatGPTのBing検索相当)とPython REPL。ただし自分の環境だとPython REPLは確認できなかった。
- GPTsのように、対話式でSystem Promptなどが設定されていくというわけではなく、単にSystem Messageを設定するだけに思える。
- ただどうもこの指示にちゃんと従ってないような気がする。全然従わないというわけではないのだけど、正しく解釈されていない感を何となく感じる。
- GPTsの作成はできるけど削除はできない。一旦作成したものも修正はできない。
- 会話を繰り返すとトークン上限でエラーになる
- 選択できるモデルはGPT-3.5-Turbo/GPT-4/Calaude2。新しいモデルを試すには修正が必要みたい。
- LangServeを使えば、共有とか公開ができるようになるらしい?LangServeちょっとよくわからない。
LangSmithやLangServeというところはOpenGPTsというかLangChainを使うメリットになってくると思う。
Dockerに関しては以下にPRあるのでそのうち簡単に起動できるようになるかもしれない。
PythonREPLが動かないのはこれか。
ここでコメントアウトされてる。なんか一時的に止めてるのかも。
モデルのところだけどどうせなら新しいものを使いたいと思って見てみた。
使用するモデルの定義はこの辺だけどバグってる。
ここでPR出てるのでそのうち治るはず
で、ここで呼ばれるget_openai_function_agent
の定義はここ。
LangChainのChatOpenAIクラス
デフォルトだと"gpt-3.5-turbo"(0613)みたいだから、ここを直接書き換えれば良さそう。
こんな感じ?
if not azure:
if gpt_4:
llm = ChatOpenAI(model="gpt-4-1106-preview", temperature=0)
else:
llm = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0)
else:
色々更新されてる
が、Docker回りのPRがそのままになっている・・・ここ早くやってほしいなぁ・・・
試してみたけど、うまくいかないな。toolsで使う環境変数が必須になってるので、その辺りを無効化してとりあえず起動してみたけども、ちょいちょいエラーがでる。
docker回りはこんな事言われてるし、もし試すなら直接実行した方がいいかも。
LlamaIndexからも出てきたな