Closed9

OpenGPTsを試してみる

kun432kun432

https://github.com/langchain-ai/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には全然及ばない。今後開発が進めば・・・という状況。

kun432kun432

Dockerでやる。まずレポジトリをクローン。

$ git clone https://github.com/langchain-ai/opengpts && cd opengpts

以下のような .envを作成する。LangSmithのAPIキーも必要になる。

.env
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を修正してフロントエンドのビルドも行うようにした。

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 --from=frontend-build /frontend/dist ./ui

CMD exec uvicorn app.server:app --host 0.0.0.0 --port ${PORT:-5173}

あと、docker-compose.ymlも追加。バックエンドサーバはまだ.envを読むようにはなっていないので、ここで.envの中身を環境変数に設定するようにしている。

docker-compose.yml
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と連携していれば以下のようにトレースが取れる。

kun432kun432

現時点での機能

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を使うメリットになってくると思う。

kun432kun432

モデルのところだけどどうせなら新しいものを使いたいと思って見てみた。

使用するモデルの定義はこの辺だけどバグってる。

https://github.com/langchain-ai/opengpts/blob/40a30994315d4ea3d26b4f6d6fa43a369134da9b/backend/packages/gizmo-agent/gizmo_agent/main.py#L41-L44

ここでPR出てるのでそのうち治るはず

https://github.com/langchain-ai/opengpts/pull/30

で、ここで呼ばれるget_openai_function_agentの定義はここ。

https://github.com/langchain-ai/opengpts/blob/40a30994315d4ea3d26b4f6d6fa43a369134da9b/backend/packages/gizmo-agent/gizmo_agent/agent_types/openai.py#L9-L15

LangChainのChatOpenAIクラス

https://api.python.langchain.com/en/latest/chat_models/langchain.chat_models.openai.ChatOpenAI.html

デフォルトだと"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:
kun432kun432

試してみたけど、うまくいかないな。toolsで使う環境変数が必須になってるので、その辺りを無効化してとりあえず起動してみたけども、ちょいちょいエラーがでる。

docker回りはこんな事言われてるし、もし試すなら直接実行した方がいいかも。

https://github.com/langchain-ai/opengpts/issues/40

このスクラップは2023/11/12にクローズされました