# 效率工具

有的时候玩一些游戏的时候会感觉赶路或者动画非常无聊,想要加速(比如《纸间密隙》的走路就慢的一批,还有比如《少前2》的战棋播动画,虽然官方给了最高3倍速,但是还是很慢)。

但是使用 CE 修改器的加速精灵却失效了,在网上找到了解决办法,在这里记录一下:

解决办法

下面几个依次尝试就好了,一般第一个就能解决问题:

关闭垂直同步,在游戏设置中关闭垂直同步选项。 关闭全屏模式,在游戏设置中将游戏改为窗口模式。 关闭V-Sync,在游戏设置中关闭V-Sync选项。 关闭帧生成功能/DLSS,在游戏设置中关闭帧生成功能或DLSS选项。

为什么是垂直同步

垂直同步(V-Sync)是一种图形渲染技术,用于防止画面撕裂和卡顿现象。它通过将游戏的帧率限制在显示器的刷新率范围内来实现这一点。 当垂直同步开启时,游戏的帧率会被锁定在显示器的刷新率(通常是60Hz或144Hz)上,这意味着游戏的帧率不会超过显示器的刷新率。

因此,当CE修改器的加速精灵试图加速游戏时,游戏的帧率可能会被锁定在显示器的刷新率上,从而导致加速效果失效。

阅读全文 »

关卡1-1 我 无 (看到半散的织机)这是...? 关卡1-2 农民B 失望 今早发现几个部件掉落了... 关卡1-3 农民B 失望 老朽试着装回去,却总不对劲... 关卡1-4 我 思考 让在下看看...(观察散落部件) 关卡1-5 脑海声音 无 "此织机之理,重在力之传导..." 关卡1-6 我 惊讶 !? 关卡1-7 黄道娘 无 (虚影显现)"老身黄氏..." 关卡1-8 黄道娘 思考 "织机运作,如流水行云..." 关卡1-9 黄道娘 无 "踏力传至经线,引梭穿纬..." 关卡1-10 黄道娘 无 "各部件相承,环环相扣..." 关卡1-11 黄道娘 思考 "观其形,思其势..." 关卡1-12 我 开心 原来如此! 关卡1-13 我 思考 (走向织机)让我试试...

帮我优化一下文案,要求如下: 1. 表情只能在下面几个之间选择:失望/思考/无/开心/不满/惊讶/痛苦 2. 不能够出现未出现过的人物 3. 对话需要注意人物形象 4. 可以增加对话数量 5. 以表格形式给我 6. 对话内容需要有逻辑性,不能出现不符合逻辑的对话 7. 主角使用现代风格,其他角色使用偏文言白话的风格 8. 在脑内发生的对话使用""括起来,其他对话则不需要括起来

请按照以下步骤,一步步来: 1. 分析对话核心内容 2. 尝试分析环境背景,补充背景细节,考虑人物处境 3. 分析人物形象,推测他们对话风格,性格等 4. 优化文案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
// 内联CSS样式
const css = `
<style>
.obsidian-card-system {
--column-count: 3;
--filter-bar-bg: var(--background-secondary);
--filter-border: var(--background-modifier-border);
}

.toolbar {
background: var(--filter-bar-bg);
padding: 1rem;
border-radius: 8px;
margin-bottom: 1.5rem;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
position: sticky;
top: 0;
z-index: 100;
}

.filter-group {
display: flex;
flex-direction: column;
gap: 0.5rem;
}

.multiselect {
max-height: 120px;
overflow-y: auto;
border: 1px solid var(--filter-border);
border-radius: 4px;
padding: 0.5rem;
}

.layout-controls {
display: flex;
gap: 1rem;
align-items: center;
}

.card-container {
display: grid;
grid-template-columns: repeat(var(--column-count), 1fr);
gap: 1.5rem;
transition: all 0.3s ease;
}

.category-columns {
grid-template-columns: none;
display: flex;
gap: 2rem;
overflow-x: auto;
padding-bottom: 1rem;
}

.category-column {
min-width: 300px;
flex: 1;
}

.category-title {
font-size: 1.2em;
margin-bottom: 1rem;
padding: 0.5rem 1rem;
background: var(--color-base-30);
border-radius: 6px;
}

.obs-card {
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 12px;
padding: 1.2rem;
transition: all 0.2s ease;
cursor: pointer;
break-inside: avoid;
}

.obs-card:hover {
transform: translateY(-3px);
box-shadow: 0 6px 12px rgba(0,0,0,0.08);
}

.card-title {
font-size: 1.3em;
margin-bottom: 0.8rem;
color: var(--text-accent);
border-bottom: 2px solid currentColor;
padding-bottom: 0.3rem;
}

.meta-line {
display: flex;
gap: 0.8rem;
margin-bottom: 1rem;
font-size: 0.9em;
}

.category-badge {
background: var(--color-green-rgb);
color: black;
padding: 2px 8px;
border-radius: 6px;
}

.tag-item {
background: var(--background-secondary);
padding: 2px 8px;
border-radius: 12px;
font-size: 0.85em;
}

.card-content {
line-height: 1.7;
color: var(--text-normal);
}

.card-content p {
margin: 0.6em 0;
}

.internal-link {
color: var(--text-accent);
border-bottom: 1px dashed currentColor;
text-decoration: none !important;
}

.obs-image {
max-width: 100%;
height: auto;
border-radius: 8px;
margin: 1rem 0;
background: var(--background-secondary);
padding: 4px;
}

.image-error {
border: 2px dashed var(--text-error);
padding: 1rem;
text-align: center;
color: var(--text-error);
}
</style>
`;

class CardSystem {
constructor() {
this.state = {
categoryFilter: null,
tagFilters: new Set(),
columns: 3,
groupByCategory: false
};
}

setFileName(fileName) {
this.fileName = fileName;
return this;
}

fileName = "AllItems.md";
async init() {
this.dbFile = app.vault.getAbstractFileByPath(this.fileName);
if (!this.dbFile) {
dv.paragraph("❌ 数据库文件未找到");
return;
}

try {
this.rawContent = await app.vault.cachedRead(this.dbFile);
this.cards = this.parseCards();
this.update();
} catch (error) {
dv.paragraph(`❌ 读取文件失败: ${error.message}`);
}
}

parseCards() {
return this.rawContent.split(/^## /gm).slice(1).map(section => {
const lines = section.split('\n');
const header = lines[0].trim();
const metadata = { tags: [], category: null };
let contentLines = [];

lines.slice(1).forEach(line => {
if (line.startsWith('tags::')) {
metadata.tags = line.replace('tags::', '').trim().split(/,\s*/);
} else if (line.startsWith('category::')) {
metadata.category = line.replace('category::', '').trim();
} else if (line.trim()) {
contentLines.push(line);
}
});

return {
title: header,
...metadata,
content: this.renderMarkdown(contentLines.join('\n')),
visible: true
};
});
}

