Instill-ai の紹介
Instill のパイプライン バックエンド プロジェクトに取り組むのは、ジグソーパズルを解くようなものでしたか?パズル - 一部のピースを除いて、名前が変わり続けています。私の使命?競合を発生させずに JSON フィールドの名前を変更できるコンポーネントを作成するには。 Go を学習し、Instill のよく整理されたドキュメントを学習し、統合されてすぐに使用できるソリューションを作成するという私の旅を共有します。 ?
Instill には、JSON データ構造内のフィールドの名前を動的に変更する方法が必要でした。ひねりは?名前を変更したフィールドが既存のフィールドと衝突する可能性がある場合に対処する必要がありました。紛争解決システムがなければ、混乱が最高潮に達するでしょう。
pipeline-backend は、Versatile Data 内のすべてのパイプライン リソースを管理します パイプライン (VDP) によるデータの効率化 コンポーネントの開始から AI/データ/アプリケーション コンポーネントを経て最後まで コンポーネント。
で? VDP を導入すると、パイプラインは DAG (有向非巡回グラフ) で構成されます。 複数のコンポーネントの。
flowchart LR
s[Trigger] --> c1[OpenAI Component]
c1 --> c2[Stability AI Component]
c1 --> c3[MySQL Component]
c1 --> e[Response]
c2 --> e
コンポーネントは、パイプライン内の重要な構成要素として機能します。
詳細については、コンポーネント パッケージのドキュメントを参照してください 詳細。
パイプライン レシピ は、コンポーネントの構成方法とコンポーネントの状態を指定します。 相互接続されています。
レシピは YAML 言語で定義されます:
flowchart LR
s[Trigger] --> c1[OpenAI Component]
c1 --> c2[Stability AI Component]
c1 --> c3[MySQL Component]
c1 --> e[Response]
c2 --> e
正直に言うと、私はこの問題を解決できるかどうか疑い始めていましたが、Anni が私を前進させる完璧なメッセージを落としてくれました。
私が慣れてきたら、このタスク用に JSON スキーマを作成した ChunHao がゴーサインをくれました。コーディングを開始します。そして旅が始まりました!
主な要件は次のとおりです:
コーヒー☕と勇気を武器に、コーディングに取り掛かりました。以下にコアロジックの概要を示します:
まず、古いフィールド名と新しいフィールド名を追跡するためのマッピング システムを作成しました。これは競合を検出するための鍵でした。
flowchart LR
s[Trigger] --> c1[OpenAI Component]
c1 --> c2[Stability AI Component]
c1 --> c3[MySQL Component]
c1 --> e[Response]
c2 --> e
競合が検出されるたびに、関数は新しい名前に「_conflict」を追加します。これは、JSON フィールドが一意であり、最も重要なことに、相互にフレンドリーであることを保証する簡単なトリックです。 ✌️
フィールド マッピングを設定したら、次のステップはそれらを JSON データに適用することでした。
variable <span># pipeline input fields</span> output: <span># pipeline output fields</span> component: <component-id>: type: <component-definition-id> task: <task-id> input: <span># values for the input fields</span> condition: <condition> <span># conditional statement to execute or bypass the</span>
これは、マッピングされた名前を JSON データに適用するロジックです。結果?データはきちんと名前変更され、競合は解決され、構造はそのままです。 ?
コンポーネントを作成した後、ドラフト PR をドロップし、コメントを取得しました:
Instill のテスト方法に慣れ、効果的なテスト ケースの作成方法を学んだ後、さらに先に進みました。
テストの時間です! ?単純な名前変更から、ネストされた JSON フィールドを使用した複雑なエッジケースまで、あらゆるものをカバーするテストを作成しました。テストの各ラウンドでさらなる改良が行われました。
func mapFields(fields map[string]string) map[string]string { newFieldMap := make(map[string]string) for oldName, newName := range fields { // Check for conflict if _, exists := newFieldMap[newName]; exists { newName += "_conflict" // Add suffix for conflicts } newFieldMap[oldName] = newName } return newFieldMap }
ここで 個人的な感想 を共有したいと思います。テストはこのプロジェクトで最も困難な部分でした ??。 「このテストは本来の目的を果たしているのだろうか?」と思うことがありました。
ちょうどそのとき、糸くずの問題に遭遇しました—
彼は問題を指摘し、解決策まで提供してくれました。私がしなければならなかったのはそれを実装することだけでしたが、コードをスムーズに動作させるには、どんな些細な点でも重要であることを思い出させてくれました。
これらの最初のハードルを乗り越えると、テストが私のセーフティネットになりました。自分のコードがさまざまなシナリオで機能することがわかり、自信がつきました ?️♂️。また、テストは単にチェックを入れるためのステップではなく、コードの信頼性と回復力を確認する方法であることもわかりました。
テストが完了した後、コードをプッシュし、レビュー プロセスの準備を整えました。ただし、CI (継続的インテグレーション) チェックには合格しませんでした。 Anni のコメントは、テスト ケースを再確認するよう優しく思い出させてくれました。
「@AkashJana18 さん、テスト ケースをチェックしてもらえますか? CI チェックでは、ここでは合格していないことがわかりました。 PR にプッシュする前に、まずローカルでテストしてください。コミットをプッシュするたびにチェックがトリガーされるため、エンジニアがコードをレビューする前に問題を発見できます。ありがとう!」
そのとき、送信する前にテストをローカルで実行する必要があることに気づきました。 ChunHao は次のようにも追加しました:
「レビューをリクエストする前に実行して合格してください。$ go test ./pkg/component/operator/json/v0/... を実行してローカルで確認してください。」
私はすぐにローカルでテストを実行し、問題を特定して修正しました。
ちょっとしたお祝いのひととき?
このプロセスにより、レビューに提出する前にすべてが確実であることが確認されたため、ローカル テストの重要性をさらに認識するようになりました。
ChunHao はマージ前に最終レビューを行い、いくつかの調整を行い、テスト レシピを QA して、新しい変更を反映するようにドキュメントを更新しました。プロセス全体を通して継続的にサポートしてくれた Anni に感謝します。それは大きな変化をもたらしました。 ?
私が学んだ最大の教訓の 1 つは、コラボレーションと指導がプロジェクトの成否を左右するということでした。 Instill のモデレーターである Anni と ChunHao は、私が Go 構文で迷ったとき、または正しいアプローチで悩んでいたときに、必要なガイダンスを提供してくれました。私たちは協力して、複雑な問題をクリーンで機能的なソリューションに変えました。
正直に言うと、噛み切れないほど噛みちぎったように感じた瞬間がありました。しかし、アンニからの絶え間ない励ましとチュンハオからの明確な指示のおかげで、私は順調に進むことができました。
もう 1 つのステップは、このアプローチを動的なフィールド名の処理を必要とするパイプラインの他の部分に拡張することです。なぜなら、少しの自動化が嫌いな人はいないからです⚙️?
Instill の堅固なドキュメント、ChunHao からの指導、Anni の精神的サポートにより、このプロジェクトは素晴らしい学習体験になりました。私は Go について何も知らなかった状態から、本番環境に向けて完全に機能する機能を実装するまでに至りました (そして、それを証明するマージされた PR が手に入りました?)。
証明:
以上がゼロからマージまで: Go での JSON 名前変更フィールド コンポーネントの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。