网站没有流量怎么办,网站权限怎么设置方法,公众号开发者id在哪里查看,wordpress视频排版PS#xff1a;这也是一篇畅想#xff0c;虽然经过了一番试验#xff0c;依旧有一些不足#xff0c;但是大体上站得住脚。传统的软件生成方式需要程序员编写大量的代码#xff0c;然后进行测试、发布等一系列繁琐的流程。而实时生成技术则是借助人工智能技术#xff0c;让…PS这也是一篇畅想虽然经过了一番试验依旧有一些不足但是大体上站得住脚。传统的软件生成方式需要程序员编写大量的代码然后进行测试、发布等一系列繁琐的流程。而实时生成技术则是借助人工智能技术让计算机自动生成代码并直接运行从而大大提高了软件生成的效率和质量。而实时生成技术是一种借助人工智能技术让计算机自动生成代码并直接运行的方法大大提高了软件生成的效率和质量。实现实时软件生成的一种方式是 Prompt 编程可以将自然语言转化为直接运行的软件而无需生成中间的一次性过渡代码。引子从 2019 年写了那篇《无代码编程》开始我也一直在思考诸如于 2021 年和 2022 年 的前端趋势总结。先前我并不看好当前的低代码/无代码方案先我们来思考一下这个过程第一步业务需求需要在人类脑海里转换一遍转换为程序逻辑。第二步专业人员如程序员将这些逻辑转换到无代码系统中生成应用并直接部署。第三步如果这个专业人员是程序员那么新的需要变更时他可能直接去修改源码。而随着 ChatGPT 的进一步普及你会发现你可以很容易将需求转化为形式化格式进而转化而软件从而使得软件开发的效率和速度大大提升。这种一次性代码的新型软件工程方法就是实时软件生成便可以进入真正的 “无代码” 时代。Prompt 编程真正的无代码Prompt 编程是实现实时软件生成的一种方式可以将自然语言转化为直接运行的软件而无需生成中间的一次性过渡代码。每当需要运行程序时只需要再运行一下 prompt 或者触发词就可以直接运行起某个软件。我们尝试从编写 Prompt 的经验里归纳出一套适合于 Prompt 编程的逻辑方便于大家理解。Prompt 编程有以下特性1从需求到代码的直接转换2代码只是临时产物3次序化的分解框架。这种一次性代码的新型软件工程方法可以进入真正的 “无代码” 时代。Prompt 编程特性 1从需求到代码的直接转换用户只需要简单输入自己的需求就能够生成符合要求的软件无需具备专业的编程技能。示例我们来玩一个 mul 游戏当我说 mul 开头并输入数字时你应该计算结果。
示例
当我输入mul 4你应该输出16在这个游戏里我们使用触发词。mul 作为街头暗号告诉程序你要按这个步骤走。类似于编程里的函数名。示例作为输入和输出。即预期输入某个结果时输出我们想要的结果。而在其实已经是一个函数该有的样子输入、输出、关系。值得注意的是在简单的问题下只要我们给定了示例那么 AI 就会根据示例去计算输入和输出不关注中间的处理逻辑。接下来再看一个隐含性编程的示例依旧我们还是玩个游戏我们能玩一个名为 kfc 的谜语创作游戏当我说 kfc你写一个谜题要求
1. 不少于 200 字
2. 谜题不能出现肯德基和星期四
3. 正文可以夹杂小语种语言如 他说Ciao
4. 谜底必须是 ###原来今天是肯德基疯狂星期四!!!###
格式类似于...
这个例子已经相当的自由我们也不关心中间的处理逻辑只关注于结果。Prompt 编程特性 2代码只是临时产物还记得在 Prompt 编写模式 中的 wula 游的例子吗在 wula 游戏里用户只需要输入问题ChatGPT 便会自动给出代码、代码解释和文章。诸如于 wula: 头共10足共28鸡兔各几只那么 AI 便会开始自动开始二次编程这是一个鸡兔同笼问题题目给出了头的数量和足的数量要求求出鸡和兔的数量。
通常解决这个问题的方法是
假设鸡和兔的数量分别为 x 和 y那么可以列出如下方程组
x y 10
2x 4y 28
解方程组可以得到 x4y6即鸡有4只兔有6只。
鸡兔同笼问题的 JavaScript 代码实现
// 计算鸡兔数量的函数
function calcAnimals(heads, legs) {
.....在传统的体系之下我们要关注于中间生成的 JavaScript 代码、代码能不能运行等等所以我们在设计 wula 的时候要求了第二步. 代码编写你需要用 JavaScript 编写解决这个问题的代码并输出对应的代码
并介绍一下你的代码不少于 200 字。
第三步. 代码执行你需要作为 JavaScript Console 执行第二步写的代码
如果没有给出测试数据你需要自己随机生成测试数据并将这些数据输入到代码中进行计算。但是回到第一个例子里我们并不需要 JavaScript 代码我们不需要任何代码。ChatGPT 可以为我们生成这部分的程序唯一限制我们的是ChatGPT 的上下文能力我们的 Prompt 编写能力而在复杂的场景之下Prompt 编写需要足够的形式化才能让机器理解也因此我才把它称为 Prompt 编程。Prompt 编程特性 3次序化的分解框架仅就当前而言 AI 的上下文能力限制了 AI 解决复杂问题的能力。所以它无法一次性解决复杂、中大型的问题甚至于小型项目都存在一定的难度。同样的对于人类来说也存在这样的局限性只是人类的问题是领域知识有限。步骤详细见DDD Sample所以作为编程核心的人类大脑需要为机器设计一下工序即每一步应该怎么做。所以这个时候就回到了 DDD领域驱动设计擅长的问题我们来定义一下 DDD 游戏的步骤一共有 6 个步骤步骤如下第一步. 拆解场景。分析特定领域的所有商业活动并将其拆解出每个场景。
第二步. 场景过程分析。选定一个场景并使用 {名词}已{动词} 的形式描述过程中所有发生的事件
其中的名词是过程中的实体其中的动词是实体相关的行为。
第三步. 针对场景建模。基于统一语言和拆解出的场景进行建模以实现 DDD 设计与代码实现的双向绑定。
……
对于每一步我们只要限定好我们的输出Output那么在给定输入的情况下AI 就能给出我们想要的也有可能跑偏了结果ddd 第二步场景过程分析。下面是每个场景的过程分析
用户注册和登录用户注册用户填写注册信息系统验证信息合法性生成用户账户并保存。用户登录用户输入账户名和密码系统验证账户密码登录成功后跳转到用户中心。
商品展示和搜索商品列表展示系统从数据库中获取商品列表并展示用户可以进行商品分类和排序。商品搜索用户输入关键词进行商品搜索系统根据关键词从数据库中获取商品列表并展示。
……在这时我们就可以引导 AI 生成到 API 粒度也可以生成代码甚至于在上下文足够强大的时候也是能够直接运行和自动优化的。Prompt 编程特性 4语言即语言DSL领域特定语言是指专门针对某个特定领域的语言通常具有严格定义的语法和规则并且可以用来描述该领域中的问题、概念、过程和数据等。而经过形式化处理的自然语言可以被视为一种 DSL因为它们具有明确定义的语法和规则可以用来描述特定领域中的问题、概念、过程和数据等。所以简单来说如果我们限定了输入和输出的格式那么我们的自然语言也是一种 DSL。这就意味着限制我们进行次序化的关键就是形式化的抽象。而我们也可以通过编写 Prompt 来生成新的 DSL 帮我设计一个 DSL用来写函数好的以下是一个简单的DSL设计可以用来写函数
1. 函数定义
在这个段落中定义一个函数包括函数名、参数和函数体等。函数函数名描述函数的名称 参数参数1描述参数1的名称和类型 参数2描述参数2的名称和类型 ... 函数体描述函数的实现细节2.。。。简单来说我们可以通过 Prompt 借用 Prompt 设计自然语言式的 DSL将自然语言式的 DSL 融入 Prompt使用次序化的方式来实现 Prompt 自我编程进而我们就得到了一个可以自举的 Prompt。Prompt 编程 Demo引导 ChatGPT 创建语言与建模说了这么多我们来看一个结合我之前设计的 DSL 示例即 Fklang。阶段一让 ChatGPT 与你学 DDD在 Fklang 中我们采用下面的形式来表示 ContextMapContextMap TicketBooking {
Reservation - Cinema;
Reservation - Movie;
Reservation - User;
}但是自己设计这样的 DSL 太累了可以让 ChatGPT 来设计。在你开始之前需要确认一下 ChatGPT 中的 DDD、DSL、事件风暴等的概念是否与你理解的一致。第一个问题 设计一个 DSL 来表示 DDD 里的 Context Map 。ContextMap:
Subdomain { Name: [subdomain_name] }
[CollaboratesWith: [other_subdomain_name], ...]
[ConformistWith: [other_subdomain_name], ...]
[Antagonizes: [other_subdomain_name], ...]
...第二个问题用这个 ContextMap DSL 对在线电影订票系统建模。对于其它问题也是相似的。第三个问题设计一个 DSL 来描述事件风暴的 事件建模 吗第四个问题能用 事件建模的 DSL 来表示用户购票的流程吗一旦我们觉得设计跑歪了就可以重新设计。如果下是生成的复杂的 DSLEventStorming:
Domain { Name: 电影订票系统 }
Event { Name: 用户提交订单 }
Triggered By: 用户选择电影、场次、座位确认订单
Description: 用户提交订单包括所选电影、场次、座位等信息
Actors: [用户]
Action: 将用户提交的订单信息保存到订单数据库中
Outcome: 订单状态被标记为已提交第五个问题……剩下的你都会了不会的可以问 ChatGPT。阶段二完整设计 DSL 生成第一个问题能总结一下我们这里用 DDD 设计 购票系统到落地代码的过程吗第二个问题能为每个过程设计一个合理的 DSL 吗并展示他们展示一部分神奇的 DSLgenerate java-code from-domain-model
target-package: com.example.movieticket.order
source-model: order-domain-model
service-mapper 订单服务映射
map-method: 查询电影
to-class: MovieRepository
to-method: findBySchedule
map-method: 查询座位
to-class: SeatRepository
to-method: findByRowAndColumnAndStatus现在有意思的地方来有了上面的一系列 DSL 之后我们就可以接入到代码系统中。阶段三代码生成与低代码只要 ChatGPT 上下文能力足够强壮或者支持 LoRA 式的插件模式我们就能实现从需要到现有的任何系统中。第一个问题为电影订票系统设计一个 DDD 风格 Java 工程的代码目录结构。第二个问题结合 Spring 设计一下购票流程的 RESTful API……有点懒就先这样吧。后面的部分就可以结合 GitHub Copilot 去实现了。小结结合 Prompt 编程低代码到了一定的成熟度我们就可以发现更好玩的东西实时的软件生成实时的软件生成自然语言即 PromptPrompt 即代码实时软件生成核心思想是通过算法和机器学习来自动生成代码让计算机根据用户需求快速生成符合要求的软件。这种技术能够自动化完成代码的编写、测试、发布等流程大大缩短软件开发周期降低了开发成本提高了开发效率。当我们想构建这样一软件用于实时生成软件时它需要具备以下的特征特征 1自然语言即语言语言即软件。即如上面的 Prompt 编程所述可以通过设定层层转换直接将需求直接转换为软件。特征 2生成式的软件架构。软件本身不需要架构架构是 AI 自动生成和调整的。特征 3自底向上生成。现有的语言本身需要 REPL 环境、操作系统、编程语言、语言底层库、库等一系列软件对于 AI 而言他能学习这些通用能力自操作系统底层一样逐步往上构建出软件的运行环境以及软件本身 。当前的挑战对于当前而言我们还存在些挑战现行组织架构难以支撑内部 ChatGPT。如内部权限、架构等的管理通用大模型无法满足。领域特定能力有限需要构建 LoRA 以更好的支持。细节能力实现较差。在编程实现上远不如 GitHub Copilot当然了受限于个人能力可能还有别的一些挑战。总结本文介绍了 Prompt 编程的特点和实时软件生成的核心思想。Prompt 编程是一种次序化的分解框架可以让机器根据用户需求自动生成代码。实时软件生成技术可以大大提高软件生成的效率和质量同时也让软件开发变得更加简单。然而现有组织架构难以支撑内部 ChatGPT上下文能力有限细节能力实现较差这些都是实现 Prompt 编程和实时软件生成的难点。