renderMarkdown(content) {
return content
.replace(/^#(#+) (.*)$/gm, (_, level, text) => `<h${level.length + 1}>${text}</h${level.length + 1}>`)
.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>')
.replace(/\*(.*?)\*/g, '<em>$1</em>')
.replace(/!\[\[(.*?)\]\]/g, (_, img) => this.resolveImage(img))
.replace(/\[\[(.*?)\]\]/g, '<a href="#$1" class="internal-link">$1</a>')
.replace(/```([\s\S]*?)```/g, '<pre><code>$1</code></pre>')
.replace(/`([^`]+)`/g, '<code>$1</code>')
.replace(/([^\n]+)\n/g, '<p>$1</p>');
}

resolveImage(filename) {
const path = this.getImagePath(filename);
return path
? `<img src="${path}" alt="${filename}" class="obs-image" onerror="this.classList.add('image-error')">`
: `<div class="image-error">图片未找到: ${filename}</div>`;
}

getImagePath(filename) {
const folders = [
app.vault.config.attachmentFolderPath || '',
'Attachments/',
'Assets/',
''
];

for (const folder of folders) {
const fullPath = folder ? `${folder}/${filename}` : filename;
const file = app.vault.getAbstractFileByPath(fullPath);
if (file) return app.vault.getResourcePath(file);
}
return null;
}

applyFilters() {
this.cards.forEach(card => {
const tagMatch = this.state.tagFilters.size === 0 ||
card.tags.some(t => this.state.tagFilters.has(t));

const categoryMatch = !this.state.categoryFilter ||
card.category === this.state.categoryFilter;

card.visible = tagMatch && categoryMatch;
});
}

renderToolbar() {
const categories = [...new Set(this.cards.map(c => c.category))].filter(Boolean);
const allTags = [...new Set(this.cards.flatMap(c => c.tags))].filter(Boolean);

return `
<div class="toolbar">
<div class="filter-group">
<label>分类筛选:</label>
<select class="category-select"
onchange="cardSystem.state.categoryFilter = this.value === '' ? null : this.value; cardSystem.update()">
<option value="">全部</option>
${categories.map(c => `
<option value="${c}" ${this.state.categoryFilter === c ? 'selected' : ''}>${c}</option>
`).join('')}
</select>
</div>

<div class="filter-group">
<label>标签筛选:</label>
<div class="multiselect">
${allTags.map(tag => `
<label style="display: block;">
<input type="checkbox" value="${tag}"
${this.state.tagFilters.has(tag) ? 'checked' : ''}
onchange="cardSystem.toggleTag('${tag.replace(/'/g, "\\'")}')">
${tag}
</label>
`).join('')}
</div>
</div>

<div class="layout-controls">
<div>
<label>栏数:</label>
<input type="number" min="1" max="6" value="${this.state.columns}"
onchange="cardSystem.state.columns = Math.max(1, Math.min(6, parseInt(this.value))); cardSystem.update()">
</div>
<label style="white-space: nowrap;">
<input type="checkbox" ${this.state.groupByCategory ? 'checked' : ''}
onchange="cardSystem.state.groupByCategory = !cardSystem.state.groupByCategory; cardSystem.update()">
按分类分栏
</label>
<button onclick="cardSystem.resetFilters()">重置筛选</button>
</div>
</div>
`;
}

renderCards() {
this.applyFilters();
const visibleCards = this.cards.filter(c => c.visible);

if (this.state.groupByCategory) {
const grouped = visibleCards.reduce((acc, card) => {
const key = card.category || '未分类';
acc[key] = acc[key] || [];
acc[key].push(card);
return acc;
}, {});

return `
<div class="category-columns">
${Object.entries(grouped).map(([category, cards]) => `
<div class="category-column">
<div class="category-title">${category}</div>
${cards.map(c => this.renderCard(c)).join('')}
</div>
`).join('')}
</div>
`;
}

return `
<div class="card-container" style="--column-count: ${this.state.columns}">
${visibleCards.map(c => this.renderCard(c)).join('')}
</div>
`;
}

renderCard(card) {
return `
<div class="obs-card" style="${card.visible ? '' : 'display: none;'}">
<div class="card-title">${card.title}</div>
<div class="meta-line">
${card.category ? `<span class="category-badge">${card.category}</span>` : ''}
${card.tags.map(t => `<span class="tag-item">${t}</span>`).join('')}
</div>
<div class="card-content">${card.content}</div>
</div>
`;
}

toggleTag(tag) {
this.state.tagFilters.has(tag)
? this.state.tagFilters.delete(tag)
: this.state.tagFilters.add(tag);
this.update();
}

resetFilters() {
this.state = {
categoryFilter: null,
tagFilters: new Set(),
columns: 3,
groupByCategory: false
};
this.update();
}

update() {
dv.container.innerHTML = css + this.renderToolbar() + this.renderCards();
this.bindEvents();
}

bindEvents() {
dv.container.querySelectorAll('.internal-link').forEach(link => {
link.onclick = e => {
e.preventDefault();
location.hash = e.target.textContent;
window.dispatchEvent(new Event('hashchange'));
};
});
}
}

// 初始化卡片系统
// const cardSystem = new CardSystem();
// cardSystem.init();
window.cardSystem = new CardSystem();
window.cardSystem.setFileName("本地Lora说明.md").init();

Trigger トリガー | Zenless Zone Zero [IllustriousXL]

tags:: #ZZZ category:: 角色 https://civitai.com/models/1356010/trigger-or-zenless-zone-zero-illustriousxl

General information : 一般信息: Best weight : 1.0 最佳体重:1.0

Appearance : tr1gg3r, covered eyes, blonde hair, parted bangs, hair intakes, long hair, ponytail, triangle hair ornament, headgear, black blindfold 外观:tr1gg3r,遮盖双眼,金发,刘海,发际线,长发,马尾,三角形发饰,头饰,黑色眼罩

Outfit : yellow cape, grey chest guard, pouch, black jacket, cropped jacket, hooded jacket, camouflage jacket, juliet sleeves, harness, multiple straps, camouflage pants, two-tone pants, black pants, yellow pants, thigh strap, knee pads, black gloves, fingerless gloves 服装:黄色斗篷,灰色护胸甲,口袋,黑色夹克,短夹克,有帽夹克,迷彩夹克,朱丽叶袖,背带,多根皮带,迷彩裤,双色裤,黑色裤子,黄色裤子,大腿带,护膝,黑色手套,露指手套

tsurumi_kazane style LoRA for Illustrious

category:: 画师 https://civitai.com/models/1409346/tsurumikazane-style-lora-for-illustrious

tsurumi_kazane

Ai love Higokko Style | Zilient

category:: 画师 https://civitai.com/models/1324972/ai-love-higokko-style-or-zilient

Recommended weight: 0.8-1.0

Based on the artstyle of artist Ai love Higokko. 基于艺术家 Ai love Higokko 的艺术风格。

Recommended weight: 0.8-1.0 推荐权重:0.8-1.0

Tested on Prefect Illustrious XL 在 Prefect Illustrious XL 上进行了测试。.

Preview images contain Comfy UI workflows and involve the use of FaceDetailer node. 预览图像包含舒适的 UI 工作流程,并涉及 FaceDetailer 节点的使用。

RPG Character Sprite Style [Illustrious]

category:: 工具 RPG 角色精灵风格[辉煌] https://civitai.com/models/1397312/rpg-character-sprite-style-illustrious

Recommended resolution: height: 1280, width: 768. 推荐分辨率:高度:1280,宽度:768。

Prompt: 提示:

rpgchara, transparent background, multiple views, chibi, reference sheet, rpg 角色,透明背景,多视角,迷你,参考图集,

president_r18 / 某国大統領 style LoRA for Illustrious

category:: 画师

https://civitai.com/models/1384356/presidentr18-style-lora-for-illustrious

uxyc

AddMircoDetail

category:: 后处理 https://civitai.com/models/1377820?modelVersionId=1622964

addmicrodetails

ZZZ | Emoji | Style | IL

category:: 后处理 https://civitai.com/models/1407763/zzz-or-emoji-or-style-or-il

Triggers word : zzzemoji 触发词:zzzemoji。

Sampler: DPM++ 2M Karras: 20 to 40 steps. 样本器:DPM++ 2M Karras:20 到 40 步。

Sampler: Euler a: 25 to 40 steps. 样本器:Euler a:25 到 40 步。

CFG Scale: 1 to 5. CFG 缩放:1 到 5。

Clip Skip: 2. 跳过剪辑:2。 Also you can use that words - chibi, 您还可以使用以下词汇 - chibi,

il_contrast_slider_d1

category:: 画面控制 https://civitai.com/models/1093089?modelVersionId=1233024

画面亮度和色相控制

No triggers needed. LoRA weights can be set from -2 to 2, depending on your use case and your base model, but please be careful that larger weights may change the result composition. 无触发器需要。LoRA 权重可以从 -2 到 2 设置,具体取决于您的用例和您的基模型,但请注意,较大的权重可能会改变结果组合。

[ILXL]皮フェラ_foreskin fellatio

category:: 画面控制 https://civitai.com/models/1355348/ilxlforeskin-fellatio

Strength : ~1.0 力量:~1.0

Trigger Word : foreskin fellatio, tongue out 触发词: foreskin fellatio, tongue out

Option : smegma 选项:smegma

bonus wildcard prompt 奖励通配符提示

foreskin fellatio,tongue out,{1::penis grab,|1::foreskin pull,|3::}{1::cum on tongue,|1::cum in mouth,|1::facial,bukkake,|3::smegma,|6::}{2::pov,|1::dutch angle,|1::from side,|2::}{1::from above,|1::from below,|4::} 阴茎包皮口交,舌头伸出,{1::阴茎抓握,|1::包皮拉扯,|3::}{1::精液在舌头上,|1::精液在嘴里,|1::面部,喷精,|3::精液,|6::}{2::视角,|1::荷兰角度,|1::从侧面,|2::}{1::从上方,|1::从下方,|4::}

(IL+Pony) Body Writing-erotic / 身体に落書き-エロ

category:: 画面控制 https://civitai.com/models/817937/ilpony-body-writing-erotic

IL version: IL 版本: Recommended weight: 1 推荐权重:1

Trigger word: 触发词:

body writing

Better ahegao LoRa | Illustrious

category:: 画面控制 https://civitai.com/models/1430080/better-ahegao-lora-or-illustrious

How to Use: 使用方法: It was trained on a large enough dataset, so it should not impact the overall style of your artwork. Just load it into your Stable Diffusion setup and use the trigger words to get started. 它在足够大的数据集上进行了训练,因此不应影响您艺术作品的总体风格。只需将其加载到您的 Stable Diffusion 设置中,并使用触发词开始使用。

1
2
ahegao, expressive ahegao
open mouth, tongue out, rolling eyes, full-face blush, wavy mouth, smile, saliva, upper-teeth only

Note: 注意: This model is trained specifically for anime-style images and is optimized for Illustrious models. It may not produce the best results with realistic images, so keep that in mind when using it. 此模型专门针对动漫风格图像进行训练,并针对 Illustrious 模型进行了优化。它可能无法在真实图像上产生最佳结果,所以使用时请记住这一点。

Strip Apology [Pony | Illustrious] 脱衣道歉 [马 | 杰出]

category:: 画面控制 https://civitai.com/models/1360546/strip-apology-pony-or-illustrious

Prompts: strip apology, nude, bowing, on knees, bending forward, clothes folded, clothes on ground, items on ground, clothes removed, 提示:脱衣道歉,裸露,鞠躬,跪地,向前弯曲,衣物折叠,衣物在地面上,物品在地面上,衣物被脱掉,

Strength: 0.8-1.0 力度:0.8-1.0

I love making these LoRAs for everyone. Please comment and like, and I also have a Ko-fi, if you want to support me/commission. 我喜欢为每个人制作这些 LoRA。请评论和点赞,我还有一个 Ko-fi,如果你想支持我/委托。

Nipple length slider

category:: 画面控制 https://civitai.com/models/1384979/nipple-length-slider

Nipple length slider

use long nipples

weight effect
0 normal
0.5 long
1 long with a hole
2 extremely long

动作_头部抓取Head Grab

category:: 画面控制 https://civitai.com/models/1423166/head-grab

1
2
3
sex,1girl, 1boy, sex from behind, dark-skinned male, hetero, head grab, doggystyle, arm grab, face down, hair grab, looking down, tears, messy hair, top-down bottom-up, head out of frame, out of frame

1girl, 1boy, head grab, arm grab, face down, hair grab, looking down, tears, messy hair, top-down bottom-up, head out of frame, out of frame, <lora:head_grab_sex_illustrious:0.5>
1
2
3
4
5
6
anime, anime coloring, 
sex,1girl, 1boy, sex from behind, dark-skinned male, hetero, head grab, doggystyle, arm grab, face down, hair grab, rape, looking down, tears, messy hair, top-down bottom-up, head out of frame, out of frame,
zenless zone zero,
ellen joe, maid, maid headdress,
<lora:head_grab_sex_illustrious:0>
Steps: 15, CFG scale: 5, Sampler: Euler a, Seed: 2326526567, Size: 832x1216, Model: prefectIllustriousXL_v10, Script: X/Y/Z plot, X Type: Prompt S/R, Version: f1.1.5-v1.10.1RC-latest-881-ga7fec33d, X Values: [object Object], Model hash: 3a2df45ef8, Schedule type: Automatic, Clip skip: 2

just add head grab and it will work

动作_凑近的脸Closeup Facial (Poses) Pony/iLLus

category:: 画面控制 https://civitai.com/models/1383767/closeup-facial-poses-ponyillus

Closeup Facial cum in mouth cum on tongue after fellatio

Huge perfect nipples concept (with inverted)

category:: 画面控制 https://civitai.com/models/1350712/huge-perfect-nipples-concept-with-inverted

BREAST REST, HUGE PERFECT NIPPLES, LARGE AREOLAE, PUFFY NIPPLES, LONG NIPPLES, INVERTED NIPPLES, NIPPLE TWEEK

Makes nipples and inverted nipples the way i like em

看向冰箱 Looking into a refrigerator / fridge [ichi_sk]

category:: 画面控制 看向冰箱/冰箱 [ichi_sk] - V1 插画 | 丽丽洛拉 | Civitai --- Looking into a refrigerator / fridge [ichi_sk] - V1 Illust | Illustrious LoRA | Civitai

A model for women feeling snacky.
女性感到想吃零食的模型。

Trained to capture the pose specifically from behind or from the side.
特定于从背后或从侧面捕捉姿势的训练。

Suggested tags:
建议标签:

1
2
3
4
looking into a fridge,
refrigerator,
refrigerator interior,
in front of open refrigerator,

窒息chokinkg mix illustrious

category:: 画面控制 chokinkg 混合辉煌 - V1 | 辉煌 LoRA | Civitai --- chokinkg mix illustrious - V1 | Illustrious LoRA | Civitai

Use choking tag

1
2
3
masterpiece,best quality,very aesthetic,absurdres, possmach,  medium breasts, petite, cute, thighs, curvy, long white hair, pale skin, nipples, elf girl, long pointy ears, forrest, innie pussy, beautifull, green eyes, choking, anal sex, drooling, 1boy, penis, on back, spread legs,tears, rolling eyes, hearts. drool. open mouth, sweat, blush, sweat, cum in ass, 1boy, from side, legs up, squirt, female ejaculation, feet
Negative prompt: lowres, (bad), text, error, fewer, extra, missing, worst quality,normal quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan, abstract,censored, mosaic censoring, logo,artist name, company name, name, bad anatomy,cartoon,3d \(artwork\), 3d, stomach bulge
Steps: 24, CFG scale: 4, Sampler: Euler a, extra: [object Object], Model: urn:air:sdxl:checkpoint:civitai:503815@1279960, workflow: img2img-hires

Choujiroo (超ジロー) Style

category:: 画师 超ジロー风格 [Illu0.1] - P6bv1a | Illustrious LoRA | Civitai --- Choujiroo (超ジロー) Style [Illu0.1] - P6bv1a | Illustrious LoRA | Civitai

If no trigger tags are specified, this LoRA does not need a trigger tag to work!

这位风格大概是这样 ## Hug/kissing/breast press pov [remake] category:: 画面控制 拥抱/亲吻/胸部按压 POV[重制] - Illustrious [新] | Illustrious LoRA | Civitai --- Hug/kissing/breast press pov [remake] - Illustrious [new] | Illustrious LoRA | Civitai ### Core Prompts
核心提示

pov kiss default, 1girl, 1boy, pov,
pov 吻默认,1 女孩,1 男孩,pov,

pov kiss breast press, breast press, 1girl, 1boy, pov,
POV 亲吻胸部按压,胸部按压,1 女孩,1 男孩,POV

**Customisation prompts

自定义提示**

kiss,
接吻,

french kiss,
法式接吻,

close up,
特写,

from below,
从下面,

from above,
从上方,

dutch angle,
荷兰式角度,

looking at viewer,
观察观众,

reaching for viewer, arms up,
向观众伸手,双臂高举,

imminent sex,
即将性爱

sex,

cumming, creampie, ejaculation, trembling,
射精、怀孕、射精、颤抖、

pussy,
阴道

nipples,
乳头

penis,
阴茎,

fully clothed,
全身穿着衣服,

open clothes,
开放的衣服,

naked,
裸露的,

breast grab,
胸部抓取,

torso grab,
胸部抓握,

thigh grab,
大腿抓取,

arm grab
手臂抓取

have a try

1
2
3
highly detailed, absurdres, volumetric lighting, masterpiece, best quality, outside, wasteland, dust particles, clay rocks, destroyed buildings, night, kluk4idef, teardrop facial mark, long hair, grey hair, sidelocks, ponytail, cross hair ornament, black headwear, baseball cap, two-tone jacket, purple jacket, white jacket, partially unzipped, off shoulder, jacket pull, long sleeves, black gloves, black leotard, black thighhighs, respirator, mask around neck, bare shoulders, pov kiss breast press, breast press, 1girl, 1boy, pov, from above, soft breasts, sagging breasts, french kiss, tongue, (close-up, zoom in:1.8), head tilt, reaching for viewer, arms up, eyes closed, hot breath 
Negative prompt: ugly face, mutated hands, extra hands, extra fingers, extra arms, extra legs, Morphing, blending, (incorrectly proportioned:1.2), long legs, long arms, long forearms, bendy, (bad eyes), (artifacts:1.2), (low detail:1.2), low res, pumped body, athletic body, black and white. bad eyes, bad art, bad drawing, muscles, watermark, trademarked,
Steps: 60, CFG scale: 4, Sampler: DPM++ 2M, extra: [object Object], workflow: img2img-upscale

Pantyhose Enhancer/Fine Fabric (Illustrious)

category:: 画面控制 丝袜增强器/细织物(辉煌)- v1.0 | 辉煌 LoRA | Civitai --- Pantyhose Enhancer/Fine Fabric (Illustrious) - v1.0 | Illustrious LoRA | Civitai

Tag: finefabricILL, fine fabric
标签:finefabricILL,细腻面料

  • Helpful tags: pantyhose, shiny pantyhose, textured pantyhose, high detail texture,
    有用标签:丝袜,闪亮丝袜,纹理丝袜,高细节纹理,

have a try:

1
2
3
4
finefabricILL, fine fabric, masterpiece, best quality, newest, absurdres, highres, 1girl, solo, amazing quality, fit, black eyes, breasts, confident smile, legs, thick, plump, wide hips, round breasts,  feet, toes, anus, pussy,  looking at viewer, round ass, slimthick , busty,  ass:1.5), (feet:1.3), (thick thighs, big butt, round butt, fat ass, anus peek, cameltoe, tight dress, garter straps, bare feet, 5 toes, shiny skin, busty cleavage, shiny boobs, blushing, black hair, soft lighting, hugging knees, knees up, thighs, crotch, facing viewer, hands,     pantyhose, shiny pantyhose, detailed pantyhose       ,dynamic angle, foreshortening, pantyhose, shiny pantyhose, textured pantyhose, high detail texture,
Negative prompt:
low quality, worst quality, low resolution, bad anatomy, worst detail, blurry, pixelated, jpeg artifacts, censored), censor bar, mosaic blur, censor, missing toes, 4 toes, 6 toes, extra limbs, distorted feet, deformed fingers, bad hands, bad feet, disproportioned body, fused toes, extra digits, bad shading, oversaturated, dull colors, asymmetrical face, lopsided eyes, messy composition, clones, floating artist name, patreon, twitter username, watermark, patreon username , clones, 2 heads, multiple people, bad anatomy, incorrect anatomy, extra head, split heads, extra person,
Steps: 34, CFG scale: 4, Sampler: DPM++ 2M, Seed: 154933820, extra: [object Object], workflow: img2img-upscale

[ILXL]Vivian_ZenlessZoneZero(ZZZ)_ビビアン_ゼンレスゾーンゼロ(ゼンゼロ)

category:: 角色

strength : 0.8
力量:0.8

default : vivian (zenless zone zero), purple hair, multicolored hair, red eyes, pointy ears, long hair, drill hair, hairband, (mole under eye:0.5)
默认:薇薇安(零之轨迹),紫色头发,多彩头发,红色眼睛,尖耳朵,长发,钻孔头发,发带,(眼下的痣:0.5)

outfit : white dress, white shirt, black bow, black pantyhose
服装:白色连衣裙,白色衬衫,黑色领结,黑色丝袜

option : holding umbrella
选项:手持雨伞

1
2
3
masterpiece,best quality,amazing quality,1girl,solo,<lora:vivian:0.8>,vivian \(zenless zone zero\),purple hair,multicolored hair,cute,shy,red eyes,pointy ears,long hair,drill hair,hairband,(mole under eye:0.5),flower,<lora:IL-manimani:0.8>,manimani,both fingertips together,upper body,nude,blush,head tilt,hands over mouth,from side,ribbon,black nails,
Negative prompt: bad quality,worst quality,worst detail,censor,bad anatomy,mouth,
Steps: 28, CFG scale: 6, Sampler: Euler a, Seed: 2750245696, Size: 832x1312, Model: waiNSFWIllustrious_v130, Version: f2.0.1v1.10.1-previous-659-gc055f2d4, Module 1: fixFP16ErrorsSDXLLowerMemoryUse_v10, Model hash: a810e710a2, Hires steps: 20, Hires upscale: 1.75, Schedule type: Automatic, Hires Module 1: Use same choices, Hires upscaler: R-ESRGAN 4x+ Anime6B, Hires CFG Scale: 7, Denoising strength: 0.4, Clip skip: 2

四肢截肢无残端Quad Amputee Stumpless

category:: 画面控制 四肢截肢无残端 - 传奇 | 传奇 LoRA | Civitai --- Quad Amputee Stumpless - Illustrious | Illustrious LoRA | Civitai Makes stumpless quads nuff said.
无残端四足,无需多言。

Might be some issues with stump caps and nipples.
可能存在残端帽和乳头的问题。

birdman46049238 I Pixel Art Style

category:: 画师 Weirdly DDIM sampler with 30 steps, and 7ish cfg gives pretty decent results.
奇怪的 DDIM 样本器,有 30 步,7 个左右的 cfg 可以得到相当不错的成果。

Euler A is a hit or a miss
欧拉 A 是个成功或失败的问题。

Ramp up the weight, to force the style more if needed. (something like 1.0-1.5)) 提高权重,如果需要的话,可以更强制地应用风格。(大约是 1.0-1.5)

【Illustrious&noob】zenless zone zero_Soldier 0 - Anby丨绝区零_零号·安比

category:: 角色

权重建议:≥0.8,此lora仅用触发词就可以还原人物形象,但如果你想要更还原此角色的形象,请参考下面的tag。

Weight recommendation: ≥0.8. This lora can restore the character image with only trigger words, but if you want to restore the image of this character more, please refer to the tag below.
重量建议:≥0.8。这个 lora 可以通过触发词恢复角色形象,但如果你想要更全面地恢复这个角色的形象,请参考下面的标签。

外貌(Appearance):
外貌(Appearance):

  • Silver Soldier,short hair,orange eyes,white hair,
    银色士兵,短发,橙色眼睛,白色头发,

服装(clothes):

  • high_heels,black thighhighs,white gloves,fingerless gloves,boots,black dress,hairband,
    高跟鞋,黑色长筒袜,白色手套,露指手套,靴子,黑色连衣裙,发带

otintin style LoRA for Illustrious

category:: 画师

96YOTTEA style | Illustrious

category:: 角色 Recommended settings (external gen-comfyui):
推荐设置(外部 gen-comfyui):

  • lora weight: 1.0
    lora 权重:1.0

  • sampler: euler a
    样本器:euler a

  • scheduler: sgm_uniform/normal
    调度器:sgm_uniform/normal

  • steps: 20-40
    步骤:20-40

  • CFG: 4.0-6.0

What an amazing style...
真是种令人惊叹的风格...

非常酷的类似厚涂的风格

1
2
3
4
5
masterpiece,best quality,amazing quality,absurdres,newest,1girl,black theme,white theme,fami,\(chainsaw man\),formal suit,neck tie,pink eyes,white hair,mole under eye,ear piercing,earring,military cap,black gloves,black coat,sitting,cross legged,car interior,black seats,windows,looking at viewer,profile,<lora:96YOTTEA-WAI:1>,  
Negative prompt: lowres,bad anatomy,bad hands,text,error,missing fingers,extra digit,
fewer digits,cropped,worst quality,low quality,normal quality,jpeg artifacts,
signature,watermark,username,blurry,bad fee,
Steps: 40, Sampler: Euler a, Schedule type: Automatic, CFG scale: 5, Seed: 126744804, Size: 832x1216, Model hash: a810e710a2, Model: waiNSFWIllustrious_v130, Lora hashes: "96YOTTEA-WAI: 7a6cdc714921", Version: v1.10.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
// 内联CSS样式
const css = `
<style>
.obsidian-card-system * {
box-sizing: border-box;
margin: 0;
padding: 0;
}

.card-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 1.5rem;
padding: 1rem;
background: var(--background-primary);
}

