Skip to content

Commit

Permalink
docs: update for dsl llm
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Jun 23, 2023
1 parent a6e5147 commit 3f62d0b
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 73 deletions.
92 changes: 74 additions & 18 deletions src/2-dsl-driven-development.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,80 @@
# DSL 驱动开发

说了,这么多我们来看一个结合我之前设计的 DSL 示例,即 [Fklang](https://github.com/feakin/fklang)
设计 DSL 的目的,在于让开发者可以用更简单的方式来表达自己的想法。DSL 通常是一种领域特定语言,它的语法和语义都是针对某个特定领域而设计的。
除了具备很好的易读性,作为一个 LLM 与机器的语言,它还应该具备易写性。

如下是一个由 LLM 生成的 DSL 示例:

```yml
EventStorming:
Domain { Name: "电影订票系统" }
Event { Name: "用户提交订单" }
Triggered By: "用户选择电影、场次、座位,确认订单"
Description: "用户提交订单,包括所选电影、场次、座位等信息"
Actors: ["用户"]
Action: "将用户提交的订单信息保存到订单数据库中"
Outcome: "订单状态被标记为已提交"
```
## 常规 DSL
常规 DSL,诸如于 JSON、YAML、XML 等,是一种用于描述数据的语言。
## 流式 DSL
由于 LLM 的 stream response 特性,我们可以设计 stream DSL 来处理它们。流式响应 DSL 是一种特殊的 DSL,它的特点是:
1. 支持流式数据处理:与传统的批处理方式不同,流式响应 DSL 能够处理实时产生的数据流,无需等待所有数据都到齐才开始处理。
2. 高效的数据处理:流式响应 DSL 可以对数据进行实时处理和转换,而不需要将所有数据都加载到内存中,这使得它可以处理非常大的数据集。
3. 灵活的数据处理:流式响应 DSL 具有高度的灵活性,可以根据具体的需求进行定制和扩展。例如,可以通过添加不同的操作符来实现数据的过滤、聚合、转换等操作。
示例:
```markdown
HasMatchFunction: true
Thought: I need to introduce the system to the team and ensure that it aligns with our overall architecture and governance policies.
Action: introduce_system
Action Input: https://github.com/archguard/ddd-monolithic-code-sample
```
我们预期它可以实时解析用户的输入,并渲染到 UI 上。这样,用户就可以实时看到自己的输入。
对应的解析代码示例:
```javascript
const hasMatchFunctionRegex = /\s*HasMatchFunction:\s*(.*(?:\n(?!\s*\/\/).*)*)/i;
const thoughtRegex = /\s*Thought:\s*(.*(?:\n(?!\s*\/\/).*)*)/i;
const actionRegex = /\s*Action:\s*(.*(?:\n(?!\s*\/\/).*)*)/i;
const actionInputRegex = /\s*Action\s*Input:\s*(.*(?:\n(?!\s*\/\/).*)*)/i;

function messageToThought(splitContent: string[]) {
let thought = thoughtRegex.exec(splitContent[0])?.[1] ?? "";
let action = ""
if (splitContent.length >= 2) {
action = actionRegex.exec(splitContent[1])?.[1] ?? "";
}

let actionInput = ""
if (splitContent.length >= 3) {
actionInput = actionInputRegex.exec(splitContent[2])?.[1] ?? "";
}

let tooling: ToolingThought = {
thought: thought,
action: action,
actionInput: actionInput
}

return tooling;
}
```

## 端到端 DSL 示例

### 阶段一:让 ChatGPT 与你学 DDD

说了,这么多我们来看一个结合我之前设计的 DSL 示例,即 [Fklang](https://github.com/feakin/fklang)

在 Fklang 中,我们采用下面的形式来表示 ContextMap:

```yaml
Expand All @@ -14,7 +85,7 @@ ContextMap TicketBooking {
}
```

但是,自己设计这样的 DSL 太累了,可以让 ChatGPT 来设计。在你开始之前,需要确认一下 ChatGPT 中的 DDD、DSL、事件风暴等的概念是否与你理解的一致。
但是,自己设计这样的 DSL 太累了,可以让 ChatGPT 来设计。在你开始之前,需要确认一下 ChatGPT 中的 DDD、DSL、事件风暴等的概念是否与你理解的一致。

第一个问题:`设计一个 DSL 来表示 DDD 里的 Context Map 。`

Expand Down Expand Up @@ -58,7 +129,7 @@ EventStorming:
展示一部分神奇的 DSL:
```yaml
```markdown
generate java-code from-domain-model
target-package: com.example.movieticket.order
source-model: order-domain-model
Expand All @@ -75,18 +146,3 @@ generate java-code from-domain-model
现在,有意思的地方来,有了上面的一系列 DSL 之后,我们就可以接入到代码系统中。
### 阶段三:代码生成与低代码
只要 ChatGPT 上下文能力足够强壮,或者支持 LoRA 式的插件模式,我们就能实现从需要到现有的任何系统中。
第一个问题:为电影订票系统设计一个 DDD 风格 Java 工程的代码目录结构。
第二个问题:结合 Spring 设计一下购票流程的 RESTful API
……
有点懒,就先这样吧。后面的部分,就可以结合 GitHub Copilot 去实现了。
### 小结
结合 Prompt 编程,低代码到了一定的成熟度,我们就可以发现更好玩的东西:实时的软件生成
68 changes: 29 additions & 39 deletions src/2-llm-intergration-patterns.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,6 @@
# LLM 集成模式

和国内外的很多公司一样,在 Open AI 公司开放了 ChatGPT API 接口之后,我们也在探索如何去结合到业务中。而在探索的过程中,我们发现了一个问题,大部分的业务人员并不了解 AI 的能力,所以我们开源构建了 ClickPrompt,以使 “普通人” 能更方便地了解 ChatGPT。

围绕于我们短暂的开发旅程,我们思考了一些有意思的 ChatGPT 相关的集成模式,这些模式方便我们后续在国内的其它 LLM(大语言模型)中使用。

于是,便邀请了 ChatGPT 和我(Phodal)写了一篇文章 来进行总结。

如果你也对 Prompt 工程感兴趣,欢迎加入 ClickPrompt:[https://github.com/prompt-engineering](https://github.com/prompt-engineering)

## ClickPrompt 的 ChatGPT 集成

须知:在国内的服务器,似乎无法集成 OpenAI,所以需要一个国外的服务器。

在开发 ClickPrompt 的过程中,我们试着做了一些有意思的事件:

- 提供简单的问题(Prompt)模板,以方便新手学习。
- 提供繁杂问题的模板,可以一步步学习如何提问。
- 集成了 HuggingFace,可以实时在线生成 Stable Diffusion 图片。
- 结合 ChatGPT 来自动生成 Stable Diffusion 的 Prompt。
- 独立的 ChatGPT 聊天页面。
- 探索更多的 Prompt 工程方式。

我们依旧和许多团队一样在探索更多的可能性。
围绕于我们的开发旅程,我们思考了一些有意思的 ChatGPT 相关的集成模式,这些模式方便我们后续在国内的其它 LLM(大语言模型)中使用。

## 无限的场景,无限的可能

Expand All @@ -42,66 +21,77 @@

### **生成器模式**

- 使用 prompt 生成器生成特定输入,提高 ChatGPT 回答准确度和全面性。例如,使用 prompt 生成器生成法律咨询问题,ChatGPT 回答法律问题;在问答领域中,使用预定义的问题模板作为输入,生成相应的回答,能够提高 ChatGPT 的回答准确度和全面性。
> 使用 prompt 生成器生成特定输入,提高 ChatGPT 回答准确度和全面性。例如,使用 prompt 生成器生成法律咨询问题,ChatGPT
> 回答法律问题;在问答领域中,使用预定义的问题模板作为输入,生成相应的回答,能够提高 ChatGPT 的回答准确度和全面性。
生成器模式是我们最早设计的强化 Prompt 场景,它非常容易实现,只需要预设好一些模板,就能很好地工作。

### 系统集成模式

- 将 ChatGPT 与其他系统集成,实现数据交换和通信。例如,将 ChatGPT 与电子邮件系统集成,自动回复邮件;在电商平台中,ChatGPT 可以与订单系统穿插,以便处理用户的购物咨询和下单请求。
> 将 ChatGPT 与其他系统集成,实现数据交换和通信。例如,将 ChatGPT 与电子邮件系统集成,自动回复邮件;在电商平台中,ChatGPT
> 可以与订单系统穿插,以便处理用户的购物咨询和下单请求。
在 ClickPrompt 中,我们通过集成 HuggingFace 来实现,一个简单的场景,生成图形的功能。
在 ClickPrompt 中,我们通过集成 HuggingFace 来实现,一个简单的场景,生成图形的功能。

### **管道模式**:

- 在 ChatGPT 中定义处理流程,对每个输入进行处理并生成输出。例如,将 ChatGPT 用于自动化客服,对用户的问题进行分类和回复;在客服领域中,ChatGPT 可以通过管道模式实现意图识别、实体识别、回答生成等一系列流程。
> 在 ChatGPT 中定义处理流程,对每个输入进行处理并生成输出。例如,将 ChatGPT 用于自动化客服,对用户的问题进行分类和回复;在客服领域中,ChatGPT
> 可以通过管道模式实现意图识别、实体识别、回答生成等一系列流程。
在 ClickPrompt 中,我们预期通过 ChatGPT 来与人类交互,对每一步的输入和输出校正,进而完善系统的架构设计。

### **目标引导模式**

将对话分成场景,并为每个场景设定目标,引导 ChatGPT 生成相关回答。例如,将 ChatGPT 用于旅游规划,引导用户选择目的地并提供相关信息;在旅游领域中,ChatGPT 可以根据场景(如酒店预订、景点推荐)来生成相应的回答。
将对话分成场景,并为每个场景设定目标,引导 ChatGPT 生成相关回答。例如,将 ChatGPT 用于旅游规划,引导用户选择目的地并提供相关信息;在旅游领域中,ChatGPT
可以根据场景(如酒店预订、景点推荐)来生成相应的回答。

在 ClickPrompt 中,我们通过 ChatGPT 来生成 Stable Diffusion 的 tag,进而完善文本到图形的转换。

### **协同模式**

- 将 ChatGPT 与其他 AI 技术集成,生成更人性化的回答。例如,将 ChatGPT 与情感分析技术集成,生成更符合用户情感的回答;在语音助手中,ChatGPT 可以与语音识别技术协同,能够更好地理解用户的语义和情感,并生成更加自然的回答。
> 将 ChatGPT 与其他 AI 技术集成,生成更人性化的回答。例如,将 ChatGPT 与情感分析技术集成,生成更符合用户情感的回答;在语音助手中,ChatGPT
> 可以与语音识别技术协同,能够更好地理解用户的语义和情感,并生成更加自然的回答。
在 ClickPrompt 中,我们还想做的事情就是通过接入语音功能,来实现语音直转文本,进而输出。

### **迁移学习模式:**

- 通过将已经学习到的知识应用于新任务中,来改善模型性能和加快学习速度的一种机器学习方法。例如,将预先训练好的 ChatGPT 模型与公司或行业特定的语料库进行微调,以适应特定领域和任务的需求,从而快速构建智能客服机器人。
> 通过将已经学习到的知识应用于新任务中,来改善模型性能和加快学习速度的一种机器学习方法。例如,将预先训练好的 ChatGPT
> 模型与公司或行业特定的语料库进行微调,以适应特定领域和任务的需求,从而快速构建智能客服机器人。
由于 ChatGPT 训练周期的问题,总存在一些知识老旧的问题。因为在日常的场景中,我们也可以让 ChatGPT 中阅读一些文章,围绕于这些文章,输出新的洞见。

### **混合模式**:

- 将多个不同类型的模型组合,提高回答准确度和全面性。在问答领域中,将检索模型、知识图谱模型和生成模型混合使用,可以提高回答的准确度和覆盖范围。
> 将多个不同类型的模型组合,提高回答准确度和全面性。在问答领域中,将检索模型、知识图谱模型和生成模型混合使用,可以提高回答的准确度和覆盖范围。
我们还在寻找合适的案例,来结合这种模式。

### **转换器模式**:

- 使用转换器将输入转换为 ChatGPT 可理解的格式,提高ChatGPT对输入的理解和处理能力。例如,使用语音转换器将语音转换为 ChatGPT 可理解的文本格式,从而实现语音交互。
> 使用转换器将输入转换为 ChatGPT 可理解的格式,提高ChatGPT对输入的理解和处理能力。例如,使用语音转换器将语音转换为 ChatGPT
> 可理解的文本格式,从而实现语音交互。
简单来说,就是将步骤转换为格式,通过 ChatGPT 进行格式转换,如在我们的例子中,有一个使用 ChatGPT 实现 i18n 的代码转换。

### **强化学习模式**(ChatGPT 推荐)

基于增量学习的 ChatGPT: 使用增量学习技术对ChatGPT进行训练和调整,提高回答准确度和全面性。例如,将ChatGPT用于股票投资,使用增量学习技术对ChatGPT进行训练和调整,从而实现更精准的股票推荐和投资建议。
基于增量学习的 ChatGPT

**基于深度强化学习的 ChatGPT:** 使用深度强化学习技术优化ChatGPT的响应速度和回答质量,提高对话质量。例如,将ChatGPT用于智能家居,使用深度强化学习技术优化ChatGPT的响应速度和回答质量,从而实现更快速、准确的家居控制和交互体验
> 使用增量学习技术对ChatGPT进行训练和调整,提高回答准确度和全面性。例如,将ChatGPT用于股票投资,使用增量学习技术对ChatGPT进行训练和调整,从而实现更精准的股票推荐和投资建议
### **验证模式**(ChatGPT 推荐)
**基于深度强化学习的 ChatGPT**

**安全模式:** 为保护用户隐私和系统安全,对敏感信息进行脱敏、加密等处理,防止恶意攻击和数据泄露。例如,在医疗健康领域中,ChatGPT 用于病例诊断和病情分析时,需要对患者隐私信息进行保护。
> 使用深度强化学习技术优化ChatGPT的响应速度和回答质量,提高对话质量。例如,将ChatGPT用于智能家居,使用深度强化学习技术优化ChatGPT的响应速度和回答质量,从而实现更快速、准确的家居控制和交互体验。
### **验证模式**(ChatGPT 推荐)

**自我监督模式**: 利用 ChatGPT 自身生成的回答作为监督信号,对模型进行自我监督和调整,提高回答准确度。例如,将 ChatGPT 用于自动化翻译,利用自我监督模式对模型进行调整,从而实现更准确的翻译结果。
**安全模式**

## 其它
> 为保护用户隐私和系统安全,对敏感信息进行脱敏、加密等处理,防止恶意攻击和数据泄露。例如,在医疗健康领域中,ChatGPT
> 用于病例诊断和病情分析时,需要对患者隐私信息进行保护。
硅基生物在这一波中,挺好玩的。
**自我监督模式**

欢迎来加入我们探索无限可能:[https://github.com/prompt-engineering](https://github.com/prompt-engineering)
> 利用 ChatGPT 自身生成的回答作为监督信号,对模型进行自我监督和调整,提高回答准确度。例如,将 ChatGPT
> 用于自动化翻译,利用自我监督模式对模型进行调整,从而实现更准确的翻译结果。
18 changes: 2 additions & 16 deletions src/2-workflow-and-application-design.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,8 @@
# 工作流与应用设计
# Workflow + AI 2.0

## ChatFlow
## 高质量流程

**太长不读版**

我们抽取 ClickPrompt 出了的核心能力,构建了一个新的框架:ChatFlow —— 一个围绕 ChatGPT 构建的简易工作流引擎。简单来说:将做事的套路工具化,结合 AI 进行自动化。

比如说,我们在开发 ClickPrompt 的过程中,结合了 ChatGPT 来完成一些工作。我们便尝试按工作流的方式与 ChatGPT 结合到一起,开发者只需要简单地 Click,就能使用 AI。工作流如下图所示:

![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/89d484ed-5337-4a11-80d9-9356ef818dc2/Untitled.png)

GitHub 项目: [https://github.com/prompt-engineering/chat-flow](https://github.com/prompt-engineering/chat-flow)

在线示例:[https://www.clickprompt.org/zh-CN/click-flow/](https://www.clickprompt.org/zh-CN/click-flow/) (由于精力有限,暂时没有部署在新的环境)

技术栈:Next.js + React + Vercel + 低代码 + 工作流

PS:如果你也有精力、有兴趣,擅长低代码与工作流,欢迎来加入我们,主导这个项目。

## ChatFlow 的诞生动机:人类设计高质量流程 + AI 完成细节

Expand Down

0 comments on commit 3f62d0b

Please sign in to comment.