Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Beta89 #89

Merged
merged 89 commits into from
Apr 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
ea4bcc6
beta1
Hoshinonyaruko Jan 21, 2024
5002a28
beta2
Hoshinonyaruko Jan 21, 2024
969841e
beta3
Hoshinonyaruko Jan 21, 2024
a2989c2
beta4
Hoshinonyaruko Jan 21, 2024
611cd8b
beta5
Hoshinonyaruko Jan 21, 2024
dbad42b
beta6
Hoshinonyaruko Jan 21, 2024
4f8895e
beta7
Hoshinonyaruko Jan 21, 2024
30a9cab
beta8
Hoshinonyaruko Jan 21, 2024
461d879
beta9
Hoshinonyaruko Jan 21, 2024
c90c2ee
beta10
Hoshinonyaruko Jan 21, 2024
5227c32
beta11
Hoshinonyaruko Jan 21, 2024
8e14e56
beta12
Hoshinonyaruko Jan 21, 2024
6adfb7f
beta13
Hoshinonyaruko Jan 21, 2024
b04f6c0
beta14
Hoshinonyaruko Jan 21, 2024
649e740
beta15
Hoshinonyaruko Jan 21, 2024
d55cf29
beta16
Hoshinonyaruko Jan 21, 2024
1cc351e
beta16
Hoshinonyaruko Jan 21, 2024
f1a373e
beta19
Hoshinonyaruko Jan 21, 2024
cbf2fe1
beta20
Hoshinonyaruko Jan 21, 2024
3485bfc
beta21
Hoshinonyaruko Jan 21, 2024
3e3bb1a
beta22
Hoshinonyaruko Jan 21, 2024
2e4f3fa
beta23
Hoshinonyaruko Mar 29, 2024
f74075d
beta24
Hoshinonyaruko Mar 29, 2024
f3913cf
beta25
Hoshinonyaruko Mar 29, 2024
4cfb51a
beta27
Hoshinonyaruko Mar 30, 2024
d9b26c0
beta28
Hoshinonyaruko Mar 31, 2024
19da709
beta29
Hoshinonyaruko Mar 31, 2024
e06dcbf
merge
Hoshinonyaruko Mar 31, 2024
c76923e
beta30
Hoshinonyaruko Mar 31, 2024
9ae21da
beta31
Hoshinonyaruko Apr 1, 2024
4f333bc
merge
Hoshinonyaruko Apr 1, 2024
5acba8f
beta33
Hoshinonyaruko Apr 1, 2024
c637fcd
beta34
Hoshinonyaruko Apr 1, 2024
4e85b37
beta35
Hoshinonyaruko Apr 1, 2024
970948e
beta36
Hoshinonyaruko Apr 1, 2024
14271c3
beta37
Hoshinonyaruko Apr 1, 2024
6154d1a
beta38
Hoshinonyaruko Apr 1, 2024
d5be5e6
beta39
Hoshinonyaruko Apr 3, 2024
54afe18
beta40
Hoshinonyaruko Apr 3, 2024
0b71855
beta41
Hoshinonyaruko Apr 3, 2024
8c5f9a3
merge
Hoshinonyaruko Apr 3, 2024
cf752d4
beta42
Hoshinonyaruko Apr 3, 2024
3698824
beta43
Hoshinonyaruko Apr 3, 2024
1e9c189
beta44
Hoshinonyaruko Apr 3, 2024
2adb4ac
beta45
Hoshinonyaruko Apr 4, 2024
79eb713
beta45
Hoshinonyaruko Apr 4, 2024
064f0d0
beta45
Hoshinonyaruko Apr 4, 2024
5a4a59e
beta46
Hoshinonyaruko Apr 5, 2024
df30a32
beta46
Hoshinonyaruko Apr 5, 2024
c920893
beat48
Hoshinonyaruko Apr 7, 2024
3491d5d
beta49
Hoshinonyaruko Apr 8, 2024
575b2ca
beta50
Hoshinonyaruko Apr 8, 2024
4c4bbaa
beta51
Hoshinonyaruko Apr 8, 2024
2ea728b
beta52
Hoshinonyaruko Apr 8, 2024
82bf952
beta53
Hoshinonyaruko Apr 8, 2024
869685c
beta54
Hoshinonyaruko Apr 9, 2024
1f3646e
beta55
Hoshinonyaruko Apr 9, 2024
d6bbadf
beta57
Hoshinonyaruko Apr 10, 2024
fc5086c
beta58
Hoshinonyaruko Apr 10, 2024
602ff65
beta59
Hoshinonyaruko Apr 10, 2024
a82538d
Merge branch 'main' of https://github.com/Hoshinonyaruko/Gensokyo-llm…
Hoshinonyaruko Apr 10, 2024
6433600
beta61
Hoshinonyaruko Apr 10, 2024
9ce88b3
beta62
Hoshinonyaruko Apr 12, 2024
b53617b
beta63
Hoshinonyaruko Apr 12, 2024
ff64c69
beta63
Hoshinonyaruko Apr 12, 2024
b34885f
beta64
Hoshinonyaruko Apr 13, 2024
3658648
beta65
Hoshinonyaruko Apr 13, 2024
3307439
beta66
Hoshinonyaruko Apr 15, 2024
f15c422
beta67
Hoshinonyaruko Apr 17, 2024
518de35
beta70
Hoshinonyaruko Apr 18, 2024
a65f07d
beta71
Hoshinonyaruko Apr 18, 2024
59d07c7
beta72
Hoshinonyaruko Apr 18, 2024
a16ea64
beta72
Hoshinonyaruko Apr 18, 2024
08d5864
beta74
Hoshinonyaruko Apr 19, 2024
9b09401
beta75
Hoshinonyaruko Apr 19, 2024
b51e185
beta76
Hoshinonyaruko Apr 20, 2024
c978654
beta77
Hoshinonyaruko Apr 21, 2024
6aa9f33
beta78
Hoshinonyaruko Apr 22, 2024
7b84a9d
beta79
Hoshinonyaruko Apr 25, 2024
4b96807
beta80
Hoshinonyaruko Apr 25, 2024
9b97146
beta81
Hoshinonyaruko Apr 25, 2024
f481e85
beta82
Hoshinonyaruko Apr 29, 2024
cb33ba5
beta83
Hoshinonyaruko Apr 29, 2024
7dbe4d5
beta85
Hoshinonyaruko Apr 29, 2024
2fb67a2
beta86
Hoshinonyaruko Apr 29, 2024
20f26c1
beta87
Hoshinonyaruko Apr 29, 2024
3146232
beta88
Hoshinonyaruko Apr 29, 2024
cbf731b
beta89
Hoshinonyaruko Apr 29, 2024
cc8bb49
Merge branch 'main' into beta89
Hoshinonyaruko Apr 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion applogic/gensokyo.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ func (app *App) GensokyoHandler(w http.ResponseWriter, r *http.Request) {
}
}