.obs-card {
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 12px;
padding: 1.2rem;
transition: all 0.2s ease;
cursor: pointer;
break-inside: avoid;
}

.obs-card:hover {
transform: translateY(-3px);
box-shadow: 0 6px 12px rgba(0,0,0,0.08);
}

.card-title {
font-size: 1.3em;
margin-bottom: 0.8rem;
color: var(--text-accent);
border-bottom: 2px solid currentColor;
padding-bottom: 0.3rem;
}

.meta-line {
display: flex;
gap: 0.8rem;
margin-bottom: 1rem;
font-size: 0.9em;
}

.category-badge {
background: var(--color-green-rgb);
color: black;
padding: 2px 8px;
border-radius: 6px;
}

.tag-item {
background: var(--background-secondary);
padding: 2px 8px;
border-radius: 12px;
font-size: 0.85em;
}

.card-content {
line-height: 1.7;
color: var(--text-normal);
}

.card-content p {
margin: 0.6em 0;
}

.internal-link {
color: var(--text-accent);
border-bottom: 1px dashed currentColor;
text-decoration: none !important;
}

.obs-image {
max-width: 100%;
height: auto;
border-radius: 8px;
margin: 1rem 0;
background: var(--background-secondary);
padding: 4px;
}

.image-error {
border: 2px dashed var(--text-error);
padding: 1rem;
text-align: center;
color: var(--text-error);
}
</style>
`;

// 资源定位器
function resolveImagePath(filename) {
const attachmentFolder = app.vault.config.attachmentFolderPath || '';
const possiblePaths = [
`${attachmentFolder}/${filename}`,
`Attachments/${filename}`,
`Assets/${filename}`,
filename
];

for (const path of possiblePaths) {
const file = app.vault.getAbstractFileByPath(path);
if (file) return app.vault.getResourcePath(file);
}
return null;
}

// Markdown渲染引擎
function renderMarkdown(content) {
return content
.replace(/^#(#+) (.*)$/gm, (m, level, text) => `<h${level.length + 1}>${text}</h${level.length + 1}>`)
.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>')
.replace(/\*(.*?)\*/g, '<em>$1</em>')
.replace(/!\[\[(.*?)\]\]/g, (_, img) => {
const path = resolveImagePath(img);
return path
? `<img src="${path}" alt="${img}" class="obs-image" onerror="this.classList.add('image-error')">`
: `<div class="image-error">图片未找到: ${img}</div>`;
})
.replace(/\[\[(.*?)\]\]/g, '<a href="#$1" class="internal-link">$1</a>')
.replace(/([^\n]+)\n/g, '<p>$1</p>');
}

// 主处理函数
async function buildCardSystem() {
const dbFile = app.vault.getAbstractFileByPath("testAllItems.md");
if (!dbFile) return dv.paragraph("❌ 数据库文件未找到");

try {
const content = await app.vault.cachedRead(dbFile);
const cards = content.split(/^## /gm).slice(1).map(section => {
const lines = section.split('\n');
const header = lines[0].trim();
const metadata = {};
let contentLines = [];

lines.slice(1).forEach(line => {
if (line.startsWith('tags::')) {
metadata.tags = line.replace('tags::', '').trim().split(/,\s*/);
} else if (line.startsWith('category::')) {
metadata.category = line.replace('category::', '').trim();
} else if (line.trim()) {
contentLines.push(line);
}
});

return {
title: header,
...metadata,
content: renderMarkdown(contentLines.join('\n'))
};
});

dv.container.innerHTML = css + `
<div class="card-container">
${cards.map(card => `
<div class="obs-card">
<div class="card-title">${card.title}</div>
<div class="meta-line">
${card.category ? `<span class="category-badge">${card.category}</span>` : ''}
${(card.tags || []).map(t => `<span class="tag-item">${t}</span>`).join('')}
</div>
<div class="card-content">
${card.content}
</div>
</div>
`).join('')}
</div>
`;

// 处理内部链接点击
dv.container.querySelectorAll('.internal-link').forEach(link => {
link.onclick = e => {
e.preventDefault();
location.hash = e.target.textContent;
};
});

} catch(e) {
dv.paragraph(`❌ 系统错误: ${e.message}`);
console.error(e);
}
}

// 执行构建
buildCardSystem();

添加索引数据

dataview 可以通过 文档的数据进行索引,文档的数据往往在文档的前面以yaml的形式给出,比如:

1
tags:1,2,3

当然也可以使用这种方式: From [author:: Edgar Allan Poe], written in (published:: 1845)

1
2
3
4
5
6
7
8
// 筛选器UI
dv.el("div", "按标签筛选: " +
dv.el("select", ["全部","标签1","标签2"]))

// 查询逻辑
const items = dv.current().file.content
.match(/^# (.+?)\n([\s\S]+?)(?=^# |$)/gm)
.map(...)

项目1

内容正文...

项目2

另一个内容...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
// 内联CSS样式
const css = `
<style>
.obsidian-card-system {
--column-count: 3;
--filter-bar-bg: var(--background-secondary);
--filter-border: var(--background-modifier-border);
}

