Skip to content

Commit 3df580d

Browse files
committed
docs: refresh public README
1 parent f2701a3 commit 3df580d

1 file changed

Lines changed: 205 additions & 102 deletions

File tree

README.md

Lines changed: 205 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,147 +1,250 @@
1-
# Visualized Exp
1+
<div align="center">
2+
<p><strong>VISUALIZED EXP</strong></p>
3+
<h1>把复杂问题,展开成可以继续走下去的知识空间</h1>
4+
<p>
5+
一款本地优先的 AI 可视化解释工具。<br />
6+
看清概念关系,沿节点逐层探索,随时选中内容继续追问。
7+
</p>
8+
9+
<p>
10+
<a href="https://github.com/lusblead/Visual-Exp/actions/workflows/ci.yml"><img src="https://github.com/lusblead/Visual-Exp/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI" /></a>
11+
<img src="https://img.shields.io/badge/version-0.2.0-6C63FF" alt="Version 0.2.0" />
12+
<img src="https://img.shields.io/badge/Node.js-%E2%89%A522.13.0-339933?logo=nodedotjs&amp;logoColor=white" alt="Node.js 22.13.0 or newer" />
13+
<img src="https://img.shields.io/badge/platform-Windows-0078D4?logo=windows11&amp;logoColor=white" alt="Windows" />
14+
<a href="LICENSE"><img src="https://img.shields.io/github/license/lusblead/Visual-Exp?color=6C63FF" alt="MIT License" /></a>
15+
</p>
16+
17+
<p>
18+
<a href="#quick-start"><strong>快速开始</strong></a>
19+
·
20+
<a href="#first-use"><strong>首次配置</strong></a>
21+
·
22+
<a href="#user-guide"><strong>使用指南</strong></a>
23+
·
24+
<a href="https://github.com/lusblead/Visual-Exp/issues"><strong>反馈问题</strong></a>
25+
</p>
26+
</div>
27+
28+
---
29+
30+
## 不再被一篇长回答困住
31+
32+
普通 AI 回答把所有信息一次性铺在你面前。Visualized Exp 先呈现当前层最重要的概念和关系,再由你决定下一步往哪里走。
33+
34+
<table>
35+
<tr>
36+
<td align="center" width="33%">
37+
<strong>01 · 提出问题</strong><br />
38+
<sub>输入想真正弄懂的复杂主题</sub>
39+
</td>
40+
<td align="center" width="33%">
41+
<strong>02 · 看清结构</strong><br />
42+
<sub>先获得概念总览与当前层解释</sub>
43+
</td>
44+
<td align="center" width="33%">
45+
<strong>03 · 自由深入</strong><br />
46+
<sub>进入节点、解释术语或选区追问</sub>
47+
</td>
48+
</tr>
49+
</table>
50+
51+
## ✨ 你可以这样探索
52+
53+
<table>
54+
<tr>
55+
<td width="50%" valign="top">
56+
<strong>🧭 递归语义缩放</strong><br /><br />
57+
每次只聚焦当前层。点击感兴趣的节点进入下一层,不必在一张无限扩张的知识图里迷路。
58+
</td>
59+
<td width="50%" valign="top">
60+
<strong>🕸️ 可缩放概念总览</strong><br /><br />
61+
先看核心概念和它们的联系,再阅读正文;需要时可以打开大图查看关系。
62+
</td>
63+
</tr>
64+
<tr>
65+
<td width="50%" valign="top">
66+
<strong>💬 选中内容继续追问</strong><br /><br />
67+
选中一句话,直接“向 AI 提问”,或让系统围绕这段内容继续“深入”。
68+
</td>
69+
<td width="50%" valign="top">
70+
<strong>🔎 语境化术语解释</strong><br /><br />
71+
单击正文中标出的术语查看说明,双击则进入更完整的深入解释。
72+
</td>
73+
</tr>
74+
<tr>
75+
<td width="50%" valign="top">
76+
<strong>🌐 按需联网</strong><br /><br />
77+
主问题和每轮选区对话分别控制是否搜索;配置搜索服务不会自动把所有问题送去联网。
78+
</td>
79+
<td width="50%" valign="top">
80+
<strong>💾 本地知识记录</strong><br /><br />
81+
自动保存探索会话,随时恢复之前的内容,并可导出 Markdown 或 JSON。
82+
</td>
83+
</tr>
84+
</table>
85+
86+
<a id="quick-start"></a>
87+
88+
## 🚀 快速开始
89+
90+
> [!IMPORTANT]
91+
> 完整的一键本地体验目前面向 Windows,因为 API Key 会通过 Windows 凭据管理器保存在当前电脑上。
92+
93+
### 环境要求
94+
95+
| Node.js | Java | Maven | .NET SDK |
96+
| :---: | :---: | :---: | :---: |
97+
| 22.13.0+ | 17+ | 3.6.3+ | 10.0+ |
98+
99+
### 安装并启动
2100

