AI ツールを活用したステート マシン ライブラリの構築
フォローアップのインタビュー セッションを待っている間、退屈から、genruler を利用したステート マシン ライブラリを構築しました。私は過去、正確に言うと卒業後の最初の仕事のときにこれを作りました。この実装は、当時私の上司が起草した設計に大まかに基づいています。このプロジェクトは、ルール DSL の活用方法を紹介することも目的としていました。
有限状態マシンに関する Google 検索で返された有用な概要によると (強調は私のものです)
「有限状態マシン」 とは、システムがいつでも限られた数の個別の状態しか取り得ない計算モデルを意味し、これらの状態間の遷移は特定の入力によってトリガーされ、本質的には無限の数の状態が存在する可能性のない一連の定義された条件に基づいて情報を処理します。ここでの「有限」 は、システムが存在できる限られた状態のセットを指します。
ライブラリは、有限状態マシンのスキーマを表す辞書を受け取ります。たとえば、注文追跡システムを構築したいと考えています
Graphviz によって生成された有限状態マシン図
スキーマは次のようになります (わかりやすくするために YAML 形式を省略しています)
machine: initial_state: pending_payment states: pending_payment: name: pending payment transitions: order_authorization: name: order is authorized destination: authorized rule: (condition.equal (basic.field "is_authorized") (boolean.tautology)) authorized: name: authorized action: authorize_order transitions: order_partially_paid: name: order is partially paid destination: partially_paid rule: (boolean.tautology) order_fully_paid: name: order is fully paid destination: paid rule: (boolean.tautology) ...
したがって、すべてを設定するには、
を呼び出します。
import genstates import yaml import order_processor with open("states.yaml") as schema: machine = genstates.Machine(yaml.safe_load(schema), order_processor)
つまり、この架空の例では、順序に変更があるたびに何らかのペイロードを受け取ることになります。たとえば、販売者が注文を承認すると、
が返されます。
{ "is_authorized": true, ... }
これでライブラリを確認できるようになります
state = machine.initial # assume the order is created transition = machine.get_transition(state, "order_authorization") assert transition.check_condition(payload)
スキーマで定義されている場合、このチェックでは追加の検証チェックも実行されます。これは、呼び出し元にエラー メッセージを返す場合に役立ちます。
try: assert transition.check_condition(payload) except ValidationFailedError as e: logger.exception(e)
ペイロードが到着するたびに遷移をトリガーする必要があることがわかっている場合もありますが、どの遷移であるかは必ずしもわかりません。したがって、それを Machine.progress
に渡すだけです。
try: state = machine.progress(state, payload) except ValidationFailedError as e: logger.exception(e)
注文がどのような状態に進むべきかがわかったら、ロジックを操作するためのコードを書き始めることができます
# fetch the order from database order = Order.get(id=payload["order_id"]) current_state = machine.states[order.state] # fetch next state try: new_state = machine.progress(current_state, payload) except ValidationFailedError as e: # validation failed, do something logger.exception(e) return except MissingTransitionError as e: # can't find a valid transition from given payload logger.exception(e) return except DuplicateTransitionError as e: # found more than one transition from given payload logger.exception(e) return # do processing (example) log = Log.create(order=order, **payload) log.save() order.state = new_state.key order.save()
理想的には、処理ロジックを抽出することもできます。これが、最初に order_processor をインポートした理由です。認可状態の定義では、アクション
も定義しました。
authorized: name: authorized action: authorize_order ...
モジュール order_processor で、authorized_order という新しい関数を定義します
def authorize_order(payload): # do the processing here instead pass
状態管理コードが残りの処理ロジックから分離されている場合、次のことが可能です
machine: initial_state: pending_payment states: pending_payment: name: pending payment transitions: order_authorization: name: order is authorized destination: authorized rule: (condition.equal (basic.field "is_authorized") (boolean.tautology)) authorized: name: authorized action: authorize_order transitions: order_partially_paid: name: order is partially paid destination: partially_paid rule: (boolean.tautology) order_fully_paid: name: order is fully paid destination: paid rule: (boolean.tautology) ...
ただし、現在も作業中なので、次のリリースで作成する予定です。一方、すべての状態にアクションが定義されている場合は、マップとリデュースに似た処理を実行することもできます。開発の進捗状況については、プロジェクトをご自由にチェックしてください。そして、genruler と genstates の両方が PyPI 上で稼働するようになりました。やったー!
では、AI についてはどうでしょうか?
ライブラリがある程度使えるようになったので、Codeium Windsurf をダウンロードしました。私は最終的にこれを使用して genruler から依存関係を取り除き、ドキュメントと README をプロジェクトに追加しました。 genstate については、カスケードを使用してドキュメント、README、およびテストを生成しました。全体として、インターンや後輩に割り当てるタスクを手伝ってくれる中堅から上級のプログラマーがそばにいるように感じます。
コアロジックのほとんどは依然として私の側から来ており、言語モデルは現時点ではインテリジェントですが、依然としてあちこちで間違いがあり、したがって監督が必要です。また、qwen2.5-coder:7b モデルも試してみましたが、私のワークステーションが貧弱なため、かなり遅いとはいえ、かなりうまく動作しました。私が独自の製品を構築し、それからなんとかお金を稼ぐのであれば、Codeium が要求する価格は公正であると思います。
生成部分は問題なく動作しますが、実際のコードを書くのはそれほどうまくいきません。 Pylance がそこで適切に動作しているのか、プロプライエタリであると考えられているのか、それともウィンドサーフィンの補完マジックによるものなのかはわかりません。コードを書くときにエディターがライブラリの自動インポートを行うことができなくなりました。たとえば、コード内でreduce()関数をオートコンプリートすると、vscodeではfunctools import reduceが魔法のようにコードに自動的に挿入されます。しかし、ウィンドサーフィンではそうはいかないので、少しイライラします。ただし、これは新しいものであることを考慮すると、コーディング エクスペリエンスは時間の経過とともに修正されるはずです。
一方で、私はまだ軽量のエディタを探しており、zed が私の注意を引きました。しかし、最近 Surface Book 2 が壊れたので、自宅のオフィスから離れているときは Samsung Galaxy Tab S7FE だけが手元に残っています。したがって、ワークステーションに接続された Web フロントエンド (そして驚くほど使いやすい) を備えた vscode が、今でも私のメインエディターです (neovim 拡張機能でも動作します)。
LLM を活用した生成 AI は私たちの生活を急速に変えつつあり、それに抵抗する意味はありません。しかし、私見ですが、それをあらゆることに使用しないように、ある程度の自制心も持つべきです。これは実際、革新的または創造的な仕事を補完するものとして使用されるべきであり、イノベーションや創造性の代替として使用されるべきではありません。
また、その動作を盲目的に受け入れるのではなく、それが何を出力しているのかを知る必要があります。たとえば、genruler では、より広範な例を使用して元の README を改善しました。これをそのまま受け入れるのではなく、README で生成されるすべてのサンプルのテストを生成するようにしました。そのため、サンプル コードは意図したとおりに通過し、動作します。
全体的に見て、はい、これらの Generative AI 強化エディターには、要求する金額に見合った価値があると思います。結局のところ、これらはツールであり、作業を補助するものであり、キーボードを打つ人の代わりをするものではありません。
以上がAI ツールを活用したステート マシン ライブラリの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

PythonとCにはそれぞれ独自の利点があり、選択はプロジェクトの要件に基づいている必要があります。 1)Pythonは、簡潔な構文と動的タイピングのため、迅速な開発とデータ処理に適しています。 2)Cは、静的なタイピングと手動メモリ管理により、高性能およびシステムプログラミングに適しています。

PythonListSarePartOfThestAndardarenot.liestareBuilting-in、versatile、forStoringCollectionsのpythonlistarepart。

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

科学コンピューティングにおけるPythonのアプリケーションには、データ分析、機械学習、数値シミュレーション、視覚化が含まれます。 1.numpyは、効率的な多次元配列と数学的関数を提供します。 2。ScipyはNumpy機能を拡張し、最適化と線形代数ツールを提供します。 3. Pandasは、データ処理と分析に使用されます。 4.matplotlibは、さまざまなグラフと視覚的な結果を生成するために使用されます。
