# Lacan Knowledge OS
**面向拉康精神分析的语料驱动研究环境。**
证据优先,解释其次,绝不编造。
[English](README.md) · [**中文**](README.zh.md) · [Français](README.fr.md) · [日本語](README.ja.md) · [Deutsch](README.de.md) · [Italiano](README.it.md)
[](LICENSE)
[](docs/ARCHITECTURE.md)
[](docs/SCHOLARLY_REGRESSION_SPEC_V1.md)
[](docs/MCP_TOOL_CONTRACTS.md)
[](https://github.com/deepseek-ai)
---
> **这个系统只围绕一条规则**
>
> *任何断言都必须能落回一个段号。*
>
> 语料撑不住的问题,系统会**弃权** —— 它不会用模型知识作答。
> **弃权是结果,不是错误。**
---
## 目录
| | |
|---|---|
| [1. 这是什么](#1-这是什么) | [6. 架构](#6-架构) |
| [2. 给谁用](#2-给谁用) | [7. 在 DSH / 任意 MCP 客户端里使用](#7-在-dsh--任意-mcp-客户端里使用) |
| [3. 它拒绝做什么](#3-它拒绝做什么) | [8. 自备语料(重要)](#8-自备语料重要) |
| [4. 快速开始](#4-快速开始) | [9. 优势与劣势](#9-优势与劣势) |
| [5. 怎么用](#5-怎么用) | [10. 状态、路线图、参与](#10-状态路线图参与) |
---
## 1. 这是什么
**Lacan Knowledge OS** 是一个本地、离线优先的拉康研究仪器。它把研讨班与文集的文本
变成**可引用的证据库**,并在你的问题与任何答案之间放了一个**冻结的学术内核**。
一个系统,六件事:
| | 能力 | 它给你什么 |
|---|---|---|
| 🔎 | **Research** | 提问 → 内核检索段落、构建证据契约,**然后**才生成答案;答案里每条 claim 都必须通过引用与蕴含校验 |
| 📖 | **Explore** | 直接读语料:段落、会话、研讨班、概念、术语 —— 不经过任何模型 |
| 🔬 | **Evidence Inspector** | `答案 → claim → 段落 → 会话 → 研讨班 → 见证本/来源`,并给出被引用的**那一句**与它的上下文窗口 |
| 🗂️ | **Research Projects** | 把一次次运行变成长期课题(问题、假设、段落、人物、个案、书目)|
| 📚 | **文献与引用** | 复核状态、元数据完整度、逐样式引用可用性 —— **以及不可用的原因** |
| ✍️ | **Obsidian 桥** | 证据与校验留在这里;你的理解、笔记与写作留在你自己的 vault 里 |
## 2. 给谁用
- **研究者与博士生**:需要精确引用拉康,并能指出一个解读**从哪来**。
- **读书会与研讨班**:想要一个可共同检查的证据底座。
- **工具作者**:想要一个**冻结内核**架构的真实范例 —— 语义层不可漂移,产品层围着它演化。
- **AI 工程师**:关心"有据生成 + 显式弃权契约",而不是给一个置信度分数。
## 3. 它拒绝做什么
这些"拒绝"就是设计本身,不是缺陷:
| 拒绝 | 原因 |
|---|---|
| **不凭模型知识作答** | 合成步骤只允许使用检索到的证据;契约不足即输出 `ABSTAINED`。 |
| **不静默修补来源** | `SOURCE_TRACE_INCOMPLETE` 保持可见;藏起来等于误述来源。 |
| **不编造书目数据** | 出版社、年份、ISBN、页码从不猜;给不出的样式会写明原因。 |
| **不自动提升为 canonical** | 导入的或 AI 产出的材料一律以 **candidate** 进入,直到有人类提升它。 |
| **不留未声明的语义变化** | 39 个学术组件哈希钉住;未声明的改动会让冻结校验失败,系统**拒绝启动**。 |
## 4. 快速开始
> **这个公开版只包含引擎,不包含语料。** 见 [§8 自备语料](#8-自备语料重要) 与 [`CORPUS.md`](CORPUS.md)。
```bash
git clone https://github.com/YanKaFei/Lacan-Knowledge-OS.git
cd Lacan-Knowledge-OS
# 1) 没有语料也能启动 —— Help Center 与整个界面完全可用:
python3 -m workspace_ui.server.cli --port 3090
# → http://127.0.0.1:3090/help 13 页帮助中心
# → http://127.0.0.1:3090/research 研究界面(要回答则需要语料)
# 2) 完整性检查(这是契约,不是装饰):
python3 _scripts/_tools/core_freeze.py --verify # 39 个学术组件
python3 _scripts/_tools/freeze_lineage.py --verify # 跨阶段语义变化
python3 _scripts/_tools/build_i18n.py --check # 界面文案 ↔ 词典 ↔ 调用点
python3 _scripts/_tools/build_help.py --check # Help 链接、锚点、0 虚构
# 3) 全量回归(依赖语料的套件需要先准备语料,见 CORPUS.md)
bash _scripts/run_all_tests.sh
```
**环境**:Python 3.9+(核心路径只用标准库)、现代浏览器;只有在你要用向量检索或真实
大模型时才需要可选依赖(见 [`docs/EMBEDDING_PROVIDER.md`](docs/EMBEDDING_PROVIDER.md))。
**没有打包器、没有构建步骤**:`index.html` 直接以 ES 模块加载。
## 5. 怎么用
### 5.1 任务型首页
打开系统看到的是**你能做什么**,而不是系统的内部结构:
```
Hero → [开始一次研究] [第一次使用?]
任务 → 问一个拉康问题 · 寻找原文与出处 · 研究一个概念
研究人物与个案 · 建立长期研究项目 · 管理文献与引用
流程 → ① 提问 → ② 查看证据 → ③ 深入原文
→ ④ 保存材料 → ⑤ 整理来源 → ⑥ 形成自己的知识
5 分钟 → 六步走完第一次研究
```
每个入口都是**真实链接**(`/research`、`/explore`、`/projects`、`/bibliography`、
`/persons`、`/cases`、`/zotero`、`/help/...`)—— 可分享、可收藏、可在新标签页打开。
### 5.2 一次完整研究
1. **提问** —— 一次只问一个问题。
2. **读状态** —— `VALIDATED`、`VALIDATED_WITH_QUALIFICATIONS`、`PARTIALLY_SUPPORTED`、
`VALIDATION_FAILED`、`INSUFFICIENT_EVIDENCE`、`ABSTAINED`。请按字面读。
3. **验证** —— 点开引文 chip:Evidence Inspector 给出被引用的那一句、上下文窗口与来源链。
*答案是内核的结论,Inspector 才是语料真正说的话。*
4. **深入** —— 在 Explore 里打开同一个段落,把上下文读完。
5. **留下** —— `Add to Project`,或 `Save to Obsidian`。
### 5.3 帮助中心
`/help` 是 13 页的帮助中心:左侧目录、锚点、上一页/下一页、主题搜索。
覆盖:快速开始、Research、证据、Explore、三模块区别、Projects、人物与个案、
Bibliography、Zotero、Obsidian、语言、状态速查、故障排查。
**Help 里出现的每个控件名都从真实界面渲染**;每条功能性断言都有机器核验
(`HELP_CLAIM_VERIFICATION.json`:**42/42 verified、0 fiction、0 pending**)。
### 5.4 界面语言 vs 研究语言
| 设置 | 作用范围 | 例子 |
|---|---|---|
| **Language**(`English` / `中文`)| 只影响产品界面 | 立即切换,不刷新页面 |
| **Research language**(`any` / `zh` / `fr` / `en`)| 随研究请求发送的**问题语言** | 不翻译界面,也不过滤检索 |
`界面 = 中文` + `研究语言 = Français` 完全合法。拉康原文、被引用段落与书目元数据
**永远不翻译**。
## 6. 架构
```
你的问题
│
┌──────────▼───────────┐
│ 产品层 │ workspace_ui/ · browse_api/ · project_api/
│ (可自由演进) │ export_system/ · bibliography/ · obsidian_adapter/
└──────────┬───────────┘
│ scholarly_api v1(产品边界,3 个哈希组件)
┌──────────▼───────────┐
│ 冻结学术内核 │ 39 个哈希钉住的组件
│ (不可漂移) │ 检索 · 证据契约 · 充分性 · 合成边界 · 引用 · 蕴含 · 弃权
└──────────┬───────────┘
│
┌──────────▼───────────┐
│ 语料 │ 段落库 · 见证本 · 本体 · 索引
│ (自备) │ 本仓库**不包含**
└──────────────────────┘
```
- **Agent 通过 MCP 对话,而不是直接调 Python。** `mcp_server/` 以 stdio 暴露 **10 个工具**
(协议 `2025-11-25`);网页界面只是这个契约的一个客户端。
- **冻结是可执行的。** `core_freeze.py --verify` 重算 39 个组件哈希;
`freeze_lineage.py --verify` 证明七个阶段里**零语义变化**。
- **派生物可重建。** SQLite/FTS/向量索引与 24.9 万段落库都能从 canonical 源 + 清单重建。
**vault 才是唯一真源。**
延伸阅读:[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) ·
[`docs/MCP_ARCHITECTURE.md`](docs/MCP_ARCHITECTURE.md) ·
[`docs/HELP_SYSTEM_ARCHITECTURE.md`](docs/HELP_SYSTEM_ARCHITECTURE.md)。
## 7. 在 DSH / 任意 MCP 客户端里使用
这个仓库**本身**就是一个 [DeepSeek Harness](https://github.com/deepseek-ai) 插件目标:
它自带 MCP server、可直接粘贴的 row,以及可安装的 DSH bundle。
```bash
# A. 作为 DSH 插件安装(自动写入 MCP row)
dsh plugin --profile web add github:YanKaFei/Lacan-Knowledge-OS
# B. 或自己粘贴 row —— integrations/lacan-kb-mcp.row.yml
# 工具随后以 mcp__lacan-kb__search_passages 之类的名字出现
# C. 或单独运行 MCP server
python3 _scripts/_tools/lacan-kb-mcp
```
已用 DSH 自己的 MCP SDK 证明(`_data/mcp/DSH_CLIENT_PROOF.json`,**14/14 项**):
stdio 握手、10 个带 schema 的工具、`mcp__lacan-kb__` 命名、结构化证据返回、
返回的 passage id 被独立复核存在、未知工具返回协议错误而不是崩溃。
详见 [`docs/MCP_DSH_INTEGRATION.md`](docs/MCP_DSH_INTEGRATION.md)。
## 8. 自备语料(**重要**)
本仓库**刻意不包含任何源文本**:
| 不包含 | 原因 |
|---|---|
| 研讨班/文集全文(法/中)| 版权属于权利人 |
| 段落库(`passages.jsonl`,249,105 条,约 384 MB)| 语料文本 |
| 见证本与实现文本(约 152 MB)| 语料文本 |
| 向量/词法索引 | 体积大,且可用你自己的语料重建 |
**包含**的是:schema、冻结契约、构建器、校验器与测试 ——
也就是把**你有权使用的文本**(自己的扫描件、已授权版本、公有领域材料、你自己的翻译)
接进来所需要的全部东西。
```bash
python3 _scripts/build.py --help # 语料清单与构建入口
python3 _scripts/inventory_corpus.py --help # canonical 清单与哈希
```
公开版由 [`_scripts/_tools/build_public_edition.py`](_scripts/_tools/build_public_edition.py)
生成并**反向验证**(语料 N-gram 反查、密钥扫描、绝对路径扫描、体积门禁)。
见 [`docs/PUBLIC_EDITION.md`](docs/PUBLIC_EDITION.md)。
## 9. 优势与劣势
| ✅ 优势 | ⚠️ 劣势与限制 |
|
**可核验优先于流畅。** 每条 claim 都绑定 passage id,你可以手工审计整条链。
**诚实的失败。** 弃权、`INSUFFICIENT_EVIDENCE`、显式"不可用"都是一等输出,没有编造的填充。
**契约是可执行的。** 39 组件冻结与七段谱系由代码检查,而不是文件里的承诺。
**离线优先。** `Offline / Mock` 不需要任何凭据、不联网,且是确定性的。
**一份契约,多个客户端。** 同一个 MCP 表面同时服务网页界面、DSH 与任何带 MCP 的编辑器。
**可审计的历史。** 每次研究都是不可变快照;重新研究同一问题会新增一条,而不是覆盖旧的。
**双语是内建的。** 界面文案由词典驱动、0 缺失键;源文本刻意永不翻译。
|
**你需要一份有权使用的语料。** 开箱即可看到界面、帮助中心与契约 —— 但在你提供文本之前,它无法回答问题。
**范围是有主见的。** 它只回答**关于语料**的问题;出版史、在场者、日期这类问题会弃权,因为语料不携带那类元数据。
**没有质量分数。** 全系统没有"置信度百分比";解读质量始终是你的判断。
**对笔记本级工作流偏重。** 参考语料连派生索引与向量约 2.5 GB。
**向量检索是可选的、部分的。** 没装 embedding 依赖时退回词法匹配(界面会显示当前用的是哪一种)。
**真实 LLM 合成是一次阻塞调用。** 长请求 45–60 秒;界面显示真实耗时,而"停止等待"不会取消后端作业。
**产品层演进快,学术层冻结。** 便利功能经常变;改**语义**必须走正式的 Core Change Request。
**预设你熟悉这个领域。** 它不会教你拉康。
|
## 10. 状态、路线图、参与
- **状态**:学术内核冻结在 v1(`SCHOLARLY_CORE_READY`);产品层已完整支持日常使用
(研究、浏览、证据、项目、文献、Zotero 导入、Obsidian 桥、导出、Help Center)。
- **最近一次验收的数字**:**20/20 阻断项通过**、**146 套回归 / 78 校验器 / 0 失败 / 0 跳过**、
内核冻结 **PASS**、语义漂移 **0**。
- **路线图**:[`docs/ROADMAP.md`](docs/ROADMAP.md)。
- **参与**:[`CONTRIBUTING.md`](CONTRIBUTING.md) —— 唯一不可协商的规则是
*不要在未经 Core Change Request 的情况下改动学术语义*。
- **安全**:[`SECURITY.md`](SECURITY.md) —— 密钥永不经过产品 API。
**许可** —— 代码:[Apache-2.0](LICENSE) · 源文本:**不再分发**([NOTICE](NOTICE))
*如果这个系统帮你省下了一周的引文核对,它就完成了它的工作。*