3-
把复杂问题展开成一个可以阅读、追问和继续深入的 AI 可视化解释空间。
101+
```powershell
102+
git clone https://github.com/lusblead/Visual-Exp.git
103+
cd Visual-Exp
104+
npm install
105+
npm run dev:local
106+
```
4107

5-
Visualized Exp 不把回答一次性压成长文或固定模板。它先生成当前层的解释与概念关系,只预备下一层入口;用户可以沿节点递归探索,也可以选中一句话直接向 AI 提问或继续深入
108+
启动完成后,打开 [http://localhost:3000](http://localhost:3000)。按 `Ctrl+C` 可以停止本次启动的所有本地服务
6109

7-
![Visualized Exp 的离线演示:可缩放概念总览与递归阅读界面](docs/assets/product-overview.png)
110+
<details>
111+
<summary><strong>没有 API Key?先打开演示模式</strong></summary>
8112

9-
```mermaid
10-
flowchart LR
11-
Q["复杂问题"] --> O["当前层概念总览"]
12-
O --> R["完整解释"]
13-
R --> N["点击节点进入下一层"]
14-
R --> S["选中句子"]
15-
S --> A["向 AI 提问"]
16-
S --> D["深入解释"]
17-
A -. "按本轮设置" .-> W["受控联网搜索"]
113+
```powershell
114+
npm install
115+
$env:EXPLANATION_MODEL_PROVIDER = "demo"
116+
npm run dev
18117
```
19118

20-
## 核心体验
119+
演示模式不会调用真实模型,也不会启动完整本地后端,因此不包含持久化知识记录和选区 AI 对话。
21120

22-
- 递归语义缩放:根场景只展示 3–6 个高层入口,点击节点进入下一层,并用 `‹ / ›` 沿探索历史移动。
23-
- 概念先行:开头用 Mermaid 绘制当前层概念关系;可打开大图并在 100%–300% 之间缩放。
24-
- 渐进生成:只预生成当前入口的直接子场景,避免提前铺开整张知识图谱。
25-
- 选区双入口:选中正文后可选择“向 AI 提问”或“深入”;左侧对话栏按需打开且可以关闭。
26-
- 语境化名词解释:仅 AI 标注的名词可点击,解释不会修改主语义文档。
27-
- 历史会话:Java 后端持久化知识会话和选区对话,支持刷新恢复、切换与删除。
28-
- 可选联网:主问题提供开/关;选区对话每轮可选关闭、自动或强制。搜索服务已配置不等于已经允许联网。
29-
- 离线演示:没有模型密钥时仍可使用确定性的演示生成器体验主要浏览流程。
121+
</details>
30122

31-
## 模型、协议与搜索服务
123+
<a id="first-use"></a>
32124

33-
“供应商预设”只是可编辑的默认值,不是项目分别实现了每家厂商的私有协议。当前 Java 模型通道实现两种协议:
125+
## ⚙️ 首次配置
34126

35-
| 类型 | 当前实现 |
36-
| --- | --- |
37-
| 模型协议 | OpenAI Chat Completions、Anthropic Messages |
38-
| 模型预设 | OpenAI、Anthropic、DeepSeek、Kimi、GLM、Gemini、通义千问、OpenRouter |
39-
| 自定义模型 | 可配置 Base URL/完整请求 URL、模型 ID、协议和受限认证 Header |
40-
| 搜索适配器 | Tavily Search、Brave Search |
41-
42-
Tavily 当前只用于搜索(Search),未接入 Extract、Crawl、Map 或 Research。搜索 API Key 属于搜索供应商鉴权,与模型 API Key 相互独立;`web_search` 工具本身并不天然要求某一家供应商或某一种 Key。
43-
44-
语义图生成默认通过本机 DeepSeek companion 使用项目定义的 Pro/Flash 模型路由。选区对话在没有启用模型覆盖时复用该通道;只有用户明确保存并启用模型覆盖后,新对话才改用 Java 中的供应商配置,无需重复配置同一把 DeepSeek Key。
45-
46-
## 系统结构
47-
48-
```mermaid
49-
flowchart LR
50-
B["浏览器"] -->|"同源请求"| V["Vinext / TypeScript BFF"]
51-
V --> L["语义图生成与校验"]
52-
V -->|"HttpOnly owner cookie"| J["Java 17 / Spring Boot"]
53-
J --> H["H2 或 PostgreSQL"]
54-
J --> M["模型供应商"]
55-
J --> S["SearchProvider SPI"]
56-
S --> T["Tavily Search"]
57-
S --> R["Brave Search"]
58-
V -->|"仅回环地址"| C["Windows .NET companion"]
59-
C --> D["Windows Credential Manager"]
60-
```
127+
打开页面后,点击问题输入框右侧的设置按钮。
61128

62-
关键边界:
129+
### 1. 连接默认 AI 服务
63130

64-
- 语义文档是知识结构的唯一事实来源;节点保存内容、层级、关系和展示建议,不保存像素坐标或 React 组件名。
65-
- 模型只提交受验证的语义操作或受限的 `web_search(query, freshness?)` 调用,不能指定搜索请求 URL。
66-
- 供应商 Key 只写不回显。Windows companion 将默认 DeepSeek Key 保存在系统凭据管理器;Java 使用 AES-256-GCM 加密模型覆盖和搜索供应商 Key。
67-
- Java 对话提交使用稳定的 `clientTurnId`,持久化 `PENDING / COMPLETED / FAILED / UNKNOWN` 状态,无法确认结果时不会盲目重放付费请求。
131+
在“AI 服务”中填写 DeepSeek API Key,然后点击“保存到本机”。这个服务负责生成可视化解释和深入说明,也会作为选区 AI 对话的默认模型。
68132

69-
更多设计细节见 [最小视觉对话规范](specs/minimal-visual-conversation.md)[会话与凭据边界](specs/conversation-source-and-credentials.md)[Java 后端说明](backend/README.md)
133+
> [!NOTE]
134+
> 保存模型或搜索配置时会执行一次最小验证请求,可能产生少量供应商用量。
70135
71-
## 环境要求
136+
### 2. 可选:更换选区对话模型
72137

73-
完整的 `dev:local` 本地体验目前面向 Windows,因为它依赖 Windows Credential Manager
138+
如果希望“向 AI 提问”使用其他模型,可在“模型覆盖(可选)”中添加并启用配置。模型覆盖只影响之后新建的选区 AI 对话,不会替换默认的可视化解释服务
74139

75-
| 依赖 | 最低版本 |
140+
| 模型预设 | 支持方式 |
76141
| --- | --- |
77-
| Node.js | 22.13.0 |
78-
| Java | 17 |
79-
| Maven | 3.6.3 |
80-
| .NET SDK | 10.0 |
142+
| OpenAI、DeepSeek、Kimi、GLM、Gemini、通义千问、OpenRouter | OpenAI Chat Completions 兼容接口 |
143+
| Anthropic | Anthropic Messages 接口 |
144+
| 自主设置 | 自定义地址、模型 ID 与认证方式 |
81145

82-
## 快速开始
146+
### 3. 可选:连接联网搜索
83147

84-
安装依赖并启动 companion、Java 后端和网站:
148+
在“搜索服务”中配置 **Tavily****Brave Search**,并将它设为当前搜索服务。
85149

86-
```powershell
87-
npm install
88-
npm run dev:local
89-
```
150+
- 主问题:开启“允许下一次主问题联网”。
151+
- 选区对话:发送前为本轮选择“关闭”“自动”或“强制”。
152+
153+
仅保存搜索服务不会自动联网;是否联网仍由对应入口的开关决定。
90154

91-
默认访问 `http://localhost:3000`。首次使用时打开右侧设置:
155+
<a id="user-guide"></a>
92156

93-
1. 在上方保存 DeepSeek Key,用于语义图和默认选区对话。
94-
2. 如有需要,在“模型覆盖”中配置其他模型供应商。
95-
3. 如需联网,配置并启用搜索供应商,再在搜索服务区域允许下一次主问题联网;选区对话仍按每轮单独选择。
157+
## 🧩 30 秒使用指南
96158

97-
保存模型或搜索配置会发起一次最小验证请求,可能计入供应商用量。
159+
| 目标 | 操作 |
160+
| --- | --- |
161+
| 创建解释 | 在顶部输入问题,按回车或点击 `` |
162+
| 进入下一层 | 点击正文区块或区块右侧的 `` |
163+
| 前进或返回 | 使用页面左上角的 ```` |
164+
| 查看术语说明 | 单击正文中带标记的术语 |
165+
| 深入理解术语 | 双击带标记的术语 |
166+
| 追问一句话 | 选中正文,点击“向 AI 提问” |
167+
| 深入选中内容 | 选中正文,点击“深入” |
168+
| 恢复知识记录 | 打开右上角的知识记录面板并选择会话 |
169+
| 导出当前内容 | 在知识记录面板选择 Markdown 或 JSON |
98170

99-
只体验不调用真实模型的前端演示:
171+
### 选择适合你的预生成方式
100172

101-
```powershell
102-
$env:EXPLANATION_MODEL_PROVIDER = "demo"
103-
npm run dev
104-
```
173+
| 模式 | 适合场景 | 模型用量 |
174+
| --- | --- | :---: |
175+
| **省流** | 只在点击后生成下一层 | 较少 |
176+
| **平衡** | 提前准备少量可能访问的内容 | 适中 |
177+
| **深入** | 准备更多下一层内容,减少后续等待 | 较多 |
178+
179+
## 🔐 数据与 API Key
105180

106-
该模式不会自动启动 Java 后端,因此不包含持久化历史和选区对话。手动拆分进程、PostgreSQL 配置及服务端环境变量见 [backend/README.md](backend/README.md)[.env.example](.env.example)。任何密钥都不得使用 `NEXT_PUBLIC_` 前缀。
181+
- 完整本地模式会把知识记录保存在当前电脑上。
182+
- 默认 DeepSeek Key 保存在 Windows 凭据管理器中,不需要写入项目文件。
183+
- 模型和搜索服务的 Key 保存后不会在页面中回显。
184+
- 不要把 API Key 写入代码、提交到 Git,或添加到任何以 `NEXT_PUBLIC_` 开头的变量中。
107185

108-
## 验证
186+
<details>
187+
<summary><strong>端口被占用</strong></summary>
109188

110-
完整的本地发布门禁
189+
可以为网页和后端指定其他端口
111190

112191
```powershell
113-
npm run harness:minimal
192+
$env:PORT = "3001"
193+
$env:BACKEND_PORT = "18080"
194+
npm run dev:local
114195
```
115196

116-
该命令会依次运行 companion 构建、Java 测试、前端构建、Node 测试、TypeScript 类型检查和 ESLint。也可以单独运行:
197+
然后访问 [http://localhost:3001](http://localhost:3001)
198+
199+
</details>
200+
201+
<details>
202+
<summary><strong><code>npm run dev:local</code> 启动失败</strong></summary>
203+
204+
先确认依赖都可以从终端执行:
117205

118206
```powershell
119-
npm test
120-
npm run typecheck
121-
npm run lint
207+
node --version
208+
java -version
209+
mvn -version
210+
dotnet --version
122211
```
123212

124-
自动化测试不需要真实 API Key,也不应发起真实模型或搜索请求。
213+
如果某条命令不存在,请安装对应依赖并重新打开终端。首次启动还需要能够访问 npm、Maven 和 NuGet 的依赖下载服务。
214+
215+
</details>
216+
217+
<details>
218+
<summary><strong>页面可以打开,但无法生成真实解释</strong></summary>
125219

126-
## 安全与部署边界
220+
- 确认不是以 `demo` 模式启动。
221+
- 打开设置,确认 DeepSeek Key 已验证并保存。
222+
- 如果刚替换 Key,请重新提交问题。
127223

128-
本项目当前是本地优先、单用户应用。HttpOnly owner cookie 只用于同一设备上的数据隔离,不是账号登录、强身份认证或多设备同步方案。
224+
</details>
129225

130-
不要把当前本地配置直接当作公开多用户生产服务。公开部署前至少需要补齐:
226+
<details>
227+
<summary><strong>已经配置搜索服务,但回答没有联网</strong></summary>
131228

132-
- 真实的身份认证、授权与租户隔离;
133-
- 请求速率限制、并发上限、配额和费用预算;
134-
- HTTPS、服务端 Secret Manager 和密钥轮换;
135-
- 数据库备份、迁移与恢复演练;
136-
- 出站网络防火墙或代理、审计日志和运行监控。
229+
请同时确认:
137230

138-
请勿提交 `.env`、API Key、Token、数据库文件、日志、个人会话或包含这些内容的截图。安全问题请按 [SECURITY.md](SECURITY.md) 私下报告。
231+
- Tavily 或 Brave Search 已验证并设为当前服务;
232+
- 主问题的“允许下一次主问题联网”已开启,或选区对话本轮选择了“自动”或“强制”。
139233

140-
## 参与贡献
234+
</details>
235+
236+
## 🤝 参与项目
237+
238+
| | |
239+
| --- | --- |
240+
| 🧾 [查看版本记录](CHANGELOG.md) | 🛠️ [阅读贡献指南](CONTRIBUTING.md) |
241+
| 🐞 [提交问题](https://github.com/lusblead/Visual-Exp/issues) | 🔒 [私下报告安全问题](SECURITY.md) |
141242

142-
提交代码前请阅读 [CONTRIBUTING.md](CONTRIBUTING.md),并运行完整门禁。行为变更还应同步更新 `docs/feature-flows/` 中对应的流程与可追溯信息
243+
Visualized Exp 当前定位为本地优先、单用户应用,暂不提供可直接公开运营的多用户 SaaS 部署方案
143244

144-
## 版本与许可证
245+
---
145246

146-
- 版本记录:[CHANGELOG.md](CHANGELOG.md)
147-
- 许可证:[MIT](LICENSE)
247+
<div align="center">
248+
<p>如果 Visualized Exp 对你有帮助,欢迎点一个 Star 或分享你的使用反馈。</p>
249+
<p><sub>Local-first · Single-user · MIT License</sub></p>
250+
</div>

0 commit comments

Comments
 (0)