Closed5

「Writer Framework」を試す

kun432kun432

元々はStreamsyncという、Pythonのデータアプリ向けGUIフレームワークだったのが、

https://note.com/kyutaro15/n/n15508cddc09c

どうやらリブランドして、「Writer」というAIアプリプラットフォーム+OSSでのフレームワーク提供という形式になっているみたい。

https://writer.com/

Write AI StudioってのがWriter向けアプリ開発ツール全般で、その中のPython開発者向けってのがWriter Framework、でこれが以前Streamsyncだったもの、という感じなのかな?

https://dev.writer.com/home/introduction

競合としてはStreamlitやGradioあたりになる。

以前に少しだけ触れたことはあるのだが、軽く触ってみただけ&時間も経っているのであらためて。

kun432kun432

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を試してみようと思う。

参考

https://dev.writer.com/home/development_options

https://dev.writer.com/home/deployment_options

https://dev.writer.com/framework/cloud-deploy

https://dev.writer.com/framework/deploy-with-docker

kun432kun432

ということで「Writer Framework」のGetting Startedを進めていく。

https://dev.writer.com/framework/introduction

Writer Frameworkでは、Builderと呼ばれるドラッグ&ドロップのビジュアルエディタを使用し、バックエンドのコードをPythonで記述することで、機能豊富なアプリケーションを構築できます。高速で柔軟性に優れ、クリーンでテストしやすい構文です。UIとビジネスロジックの分離が可能で、より複雑なアプリケーションを実現できます。

Quickstart

https://dev.writer.com/framework/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は以下となっている。

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の値を変更する。

main.py
(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でのデプロイについては以下に記載がある。

https://dev.writer.com/framework/deploy-with-docker

アプリケーションのディレクトリ配下に移動

cd hello-world

ドキュメントではPoetryを使用してコンテナ環境を作成しているが、個人的にPoetryはあまり使っていないので、ベタにpip installするだけにした。

Dockerfile
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みたいで、いろいろ推奨の設定などもドキュメントには記載がある。

kun432kun432

あとはドキュメントに従って色々やってみるというところ。

とりあえずはTutorialsをやりつつ、困ったり詳しく知りたい事が出てきたら、ドキュメントを見る、って感じで良さそう。

流れを知るうえでも、一旦Writer Cloudのアカウントを作って、Writerで提供しているモデルを使って見るのも良さそう。

Writer Cloud自体はDeveloperプランという無料のプランがある

https://writer.com/plans/

LLMやAPIなどは個別に従量課金っぽい

https://dev.writer.com/home/pricing

kun432kun432

もうちょっとやりたい気もするが、それなりに手間もかかりそうなので、またそのうち。

このスクラップは6ヶ月前にクローズされました