Add L0 index and anchor UI updates
This commit is contained in:
@@ -83,7 +83,7 @@
|
||||
<!-- Facts -->
|
||||
<section class="card facts">
|
||||
<div class="sec-head">
|
||||
<div class="sec-title">世界状态</div>
|
||||
<div class="sec-title">世界状态</div>
|
||||
<button class="sec-btn" data-section="facts">编辑</button>
|
||||
</div>
|
||||
<div class="facts-list scroll" id="facts-list"></div>
|
||||
@@ -116,6 +116,7 @@
|
||||
<div class="sel-trigger" id="char-sel-trigger">
|
||||
<span id="sel-char-text">选择角色</span>
|
||||
</div>
|
||||
<div class="settings-hint" id="anchor-extra" style="margin-top:-6px"></div>
|
||||
<div class="sel-opts" id="char-sel-opts">
|
||||
<div class="sel-opt" data-value="">暂无角色</div>
|
||||
</div>
|
||||
@@ -346,6 +347,8 @@
|
||||
<div class="tab-pane" id="tab-vector">
|
||||
<div class="settings-section">
|
||||
<div class="settings-section-title">智能记忆(向量检索)</div>
|
||||
|
||||
<!-- 启用开关 -->
|
||||
<div class="settings-checkbox-group">
|
||||
<label class="settings-checkbox">
|
||||
<input type="checkbox" id="vector-enabled">
|
||||
@@ -353,104 +356,34 @@
|
||||
<span class="checkbox-label">启用向量检索</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div id="vector-config-area" class="hidden">
|
||||
<!-- API Key -->
|
||||
<div class="settings-row" style="margin-top:16px">
|
||||
<div class="settings-field full">
|
||||
<label>Embedding 引擎</label>
|
||||
<div class="engine-selector">
|
||||
<label class="engine-option">
|
||||
<input type="radio" name="vector-engine" value="local">
|
||||
<span>本地模型</span>
|
||||
</label>
|
||||
<label class="engine-option">
|
||||
<input type="radio" name="vector-engine" value="online" checked>
|
||||
<span>在线服务</span>
|
||||
</label>
|
||||
<label>硅基流动 API Key</label>
|
||||
<input type="password" id="vector-api-key" placeholder="sk-xxx">
|
||||
<div class="settings-hint">
|
||||
💡 <a href="https://siliconflow.cn" target="_blank">硅基流动</a>
|
||||
内置使用免费模型(bge-m3、Qwen3-8B),注册认证拿 Key 即可
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Local Engine -->
|
||||
<div id="local-engine-area" class="engine-area hidden">
|
||||
<div class="model-select-row">
|
||||
<select id="local-model-select">
|
||||
<option value="bge-small-zh">中文轻量 (51MB)</option>
|
||||
<option value="bge-base-zh">中文标准 (102MB)</option>
|
||||
<option value="e5-small">多语言 (118MB)</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="model-desc" id="local-model-desc">手机/低配适用</div>
|
||||
<div class="engine-status-row">
|
||||
<div class="engine-status" id="local-model-status">
|
||||
<span class="status-dot"></span>
|
||||
<span class="status-text">检查中...</span>
|
||||
</div>
|
||||
<div class="engine-actions" id="local-model-actions">
|
||||
<button class="btn btn-sm btn-p" id="btn-download-model">下载</button>
|
||||
<button class="btn btn-sm" id="btn-cancel-download"
|
||||
style="display:none">取消</button>
|
||||
<button class="btn btn-sm btn-del" id="btn-delete-model"
|
||||
style="display:none">删除</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="engine-progress hidden" id="local-model-progress" style="margin-top: 8px;">
|
||||
<div class="progress-bar">
|
||||
<div class="progress-inner"></div>
|
||||
</div>
|
||||
<span class="progress-text">0%</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Online Engine -->
|
||||
<div id="online-engine-area" class="engine-area">
|
||||
<div class="settings-row">
|
||||
<div class="settings-field full">
|
||||
<label>服务渠道</label>
|
||||
<select id="online-provider">
|
||||
<option value="siliconflow">硅基流动(推荐)</option>
|
||||
<option value="cohere">Cohere</option>
|
||||
<option value="openai">OpenAI 兼容(可自建)</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="settings-row" id="online-url-row">
|
||||
<div class="settings-field full">
|
||||
<label>API URL</label>
|
||||
<input type="text" id="vector-api-url" placeholder="https://api.siliconflow.cn">
|
||||
</div>
|
||||
</div>
|
||||
<div class="settings-row">
|
||||
<div class="settings-field full">
|
||||
<label>API Key</label>
|
||||
<input type="password" id="vector-api-key" placeholder="sk-xxx">
|
||||
</div>
|
||||
</div>
|
||||
<div class="settings-row">
|
||||
<div class="settings-field full">
|
||||
<label>模型</label>
|
||||
<div style="display:flex;gap:8px">
|
||||
<select id="vector-model-select" style="flex:1">
|
||||
<option value="">请选择模型</option>
|
||||
</select>
|
||||
<button class="btn btn-sm" id="btn-fetch-models"
|
||||
style="display:none">拉取</button>
|
||||
<!-- 测试连接 -->
|
||||
<div class="settings-row">
|
||||
<div class="settings-field full">
|
||||
<div class="engine-status-row">
|
||||
<div class="engine-status" id="online-api-status">
|
||||
<span class="status-dot"></span>
|
||||
<span class="status-text">未测试</span>
|
||||
</div>
|
||||
<button class="btn btn-sm" id="btn-test-vector-api">测试连接</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="engine-status-row">
|
||||
<div class="engine-status" id="online-api-status">
|
||||
<span class="status-dot"></span>
|
||||
<span class="status-text">未测试</span>
|
||||
</div>
|
||||
<button class="btn btn-sm" id="btn-test-vector-api">测试连接</button>
|
||||
</div>
|
||||
<div class="provider-hint" id="provider-hint">
|
||||
💡 <a href="https://siliconflow.cn" target="_blank">硅基流动</a> 免费、速度快、质量好,推荐
|
||||
BAAI/bge-m3
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 文本过滤规则 - Redesigned for mobile -->
|
||||
<!-- 文本过滤规则 -->
|
||||
<div class="filter-rules-section">
|
||||
<div class="filter-rules-header">
|
||||
<label>文本过滤规则</label>
|
||||
@@ -463,76 +396,115 @@
|
||||
添加
|
||||
</button>
|
||||
</div>
|
||||
<p class="settings-hint">过滤干扰内容(如思考标签):遇到「起始」跳过直到「结束」</p>
|
||||
<p class="settings-hint">过滤干扰内容(如思考标签)</p>
|
||||
<div id="filter-rules-list" class="filter-rules-list"></div>
|
||||
</div>
|
||||
|
||||
<!-- Vector Stats -->
|
||||
<!-- ═══════════════════════════════════════════════════════════ -->
|
||||
<!-- 记忆锚点(L0 文本层)-->
|
||||
<!-- ═══════════════════════════════════════════════════════════ -->
|
||||
<div class="anchor-section">
|
||||
<div class="anchor-header">
|
||||
<div class="anchor-title">
|
||||
<span class="anchor-icon">📌</span>
|
||||
<span>记忆锚点</span>
|
||||
</div>
|
||||
<div class="anchor-hint">从对话中提取叙事锚点(情绪、地点、动作、揭示等)</div>
|
||||
</div>
|
||||
|
||||
<div class="anchor-stats" id="anchor-stats">
|
||||
<div class="anchor-stat-item">
|
||||
<span class="anchor-stat-label">已提取楼层:</span>
|
||||
<span class="anchor-stat-value"><strong id="anchor-extracted">0</strong></span>
|
||||
</div>
|
||||
<span class="anchor-stat-sep">/</span>
|
||||
<div class="anchor-stat-item">
|
||||
<span class="anchor-stat-label">总 AI 楼层:</span>
|
||||
<span class="anchor-stat-value"><strong id="anchor-total">0</strong></span>
|
||||
</div>
|
||||
<div class="anchor-stat-pending" id="anchor-pending-wrap">
|
||||
<span>(待提取 <strong id="anchor-pending">0</strong> 楼)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 进度条 -->
|
||||
<div class="anchor-progress hidden" id="anchor-progress">
|
||||
<div class="progress-bar">
|
||||
<div class="progress-inner"></div>
|
||||
</div>
|
||||
<span class="progress-text">0/0</span>
|
||||
</div>
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<div class="anchor-actions" id="anchor-action-row">
|
||||
<button class="btn btn-sm btn-p" id="btn-anchor-generate">生成</button>
|
||||
<button class="btn btn-sm btn-del" id="btn-anchor-clear">清空</button>
|
||||
<button class="btn btn-sm hidden" id="btn-anchor-cancel">取消</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ═══════════════════════════════════════════════════════════ -->
|
||||
<!-- 当前聊天向量 -->
|
||||
<!-- ═══════════════════════════════════════════════════════════ -->
|
||||
<div class="vector-chat-section">
|
||||
<div class="settings-row">
|
||||
<div class="settings-field full">
|
||||
<label>当前聊天向量</label>
|
||||
<div class="vector-stats" id="vector-stats">
|
||||
<div class="vector-stat-col">
|
||||
<span class="vector-stat-label">事件向量:</span>
|
||||
<span class="vector-stat-label">L0 Atoms:</span>
|
||||
<span class="vector-stat-value"><strong
|
||||
id="vector-event-count">0</strong>/<strong
|
||||
id="vector-event-total">0</strong></span>
|
||||
id="vector-atom-count">0</strong></span>
|
||||
</div>
|
||||
<span class="vector-stat-sep">·</span>
|
||||
<div class="vector-stat-col">
|
||||
<span class="vector-stat-label">Chunks:</span>
|
||||
<span class="vector-stat-label">L1 Chunks:</span>
|
||||
<span class="vector-stat-value"><strong
|
||||
id="vector-chunk-count">0</strong>
|
||||
个(<span id="vector-chunk-floors">0</span>/<span
|
||||
id="vector-chunk-total">0</span> 层)</span>
|
||||
id="vector-chunk-count">0</strong></span>
|
||||
</div>
|
||||
<span class="vector-stat-sep">·</span>
|
||||
<div class="vector-stat-col">
|
||||
<span class="vector-stat-label">消息:</span>
|
||||
<span class="vector-stat-label">L2 Events:</span>
|
||||
<span class="vector-stat-value"><strong
|
||||
id="vector-message-count">0</strong></span>
|
||||
id="vector-event-count">0</strong></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="vector-mismatch-warning hidden" id="vector-mismatch-warning">
|
||||
⚠ 引擎/模型已变更,需重新生成向量
|
||||
⚠ 需重新生成向量
|
||||
</div>
|
||||
<div class="vector-empty-warning hidden" id="vector-empty-l0-warning">
|
||||
⚠ 记忆锚点为空,建议先生成
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="engine-progress hidden" id="vector-gen-progress-l1">
|
||||
<div style="font-size:.75rem;color:var(--txt3);margin-bottom:4px">L1 片段</div>
|
||||
|
||||
<!-- 进度条 -->
|
||||
<div class="engine-progress hidden" id="vector-gen-progress">
|
||||
<div class="progress-bar">
|
||||
<div class="progress-inner"></div>
|
||||
</div>
|
||||
<span class="progress-text">0/0</span>
|
||||
</div>
|
||||
<div class="engine-progress hidden" id="vector-gen-progress-l2">
|
||||
<div style="font-size:.75rem;color:var(--txt3);margin-bottom:4px">L2 事件</div>
|
||||
<div class="progress-bar">
|
||||
<div class="progress-inner"></div>
|
||||
</div>
|
||||
<span class="progress-text">0/0</span>
|
||||
</div>
|
||||
<div class="settings-hint" id="vector-perf-l1"></div>
|
||||
<div class="settings-hint" id="vector-perf-l2"></div>
|
||||
<div class="settings-btn-row" id="vector-action-row">
|
||||
<button class="btn btn-sm btn-p" id="btn-gen-vectors">生成向量</button>
|
||||
<button class="btn btn-sm btn-del" id="btn-clear-vectors">清除向量</button>
|
||||
<button class="btn btn-sm hidden" id="btn-cancel-vectors">取消</button>
|
||||
</div>
|
||||
<div class="settings-hint" style="margin-top:8px">首次生成向量可能耗时较久,页面短暂卡顿属正常。若本地模型重进酒馆后需重下。
|
||||
<span class="progress-text">0%</span>
|
||||
</div>
|
||||
|
||||
<!-- 向量导入导出 -->
|
||||
<!-- 操作按钮 -->
|
||||
<div class="settings-btn-row" id="vector-action-row">
|
||||
<button class="btn btn-sm btn-p" id="btn-gen-vectors">生成向量</button>
|
||||
<button class="btn btn-sm btn-del" id="btn-clear-vectors">清除</button>
|
||||
<button class="btn btn-sm hidden" id="btn-cancel-vectors">取消</button>
|
||||
</div>
|
||||
|
||||
<div class="settings-hint" style="margin-top:8px">
|
||||
向量化现有 L0/L1/L2 数据(首次可能需要 1-2 分钟)
|
||||
</div>
|
||||
|
||||
<!-- 导入导出 -->
|
||||
<div class="vector-io-section">
|
||||
<div class="settings-row">
|
||||
<div class="settings-field full">
|
||||
<label>向量迁移(跨设备 / 防清缓存)</label>
|
||||
<div class="settings-hint" style="margin-bottom:8px">导出/导入均为 zip 格式,勿解压
|
||||
</div>
|
||||
<div class="settings-btn-row" id="vector-io-row" style="margin-top:8px">
|
||||
<button class="btn btn-sm" id="btn-export-vectors">导出向量</button>
|
||||
<button class="btn btn-sm" id="btn-import-vectors">导入向量</button>
|
||||
<label>向量迁移</label>
|
||||
<div class="settings-btn-row" style="margin-top:8px">
|
||||
<button class="btn btn-sm" id="btn-export-vectors">导出</button>
|
||||
<button class="btn btn-sm" id="btn-import-vectors">导入</button>
|
||||
</div>
|
||||
<div class="settings-hint" id="vector-io-status"></div>
|
||||
</div>
|
||||
@@ -595,8 +567,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script>
|
||||
<script src="story-summary-ui.js"></script>
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user