// MARK: 提示词之间流转 匹配关键字 可能有BUG
app.ProcessQA(message.UserID, message.Message.(string), promptstr)

// 提示词之间流转 达到信号量
markType := config.GetPromptMarkType(promptstr)
if (markType == 0 || markType == 1) && (CustomRecord.PromptStrStat-1 <= 0) {
Expand Down Expand Up @@ -1006,7 +1009,7 @@ func (app *App) GensokyoHandler(w http.ResponseWriter, r *http.Request) {
}
}
// 处理故事模式
app.ProcessAnswer(message.UserID, response, promptstr)
app.ProcessQA(message.UserID, response, promptstr)
// 清空之前加入缓存
// 缓存省钱部分 这里默认不被覆盖,如果主配置开了缓存,始终缓存.
if config.GetUseCache() {
Expand Down
6 changes: 3 additions & 3 deletions applogic/promptstr.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ func fieldIndex(field string) int {
return -1
}

func (app *App) ProcessAnswer(userID int64, answer string, promptStr string) {
func (app *App) ProcessQA(userID int64, QorA string, promptStr string) {
// 根据 promptStr 获取 PromptMarkType
markType := config.GetPromptMarkType(promptStr)

Expand All @@ -138,9 +138,9 @@ func (app *App) ProcessAnswer(userID int64, answer string, promptStr string) {
}
codes := strings.Split(parts[1], "-")

// 检查 answer 是否包含数组中的任意一个成员
// 检查 QorA 是否包含数组中的任意一个成员
for _, code := range codes {
if strings.Contains(answer, code) {
if strings.Contains(QorA, code) {
// 当找到匹配时,构建新的 promptStr
newPromptStr := parts[0]

Expand Down
48 changes: 28 additions & 20 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ settings:

## 多配置文件支持

### 请求 `/gensokyo` 端点
## 请求 `/gensokyo` 端点

当向 `/gensokyo` 端点发起请求时,系统支持附加 `prompt` 参数和 `api` 参数。`api` 参数允许指定如 `/conversation_ernie` 这类的完整端点。启用此功能需在配置中开启 `allapi` 选项。

Expand All @@ -126,7 +126,7 @@ settings:
GET /gensokyo?prompt=example&api=/conversation_ernie
```

### 请求 `/conversation` 端点
## 请求 `/conversation` 端点

与 `/gensokyo` 类似,`/conversation` 端点支持附加 `prompt` 参数。

Expand All @@ -135,11 +135,11 @@ GET /gensokyo?prompt=example&api=/conversation_ernie
GET /conversation?prompt=example
```

### `prompt` 参数解析
## `prompt` 参数解析

提供的 `prompt` 参数将引用可执行文件目录下的 `/prompts` 文件夹中相应的 YAML 文件(例如 `xxxx.yml`,其中 `xxxx` 是 `prompt` 参数的值)。

### YAML 配置文件
## YAML 配置文件

YAML 文件的配置格式请参考 **YAML配置文件格式** 部分。以下列出的配置项支持在请求中动态覆盖:

Expand All @@ -165,30 +165,29 @@ YAML 文件的配置格式请参考 **YAML配置文件格式** 部分。以下

---

### 故事模式(测试中)
## 故事模式(测试中 设计中)

本项目实践了一个基础的,实验性的,提示词和上下文构造方式,基于本项目实现的多配置文件,本项目设计了几个额外的参数,结合数据库储存每个用户的状态,

实现了一种简易的文本控制流,用于生成分支故事,交互式故事格式,参考了一些知名项目的设计思路,(参考部分)

实现了让用户在多个提示词中,按照一些条件,有顺序,可选择的,在多套提示词中进行流转,实现类似文字恋爱游戏的非连续性多支线的故事剧情。

有关的参数,
有关的参数,思路来自**Inklewriter**的**ink**语言,一种用于描述非ai分支式故事的语言。将其与大模型ai进行了结合和简化。需要一定的学习,掌握后可以编写ai故事。

- [x] promptMarkType : 0
- [x] promptMarksLength : 1
- [x] promptMarks : ["去逛街路上"]
- [x] promptMarks : ["去逛街路上","在家准备"] #当promptMarkType==0 比较简单,达到promptMarksLength就会随机一个分支进行跳转
- [x] promptMarks : ["去逛街路上:坐车-走路-触发","在家准备:等一下-慢慢-准备"] #当promptMarkType==1 :后 是关键词,Q和A包含任意关键词就会跳转到 去逛街路上.yml 这个分支
- [x] enhancedQA : true
- [x] promptChoicesQ: ["1:回家吧/我累了/不想去了/-我们打车去/快点去/想去/早点-我们走着去/不着急-等下-拉手"]
- [x] promptChoicesA: ["1:饿/我想吃饭/-难受/哄哄我"]
- [x] switchOnQ : ["1:不想/故事退出分支"]
- [x] switchOnA : ["1:时间不早了/晚上分支"]
- [x] exitOnQ : ["1:退出/忘了吧/重置/无聊"]
- [x] promptChoicesQ: ["1:回家吧/我累了/不想去了/-我们打车去/快点去/想去/早点-我们走着去/不着急-等下-拉手"] #当用户本轮包含了我累了、不想去了,本轮用户Q会被叠加(回家吧)
- [x] promptChoicesA: ["1:饿/我想吃饭/-难受/哄哄我"] #当AI本轮回复包含了,我想吃饭,本轮AI回复会被附加(饿),如果希望无条件附加,可以在末尾多加一个/,饿这个分支就是多加了一个/
- [x] switchOnQ : ["1:故事退出分支/不想/累了-下一个分支/想/不累"] #和promptMarks一样,可选,比promptMarks更具体,区分了Q和A,以及轮次1:
- [x] switchOnA : ["1:晚上分支/时间不早了"]
- [x] exitOnQ : ["1:退出/忘了吧/重置/无聊"] #捕获关键字来实现退出剧情,也可以使用全局的退出指令词。
- [x] exitOnA : ["1:退出/我是一个AI/我是一个人工/我是一个基于"]
- [x] enhancedPromptChoices: true

设计一个数组,可以修改当前附加到用户的当前Q的部分,默认是最后一个Q,但是也可以是多个。多个的话,可以自己指定1: 2: 3:做渐进式。

- [x] enhancedPromptChoices: true #promptChoicesQA switchOnQA exitOnQA的语法,false时是随机模式 1:回家吧-不回家-原地休息 没有后方的/,随机一个分支跳转。true是具有关键词条件 1:回家吧/a/b/c-不回家/a/b/c

含义解释,以上参数均位于多配置文件的settings部分,你可以决定每个场景的提示词长度,每个场景的长度promptMarksLength,来控制剧情的颗粒度。

故事模式触发方式一,中间件控制,需要使用支持onebotv11标准的机器人框架和ob11插件应用端,以及本项目(3者联用),本项目面向的是有一定开发和试错能力的对话机器人开发者。
Expand Down Expand Up @@ -231,18 +230,27 @@ switchOnQ代表在Q中寻找到匹配文本时切换当前分支,A同理,其语

exitOnQ需要enhancedPromptChoices=true,其实enhancedPromptChoices最好就是true的,其/左侧固定为退出(这里任意,右侧是触发词,退出没有具体作用)

promptMarks和switchOnQ、switchOnA在功能上是相同的,都是根据关键字跳转分支,promptMarks先执行,不分轮次不分QA,switchOnQ和switchOnA更具体,区分Q和A,区分轮次,实现细节跳转。

## 为什么采用文本控制流而不是ai-agent?

配置控制流简单直观,通过配置文件来管理对话逻辑,配置文件易于维护,非技术人员,如剧情编写者,可以直接学习配置文件规则,修改配置文件来更新对话逻辑,不需要编程知识。

剧情确定性高:给定相同的输入和配置,剧情走向是大体一致的,这对于确保对话剧情的连贯性和可预测性非常重要。

成本低,对上下文进行巧妙组合和替换,而不是多个ai同时处理,与普通对话消耗几乎等量的token,省钱。

速度快,像生成普通对话QA一样生成结果,像写游戏脚本一样编写剧情。

适用于个体开发者和小型开发团队的低成本ai故事、小说方案,低成本,高速度,高可控,效果随模型和提示词效果提升而直接提升。

对于对话剧情聊天场景,如果剧情较为固定,对话路径预设,且更新频率不高,使用配置控制流更适合,因为它提供了高度的可控性和易于理解的管理方式。

如果对话系统需要高度的互动性和个性化,或者剧情变化复杂,需要根据用户的具体反馈和行为动态调整,那么使用基于AI的agent方案可能更合适,它需要更高的技术投入和维护成本。

---

### 终结点
## 终结点

本节介绍了与API通信的具体终结点信息。

Expand All @@ -251,7 +259,7 @@ exitOnQ需要enhancedPromptChoices=true,其实enhancedPromptChoices最好就是t
| URL | `http://localhost:46230/conversation` |
| 方法 | `POST` |

### 请求参数
## 请求参数

客户端应向服务器发送的请求体必须为JSON格式,以下表格详细列出了每个字段的数据类型及其描述。

Expand All @@ -261,7 +269,7 @@ exitOnQ需要enhancedPromptChoices=true,其实enhancedPromptChoices最好就是t
| `conversationId` | String | 当前对话会话的唯一标识符 |
| `parentMessageId` | String | 与此消息关联的上一条消息的标识符 |

#### 请求示例
## 请求示例

下面的JSON对象展示了向该API终结点发送请求时,请求体的结构:

Expand All @@ -277,7 +285,7 @@ exitOnQ需要enhancedPromptChoices=true,其实enhancedPromptChoices最好就是t

---

#### 返回值示例
## 返回值示例

成功响应将返回状态码 `200` 和一个JSON对象,包含以下字段:

Expand Down
Loading