「Writer Framework」を試す
元々はStreamsyncという、Pythonのデータアプリ向けGUIフレームワークだったのが、
どうやらリブランドして、「Writer」というAIアプリプラットフォーム+OSSでのフレームワーク提供という形式になっているみたい。
Write AI StudioってのがWriter向けアプリ開発ツール全般で、その中のPython開発者向けってのがWriter Framework、でこれが以前Streamsyncだったもの、という感じなのかな?
競合としてはStreamlitやGradioあたりになる。
以前に少しだけ触れたことはあるのだが、軽く触ってみただけ&時間も経っているのであらためて。
Write Platformや開発ツールなどの関係性がよくわからなかったので、ドキュメントをいろいろ見て、自分の理解のためにざっとまとめてみた。あってるかはしらない。
まずWriter Cloud Platform。これがWriterが提供するSaaSで、AIアプリケーションやAIワークフローの開発支援+ホスティングを行うプラットフォームになる。Writer Cloud Platformは、LLMモデル・ナレッジグラフ・ガードレイル・ツールを提供しており、それを使ってAIアプリ・AIワークフローを開発することができる。
でWriterが提供する開発ツールは3種類あり、どれを使うかによってホスティング&デプロイ先が変わるという感じだと思う。
開発ツール | ツールの説明 | ホスティング先 |
---|---|---|
No-code Builder | ノーコードでAIアプリケーション開発 | Writer Cloud |
Writer Framework | ノーコードでAIアプリケーション開発が行える | Writer Cloud or Docker(Dockerでデプロイ可能な全て) |
Writer API/SDK | 自分のアプリケーション内からWriterの機能(LLM等)をAPI/SDK経由で利用 | 全て(API/SDKを組み込んだアプリ次第) |
Writer Cloud Platformを使うか使わないか?は2つの観点があるように思う。
- Writer Cloud Platformにホスティングするか?
- Writer Cloud Platformの機能(LLMなど)を使うか?
で、上の図や表を踏まえると、Writer FrameworkをUIフレームワーク的に使うのであれば、おそらくWriter Cloud Platformのホスティングと機能の両方を利用する必要がなく使えるのではないか?と考えられる。
ということで、実際にWriter Frameworkを試してみようと思う。
参考
ということで「Writer Framework」のGetting Startedを進めていく。
Writer Frameworkでは、Builderと呼ばれるドラッグ&ドロップのビジュアルエディタを使用し、バックエンドのコードをPythonで記述することで、機能豊富なアプリケーションを構築できます。高速で柔軟性に優れ、クリーンでテストしやすい構文です。UIとビジネスロジックの分離が可能で、より複雑なアプリケーションを実現できます。
Quickstart
インストール
ローカルのMacでやる。
作業ディレクトリ+Python仮想環境を作成。最近はuvを使っている。
mkdir writerfw-work && cd writerfw-work
uv venv -p 3.12.8
パッケージインストール
uv pip install writer
(snip)
+ writer==0.8.2
+ writer-sdk==1.6.1
デモを起動
uv run writer hello
以下が表示されたらブラウザで4005番ポートにアクセス。
&@@@@@@@@@@ ,@@@@@@@@@@* @@@@@@@@@@
.@@@@@@@@@@( &@@@@@@@@@@ *@@@@@@@@*
%@@@@@@@@@@ .@@@@@@@@@@( @@@@@@@@
@@@@@@@@@@& #@@@@@@@@@@ @@@@@@
,@@@@@@@@@@, @@@@@@@@@@@ (@@@@(
&@@@@@@@@@@ .@@@@@@@@@@* @@@@
@@@@@@@@@@% %@@@@@@@@@@ .@@,
(@@@@@@@@@@. @@@@@@@@@@% %&
@@@@@@@@@@& (@@@@@@@@@@ .
*@@@@@@@@@@, @@@@@@@@@@&
@@@@@@@@@@@ ,@@@@@@@@@@*
@@@@@@@@@@# %@@@@@@@@@@
WRITER FRAMEWORK v0.8.2
Builder is available at: http://127.0.0.1:4005
こんな感じで表示された。
インストールできているようなので、Ctrl+cで止める。
アプリケーションの初期化
ではアプリを新規作成する。ai-starter
というテンプレートが用意されているので、それを使ってhello-world
アプリを作成。
uv run writer create hello-world --template=ai-starter
ディレクトリを見てみる。
ls -l
total 0
drwxr-xr-x@ 9 kun432 staff 288 3 1 18:39 hello
drwxr-xr-x@ 7 kun432 staff 224 3 1 18:46 hello-world
hello
ディレクトリはインストール直後に起動したデモで、今作成したアプリはhello-world
ディレクトリとして作成されている。中身はこんな感じ。
tree -a hello-world
hello-world
├── .wf
│ ├── components-page-0-c0f99a9e-5004-4e75-a6c6-36f17490b134.jsonl
│ ├── components-root.jsonl
│ ├── components-workflows_root.jsonl
│ └── metadata.json
├── README.md
├── main.py
├── requirements.txt
└── static
├── README.md
└── favicon.png
3 directories, 9 files
main.py
がアプリのエントリーポイントになる。.wf
はビジュアルエディタで作成したUIコンポーネントに関するファイルが保存されるディレクトリ、static
には画像やスタイルシートなどの静的ファイルを保存するためのディレクトリとなる。
アプリケーションの開発
ではビジュアルエディタを起動する。writer edit
を使う。
uv run writer edit hello-world
デモを起動したときと同じメッセージが表示される。同様にブラウザで4005番ポートにアクセスして、ここからUIコンポーネントを作成していくことになる。
例えば、テキストを配置する場合は「Text」をドラッグ&ドロップ。
同様にして、「Text Input」「Button」を配置。
各コンポーネントをクリックすると、右側に設定パネルが表示されるのでここでいろいろ設定を変えたりする。
ただしアプリケーション名だけはビジュアルビルダーではなく、main.py
で変更する。
main.py
は以下となっている。
import writer as wf
import writer.ai
# Welcome to Writer Framework!
# This template is a starting point for your AI apps.
# More documentation is available at https://dev.writer.com/framework
# Initialise the state
wf.init_state({
"my_app": {
"title": "AI STARTER"
},
})
下の方のtitle
の値を変更する。
(snip)
wf.init_state({
"my_app": {
"title": "初めてのAIアプリ"
},
})
ビジュアルビルダーの方もホットリロードで自動的に更新される。
こんな感じで、
- ビジュアルビルダーでUIを設定
-
main.py
でロジック等を設定
という感じでアプリを作っていく流れになる様子。
アプリケーションのローカル起動
で、アプリ作成ができたらビジュアルビルダーを停止して、まずはローカルでアプリを起動する。ローカル起動はwriter run
uv run writer run hello-world
WRITER FRAMEWORK v0.8.2
App is available at: http://127.0.0.1:3005
デモやビジュアルエディターとは違うポートになってる。ブラウザでアクセスすると、先ほど作成していたアプリの部分だけが表示される。
なお、デフォルトはローカルホスト:3005になるようだが、これを変更する場合には以下のように行う。
uv run writer run hello-world --port 5000 --host 0.0.0.0
アプリケーションのデプロイ(Writer Cloud)
作成したアプリケーションをWriter Cloudにデプロイするにはwriter deploy
。当然Writer Cloudのアカウントが必要になる。
uv run writer deploy hello-world
ただし今回はWriter Cloudのアカウントも何も用意していないので、Dockerのデプロイを確認してみる。
アプリケーションのデプロイ(Docker)
Dockerでのデプロイについては以下に記載がある。
アプリケーションのディレクトリ配下に移動
cd hello-world
ドキュメントではPoetryを使用してコンテナ環境を作成しているが、個人的にPoetryはあまり使っていないので、ベタにpip installするだけにした。
FROM python:3.10-bullseye
RUN apt-get update -y && mkdir /app
RUN apt-get install build-essential cmake python3-dev -y
COPY . /app
WORKDIR /app
RUN pip install writer
ENTRYPOINT [ "writer", "run" ]
EXPOSE 8080
CMD [ ".", "--port", "8080", "--host", "0.0.0.0" ]
こんな感じのディレクトリ構成になっていればOK
tree -a .
.
├── .wf
│ ├── components-page-0-c0f99a9e-5004-4e75-a6c6-36f17490b134.jsonl
│ ├── components-root.jsonl
│ ├── components-workflows_root.jsonl
│ └── metadata.json
├── Dockerfile
├── README.md
├── main.py
├── requirements.txt
└── static
├── README.md
└── favicon.png
3 directories, 10 files
Dockerでビルド。
docker build . -t hello_write_framework
ビルドできたら起動してみる。
docker run -p 8080:8080 hello_write_framework
WRITER FRAMEWORK v0.8.2
App is available at: http://0.0.0.0:8080
ブラウザでアクセスして、コンテナで起動しているのが確認できた。
あとは、レジストリにpushするなり、コンテナでデプロイできるクラウドサービスを使うなりすれば良い。なお、Writer Frameworkの推奨はGoogle Cloud Runみたいで、いろいろ推奨の設定などもドキュメントには記載がある。
あとはドキュメントに従って色々やってみるというところ。
とりあえずはTutorialsをやりつつ、困ったり詳しく知りたい事が出てきたら、ドキュメントを見る、って感じで良さそう。
流れを知るうえでも、一旦Writer Cloudのアカウントを作って、Writerで提供しているモデルを使って見るのも良さそう。
Writer Cloud自体はDeveloperプランという無料のプランがある
LLMやAPIなどは個別に従量課金っぽい
もうちょっとやりたい気もするが、それなりに手間もかかりそうなので、またそのうち。