.toolbar {
background: var(--filter-bar-bg);
padding: 1rem;
border-radius: 8px;
margin-bottom: 1.5rem;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
position: sticky;
top: 0;
z-index: 100;
}

.filter-group {
display: flex;
flex-direction: column;
gap: 0.5rem;
}

.multiselect {
max-height: 120px;
overflow-y: auto;
border: 1px solid var(--filter-border);
border-radius: 4px;
padding: 0.5rem;
}

.layout-controls {
display: flex;
gap: 1rem;
align-items: center;
}

.card-container {
display: grid;
grid-template-columns: repeat(var(--column-count), 1fr);
gap: 1.5rem;
transition: all 0.3s ease;
}

.category-columns {
grid-template-columns: none;
display: flex;
gap: 2rem;
overflow-x: auto;
padding-bottom: 1rem;
}

.category-column {
min-width: 300px;
flex: 1;
}

.category-title {
font-size: 1.2em;
margin-bottom: 1rem;
padding: 0.5rem 1rem;
background: var(--color-base-30);
border-radius: 6px;
}

.obs-card {
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 12px;
padding: 1.2rem;
transition: all 0.2s ease;
cursor: pointer;
break-inside: avoid;
}

.obs-card:hover {
transform: translateY(-3px);
box-shadow: 0 6px 12px rgba(0,0,0,0.08);
}

