镶嵌物
](https://pypi.org/project/project-tessera/) ](https://pypi.org/project/project-tessera/)    
每一次人工智能对话都会产生知识。当会话结束时,它就消失了。泰塞拉保留着它。
ClaudeDesktop的一个知识库,带有用于脚本和自动化的HTTP API。在当地运行。没有API密钥,没有Docker,没有数据离开您的机器。
pip install project-tessera
tessera setup
# Done. Claude Desktop now has persistent memory + document search.______________________________________________________________________
为什么泰塞拉选择替代品
||Tessera|Mem0|基本内存|mcp内存服务| |--|---------|------|--------------|-------------------| |在没有API密钥的情况下工作|是|否(需要OpenAI)|是|部分| |在没有Docker的情况下工作|是|否|是|不| |文档搜索(40+种)|是|否|仅Markdown |否| |ChatGPT集成(通过隧道)|是|否|否|不| |矛盾检测|是|否|否|不| |记忆信心评分|是|否|否|不| |加密保管库(AES-256)|是|否|否|不| |用于非MCP工具的HTTP API | 58个端点|是|否|是| |从对话中自动学习|是|是|否|否| |MCP工具|58|~10|~15|24|
简短版本
大多数内存工具都会存储文本并进行搜索。Tessera会这样做,此外:
- HTTP API:58个REST端点允许脚本、ChatGPT(通过隧道+自定义GPT操作)和本地LLM读写相同的知识库。
- 自我维持:发现新旧记忆之间的矛盾,通过强化频率得分,标记过时的知识,自动合并接近重复的内容。
- 零基础设施:
pip install然后走。LanceDB和fastembed是嵌入式的——没有Docker,没有数据库服务器,没有API密钥。 - 加密:set
TESSERA_VAULT_KEY并且所有存储器在静止时都是AES-256-CBC加密的。
______________________________________________________________________
建筑
搜索的工作原理(查询路径)
User asks: "What did we decide about the database?"
|
v
+-----------------------+
| Query Processing |
| Multi-angle decomp | "database decision"
| (2-4 perspectives) | "database", "decision"
+-----------------------+ "decision about database"
|
+-------------+-------------+
| |
v v
+------------------+ +------------------+
| Vector Search | | Keyword Search |
| (LanceDB) | | (FTS index) |
| 384-dim MiniLM | | BM25 scoring |
+------------------+ +------------------+
| |
+-------------+-------------+
|
v
+-----------------------+
| Reranking |
| 70% semantic weight | LinearCombinationReranker
| 30% keyword weight | + version-aware scoring
+-----------------------+
|
v
+-----------------------+
| Result Assembly |
| Dedup (content hash) | 2-pass deduplication
| Verdict labels | found / weak / none
| Cache (60s TTL) |
+-----------------------+
|
v
Top-K results with
confidence scores摄入是如何工作的(摄入路径)
Documents: .md .pdf .docx .xlsx .py .ts .go ... (40+ types)
|
v
+-----------------------+
| File Type Router |
| Markdown, CSV, XLSX | Type-specific parsers
| Code, PDF, Images | with metadata extraction
+-----------------------+
|
v
+-----------------------+
| Chunking Engine |
| 1024 tokens/chunk | Sentence-boundary aware
| 100 token overlap | Heading-preserving
+-----------------------+
|
v
+-----------------------+
| Local Embedding |
| fastembed/ONNX | paraphrase-multilingual
| 384 dimensions | MiniLM-L12-v2
| No API calls | 101 languages
+-----------------------+
|
+-------------+-------------+
| |
v v
+------------------+ +------------------+
| LanceDB | | SQLite |
| Vector storage | | File metadata |
| Columnar format | | Search analytics|
| Zero-config | | Interaction log |
+------------------+ +------------------+系统概述
+--------------------------------------------+
| src/core.py |
| 58 orchestration functions |
| 69 specialized modules, 31k LOC |
+--------------------------------------------+
/ | \
+---------------+ +-------------------+ +--------------+
| MCP Server | | HTTP API Server | | CLI |
| Claude Desktop| | FastAPI + Swagger | | 11 commands |
| 58 tools | | 58 endpoints | | setup, sync |
| stdio | | port 8394 | | ingest, api |
+---------------+ +-------------------+ +--------------+
| | |
v v v
+------------------------------------------------------------+
| Storage Layer |
| LanceDB SQLite Filesystem |
| (vectors) (metadata, (memories as .md, |
| analytics, encrypted with |
| interactions) AES-256-CBC) |
| |
| fastembed/ONNX: local embedding, no API keys |
| 101 languages, 384-dim vectors, ~220MB model |
+------------------------------------------------------------+______________________________________________________________________
开始
1.安装
pip install project-tessera或与 紫外线:
uvx --from project-tessera tessera setup2.设置
tessera setup创建工作区配置,下载嵌入模型(约220MB,仅限首次),配置Claude Desktop。
3.重新启动克劳德桌面
问克劳德你的文件。它会自动搜索。
与ChatGPT一起使用(自定义GPT操作)
tessera api # Start REST API on localhost:8394
ngrok http 8394 # Expose to the internet
# Then create a Custom GPT with the Actions spec from /chatgpt-actions/openapi.json完整设置指南,请访问 http://127.0.0.1:8394/chatgpt-actions/setup.Swagger文档位于 http://127.0.0.1:8394/docs.
______________________________________________________________________
运作原理
混合搜索与重新排名
每次搜索都会经历四个阶段:
- 查询分解——将查询分为2-4个搜索角度(核心关键字、单个术语、反向强调)
- 混合检索——向量相似度(LanceDB)和关键字匹配(FTS/BM25)并行运行
- 重新排序——线性组合排序器合并两个结果集(70%语义,30%关键字权重)
- 判决评分——每个结果都有一个标签:
confident match(>= 45%),possible match(25-45%),或low relevance(\", "source": "chatgpt"}'
导出为黑曜石保管库(维基链接)、Markdown、CSV或JSON:
curl http://127.0.0.1:8394/export?format=obsidian
### 内存健康状况
每个记忆都是健康的、陈旧的(90多天没有强化)或孤立的(没有元数据,没有类别)。健康报告告诉你要清理什么,并跟踪一段时间的增长。
### 插件挂钩
发生事情时运行自己的脚本:
workspace.yaml
hooks: on_memory_created: - script: ./notify-slack.sh on_contradiction_found: - script: ./alert.py
7种事件类型: `on_memory_created`, `on_memory_deleted`, `on_search`, `on_session_start`, `on_session_end`, `on_ingest_complete`, `on_contradiction_found`.
______________________________________________________________________
## 支持的文件类型(40+)
|类别|扩展|安装|
|----------|-----------|---------|
|文件| `.md` `.txt` `.rst` `.csv` |包括|
|办公室| `.xlsx` `.docx` `.pdf` | `pip install project-tessera[xlsx,docx,pdf]` |
|代码| `.py` `.js` `.ts` `.tsx` `.jsx` `.java` `.go` `.rs` `.rb` `.php` `.c` `.cpp` `.h` `.swift` `.kt` `.sh` `.sql` `.cs` `.dart` `.r` `.lua` `.scala` |包括|
|配置| `.json` `.yaml` `.yml` `.toml` `.xml` `.ini` `.cfg` `.env` |包括|
|Web| `.html` `.htm` `.css` `.scss` `.less` `.svg` |包括|
|图片| `.png` `.jpg` `.jpeg` `.webp` `.gif` `.bmp` `.tiff` | `pip install project-tessera[ocr]` |
______________________________________________________________________
## MCP工具(58)
Search (5)
|工具|它做什么|
|------|-------------|
| `search_documents` |跨所有文档的语义+关键字混合搜索|
| `unified_search` |在一次通话中搜索文档和记忆|
| `view_file_full` |完整文件视图(CSV为表格,XLSX为每张表)|
| `read_file` |读取任何文件的完整内容|
| `list_sources` |查看索引内容|
Memory (13)
|工具|它做什么|
|------|-------------|
| `remember` |保存跨会话持续存在的知识|
| `recall` |使用日期/类别过滤器搜索过去的记忆|
| `learn` |保存并立即索引新知识|
| `list_memories` |浏览已保存的记忆|
| `forget_memory` |删除特定内存|
| `export_memories` |将所有内存批量导出为JSON|
| `import_memories` |从JSON批量导入内存|
| `memory_tags` |列出所有具有计数的唯一标签|
| `search_by_tag` |按特定标签过滤内存|
| `memory_categories` |列出自动检测的类别(决策/偏好/事实)|
| `search_by_category` |按类别筛选记忆|
| `find_similar` |查找与给定文件类似的文档|
| `knowledge_graph` |构建文档关系的美人鱼图|
Auto-learn (5)
|工具|它做什么|
|------|-------------|
| `digest_conversation` |从当前会话中提取并保存知识|
| `toggle_auto_learn` |打开/关闭自动学习或检查状态|
| `review_learned` |查看最近自动学习的记忆|
| `session_interactions` |查看当前/过去会话中的工具调用|
| `recent_sessions` |包含交互计数的会话历史记录|
Intelligence (7)
|工具|它做什么|
|------|-------------|
| `decision_timeline` |你的决定如何随着时间的推移而变化,按主题分列|
| `context_window` |将最佳上下文打包到令牌预算中|
| `smart_suggest` |根据您过去的搜索结果查询建议|
| `topic_map` |使用Mermaid思维导图按主题聚类记忆|
| `knowledge_stats` |汇总统计数据(类别、标签、增长)|
| `user_profile` |自动构建的配置文件(语言、偏好、专业知识)|
| `explore_connections` |显示围绕特定主题的联系|
Insight (6)
|工具|它做什么|
|------|-------------|
| `deep_search` |将查询分为2-4个角度,每个角度进行搜索,合并最佳结果|
| `deep_recall` |带有判断标签的多角度记忆回忆|
| `detect_contradictions` |查找具有严重性评级的冲突记忆|
| `memory_confidence` |每个记忆的可靠性如何(重复性、近因性、来源多样性)|
| `memory_health` |哪些记忆是健康的、陈旧的或孤立的|
| `list_plugin_hooks` |查看已注册的挂钩|
Import/Export (4)
|工具|它做什么|
|------|-------------|
| `export_for_ai` |以便携格式导出存储器|
| `import_from_ai` |从外部来源导入内存|
| `import_conversations` |从ChatGPT/Claude对话导出中提取知识|
| `export_knowledge` |导出为黑曜石(维基链接)、Markdown、CSV或JSON|
ChatGPT可以通过自定义GPT操作进行连接(需要隧道)。看 `/chatgpt-actions/setup`.
Security and data (2)
|工具|它做什么|
|------|-------------|
| `vault_status` |检查AES-256加密状态|
| `migrate_data` |从旧架构版本升级数据|
Workspace (11)
|工具|它做什么|
|------|-------------|
| `ingest_documents` |索引文档(首次或完全重建)|
| `sync_documents` |增量同步(仅更改文件)|
| `project_status` |每个项目最近的更改|
| `extract_decisions` |从日志中查找过去的决策|
| `audit_prd` |检查PRD质量(13节结构)|
| `organize_files` |移动、重命名、存档文件|
| `suggest_cleanup` |检测备份文件、空目录、放错位置的文件|
| `tessera_status` |服务器运行状况:跟踪文件、同步历史、缓存|
| `health_check` |全工作区诊断|
| `search_analytics` |搜索使用模式、热门查询、响应时间|
| `check_document_freshness` |检测超过N天的过时文档|
______________________________________________________________________
## HTTP API(58个端点)
pip install project-tessera[api] tessera api # http://127.0.0.1:8394
Swagger用户界面位于 `http://127.0.0.1:8394/docs`.可选的身份验证方式 `TESSERA_API_KEY` 有人是。
All endpoints
|方法|路径|它的作用|
|--------|------|-------------|
|得到| `/health` |健康检查|
|得到| `/version` |版本信息|
|职位| `/search` |语义+关键字搜索|
|职位| `/unified-search` |搜索文档+回忆|
|职位| `/remember` |保存内存|
|职位| `/recall` |使用过滤器搜索记忆|
|职位| `/learn` |保存和索引知识|
|得到| `/memories` |列出回忆|
|删除| `/memories/{id}` |删除内存|
|得到| `/memories/categories` |列出类别|
|得到| `/memories/search-by-category` |按类别筛选|
|得到| `/memories/tags` |列表标签|
|得到| `/memories/search-by-tag` |按标签筛选|
|职位| `/context-window` |构建令牌预算上下文|
|得到| `/decision-timeline` |决策演变|
|得到| `/smart-suggest` |查询建议|
|得到| `/topic-map` |主题集群|
|得到| `/knowledge-stats` |统计仪表板|
|职位| `/batch` |一次通话中进行多项操作|
|得到| `/export` |导出为黑曜石/MD/CSV/JSON|
|得到| `/export-for-ai` |以便携格式导出存储器|
|职位| `/import-from-ai` |从外部来源导入内存|
|职位| `/import-conversations` |导入过去的对话|
|职位| `/migrate` |运行数据迁移|
|得到| `/vault-status` |加密状态|
|得到| `/user-profile` |用户资料|
|得到| `/status` |服务器状态|
|得到| `/health-check` |工作区诊断|
|职位| `/deep-search` |多角度文档搜索|
|职位| `/deep-recall` |多角度记忆回忆|
|得到| `/contradictions` |检测冲突的记忆|
|得到| `/memory-confidence` |内存可靠性得分|
|得到| `/memory-health` |内存健康分析|
|得到| `/hooks` |列出插件挂钩|
|得到| `/entity-search` |搜索实体知识图|
|职位| `/entity-graph` |实体美人鱼图|
|得到| `/consolidation-candidates` |查找相似的内存集群|
|职位| `/consolidate` |合并相似的记忆|
|得到| `/dashboard` |Web仪表板(深色主题、实体图、统计数据)|
|职位| `/sleep-consolidate` |自动合并几乎重复的内存|
|职位| `/retention-policy` |标记旧的或低质量的记忆|
|得到| `/retention-summary` |年龄分布和风险计数|
|得到| `/adapters/{framework}` |LangChain、CrewAI、AutoGen的设置代码|
|职位| `/auto-curate` |对记忆进行分类、标记、重复数据消除和清理|
|得到| `/auto-insights` |热门话题、决策模式、隐藏联系|
|得到| `/chatgpt-actions/openapi.json` |自定义GPT操作的OpenAPI规范|
|得到| `/chatgpt-actions/instructions` |GPT指令模板|
|得到| `/chatgpt-actions/setup` |ChatGPT集成设置指南|
### 快速示例
Search documents
curl -X POST http://127.0.0.1:8394/search \ -H "Content-Type: application/json" \ -d '{"query": "database architecture", "top_k": 5}'
Save a memory
curl -X POST http://127.0.0.1:8394/remember \ -H "Content-Type: application/json" \ -d '{"content": "Use PostgreSQL for production", "tags": ["db"]}'
Export memories
curl http://127.0.0.1:8394/export-for-ai?target=chatgpt
Batch (multiple operations, single request)
curl -X POST http://127.0.0.1:8394/batch \ -H "Content-Type: application/json" \ -d '{"operations": [{"method": "search", "params": {"query": "test"}}, {"method": "knowledge_stats"}]}'
______________________________________________________________________
## CLI(11个命令)
tessera setup # One-command setup (config + model download + Claude Desktop) tessera init # Interactive setup tessera ingest # Index all document sources tessera sync # Re-index changed files only tessera serve # Start MCP server (stdio) tessera api # Start HTTP API server (port 8394) tessera migrate # Upgrade data schema tessera check # Workspace health diagnostics tessera status # Project status summary tessera install-mcp # Configure Claude Desktop tessera version # Show version
______________________________________________________________________
## Claude桌面配置
**使用uvx(推荐):**
{ "mcpServers": { "tessera": { "command": "uvx", "args": ["--from", "project-tessera", "tessera-mcp"] } } }
**使用pip:**
{ "mcpServers": { "tessera": { "command": "tessera-mcp" } } }
配置位置:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- 窗户: `%APPDATA%\Claude\claude_desktop_config.json`
______________________________________________________________________
## 配置
`tessera setup` 创造 `workspace.yaml`:
workspace: root: /Users/you/Documents name: my-workspace
sources: - path: . type: document
search: reranker_weight: 0.7 # Semantic vs keyword balance (0.0 = keyword only, 1.0 = vector only) max_top_k: 50 # Max results per search
ingestion: chunk_size: 1024 # Tokens per chunk chunk_overlap: 100 # Overlap between chunks
hooks: # Optional plugin hooks on_memory_created: - script: ./my-hook.sh
或设置 `TESSERA_WORKSPACE=/path/to/docs` 完全跳过配置文件。
环境变量:
- `TESSERA_API_KEY` --启用API身份验证
- `TESSERA_VAULT_KEY` --为存储器启用AES-256加密
______________________________________________________________________
## 技术细节
|组件|技术|为什么|
|-----------|-----------|-----|
|矢量存储|LanceDB|嵌入式列式存储。无需服务器进程,本机处理矢量+元数据查询|
|嵌入| fastembed/ONNX|本地推理,无API密钥。 `paraphrase-multilingual-MiniLM-L12-v2` (384 dim,101种语言)|
|元数据|SQLite |文件跟踪、搜索分析、交互日志记录。带可缩锁的螺纹安全|
|内存存储|文件系统(.md)|人类可读、git友好、可加密。用于元数据的YAML frontmatter|
|加密|纯Python AES-256-CBC |不依赖OpenSSL。PKCS7填充,每个内存随机IV|
|HTTP API | FastAPI | Swagger文档,Pydantic验证,异步功能|
|MCP|FastMCP(stdio)|Claude Desktop的标准MCP协议|
### 数字
|度量|计数|
|--------|-------|
|MCP工具|58|
|HTTP端点|58|
|CLI命令|11|
|核心模块|69|
|代码行数|31000+|
|测试|1102|
|文件类型|40+|
______________________________________________________________________
## 许可证
AGPL-3.0——见 [许可证](LICENSE).
商业许可:bessl.framework@gmail.com