Metadata-Version: 2.4
Name: palacelite
Version: 0.5.1
Summary: 轻量级 AI 记忆系统
Author: fajknli
Project-URL: Changelog, https://github.com/fajknli/palacelite/blob/main/CHANGELOG.md
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: sqlite-vec>=0.1.0
Requires-Dist: sentence-transformers>=5.0.0
Requires-Dist: click>=8.0.0
Requires-Dist: rich>=13.0.0
Provides-Extra: chat
Requires-Dist: llama-cpp-python>=0.3.0; extra == "chat"
Dynamic: license-file

# PalaceLite

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
[![PyPI version](https://badge.fury.io/py/palacelite.svg)](https://pypi.org/project/palacelite/)

轻量级 AI 记忆系统，灵感来自 MemPalace。默认离线运行，数据完全本地化。

## 安装

```bash
pip install palacelite
```

首次使用需下载嵌入模型（约 100MB），添加 `--online` 参数即可自动下载，之后可永久离线运行：

```bash
palacelite chat -m /path/to/model.gguf --online
```

## 核心概念

采用三层结构组织记忆：

- **Wing**：项目或人
- **Room**：具体话题
- **Drawer**：记忆条目

每条记忆存储原文和向量，支持混合检索（向量相似度 + 关键词匹配 + 时间衰减 + 重要性加权）。

## 快速开始

### CLI 命令

```bash
# 添加记忆
palacelite add -w default -r chat -c "用户喜欢 PostgreSQL"

# 搜索记忆
palacelite search -q "数据库"

# 带记忆对话
palacelite chat -m /path/to/model.gguf -w default -r chat

# 列出活跃记忆
palacelite list

# 统计信息
palacelite stats

# 列出所有 Wing
palacelite wings

# 列出指定 Wing 下的 Room
palacelite rooms default
```

### Python API

```python
from palacelite import PalaceLite

p = PalaceLite()  # 默认离线，offline=False 可联网下载模型

# 添加记忆
p.add_memory("用户喜欢 PostgreSQL", "default", "chat")

# 搜索
results = p.search("数据库")

# 构建 LLM 上下文
context = p.build_context("数据库选型")
```

### 对话模式

```bash
# 首次使用（下载嵌入模型）
palacelite chat -m /path/to/model.gguf --online

# 日常使用
palacelite chat -m /path/to/model.gguf

# 指定 GPU 层数
palacelite chat -m /path/to/model.gguf -g 30

# 使用提炼模型压缩记忆（推荐 3B 小模型，如 Qwen2.5-3B-Instruct）
palacelite chat -m /path/to/model.gguf --distiller-model /path/to/small.gguf

# 手动指定 prompt 模板（支持 qwen/gemma/llama/mistral）
palacelite chat -m /path/to/model.gguf --prompt-template qwen
```

## 对话内命令

| 命令 | 说明 |
|------|------|
| `/help` | 显示帮助 |
| `/mem <关键词>` | 搜索记忆 |
| `/add <内容>` | 手动添加记忆 |
| `/list [数量]` | 列出最近记忆 |
| `/stats` | 显示统计信息 |
| `/clear` | 清屏 |
| `/quit` | 退出对话 |

## 记忆维护

### 归档旧记忆

```bash
# 归档超过 90 天且重要性低于 2 的记忆
palacelite archive-old --days 90 --importance 2

# 列出已归档记忆
palacelite list-archived

# 导出归档记忆到 JSON
palacelite export-archived

# 永久删除归档记忆
palacelite delete-archived
```

### 数据清洗与重建

```bash
# 清洗导出数据（用于微调）
python scripts/clean_memories.py ~/backup.json ~/cleaned.json

# 更换嵌入模型后重建向量库
python scripts/rebuild_embeddings.py
```

## 命令速查

| 命令 | 说明 |
|------|------|
| `add -w <wing> -r <room> -c <内容>` | 添加记忆 |
| `search -q <关键词>` | 搜索记忆 |
| `chat -m <模型路径>` | 启动对话 |
| `list [-w wing] [-r room]` | 列出活跃记忆 |
| `stats` | 显示统计信息 |
| `wings` | 列出所有 Wing |
| `rooms <wing>` | 列出 Wing 下的 Room |
| `archive-old [--days 90] [--importance 2]` | 批量归档 |
| `list-archived` | 列出已归档记忆 |
| `export-archived [-o 路径]` | 导出归档 |
| `delete-archived` | 删除归档 |

## 配置

| 环境变量 | 默认值 | 说明 |
|----------|--------|------|
| `PALACE_MODEL_PATH` | - | GGUF 模型文件路径 |
| `PALACE_MODEL_DIR` | `~/Public/ai/models` | 模型存放目录 |
| `GPU_LAYERS` | `20` | GPU 加速层数 |

工作目录默认为 `~/.palacelite`，可通过 `PalaceLite(workspace="/path")` 自定义。

## 架构

当前版本 (0.5.1) 已完成：

- SQLite-vec 向量存储，无需外部向量数据库
- 异步记忆提炼（Distiller），支持技术参数原样保留
- 混合检索：向量相似度 + 关键词匹配 + 时间衰减 + 重要性加权
- 关系图谱 Schema（relations、patrol_queue），为后续版本做准备
- 记忆归档与导出
- 对话内手动添加记忆（`/add`）
- 自动 prompt 模板检测

## 许可证

MIT