.card-title {
font-size: 1.3em;
margin-bottom: 0.8rem;
color: var(--text-accent);
border-bottom: 2px solid currentColor;
padding-bottom: 0.3rem;
}

.meta-line {
display: flex;
gap: 0.8rem;
margin-bottom: 1rem;
font-size: 0.9em;
}

.category-badge {
background: var(--color-green-rgb);
color: black;
padding: 2px 8px;
border-radius: 6px;
}

.tag-item {
background: var(--background-secondary);
padding: 2px 8px;
border-radius: 12px;
font-size: 0.85em;
}

.card-content {
line-height: 1.7;
color: var(--text-normal);
}

.card-content p {
margin: 0.6em 0;
}

.internal-link {
color: var(--text-accent);
border-bottom: 1px dashed currentColor;
text-decoration: none !important;
}

.obs-image {
max-width: 100%;
height: auto;
border-radius: 8px;
margin: 1rem 0;
background: var(--background-secondary);
padding: 4px;
}

.image-error {
border: 2px dashed var(--text-error);
padding: 1rem;
text-align: center;
color: var(--text-error);
}
</style>
`;

class CardSystem {
constructor() {
this.state = {
categoryFilter: null,
tagFilters: new Set(),
columns: 3,
groupByCategory: false
};
}

setFileName(fileName) {
this.fileName = fileName;
return this;
}

fileName = "AllItems.md";
async init() {
this.dbFile = app.vault.getAbstractFileByPath(this.fileName);
if (!this.dbFile) {
dv.paragraph("❌ 数据库文件未找到");
return;
}

try {
this.rawContent = await app.vault.cachedRead(this.dbFile);
this.cards = this.parseCards();
this.update();
} catch (error) {
dv.paragraph(`❌ 读取文件失败: ${error.message}`);
}
}

parseCards() {
return this.rawContent.split(/^## /gm).slice(1).map(section => {
const lines = section.split('\n');
const header = lines[0].trim();
const metadata = { tags: [], category: null };
let contentLines = [];

lines.slice(1).forEach(line => {
if (line.startsWith('tags::')) {
metadata.tags = line.replace('tags::', '').trim().split(/,\s*/);
} else if (line.startsWith('category::')) {
metadata.category = line.replace('category::', '').trim();
} else if (line.trim()) {
contentLines.push(line);
}
});

return {
title: header,
...metadata,
content: this.renderMarkdown(contentLines.join('\n')),
visible: true
};
});
}

renderMarkdown(content) {
return content
.replace(/^#(#+) (.*)$/gm, (_, level, text) => `<h${level.length + 1}>${text}</h${level.length + 1}>`)
.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>')
.replace(/\*(.*?)\*/g, '<em>$1</em>')
.replace(/!\[\[(.*?)\]\]/g, (_, img) => this.resolveImage(img))
.replace(/\[\[(.*?)\]\]/g, '<a href="#$1" class="internal-link">$1</a>')
.replace(/```([\s\S]*?)```/g, '<pre><code>$1</code></pre>')
.replace(/`([^`]+)`/g, '<code>$1</code>')
.replace(/([^\n]+)\n/g, '<p>$1</p>');
}

