Instill-ai 简介
从事 Instill 的管道后端项目就像解决拼图一样?拼图——除了一些拼图不断改变名称!我的使命?创建一个可以重命名 JSON 字段而不产生冲突的组件。跟我一起分享我学习 Go、研究 Instill 组织良好的文档以及创建一个现已合并并准备就绪的解决方案的旅程! ?
Instill 需要一种动态重命名 JSON 数据结构中字段的方法。转折?我们必须处理重命名的字段可能与现有字段发生冲突的情况。如果没有冲突解决系统,混乱就会占据上风!
pipeline-backend 管理 Versatile Data 中的所有管道资源 管道 (VDP),用于简化来自 开始组件,经过AI/数据/应用组件,直至结束 组件。
在?灌输 VDP,管道是一个 DAG(有向无环图),由 多个组件。
组件充当管道中的重要构建块。
更多请参见组件包文档 详情。
管道配方指定组件的配置方式及其使用方式 相互关联。
菜谱是用 YAML 语言定义的:
说实话,我开始怀疑自己能否解决这个问题,但后来 Anni 留下了让我继续前进的完美信息。
一旦我适应了,为这项任务精心设计了 JSON 模式的 ChunHao 就给我开了绿灯?开始编码。就这样,旅程开始了!
关键要求是:
带着咖啡☕和勇气?,我开始编码。核心逻辑先睹为快:
首先,我创建了一个映射系统来跟踪新旧字段名称。这是检测冲突的关键。
每当检测到冲突时,该函数都会将“_conflict”添加到新名称中。这是一个简单的技巧,可以确保我们的 JSON 字段保持唯一,最重要的是,彼此友好! ✌️
字段映射到位后,下一步是将它们应用到我们的 JSON 数据。
以下是将映射名称应用于 JSON 数据的逻辑。结果呢?我们的数据被整齐地重命名,冲突得到解决,结构完好无损。 ?
创建组件后,删除了草稿 PR 并得到了评论:
在熟悉了 Instill 的测试方法并学习了如何创建有效的测试用例后,我继续进行下一步。
测试时间! ?我编写的测试涵盖了从简单的重命名到具有嵌套 JSON 字段的复杂边缘情况的所有内容。每一轮测试都会带来进一步的改进。
在这里我想分享个人反思:测试是这个项目中最难的部分??。有时我会想,“这个测试是否达到了预期的效果?”
就在那时,我遇到了lint问题—
他指出了问题,甚至提供了解决方案。我所要做的就是实现它,但这提醒我,即使是最小的细节也能让代码顺利运行。
一旦我克服了最初的障碍,测试就成了我的安全网。它让我有信心知道我的代码可以在不同的场景下工作?️♂️。它还向我表明,测试不仅仅是一个检查步骤,它是确保我的代码可靠且有弹性的一种方法。
完成测试后,我推送了代码,准备进行审核过程。然而,我们的 CI(持续集成)检查没有通过。 Anni 的评论温柔地提醒我仔细检查我的测试用例:
“嘿@AkashJana18,你能检查一下你的测试用例吗?我们的 CI 检查显示这里还没有通过。请先在本地进行测试,然后再推送到 PR。每当您推送提交时,我们都会触发检查,以便您可以在我们的工程师审查您的代码之前发现任何问题。谢谢!”
那时我意识到我必须在提交之前在本地运行测试。春浩还补充道:
“请在请求审核之前运行并通过。运行 $ go test ./pkg/component/operator/json/v0/... 在本地检查。”
我快速在本地运行测试,发现问题并修复它们。
庆祝一下?
这个过程让我更加体会到本地测试的重要性,因为它确保了在提交审核之前一切都是可靠的。
合并之前,ChunHao 进行了最终审查,进行了一些调整,对测试配方进行了 QA 并更新了文档以反映新的更改。非常感谢安妮在整个过程中持续提供的支持——这带来了巨大的改变。 ?
我学到的最大的教训之一是协作和指导如何能够成就或毁掉一个项目。 Instill 的版主 Anni 和 ChunHao 在我迷失于 Go 语法或苦苦寻找正确方法时为我提供了所需的指导。我们共同努力,将一个复杂的问题变成了一个干净、实用的解决方案。
说实话,有些时候我感觉自己已经咬得太多了。但Anni不断的鼓励,加上春浩的明确指示,让我一直走在正轨上。
另一个步骤可能是将这种方法扩展到需要动态字段名称处理的管道的其他部分 - 因为谁不喜欢一点自动化⚙️?
凭借 Instill 坚如磐石的文档、ChunHao 的指导以及 Anni 的道义支持,这个项目成为了一次奇妙的学习体验。我从对 Go 一无所知到实现了一个准备用于生产的全功能特性(并且我有合并的 PR 来证明这一点?)。
证明:
以上是从零到合并:在 Go 中构建 JSON 重命名字段组件的详细内容。更多信息请关注PHP中文网其他相关文章!