在人工智能工具的帮助下构建状态机库
今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《在人工智能工具的帮助下构建状态机库》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!
出于无聊,在等待后续面试时,我构建了一个由 genruler 提供支持的状态机库。准确地说,是我毕业后第一份工作期间建造的。这个实现大致是基于我的主管当时起草的设计。该项目还旨在展示如何利用规则 dsl。
根据谷歌搜索有限状态机返回的有用摘要(强调我的)
“有限状态机”是指一种计算模型,其中系统在任何给定时间只能处于有限数量的不同状态,并且这些状态之间的转换由特定输入触发,本质上允许它根据一组定义的条件处理信息,不可能有无限数量的状态; “有限”这里指的是系统可以存在的有限的一组可能状态。
该库接收一个表示有限状态机模式的字典。比如我们要建立一个订单追踪系统
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 的原因。在授权状态定义中,我们还定义了一个action
authorized: name: authorized action: authorize_order ...
因此在 order_processor 模块中,我们定义了一个新函数,名为authorized_order
def authorize_order(payload): # do the processing here instead pass
这样,以下情况是可能的,其中状态管理代码与其余处理逻辑分离
# fetch the order from database order = Order.get(id=payload["order_id"]) current_state = machine.states[order.state] # fetch next state new_state = machine.progress(current_state, payload) # do processing (example) new_state.do_action(payload)
不过,我现在仍在努力,应该会在下一个版本中实现。同时,如果每个状态都定义了操作,它还能够执行类似于map和reduce的操作。请随时检查项目的开发进度。 genruler 和 genstates 现在都在 pypi 上,耶!
现在,人工智能怎么样?
在库有点用后我下载了 codeium windsurf。我最终使用它从 genruler 中去除了 hy 依赖,并向项目添加了文档和自述文件。对于发电机状态,我使用级联来生成文档、自述文件以及测试。总的来说,感觉就像我身边有一个中高级程序员来帮助我完成分配给实习生甚至初级员工的任务。
大部分核心逻辑仍然来自我这边,尽管目前的语言模型已经很智能了,但他们仍然会犯一些错误,因此需要监督。我还尝试了 qwen2.5-coder:7b 模型,它运行得相当好,尽管由于我的工作站蹩脚,速度相当慢。我发现如果我要构建自己的产品并设法从中赚钱,codeium 要求的价格是公平的。
虽然生成部分工作正常,但编写实际代码并不那么好。我不确定 pylance 是否在那里正常工作,认为它是专有的,或者是否是由于完成魔法 windsurf 所做的,我的编辑器在我编写代码时不再能够自动导入库。例如,当我在代码中自动完成 reduce() 函数时,在 vscode 中,它会自动将 from functools import reduce 插入到我的代码中。然而,风帆冲浪却并非如此,这使得它有点令人恼火。然而,考虑到这是新的,编码体验应该随着时间的推移而修复。
另一方面,我仍在寻找一个更轻的编辑器,zed 确实引起了我的注意。然而,由于我的 surface book 2 最近坏了,当我离开家庭办公室时,我只剩下三星 galaxy tab s7fe。因此,连接到我的工作站的具有 web 前端(而且非常有用)的 vscode 仍然是我的主要编辑器(它甚至可以与 neovim 扩展一起使用)。
由 llm 提供支持的生成式人工智能正在迅速改变我们的生活,没有理由抗拒它。然而,恕我直言,我们也应该有一些自我克制,不要把它用于所有事情。它确实应该用作创新或创造性工作的补充,而不是创新和创造力的替代品。
我们也应该知道它在输出什么,而不是盲目接受它做了什么。例如,在 genruler 中,我用更广泛的示例改进了我原来的自述文件。我没有按原样接受它,而是让它为自述文件中生成的所有示例生成测试,因此示例代码通过并按我的预期工作。
总的来说,是的,我确实认为这些生成式人工智能增强编辑器确实物有所值。归根结底,这些都是工具,它们的目的是为工作提供帮助,而不是取代敲键盘的人。
以上就是《在人工智能工具的帮助下构建状态机库》的详细内容,更多关于的资料请关注golang学习网公众号!

- 上一篇
- 新莱福:募投项目计划于明年年中实现投产

- 下一篇
- 鹿晗电脑壁纸:精选高清图片分享
-
- 文章 · python教程 | 13分钟前 |
- Python追加文件内容的具体方法及代码
- 494浏览 收藏
-
- 文章 · python教程 | 23分钟前 | asyncio 事件循环 await aiohttp run_in_executor
- Python中如何实现异步IO操作技巧
- 132浏览 收藏
-
- 文章 · python教程 | 2小时前 | 数据采样 random.sample pandas.groupby 分层抽样 简单随机抽样
- Python数据采样技巧与实现方法
- 407浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- Python工厂模式使用技巧大全
- 361浏览 收藏
-
- 文章 · python教程 | 3小时前 | scikit-learn DBSCAN 数据预处理 K-means 轮廓系数
- Python聚类分析实用方法与技巧
- 494浏览 收藏
-
- 文章 · python教程 | 12小时前 |
- VSCode配置Python:插件推荐及调试攻略
- 390浏览 收藏
-
- 文章 · python教程 | 12小时前 | 嵌套结构 安全性 json.loads() try-except ujson
- Python解析JSON响应的详细教程
- 492浏览 收藏
-
- 文章 · python教程 | 13小时前 |
- Python数据归一化技巧详解
- 371浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- AI Make Song
- AI Make Song是一款革命性的AI音乐生成平台,提供文本和歌词转音乐的双模式输入,支持多语言及商业友好版权体系。无论你是音乐爱好者、内容创作者还是广告从业者,都能在这里实现“用文字创造音乐”的梦想。平台已生成超百万首原创音乐,覆盖全球20个国家,用户满意度高达95%。
- 7次使用
-
- SongGenerator
- 探索SongGenerator.io,零门槛、全免费的AI音乐生成器。无需注册,通过简单文本输入即可生成多风格音乐,适用于内容创作者、音乐爱好者和教育工作者。日均生成量超10万次,全球50国家用户信赖。
- 7次使用
-
- BeArt AI换脸
- 探索BeArt AI换脸工具,免费在线使用,无需下载软件,即可对照片、视频和GIF进行高质量换脸。体验快速、流畅、无水印的换脸效果,适用于娱乐创作、影视制作、广告营销等多种场景。
- 6次使用
-
- 协启动
- SEO摘要协启动(XieQiDong Chatbot)是由深圳协启动传媒有限公司运营的AI智能服务平台,提供多模型支持的对话服务、文档处理和图像生成工具,旨在提升用户内容创作与信息处理效率。平台支持订阅制付费,适合个人及企业用户,满足日常聊天、文案生成、学习辅助等需求。
- 13次使用
-
- Brev AI
- 探索Brev AI,一个无需注册即可免费使用的AI音乐创作平台,提供多功能工具如音乐生成、去人声、歌词创作等,适用于内容创作、商业配乐和个人创作,满足您的音乐需求。
- 14次使用
-
- Flask框架安装技巧:让你的开发更高效
- 2024-01-03 501浏览
-
- Django框架中的并发处理技巧
- 2024-01-22 501浏览
-
- 提升Python包下载速度的方法——正确配置pip的国内源
- 2024-01-17 501浏览
-
- Python与C++:哪个编程语言更适合初学者?
- 2024-03-25 501浏览
-
- 品牌建设技巧
- 2024-04-06 501浏览