resolveImage(filename) {
const path = this.getImagePath(filename);
return path
? `<img src="${path}" alt="${filename}" class="obs-image" onerror="this.classList.add('image-error')">`
: `<div class="image-error">图片未找到: ${filename}</div>`;
}

getImagePath(filename) {
const folders = [
app.vault.config.attachmentFolderPath || '',
'Attachments/',
'Assets/',
''
];

for (const folder of folders) {
const fullPath = folder ? `${folder}/${filename}` : filename;
const file = app.vault.getAbstractFileByPath(fullPath);
if (file) return app.vault.getResourcePath(file);
}
return null;
}

applyFilters() {
this.cards.forEach(card => {
const tagMatch = this.state.tagFilters.size === 0 ||
card.tags.some(t => this.state.tagFilters.has(t));

const categoryMatch = !this.state.categoryFilter ||
card.category === this.state.categoryFilter;

card.visible = tagMatch && categoryMatch;
});
}

renderToolbar() {
const categories = [...new Set(this.cards.map(c => c.category))].filter(Boolean);
const allTags = [...new Set(this.cards.flatMap(c => c.tags))].filter(Boolean);

return `
<div class="toolbar">
<div class="filter-group">
<label>分类筛选:</label>
<select class="category-select"
onchange="cardSystem.state.categoryFilter = this.value === '' ? null : this.value; cardSystem.update()">
<option value="">全部</option>
${categories.map(c => `
<option value="${c}" ${this.state.categoryFilter === c ? 'selected' : ''}>${c}</option>
`).join('')}
</select>
</div>

<div class="filter-group">
<label>标签筛选:</label>
<div class="multiselect">
${allTags.map(tag => `
<label style="display: block;">
<input type="checkbox" value="${tag}"
${this.state.tagFilters.has(tag) ? 'checked' : ''}
onchange="cardSystem.toggleTag('${tag.replace(/'/g, "\\'")}')">
${tag}
</label>
`).join('')}
</div>
</div>

<div class="layout-controls">
<div>
<label>栏数:</label>
<input type="number" min="1" max="6" value="${this.state.columns}"
onchange="cardSystem.state.columns = Math.max(1, Math.min(6, parseInt(this.value))); cardSystem.update()">
</div>
<label style="white-space: nowrap;">
<input type="checkbox" ${this.state.groupByCategory ? 'checked' : ''}
onchange="cardSystem.state.groupByCategory = !cardSystem.state.groupByCategory; cardSystem.update()">
按分类分栏
</label>
<button onclick="cardSystem.resetFilters()">重置筛选</button>
</div>
</div>
`;
}

