👋

Daviaについて調べてみた

に公開

Daviaについて調べてみた

先日、LTでDaviaという生成AIに関する話をしていて、どういうものなのか気になったので調べてみました。
Docsを見て、書いていますが、間違った理解してる部分があるかもしれませんが、ご了承ください。

Daviaとは何か?

Daviaでは「Python開発者がバックエンドロジック、特にAIエージェントやデータ駆動型内部ツールを、最小限の労力でインタラクティブなWebアプリケーションに変換できる」と説明されています。
つまり、データサイエンティストやPythonを使っている人でWebアプリとして公開したい人にとっては、フロントエンドを学習することなく、Webアプリを作成できるということになります。
フロントエンドの開発をしたくない人にとっては良いツールなのかと思いました。

https://github.com/davialabs/davia

開発者の作った背景としては、社内で便利なPythonの関数を作成しているけど、それをアプリとして共有する際にフロントエンドの知識が壁があったため、Daviaを作成したとのことです。

個人の感想ですが、よくハッカソン参加してる身としては、フロントエンド(特にUI)がめんどうと感じてるので気持ちがわかるなぁと思いました。

なにができるのか?

  • shadcn/uiとTailwind CSSを使用して、WebアプリケーションのUIを構築
  • WebSocketを使用して、リアルタイムでデータを更新
  • FastAPIとの互換性
  • LangGraph ベースのエージェントの構築
  • Python関数の型注釈を解析し、適切な入力と出力のコンポーネントを自動生成
  • 出力されるフロントエンドはReactで書かれている

まだ全て調べきれてないのでまだ機能があるかもしれません。
このDaviaでの肝である機能は、Python関数の型注釈を解析し、適切な入力と出力コンポーネントを自動生成という部分だと思います。
これにより、Pythonの関数を定義するだけで、Daviaが出力値と入力値に基づいて、適切なUIコンポーネントを自動的に生成します。
従来のPython Webアプリケーション開発では、以下のようなプロセスが必要でした。
従来の方法: Flask + HTML + CSS + JavaScript
※htmlの箇所は省きます

@app.route('/process', methods=['POST'])
def process_data():
    # Python logic
    return render_template('result.html', data=result)

Daviaを使用すると、以下のように簡潔に記述できます。
Davia: Pythonのみで完結


@app.task
def process_data(input: UserData) -> ProcessedResult:
    """データを処理して結果を返します。"""
    # Python logic only
    return processed_result

このことからDaviaを使うことでPython開発者は以下のことを気にせずにWebアプリケーションを開発できます。

  • HTML/CSS/JavaScriptの学習不要
  • フロントエンドビルドプロセスの管理不要
  • UIコンポーネントの手作業による実装不要

使い方

Python環境:3.11.4です。

pip install davia

簡単なHello,⚪︎⚪︎という関数を作成してみました。

from davia import Davia

app = Davia()

@app.task
def hello_world(name: str = "World") -> str:
    return f"Hello, {name}!"

if __name__ == "__main__":
    app.run()

リポジトリはこちら

次に davia run test_app.pyを実行すると、ローカルサーバーが起動します。
また、立ち上がるとhttps://davia.ai/dashboardに遷移します。

右上に自分が作成したHello Worldの関数が表示されていることがわかります。ローカルでサーバー起動しない状態では、以下のような画面が表示されます。

demo
プロンプトでは関数のhello_worldを使用していい感じに表示してくださいと書きました。
読み込みの問題か一回更新しないと表示されませんでしたが、以下のようになりました。

https://youtu.be/eIVp5J0ocJ4

ローカルでデータのやり取りされていることがわかります。

まとめ

Daviaを使うことで、Python開発者がフロントエンドの知識なしでWebアプリケーションを構築できるようになります。
生成されているフロント部分はReactで書かれているため、Reactの知識がある人にとっては、カスタマイズも可能です。
ただ、運用面ではどうなるのかが気になるところです。そこまでは調べきれてないので、手が空いた時に調べてみたいと思います。
また、まだDocsも豊富ではないので詰まった時大変かもしれません。
未熟な記事ですが、理解の助けになれば幸いです。

参考

https://github.com/davialabs/davia

Discussion