8 Commits

Author SHA1 Message Date
5df9c5ebd3 Update Amily2-TextOptimization.html 2026-01-01 02:57:43 +08:00
20d6f8dceb Update state.js 2026-01-01 02:57:23 +08:00
a60e03116b Update commands.js 2026-01-01 02:57:03 +08:00
89da0f9ff8 Update events.js 2026-01-01 02:56:41 +08:00
a793a990bb Create README.md 2026-01-01 02:31:25 +08:00
7fd41f01e3 Delete 记忆管理系统使用教程.html 2026-01-01 02:30:55 +08:00
cbf8b6d728 Add files via upload 2026-01-01 02:30:39 +08:00
3355bfed81 Add files via upload 2026-01-01 02:26:20 +08:00
6 changed files with 228 additions and 22 deletions

123
MemoryGuide.md Normal file
View File

@@ -0,0 +1,123 @@
# 📘 记忆管理系统使用手册
> **设计老师**:繁华 & 可乐
**前言**
本系统基于 Amily2 插件中的 `记忆管理``总结模块``表格模块` 功能进行联动实现。
* **定位**:作为 Amily2 `超级记忆功能` 的替代方案。
* **优势**:在记忆的细节(如曾经的心动瞬间、铭记一生的誓言)上表现优异。
* **兼容性**:两者可以兼容!可以单独使用,也可以配合使用。
> ⚠️ **重要警告**
>
> 当你按照本教程使用记忆系统功能并进行设置后,**原来的剧情优化实际功能将被改变**(即大家理解的剧情推进被改为记忆管理)。
> 请不要再根据 Amily2 谷歌文档教程进行理解设置,请以本教程为准。
>
> **如何恢复?**
> 若后续不想使用本 `记忆管理系统` 功能,或想恢复原本的 `剧情优化` 功能,只需要:
> 1. 切换 `剧情优化预设`(路径:剧情优化功能页面 `提示词指令` → `提示词管理`
> 2. 或分别点击 `恢复主提示词`、`恢复拦截任务`、`恢复注入指令` 三个按钮即可。
## 一、前置通用设置
无论使用 `总结流` 还是 `超级记忆` 适配,**必须**进行以下设置。
1. **导入预设**
* 请在群文件下载 `记忆管理系统可乐版-v1.17.2``剧情优化功能-记忆管理系统.json` 预设文件。
* **导入路径**`amily2插件``剧情优化功能``提示词指令``提示词管理``导入预设`
2. **参数设置**
| 参数项 | 对应设置 | 建议值 | 说明 |
| :--- | :--- | :--- | :--- |
| 主线剧情 (sulv1) | 单次输出最大回忆记录数 | **5 - 20** | 控制每次返回的回忆条数 (范围: 0-无限) |
| 个人线 (sulv2) | 记忆关联性阈值 | **0.3 - 0.5** | 控制回忆的关联性 (范围: 0.1-1)<br>0.1最准确/直接相关1包含间接相关 |
3. **标签提取与内容排除**
* **设置路径**`amily2插件``总结模块``标签提取/内容排除`
* **提取 `正文标签`**:填写你的正文内包裹标签。
* **内容排除**
* `<Plot_progression>``</Plot_progression>` (注意:不要复制反引号)
* `正文标签内` 可能出现的 `非正文内容标签`(例如用了正文优化后的思维连或者某些预设奇奇怪怪的功能)
* *若是可乐版*`<details>``</details>`
## 二、记忆管理功能设置
请按照以下配置调整 `记忆管理功能` 页面:
### 1. 基础开关
* 剧情优化开关:🔴 **关闭** (防笨蛋,设置完全部后再开启)
* EJS预处理🔴 **关闭**
* 启用世界书:🟢 **开启**
* 启用表格:🟢 **开启**
### 2. 上下文与模型
* 上下文条数:`5` (建议设置单数 1、3、5)
* 世界书最大字符数:`120000` (DS V3或V3.2模型推荐此数值)
* 最大 Tokens`4000` (建议默认)
* 温度:`1` (越小越准建议1)
> **🤖 模型推荐**
> * **DS V3**:稳定、聪明、简洁、快。
> * **DS V3.2**:(推荐)需额外设置 `魔法棒` → `提示词链` → `剧情推进提示词` → `恢复默认` → `保存`。
> * *注:不建议使用其他快速模型。*
## 三、总结使用方式
1. **提示词恢复默认**
* 插件版本达到 v1.7.4 版本及以上,总结模块中,大小总结的 `主要提示词``任务提示词` 需恢复默认并保存。
* **操作路径**`amily2插件``总结模块``小总结功能(微言录)` / `大总结功能(宏史卷)`
* **操作**:分别点击 `恢复默认` 按钮,并点击 **保存**
* 💡 **建议操作:重新总结**
* 恢复提示词后,最好进行一次重新总结。
* **推荐设置**:模型 2.5pro,温度 1最大 Tokens 30000总结阈值 50。
* **操作**:一次性批量总结完旧楼层。
* **注意**:中途若世界书字符数过多,可使用一次大总结后继续。
2. **总结设置**
* **大总结**:当世界书 `【敕史局】对话流水总账` 对话流水总账达到了 4 万以上字符数。
* **小总结设置**
* 交互式巡录:🟢 **开启**
* 静默总结:🟢 **开启**
* 存世界书:🟢 **开启**
* 上传向量:🔴 **关闭**
* 总结阈值和保留层数按个人情况或默认。推荐10-20
* **模型推荐**哈基米2.5p。
3. **设置总结世界书**
* **路径**`amily2插件``插件首页下拉``总结与法律`
* **配置**:选择 `写入独立档案`、选择 `激活模式蓝灯`
4. **初始化与启动**
1. **生成总结**:开始玩卡触发一次自动总结,已有聊天的直接手动总结一次(开始远征)。
2. **开启功能**:回到插件的 `剧情优化功能`,将 `剧情优化开关` 切换为 🟢 **开启**
3. **关联世界书**:点击 `上下文设置` (启用世界书),将世界书来源选择 `自定`,选择名为 `Amily2-Lore-char-...` 的世界书,勾选总结出来的世界书条目 `【敕史局】对话流水总帐`,并且 **勾选全选**(务必确认,世界书中就只有 `【敕史局】对话流水总帐` 这个条目)。
5. **隐藏楼层**
1. **开启功能**:总结模块上方的 `皇家史册管理员`
2.`按阈值隐藏` 切换为 🟢 **开启**
3. 下方数字设置为 `10及以下`此处推荐带摘要的预设并且有X楼前只发送摘要。
6. **测试方式 (可选)**
* 开启 `密折司` 功能 → 发送一条消息 → 等待 `剧情优化提示` 完成,自动弹出 `密折司` 页面 → 点击取消,查看 `用户消息` 确认效果。
## 四、搭配表格 (必须)
### 1. 开启表格支持
* 路径:剧情优化功能 → `上下文设置``启用表格`
### 2. 表格模块设置
* 路径:`amily2插件``表格模块``操作中心`
* ✅ 表格系统总开关:🟢 **开启**
* ❌ 启用表格注入:🔴 **关闭**
* ✅ 启用上下文优化 (合并世界书):🟢 **开启**
* ⚙️ 上下文深度:`3` (建议设置单数 1、3、5)
* ⚙️ 填表批次:`4` (若无总结表则使用0)
* ⚙️ 保留楼层:`2` (若无总结表则使用0)
### 3. 注意事项
* 正常游玩即可。
* ⚠️ **重要**:使用表格时,请注意每次填表后检查填写的准确性,否则回忆出来的内容也会是错误的。
---
*Designed for Amily2 Chat Optimisation*

91
README.md Normal file
View File

@@ -0,0 +1,91 @@
# Amily2号聊天优化助手 (ST-Amily2-Chat-Optimisation)
欢迎使用 **Amily2号聊天优化助手**!这是一个为 SillyTavern (酒馆) 量身打造的综合性增强插件,旨在通过全方位的智能化功能,为您带来更连贯、更沉浸、更具深度的角色扮演体验。
本插件集成了多项创新功能,让您的 AI 角色不仅拥有“超强记忆”,还能随着剧情发展不断成长。
> 💡 **推荐阅读**[记忆管理系统使用教程](MemoryGuide.md)
>
> *这是由繁华与可乐老师设计的进阶记忆方案,在记忆细节(如心动瞬间、誓言)上表现优异,强烈推荐阅读!*
## 🌟 核心功能亮点
### 1. 📖 动态角色档案 (Character World Book)
告别千篇一律的角色卡!插件会在聊天过程中,自动感知角色的性格变化、经历过的重要事件以及当前状态,并实时更新到角色的档案中。
* **自动记录**无需手动编辑AI 会自动为您维护角色的最新设定。
* **即时更新**:角色的每一次成长和变化都会被记录下来,确保长期聊天的一致性。
* **数据驱动**:为未来的复杂互动(如关系网分析)打下坚实基础。
### 2. 📊 智能表格系统 (Table System)
这是插件的数据基石,赋予 AI 像 RPG 游戏一样的状态追踪能力。
* **结构化管理**:以表格形式精确记录物品栏、任务日志、当前时间、地点等关键信息。
* **自主更新**AI 能够理解剧情并自动对表格数据进行增删改查,无需人工干预。
* **多模式填表**:支持“分步填表”和“批量填表”,利用独立 API 处理数据,准确高效且不污染主对话。
### 3. 🧠 超级记忆系统 (Super Memory)
基于表格系统的数据,让 AI 拥有过目不忘的能力。
* **万物皆可记**:将表格中的物品、任务、线索等信息转化为世界书条目,被清晰地记录在案。
* **智能检索**AI 会在需要时自动回忆起相关信息,不再出现“吃书”或遗忘关键设定的情况。
* **时光倒流**:支持在回退聊天时自动恢复记忆状态,确保记忆与剧情进度一致。
### 4. 🕸️ 人物关系图谱 (Relationship Graph)
不仅仅是文字,我们让 AI “看见”关系。
* **关系可视化**:通过直观的图谱展示角色之间错综复杂的社交网络。
* **深度理解**:帮助 AI 更好地理解人物之间的亲疏远近和爱恨情仇,做出更符合逻辑的互动。
* **图谱增强检索 (Graph RAG)**:利用图谱结构增强 AI 的上下文理解能力。
### 5. ✍️ 文本与剧情优化
让每一次对话都如小说般精彩。
* **回复增强**:智能分析并提升 AI 回复的文笔和逻辑,提供更高质量的阅读体验。
* **即时优化**:在 AI 生成回复后,自动提取核心内容并进行润色。
### 6. 📚 翰林院 (RAG 知识库)
强大的检索增强生成系统,让 AI 能够利用海量的外部知识。
* **忆识宝库**:将聊天记录、手动输入的文本或世界书条目转化为向量数据,存入“忆识宝库”。
* **精准检索**:在聊天时自动检索宝库中最相关的内容,注入到提示词中,让角色“记起”相关信息。
* **忆识精炼 (Rerank)**:对初步检索结果进行二次排序,选出最相关的几条,提高知识注入的精准度。
### 7. 📜 国史馆 (Historiographer)
负责长篇内容处理的超级模块。
* **自动总结**:在后台默默记录剧情发展,生成精炼的摘要。
* **世界书精炼**:自动整理和优化世界书条目,保持记忆库的整洁和高效。
### 8. 📝 密折司 (Prompt Inspector)
强大的提示词实时审查与编辑工具。
* **最后一道防线**:在 AI 生成请求发送前的“最后一刻”拦截并审查提示词。
* **御笔亲批**:允许用户直接修改最终发送给 AI 的提示词,确保一切尽在掌握。
### 9. 🌍 世界书编辑器 (World Editor)
功能强大的表格化世界书管理工具。
* **高效管理**:提供类似 Excel 的界面,支持批量编辑、复制、删除等操作。
* **高级视图**:支持按关键词搜索、排序和过滤,轻松管理庞大的设定集。
### 10. 📖 术语表与小说处理 (Glossary)
* **小说导入**:支持上传小说文本,自动分块并生成剧情摘要和结构化数据。
* **世界书重组**:智能合并和整理分散的世界书条目。
### 11. 🎨 沉浸式 UI 体验
* **动态面板**:支持在聊天气泡中直接显示状态栏、日历等动态内容,增强游戏的代入感。
* **便捷操作**:提供悬浮窗和快捷指令,让您随时随地掌控全局。
* **优化前文查看器**:直观展示剧情优化前后的文本差异。
### 12. ⚙️ 预设设置 (Preset Settings)
* **可视化编辑**:通过拖拽和点击,轻松定制各个功能模块的提示词链。
* **多场景适配**:支持创建和切换不同的预设,适应不同的聊天场景和模型。
### 13. 🤖 自动角色卡生成器 (Auto Char Card)
类 CL 架构的智能代理,为您自动设计和优化角色卡。
* **单代理循环**:采用先进的 Think-Act-Observe 循环,确保逻辑连贯,自我修正。
* **动态规则注入**支持自定义风格指南和世界观规则AI 会像查阅资料一样遵守这些规范。
* **智能工具调用**AI 拥有全套工具,可以自主规划、执行并反思,为您打造独一无二的角色设定。
### 14. 🌐 在线互动
* **实时统计**:可以看到当前有多少位同好正在一起使用本插件,感受社区的陪伴。
---
## 🚀 如何开始
安装本插件后,您可以在 SillyTavern 的扩展栏中找到 **Amily2** 的相关设置。插件的大部分功能在后台自动运行,您只需专注于享受与角色的互动即可。
祝您在 Amily2 的辅助下,谱写出更多动人的故事!

View File

@@ -51,17 +51,6 @@
<label for="amily2_show_optimization_toast">显示优化通知</label> <label for="amily2_show_optimization_toast">显示优化通知</label>
<small class="notes">启用后,将在优化完成后弹出通知。</small> <small class="notes">启用后,将在优化完成后弹出通知。</small>
</div> </div>
<div class="amily2_settings_block">
<label>优化模式选择:</label>
<div class="radio-toggle-group">
<input type="radio" id="amily2_mode_intercept" name="amily2_optimization_mode" value="intercept" checked>
<label for="amily2_mode_intercept">无感优化</label>
<input type="radio" id="amily2_mode_refresh" name="amily2_optimization_mode" value="refresh">
<label for="amily2_mode_refresh">刷新优化</label>
</div>
<small class="notes">无感优化:直接替换文本,速度更快但要关流式,高楼层推荐。刷新优化:重载聊天界面,更加稳定无需关流式,低楼层推荐。</small>
</div>
</fieldset> </fieldset>
<fieldset class="settings-group"> <fieldset class="settings-group">

View File

@@ -4,6 +4,7 @@ import { extensionName } from "../utils/settings.js";
import { SlashCommand } from "/scripts/slash-commands/SlashCommand.js"; import { SlashCommand } from "/scripts/slash-commands/SlashCommand.js";
import { SlashCommandParser } from "/scripts/slash-commands/SlashCommandParser.js"; import { SlashCommandParser } from "/scripts/slash-commands/SlashCommandParser.js";
import { checkAndFixWithAPI } from "./api.js"; import { checkAndFixWithAPI } from "./api.js";
import { amilyHelper } from './tavern-helper/main.js';
async function checkLatestMessage() { async function checkLatestMessage() {
const context = getContext(); const context = getContext();
@@ -94,9 +95,12 @@ export async function fixCommand() {
result.optimizedContent && result.optimizedContent &&
result.optimizedContent !== latestMessage.mes result.optimizedContent !== latestMessage.mes
) { ) {
latestMessage.mes = result.optimizedContent; const messageId = chat.length - 1;
await saveChatConditional(); await amilyHelper.setChatMessage(
await reloadCurrentChat(); { message: result.optimizedContent },
messageId,
{ refresh: 'display_and_render_current' }
);
toastr.success("回复已修复", "命令检查器"); toastr.success("回复已修复", "命令检查器");
} else { } else {
toastr.info("未检测到需要修复的问题", "命令检查器"); toastr.info("未检测到需要修复的问题", "命令检查器");

View File

@@ -65,6 +65,7 @@ import { processOptimization } from "./summarizer.js";
import { executeAutoHide } from './autoHideManager.js'; import { executeAutoHide } from './autoHideManager.js';
import { checkAndTriggerAutoSummary } from './historiographer.js'; import { checkAndTriggerAutoSummary } from './historiographer.js';
import { fillWithSecondaryApi } from './table-system/secondary-filler.js'; import { fillWithSecondaryApi } from './table-system/secondary-filler.js';
import { amilyHelper } from './tavern-helper/main.js';
export async function onMessageReceived(data) { export async function onMessageReceived(data) {
window.lastPreOptimizationResult = null; window.lastPreOptimizationResult = null;
@@ -97,11 +98,12 @@ export async function onMessageReceived(data) {
} }
if (result && result.optimizedContent && result.optimizedContent !== latestMessage.mes) { if (result && result.optimizedContent && result.optimizedContent !== latestMessage.mes) {
latestMessage.mes = result.optimizedContent; const messageId = chat.length - 1;
await saveChatConditional(); await amilyHelper.setChatMessage(
if (settings.optimizationMode === 'refresh') { { message: result.optimizedContent },
await reloadCurrentChat(); messageId,
} { refresh: 'display_and_render_current' }
);
} }
} else { } else {
console.log("[Amily2号-正文优化] 检测到消息并非AI对用户的直接回复已跳过优化。"); console.log("[Amily2号-正文优化] 检测到消息并非AI对用户的直接回复已跳过优化。");

View File

@@ -98,9 +98,6 @@ export function updateUI() {
$("#amily2_optimization_target_tag").val(settings.optimizationTargetTag); $("#amily2_optimization_target_tag").val(settings.optimizationTargetTag);
$(
`input[name="amily2_optimization_mode"][value="${settings.optimizationMode}"]`,
).prop("checked", true);
$("#amily2_optimization_enabled").prop( $("#amily2_optimization_enabled").prop(
"checked", "checked",
settings.optimizationEnabled, settings.optimizationEnabled,