renderCards() {
this.applyFilters();
const visibleCards = this.cards.filter(c => c.visible);

if (this.state.groupByCategory) {
const grouped = visibleCards.reduce((acc, card) => {
const key = card.category || '未分类';
acc[key] = acc[key] || [];
acc[key].push(card);
return acc;
}, {});

return `
<div class="category-columns">
${Object.entries(grouped).map(([category, cards]) => `
<div class="category-column">
<div class="category-title">${category}</div>
${cards.map(c => this.renderCard(c)).join('')}
</div>
`).join('')}
</div>
`;
}

return `
<div class="card-container" style="--column-count: ${this.state.columns}">
${visibleCards.map(c => this.renderCard(c)).join('')}
</div>
`;
}

renderCard(card) {
return `
<div class="obs-card" style="${card.visible ? '' : 'display: none;'}">
<div class="card-title">${card.title}</div>
<div class="meta-line">
${card.category ? `<span class="category-badge">${card.category}</span>` : ''}
${card.tags.map(t => `<span class="tag-item">${t}</span>`).join('')}
</div>
<div class="card-content">${card.content}</div>
</div>
`;
}

toggleTag(tag) {
this.state.tagFilters.has(tag)
? this.state.tagFilters.delete(tag)
: this.state.tagFilters.add(tag);
this.update();
}

resetFilters() {
this.state = {
categoryFilter: null,
tagFilters: new Set(),
columns: 3,
groupByCategory: false
};
this.update();
}

update() {
dv.container.innerHTML = css + this.renderToolbar() + this.renderCards();
this.bindEvents();
}

bindEvents() {
dv.container.querySelectorAll('.internal-link').forEach(link => {
link.onclick = e => {
e.preventDefault();
location.hash = e.target.textContent;
window.dispatchEvent(new Event('hashchange'));
};
});
}
}

// 初始化卡片系统
// const cardSystem = new CardSystem();
// cardSystem.init();
window.cardSystem = new CardSystem();
window.cardSystem.setFileName("AI绘画魔咒法典.md").init();

# AI
# LLM

前段时间,对于 LLM-RAGFlow 的介绍引起了我的兴趣,今天就来试试。

但是,实际上它并没有提供我想要的功能。尽管使用了Rag,ai仍然无法将文本中的内容当作自己的知识来使用,而是将其作为外部的文本信息来处理。

它其实类似于给 LLM 提供了 MCP Server 的功能,允许 LLM 直接访问外部知识库。它的基本运作逻辑如下:

  1. RAGFlow 事先读取知识库中的所有文本,并将其转换为向量存储在数据库中。
  2. 当 LLM 需要回答问题时,它会先将问题转换为向量,并在数据库中查找与之相似的文本。
  3. 找到相似文本后,LLM 会将这些文本作为上下文信息传递给自己,并生成回答。
  4. 生成的回答会结合上下文信息和LLM自身的知识。
  5. 最终,LLM 会将回答返回给用户。

所以说实际上,对于ai而言,RagFlow 只是一个知识库的接口,它并没有改变 LLM 的工作方式,仅仅是为ai提供了一个能够访问知识库的途径。

就像人能够使用百度搜索引擎一样,人能够通过搜索引擎来获取信息,但这并不意味着人能够将搜索引擎中的信息当作自己的知识来使用。

一个伟大的想法

ragflow 存在的问题

其实我在想,现有的rag的实现方式依赖于 向量化文本 来实现,它能够很好的将文本进行聚类处理,聚类后的文本就像是拥有了无数个tag,每个tag意味着它与某个知识关联。

