fast-tavern 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,31 +1,27 @@
1
1
  # fast-tavern
2
2
 
3
- fast-tavern 是一个**与框架无关**(不依赖 Vue/Pinia/浏览器 API)的“提示词处理引擎(prompt engine)”。
3
+ **Repo**: [Lianues/fast-tavern](https://github.com/Lianues/fast-tavern)
4
4
 
5
- 它把:**预设(Preset)/ 世界书(Worldbook)/ 角色卡(Character)/ 正则(Regex)/ 宏(Macros)/ 聊天记录(History)**
6
- 按固定规则组装,并输出清晰的 4 个阶段视图,方便预览与调试:
5
+ fast-tavern 是一个**与框架无关**的“提示词组装与调试引擎(prompt engine)”。
7
6
 
8
- - 原始视图(raw)
9
- - 宏前正则完视图(afterPreRegex)
10
- - 宏执行完视图(afterMacro)
11
- - 宏后正则完视图 / 最终视图(afterPostRegex)
7
+ 它以 `st-api-wrapper` 的**新格式字段**为准,把:
8
+ **预设(Preset)/ 世界书(WorldBook)/ 角色卡(CharacterCard)/ 正则脚本(RegexScriptData)/ 宏与变量 / 聊天历史(ChatMessage)**
9
+ 按固定流程组装,并输出**可调试的多阶段结果**(便于 UI 预览与定位问题):
10
+
11
+ - `raw`
12
+ - `afterPreRegex`(为兼容保留:当前等同 `raw`)
13
+ - `afterMacro`
14
+ - `afterPostRegex`(最终)
12
15
 
13
16
  ---
14
17
 
15
18
  ## 功能概览
16
19
 
17
- - **预设 Prompt Blocks 组装**:relative blocks 作为骨架,fixed blocks 按 depth 插入到聊天历史中
18
- - **世界书触发与注入**:支持 always / conditional;支持 `<<keywords:a,b>>`;支持正则 condition
19
- - **正则规则管道**:`before_macro` `macro` → `after_macro`,并支持按 `target` / `view` 过滤
20
- - **宏替换**:`{{char}}`、`{{user}}`、`<<user>>`、`<<char>>` 以及任意 `{{key}}` / `<<key>>`
21
- - **自动宏提取**:从 `character.character_name` 和 `persona.persona_name` 自动提取 char/user 宏
22
- - **变量系统**:支持局部/全局变量,在宏阶段线性执行(同时支持 `{{}}` 和 `<<>>` 格式)
23
- - `{{getvar::name}}` / `<<getvar::name>>` - 获取局部变量
24
- - `{{setvar::name::value}}` / `<<setvar::name::value>>` - 设置局部变量
25
- - `{{getglobalvar::name}}` / `<<getglobalvar::name>>` - 获取全局变量
26
- - `{{setglobalvar::name::value}}` / `<<setglobalvar::name::value>>` - 设置全局变量
27
- - **多渠道聊天格式输入/输出**:Gemini / OpenAI / Simple / Tagged / Text
28
- - **输出多阶段结果**:raw、afterPreRegex、afterMacro、afterPostRegex(并提供逐条 perItem 明细)
20
+ - **预设组装**:`position=relative` 作为骨架;`position=fixed``depth/order` 注入到 `chatHistory`
21
+ - **世界书触发与注入**:`always/keyword/vector`(vector 通过 hook);支持概率与递归控制
22
+ - **正则脚本**:对齐 `RegexScriptData`(targets/view/trim/{{match}}/macroMode/minDepth/maxDepth)
23
+ - **宏与变量**:宏保持简单;变量对齐 `local/global` 且值为 `any`
24
+ - **输出多阶段结果**:`stages.tagged/internal/output/perItem`
29
25
 
30
26
  ### system role 策略
31
27
 
@@ -54,171 +50,78 @@ npm i fast-tavern
54
50
  ### 本地安装(开发期)
55
51
 
56
52
  ```bash
57
- npm i ./packages/fast-tavern
53
+ # 在你的项目中
54
+ npm i ../fast-tavern
58
55
  ```
59
56
 
60
- 构建(发布前):
57
+ ---
58
+
59
+ ## 开发与发布
60
+
61
+ ### 构建
61
62
 
62
63
  ```bash
63
- cd packages/fast-tavern
64
+ cd npm-fast-tavern
64
65
  npm i
65
66
  npm run build
66
67
  ```
67
68
 
69
+ ### 发布到 npm
70
+
71
+ 1. **更新版本号**:修改 `package.json` 中的 `version`。
72
+ 2. **构建项目**:执行 `npm run build`。
73
+ 3. **登录 npm**(若未登录):`npm login`。
74
+ 4. **执行发布**:`npm publish --access public`。
75
+
68
76
  ---
69
77
 
70
- ## 快速开始
78
+ ## 快速开始(最小示例)
71
79
 
72
80
  ```ts
73
81
  import { buildPrompt, History } from 'fast-tavern';
74
82
 
75
83
  const result = buildPrompt({
76
- preset, // PresetConfig JSON
77
- character, // CharacterCard JSON(可选)- 自动提取 char 宏
78
- persona, // PersonaCard JSON(可选)- 自动提取 user 宏
84
+ preset, // PresetInfo
85
+ character, // CharacterCard(可选)
79
86
  globals: {
80
- // 支持一次性传入多个 JSON 文件:
81
- // - worldbook.json({ name, entries })
82
- // - 或直接 entries 数组
83
- worldbooks,
84
-
85
- // 支持一次性传入多个 JSON 文件:
86
- // - RegexRule[]
87
- // - 或 { regex_rules: RegexRule[] }
88
- regexes
87
+ worldBooks,
88
+ regexScripts
89
89
  },
90
90
 
91
- // 聊天记录入口:推荐用 History.* 明确格式
91
+ // 聊天记录(ChatMessage[])
92
92
  history: History.openai([
93
93
  { role: 'system', content: 'You are a helpful assistant.' },
94
94
  { role: 'user', content: 'Hello' },
95
95
  { role: 'assistant', content: 'Hi!' }
96
96
  ]),
97
97
 
98
- // 正则视图:user_view / model_view
99
- view: 'model_view',
98
+ // 正则视图:user / model
99
+ view: 'model',
100
100
 
101
- // 宏变量(可选,会与 character/persona 自动提取的合并,显式传入的优先级更高)
102
- macros: { custom_var: 'value' },
101
+ // 宏变量(可选)
102
+ macros: { user: 'Bob' },
103
103
 
104
- // 局部变量初始值(可选)
105
- variables: { counter: '0', name: 'Alice' },
104
+ // 变量(any)
105
+ variables: { score: 1, cfg: { a: 1 } },
106
106
 
107
- // 全局变量初始值(可选,建议由调用方维护状态)
108
- globalVariables: { totalTurns: '10' },
109
-
110
- // 输出格式:gemini/openai/simple/text/tagged
107
+ // 输出格式:gemini/openai/text/tagged
111
108
  outputFormat: 'openai',
112
109
 
113
110
  // system 输出策略
114
111
  systemRolePolicy: 'keep'
115
112
  });
116
113
 
117
- // 多阶段(最推荐用于调试/预览)
118
- console.log(result.stages.tagged.raw);
119
- console.log(result.stages.tagged.afterPreRegex);
120
- console.log(result.stages.tagged.afterMacro);
121
- console.log(result.stages.tagged.afterPostRegex);
122
-
123
- // 最终输出(按 outputFormat 转换)
124
- console.log(result.stages.output.afterPostRegex);
125
-
126
- // 获取变量最终状态(用于持久化)
127
- console.log(result.variables.local); // 局部变量
128
- console.log(result.variables.global); // 全局变量
129
-
130
- // 更细粒度:逐条文本的阶段明细
131
- console.table(result.stages.perItem);
132
- ```
133
-
134
- ---
135
-
136
- ## 核心 API
137
-
138
- ### buildPrompt(params)
139
-
140
- `buildPrompt()` 是主入口:输入配置与聊天记录,输出多阶段提示词。
141
-
142
- 关键入参(摘选):
143
-
144
- - `preset: PresetConfig`:预设配置(prompts / regex_rules / world_book)
145
- - `character?: CharacterCard`:角色卡(可内嵌 world_book / regex_rules,自动提取 char 宏)
146
- - `persona?: PersonaCard`:用户人设卡(自动提取 user 宏)
147
- - `globals?: { worldbooks?: ..., regexes?: ... }`:全局世界书/正则(全局正则推荐直接传 rules 数组)
148
- - `history: HistoryInput | MessageInput`:聊天记录(多格式)
149
- - `view: 'user_view' | 'model_view'`:正则视图
150
- - `macros?: Record<string,string>`:宏变量表(会与 character/persona 自动提取的合并)
151
- - `outputFormat?: 'gemini'|'openai'|'simple'|'text'|'tagged'`:输出格式
152
- - `systemRolePolicy?: 'keep'|'to_user'`:system 输出策略
153
- - `options?: { recentHistoryForWorldbook?: number; positionMap?: Record<string,string> }`
154
-
155
- 返回值重点字段:
156
-
157
- - `result.stages.tagged.*`:带 tag/target 的分段结果(最适合 UI 预览)
158
- - `result.stages.internal.*`:内部“类 Gemini”messages(Role: system/user/model)
159
- - `result.stages.output.*`:按 outputFormat 转换后的分阶段输出
160
- - `result.stages.perItem[]`:逐条文本的 raw/preRegex/macro/postRegex 对比
161
-
162
- ### History.*(推荐)
114
+ console.log(result.stages.tagged.afterPostRegex); // UI 预览最推荐
115
+ console.log(result.stages.output.afterPostRegex); // 最终输出
163
116
 
164
- 为了避免 `auto` 推断歧义,推荐用工厂函数创建明确格式的 history:
165
-
166
- ```ts
167
- import { History } from 'fast-tavern';
168
-
169
- History.gemini(geminiContents)
170
- History.openai(openaiMessages)
171
- History.simple(simpleMessages)
172
- History.tagged(taggedContents)
173
- History.text('...')
174
- History.auto(anyMessageInput)
117
+ console.log(result.variables.local);
175
118
  ```
176
119
 
177
- ### convertMessagesIn / convertMessagesOut
178
-
179
- 用于“渠道格式 ↔ 内部格式”的转换(不做 preset/worldbook/regex/macro 的组装与编译)。
180
-
181
- ```ts
182
- import { convertMessagesIn, convertMessagesOut } from 'fast-tavern';
183
-
184
- const { internal } = convertMessagesIn(openaiMessages, 'openai');
185
- const backToOpenAI = convertMessagesOut(internal, 'openai');
186
- ```
187
-
188
- > tagged 格式无法从 internal 无损恢复 tag/target,所以 **tagged 输出应使用 buildPrompt 的 `outputFormat:'tagged'`**。
189
-
190
- ---
191
-
192
- ## 数据模型(与 SillyTavern 风格接近)
193
-
194
- - `PresetConfig`:包含 `prompts: PromptBlock[]`、可选 `regex_rules`、可选 `world_book`
195
- - `WorldbookEntry`:包含 `mode`、`condition`、`position`、`depth`、`order` 等
196
- - `RegexRule`:包含 `targets`、`views`、`placement`(before/after macro)
197
-
198
- 具体字段请以类型定义为准:
199
-
200
- - `src/core/types.ts`
201
-
202
- ---
203
-
204
- ## 目录结构(便于分开调试)
205
-
206
- - 转换层(每种格式一个文件):`src/core/channels/*`
207
- - 功能模块(隔离实现):`src/core/modules/*`
208
- - `worldbook/`:条件触发与合并
209
- - `assemble/`:组装 tagged prompt list
210
- - `regex/`:合并规则、应用规则
211
- - `macro/`:宏替换
212
- - `pipeline/`:before_regex → macro → after_regex(并输出阶段)
213
- - `build/`:buildPrompt 总入口
214
-
215
- ---
216
-
217
- ## 常见用法建议
120
+ ## 文档
218
121
 
219
- 1. **做 UI 预览**:用 `result.stages.tagged.*`(带 tag/target,最直观)
220
- 2. **发给不同模型接口**:用 `outputFormat` 控制输出格式;如果下游不支持 system,设 `systemRolePolicy:'to_user'`,取 `result.stages.output.afterPostRegex`
221
- 3. **定位正则/宏导致的问题**:用 `result.stages.perItem` 对比每一条在各阶段的变化
122
+ - **格式与组装流程(详细)**:[`docs/FORMAT_ZH.md`](docs/FORMAT_ZH.md)
123
+ - **API 文档**:[`docs/API_ZH.md`](docs/API_ZH.md)
124
+ - **使用教程(详细示例)**:[`docs/GUIDE_ZH.md`](docs/GUIDE_ZH.md)
222
125
 
223
126
  ---
224
127