使用说明
镶嵌物
每一次人工智能对话都会产生知识。当会话结束时,它就消失了。泰塞拉保留着它。
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 setup
2.设置
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(< 25%)
当同一文档存在多个版本时,Tessera更喜欢最新版本。
跨会话内存
# Via MCP (Claude)
"Remember that we chose PostgreSQL for the production database"
# Via HTTP API (scripts, local LLMs, ChatGPT via tunnel)
curl -X POST http://127.0.0.1:8394/remember \
-H "Content-Type: application/json" \
-d '{"content": "Use PostgreSQL for production", "tags": ["db", "architecture"]}'
每个记忆都有一个类别(决策、偏好或事实),与现有记忆进行重复检查(余弦相似性,0.92阈值),并获得一个置信度得分——按重复(35%)、新近度(25%)、来源多样性(20%)和类别(20%)加权。集 TESSERA_VAULT_KEY 使用AES-256-CBC加密所有内存。
自动学习
Tessera在没有被问到的情况下,从你的对话中获取决定、偏好和事实。 toggle_auto_learn 打开或关闭它; review_learned 显示了它捕获了什么。
矛盾检测
记忆随着时间的推移而相互矛盾。泰塞拉找到了他们:
CONTRADICTION (HIGH severity):
"We decided to use PostgreSQL" (2026-03-01)
vs
"Switched to MongoDB for the main database" (2026-03-10)
The newer memory (2026-03-10) likely reflects the current state.
适用于英语和韩语否定模式。
ChatGPT集成(需要隧道)
ChatGPT可以通过自定义GPT操作与Tessera对话,但由于ChatGPT的服务器需要访问您的计算机,因此您需要一个隧道(ngrok、Cloudflare隧道等)来暴露您的本地API。
要求: 您的计算机必须已打开,API服务器正在运行,并且隧道处于活动状态。当其中任何一个停止时,ChatGPT将失去访问权限。
# 1. Start Tessera API + tunnel
tessera api
ngrok http 8394 # or: cloudflared tunnel --url http://localhost:8394
# 2. Get the OpenAPI spec for your Custom GPT
curl https://your-tunnel-url/chatgpt-actions/openapi.json?server_url=https://your-tunnel-url
# 3. Get the GPT instruction template
curl https://your-tunnel-url/chatgpt-actions/instructions
创建自定义GPT,粘贴说明,将OpenAPI规范作为操作导入。
您还可以导入过去的ChatGPT对话,以从中提取知识:
curl -X POST http://127.0.0.1:8394/import-conversations \
-H "Content-Type: application/json" \
-d '{"data": "<ChatGPT export JSON>", "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——见 许可证.
商业许可:bessl.framework@gmail.com