比如说,我有3篇文章与ai绘画相关,那么在向量化后,它们就会被聚类到一起,当检索到与ai绘画相关的内容时,ragflow 就会将这3篇文章作为上下文信息传递给 LLM。

但是这样存在的最大的问题就是,人类的知识是融汇贯通的,而向量化后的文本是孤立的,尽管它们能通过聚类关联在一起,但是并不能确认它们之间的准确关系:

1
2
3
4
5
6
7
8
9
10
文档1:

学习好累,我不想学习

文档2:

学习好累,我想去玩

文档3:
学习真的好快乐啊,学习到了很多新知识

这3篇文章的向量化后,会被聚类到一起,当检索学习相关的内容时,ragflow 就会将这3篇文章作为上下文信息传递给 LLM。 但是实际上,这3篇文章之间并没有任何关联,它们只是因为包含了“学习”这个词而被聚类到了一起,而对于学习的态度,则是截然相反的。

对于学习的态度,其实更大可能是和最近发生的事情相关联,而非简单的点到点的关系。而rag无法捕获到这一点,将错误的内容作为信息传递给 LLM 后,LLM同样无法确认它们之间的关系,只会将其理解为类似于日志的内容。

于是我就想有没有可能尝试这样一种ai的实现方式:

实现方式

1. 预处理

  1. 通过向量化文本,将文本进行聚类处理,聚类后的文本就像是拥有了无数个tag,每个tag意味着它与某个知识关联。
  2. 将有关联的文本,通过一个特殊的ai进行处理,将处理后的文章也加入向量化文本的数据库中。

2. 检索

  1. 当 LLM 需要回答问题时,它会先将问题转换为向量,并在数据库中查找与之相似的文本。
  2. 当检索到与某个知识相关的内容时,原始的文本和处理后的文本都会被传递给 LLM,其中原始文本的提示词影响力权重会降低,而处理后的文本的提示词影响力权重会提高。从而期望ai能够捕捉到文本之间深层次的关联。
  3. 生成的回答会结合上下文信息和LLM自身的知识。
  4. 最终,LLM 会将回答返回给用户。

特殊的ai核心有两个功能: 1. 对于单个文件,思考前后文的语义连贯性以及合理性 2. 对于多个文件,思考它们之间的关联性

这样的话,ai或许能够将文本中的内容当作自己的知识来使用,而不是将其作为外部的文本信息来处理。

实际上这种做法类似于人类的思维方式,人类在学习知识时,往往会将不同的知识进行关联,从而形成一个完整的知识体系。而ragflow则是将知识孤立开来,无法形成一个完整的知识体系。

更进一步……自学习功能

如果上述功能的效果很好的话,那么我们可以尝试加入自学习的功能,主要使用两个特性: 1. 自我评估和反馈 2. 自我学习和改进

1. 自我评估和反馈

当 LLM 生成回答后,可以通过一个特殊的 ai 对回答进行评估,判断回答的正确性和合理性,并给出反馈。这个反馈可以是一个评分,也可以是一个文本描述。 这个反馈会被存储在数据库中,并与原始文本和处理后的文本进行关联。

2. 自我学习和改进

要求特殊的ai在处理文本时,能够生成“疑问”,并将这些疑问存储在数据库中。

LLM 在合适的时间可以对这些疑问进行检索,并尝试回答这些疑问。这个过程可以看作是一个自我学习的过程。同时它也可以将问题询问人类,并将获取到的答案存储在数据库中。

这样的话,LLM 就可以不断地进行自我学习和改进,从而提高自己的知识水平和回答能力。

遗忘和精炼

在上述的机制下,rag存储的文本会越来越多,此时需要引入遗忘和精炼的机制。

  1. 遗忘:当文本经由ai处理后,原始文本的权重乘以k(k<1)存储到数据库中。这样的话,随着时间的推移,原始文本的权重会越来越低,当权重低于Kmin时,就可以将其删除。
  2. 精炼:当文本经由ai处理后,生成出来的文本的权重为1,存储到数据库中,从而形成一个新的知识体系。

通过上述的机制,知识库的信息熵能够越来越低,从而形成一个完整的知识体系。但是同时,其连接数和广度也会越来越高,从而形成一个完整的知识网络。

阅读全文 »

# AI
# LLM

[2007.14966] Mirostat: A Neural Text Decoding Algorithm that Directly Controls Perplexity

嗯,最近研究LLM的时候,发现 Ollama 提供了 Mirostat 的选项,想了解一下这个算法。

1. 介绍

Mirostat 是一种新的文本解码算法,旨在直接控制生成文本的困惑度(perplexity)。它通过动态调整采样温度来实现这一目标,从而使生成的文本更具可控性和一致性。

按照常规的方法,ai在选取下一个词的时候,受到下面几个参数的影响:

参数名称 描述
Temperature 控制生成文本的随机性,值越高生成的文本越多样化,值越低越确定性。
Top-k Sampling 限制候选词的数量,仅从概率最高的 k 个词中采样。
Top-p Sampling 基于累积概率选择候选词,仅从累积概率达到 p 的词中采样。
Perplexity 衡量生成文本的不确定性,值越低表示文本越确定性和一致性。

Mirostat 的独特之处在于它直接控制 perplexity,而不是间接依赖于 temperature 或 top-k/top-p 参数。

Mirostat 受到下面三个参数影响:

参数名称 描述
目标困惑度 用户设定的目标 perplexity 值,Mirostat 会动态调整生成文本以接近该值。
学习率 控制调整采样温度的速度,值越高调整越快,但可能导致不稳定。
Mirostat 方法 选择使用的 Mirostat 版本,0 表示不使用,1 表示使用 Mirostat V1,2 表示使用 Mirostat V2。

2. 优势

Mirostat 相比较传统方式有下面两个优势:

  1. 直接控制而非间接调控
  2. 动态变化而非固定值

2.1 直接控制而非间接调控

传统的文本生成方法通常通过调整 temperature、top-k 或 top-p 等参数间接影响 perplexity。然而,这种方式可能需要多次尝试才能找到合适的参数组合,且生成结果的稳定性较差。Mirostat 则通过直接设定目标 perplexity 值,动态调整采样温度,使生成的文本更符合用户预期。这种直接控制的方式减少了调参的复杂性,同时提高了生成文本的一致性。

2.2 动态变化而非固定值

传统方法中的 temperature、top-k 和 top-p 通常是固定值,在整个生成过程中保持不变。这种固定值的设置可能无法适应生成文本时的上下文变化,导致生成结果的质量不稳定。Mirostat 通过动态调整采样温度,根据当前生成的 perplexity 与目标 perplexity 的差距实时修正,从而更好地适应上下文变化,生成更连贯和自然的文本。

# 未完成
#

最近想要研究一下 LLM+ARGFlow构建本地知识库 相关的知识。

我在想,如果 LLM + ARGFlow 能够通喂给LLM资料的形式来完成个人知识化的构建,那么指定的提示词再加上自动生成记忆,将记忆作为使用ARGFlow来的资料,然后将资料喂给LLM,这样是否能实现 具有长期记忆的LLM

阅读全文 »
0%