Files
Hy-Memory/docs/env_reference.md
T
2026-10-16 16:26:27 +08:00

210 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Hy Memory SDK 环境变量参考
本文只列当前代码实际读取、且对公开 SDK 功能有直接作用的配置。所有变量均可通过进程环境
或 `.env` 设置;未设置时使用表中的默认值。
## 核心配置
| 变量 | 默认值 | 说明 |
|---|---|---|
| `MEMORY_MODE` | `pro` | `lite` / `pro` / `ultra` |
| `MEMORY_DATA_DIR` | `~/.hy_memory` | 本地数据、缓存和日志根目录 |
- `lite`:纯 Embedding 写入,Graph 强制关闭。
- `pro`:LLM 提取与 reconcile;Graph 由 `MEMORY_ENABLE_GRAPH` 控制。
- `ultra`:具备 pro 能力并强制启用 Graph;System 2 由调用方显式执行
`client.evolve()`,不会在 `add()` 后自动入队。
## LLM
| 变量 | 默认值 | 说明 |
|---|---|---|
| `MEMORY_LLM_PROVIDER` | `openai` | OpenAI-compatible Chat Completions 协议 |
| `MEMORY_LLM_MODEL` | `gpt-4.1-nano` | 模型名 |
| `MEMORY_LLM_API_KEY` | — | 回退:`LLM_API_KEY`、`OPENAI_API_KEY` |
| `MEMORY_LLM_BASE_URL` | — | 回退到 `LLM_BASE_URL` |
| `MEMORY_LLM_TEMPERATURE` | `0.1` | 统一温度;`none` / `omit` / 空值表示不发送 |
| `MEMORY_LLM_OMIT_TEMPERATURE` | `false` | `true` 时完全不发送 `temperature` |
| `MEMORY_LLM_MAX_TOKENS` | `1024` | 通用生成上限 |
| `MEMORY_AGENT_MAX_TOKENS` | `2000` | Extract/Reconcile/System 2 等 Agent 调用上限 |
| `MEMORY_LLM_TIMEOUT` | `180` | 单次超时,秒 |
| `MEMORY_LLM_MAX_RETRIES` | `5` | 最大重试次数 |
| `MEMORY_LLM_RETRY_DELAY` | `1.0` | 重试间隔,秒 |
| `MEMORY_LLM_EXTRA_HEADERS` | — | JSON object,附加 HTTP headers |
| `MEMORY_LLM_EXTRA_BODY` | — | JSON object,附加请求 body |
| `MEMORY_FEW_SHOT_ENABLED` | `false` | 为内置 Extractor/Reconcile prompt 附加 few-shot |
| `MEMORY_ENABLE_INTENTION` | `true` | 是否抽取并写入 L7 Intention |
| `MEMORY_LOG_LLM_CONTENT` | `false` | `true` 才允许日志记录完整 prompt/response |
## Embedding
| 变量 | 默认值 | 说明 |
|---|---|---|
| `MEMORY_EMBEDDER_PROVIDER` | `openai` | OpenAI-compatible Embeddings 协议 |
| `MEMORY_EMBEDDER_MODEL` | `text-embedding-3-small` | 模型名 |
| `MEMORY_EMBEDDER_API_KEY` | — | 回退:`EMBEDDING_API_KEY`、`OPENAI_API_KEY` |
| `MEMORY_EMBEDDER_BASE_URL` | — | 回退到 `EMBEDDING_BASE_URL` |
| `MEMORY_EMBEDDING_DIMS` | `1536` | Collection 维度;应与模型输出一致 |
| `MEMORY_EMBEDDER_TIMEOUT` | `15` | 单次超时,秒 |
| `MEMORY_EMBEDDER_MAX_RETRIES` | `2` | 最大重试次数 |
| `MEMORY_EMBEDDER_RETRY_DELAY` | `0.3` | 重试间隔,秒 |
| `MEMORY_EMBEDDER_EXTRA_HEADERS` | — | JSON object,附加 HTTP headers |
| `MEMORY_EMBEDDER_EXTRA_BODY` | — | JSON object,附加请求 body |
## Vector Store
| 变量 | 默认值 | 说明 |
|---|---|---|
| `MEMORY_VECTOR_STORE` | `chroma` | `chroma` / `qdrant` / `faiss` |
| `MEMORY_COLLECTION_NAME` | `agent_memories` | 主 collection 名 |
| `MEMORY_PERSIST_DIR` | `{DATA_DIR}/data/vector_db` | 本地持久化目录 |
| `MEMORY_VECTOR_HOST` | — | Qdrant 等远程后端主机 |
| `MEMORY_VECTOR_PORT` | — | 远程后端端口 |
| `MEMORY_VECTOR_API_KEY` | — | 远程后端 API Key |
`hybrid` 的关键词候选依赖后端实现。Chroma 会退化为纯向量;Qdrant 可使用
sparse/BM25 候选。
## Graph Store
| 变量 | 默认值 | 说明 |
|---|---|---|
| `MEMORY_ENABLE_GRAPH` | `false` | 只在 pro 生效;lite 强制关,ultra 强制开 |
| `MEMORY_GRAPH_PROVIDER` | `kuzu` | `kuzu` / `neo4j` |
| `MEMORY_GRAPH_DB_PATH` | `{DATA_DIR}/data/kuzu_db` | Kuzu 数据库路径 |
| `NEO4J_URL` | `bolt://localhost:7687` | Neo4j Bolt URL;可回退到 `MEMGRAPH_URL` |
| `NEO4J_USERNAME` | — | 可回退到 `MEMGRAPH_USERNAME` |
| `NEO4J_PASSWORD` | — | 可回退到 `MEMGRAPH_PASSWORD` |
| `NEO4J_DATABASE` | `neo4j` | Neo4j database |
Graph 写入和读侧 Rerank 的高级开关见 [pro_graph_design.md](pro_graph_design.md)。
## Cache
| 变量 | 默认值 | 说明 |
|---|---|---|
| `MEMORY_CACHE_BACKEND` | `sqlite` | `sqlite` / `mysql`;不支持 Redis |
| `MEMORY_CACHE_DB_PATH` | `{DATA_DIR}/data/cache.db` | SQLite 文件路径 |
| `MEMORY_MYSQL_HOST` | `localhost` | MySQL 主机 |
| `MEMORY_MYSQL_PORT` | `3306` | MySQL 端口 |
| `MEMORY_MYSQL_USER` | `root` | MySQL 用户 |
| `MEMORY_MYSQL_PASSWORD` | — | MySQL 密码 |
| `MEMORY_MYSQL_DATABASE` | `hy_memory` | MySQL 数据库 |
| `MEMORY_MYSQL_POOL_SIZE` | `10` | 连接池大小 |
| `MEMORY_MYSQL_POOL_RECYCLE` | `3600` | 连接回收周期,秒 |
## 写入、场景与 Query Rewrite
| 变量 | 默认值 | 说明 |
|---|---|---|
| `RECONCILE_ENABLED` | `true` | 是否执行候选检索和 reconcile |
| `MEMORY_ENABLE_SEARCH_QUERY` | `false` | Reconcile 前是否额外用 LLM 生成检索 query |
| `MEMORY_EXTRACT_HISTORY_TURNS` | `5` | 本次输入之外注入 Extractor 的历史 user-turn 数 |
| `MEMORY_CODING_ENABLED` | `true` | 是否启用 working/coding 独立链路 |
| `MEMORY_CODING_DB_PATH` | `{DATA_DIR}/data/coding_memory.db` | 生产力记忆 SQLite 路径 |
| `MEMORY_CODING_TOOL_RESULT_MAX_BYTES` | `2048` | 单条 tool result 的最大字节数 |
| `MEMORY_CODING_VERBATIM_FALLBACK_ENABLED` | `false` | 无抽取结果时是否把渲染对话保存成 working fact |
| `MEMORY_ENABLE_QUERY_REWRITE` | `false` | Coding 关闭时控制 default 多-query 是否 rewrite;Coding 开启时多-query 无论此值都会分类并 rewrite |
| `MEMORY_QUERY_REWRITE_MAX_CHARS` | `1000` | default 多-query rewrite 长度保护 |
默认单 query Search 是零 LLM light search。`search_mode=agentic` 下,单 query、多 queries
都会执行一次合并的场景判断、rewrite 和时间解析。default 多-query 超过长度保护时不做
rewrite;Coding 开启时只分类,关闭时零 LLM。
## System 2 与 User Profile
| 变量 | 默认值 | 说明 |
|---|---|---|
| `SWEEPER_ENABLED` | `true` | Ultra evolve 是否执行 cross-domain sweeper |
| `MEMORY_SUMMARY_ENABLED_IN_SYS2` | `false` | System 2 material 是否包含 L3 Summary |
| `MEMORY_EVOLING_BALANCED_CATALOG_ENABLED` | `false` | Ultra evolve 是否生成 balanced catalog |
| `MEMORY_EVOLING_BALANCED_CATALOG_MAX_FACTS` | `120` | 单次最多审阅的 L2 数 |
| `MEMORY_EVOLING_BALANCED_CATALOG_CONTENT_CHARS` | `180` | Prompt 中每条 L2 的字符上限 |
| `MEMORY_EVOLING_BALANCED_CATALOG_MAX_TOKENS` | `512` | Catalog 选择输出上限 |
| `MEMORY_EVOLING_SPECIFIC_SUPPLEMENT_ENABLED` | `false` | Ultra evolve 是否生成 supplement |
| `MEMORY_USER_PROFILE_BALANCED_CATALOG_ENABLED` | `false` | `get_user_profile()` 是否附加 active catalog |
| `MEMORY_USER_PROFILE_SPECIFIC_SUPPLEMENT_ENABLED` | `false` | 是否附加 active supplement |
Catalog 和 supplement 只由 `user_id` 确定,不作为普通 L6 出现在 Search,也不占
`schema_limit`。
### Cross-domain Sweeper
| 变量 | 默认值 | 说明 |
|---|---|---|
| `MEMORY_CROSS_DOMAIN_ENABLE` | `true` | 是否执行 cross-domain 碰撞扫描 |
| `MEMORY_CROSS_DOMAIN_MIN_BASICS` | `5` | 进入通用碰撞扫描所需的最低 schema 数 |
| `MEMORY_CROSS_DOMAIN_BEH_THRESHOLD` | `0.70` | 行为向量相似度阈值 |
| `MEMORY_CROSS_DOMAIN_CON_THRESHOLD` | `0.60` | 内容向量的跨域差异阈值 |
## Reader 与本地 Rerank
| 变量 | 默认值 | 说明 |
|---|---|---|
| `HY_MEMORY_READER` | `legacy` | `legacy`(向量)/ `hybrid`(向量 + 后端关键词候选) |
| `MEMORY_HYBRID_V2_VDB_WEIGHT_BM25` | `0.35` | Hybrid BM25 加成权重;当前仍保留旧前缀 |
| `MEMORY_LOCAL_RERANK_ENABLED` | `false` | 两个 Reader 共用的本地 cross-encoder Rerank |
| `MEMORY_LOCAL_RERANK_MODEL` | `nreimers/mmarco-mMiniLMv2-L6-H384-v1` | 小型多语言 Hugging Face 模型名或本地路径 |
| `MEMORY_LOCAL_RERANK_DEVICE` | `auto` | `auto` / `cpu` / `cuda` 等 device |
| `MEMORY_LOCAL_RERANK_BATCH_SIZE` | `16` | 一次 forward 的 batch,不是请求并发限制 |
| `MEMORY_LOCAL_RERANK_MAX_LENGTH` | `512` | Tokenizer 最大长度 |
| `MEMORY_LOCAL_RERANK_POOL_FACTOR` | `3` | 候选池相对最终 limit 的倍数 |
| `HY_MEMORY_TAG_INDEX_WRITE` | `true` | 是否维护写侧 Tag Index |
SDK 不设置 Rerank Search 并发上限。开启后模型在 `HyMemoryClient` 初始化阶段加载并
执行一次预热;初始化失败会直接阻止 Client ready。运行中的单次推理异常仍 fail-open。
详见 [hy_memory_search_skill.md](hy_memory_search_skill.md)。
## Episode 与摘要
| 变量 | 默认值 | 说明 |
|---|---|---|
| `MEMORY_EPISODE_GAP_SECONDS` | `1800` | 超过该间隔时开启新 episode |
| `MEMORY_EPISODE_MAX_MEMORIES` | `50` | 单 episode 的 user-side 记忆上限 |
| `MEMORY_EPISODE_SUMMARY_ENABLED` | `false` | Episode 结束时是否生成 L3 Summary |
| `MEMORY_EPISODE_SUMMARY_MIN_MEMORIES` | `3` | Summary 最低记忆数 |
| `MEMORY_EPISODE_RECALL_ENABLED` | `false` | Search 是否使用 Episode 关系加权 |
| `MEMORY_EPISODE_RECALL_WEIGHT` | `0.7` | Episode 结构支持权重 |
| `MEMORY_TOPIC_SUMMARY_ENABLED` | `false` | 是否生成 Topic Summary |
| `MEMORY_TOPIC_SUMMARY_MIN_MEMORIES` | `5` | Topic Summary 最低记忆数 |
| `MEMORY_TOPIC_SUMMARY_STEP` | `5` | Topic 新增多少条后重新生成 Summary |
| `MEMORY_SESSION_EPISODE_ENABLED` | `false` | 是否允许 `finalize_session()` 归档指定 session |
| `MEMORY_SESSION_EPISODE_CONTEXT_ENABLED` | `false` | Reader 是否召回 Session Episode 上下文 |
| `MEMORY_SESSION_EPISODE_LIMIT` | `5` | Session Episode 候选上限 |
| `MEMORY_SESSION_EPISODE_FACT_LIMIT` | `2` | 每个 Session Episode 附带事实数 |
## Recall 辅助能力
| 变量 | 默认值 | 说明 |
|---|---|---|
| `MEMORY_RECALL_STRENGTH_ENABLED` | `false` | 是否按访问次数和闲置时长重排 normal 结果 |
| `MEMORY_RECALL_STRENGTH_TAU` | `180` | 衰减时间常数,天 |
| `MEMORY_RECALL_ACCESS_TRACKING` | `true` | Strength 开启时是否回写访问信息 |
| `MEMORY_ENTITY_STORE_ENABLED` | `false` | 是否维护独立 entity collection;当前 Reader 不直接读取 |
旧数据可调用当前公开方法 `client.build_entity_store(user_id)` 补建 Entity Store。
## 日志、Trace 与历史
| 变量 | 默认值 | 说明 |
|---|---|---|
| `MEMORY_LOG_LEVEL` | `INFO` | 运行日志级别 |
| `MEMORY_LOG_FORMAT` | `text` | `text` / `json` |
| `MEMORY_LOG_DIR` | — | 统一日志根目录 |
| `MEMORY_TRACE_LOG_DIR` | — | JSONL 日志目录的兼容旧名;优先使用 `MEMORY_LOG_DIR` |
| `MEMORY_PIPELINE_TRACE_ENABLED` | `true` | 是否写入 cache 的 pipeline trace 表 |
| `MEMORY_MEMORY_OPERATIONS_ENABLED` | `false` | 是否写入 memory operation 审计记录 |
| `MEMORY_HISTORY_ENABLE` | `true` | 是否启用历史记录 |
| `MEMORY_HISTORY_DB_PATH` | `{DATA_DIR}/data/history.db` | History SQLite 路径 |
| `MEMORY_HISTORY_RECORD_SEARCHES` | `false` | 是否记录 Search 操作 |
| `MEMORY_CODING_CHAIN_REPO_ROOT` | — | coding 版本链读取本地 Git diff 的仓库根目录 |
## HTTP Server
| 变量 | 默认值 | 说明 |
|---|---|---|
| `HY_MEMORY_SERVER_HOST` | `127.0.0.1` | Server 监听地址 |
| `HY_MEMORY_SERVER_PORT` | `19527` | Server 监听端口 |
历史配置不会生效;当前支持项以本页表格和 `.env.example` 为准。Cache backend 当前仅支持
`sqlite` 和 `mysql`。