見出し画像

ChatGPTのようなチャットアプリを高速で開発できるライブラリ"Chainlit"で作ったアプリをFly.ioにデプロイする

ChainlitはChatGPTのようなチャットアプリをPythonで開発するためのライブラリです。

UI部分についてはChainlit側で実装してくれているので、チャットボットのロジックを実装するだけでチャットアプリを作成することができます。

Chainlitで動かすチャットアプリ

LLM系の便利ライブラリはほとんどPythonのライブラリとして提供されているので、Pythonだけで完結するのはとても助かりますよね。LangChainとのインテグレーションが強みで、Agentの出力などもチャットUIで表示できるような仕組みになっています。PoCにとても便利ですね。

似た名前かつ似たコンセプトであるStreamlitと同じように、Chainlitも独自にホスティングの仕組みを提供していますが、独自に好きなホスティングサービスにデプロイすることもできます。今回は最近の推しであるFly.ioにデプロイしてみようと思います。

公式のサンプル

一応公式のサンプルもあるのですが、こちらはProcfileを利用してデプロイする例になっています。個人的に依存関係はpoetryで管理したいところなので、ガッツリDockerfileを書いたバージョンで用意してみます。

今回作ったリポジトリ

というわけで、環境変数さえ設定してもらえればそのままfly launchしてデプロイできるリポジトリを以下に用意しました。

ポイントだけ解説していきます。

Dockerfileの設定

FROM python:3.10 as requirements-stage

WORKDIR /tmp

RUN pip install poetry

COPY ./pyproject.toml ./poetry.lock* /tmp/

RUN poetry export -f requirements.txt --output requirements.txt --without-hashes

FROM python:3.10

WORKDIR /usr/src/app

COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

COPY . .

EXPOSE 8080
CMD ["python", "-m", "chainlit", "run", "chainlit-deploy-flyio/app.py"]

`chainlit run chainlit-deploy-flyio/app.py` と、コマンドラインからChainlitアプリケーションを起動するシンプルなCMDで指定しています。

本当はCMDでホスト名とポート指定も一緒に設定してしまいたいのですが、コマンドでホスト名とポートを指定すると、2023年6月13日現在は不具合でエラーになってしまいます。

今回は回避策として、環境変数でホスト名とポートを設定するようにしています。デプロイ前に以下のように環境変数を設定しておきましょう。

fly secrets set OPENAI_API_KEY={あなたのAPIキー} CHAINLIT_HOST=0.0.0.0 CHAINLIT_PORT=8080

guidanceでチャットボットを動かしている理由

LangChainでの例だと `@cl.langchain_factory` みたいな、Pure Pythonとはちょっと違う感じのコード例になるので、例としてはややこしくなるかなと思いました。代わりに最近の推しであるMicrosoft guidanceを利用しています。推し活です。

所感

Chainlitは便利なんですが漢字変換時にフォームが反応しちゃうんで、その辺の使い勝手を修正するプルリクを有志の方にお願いしたいなーと思っています。

あと、FastAPIに対応するプルリクがありまして、これには期待しています。

現場からは以上です。

この記事が気に入ったらサポートをしてみませんか?