# ============================================================ # HY Memory 环境变量配置示例 # 复制为 .env 并填入实际值 # # 这里只列常用且当前有效的配置。完整列表见 docs/env_reference.md。 # ============================================================ # ── 通用 ── # MEMORY_DATA_DIR=~/.hy_memory # 数据存储根目录 # MEMORY_LOG_DIR= # 运行日志根目录;pipeline JSONL 默认在 {DATA_DIR}/logs/pipeline # MEMORY_LOG_LEVEL=INFO # DEBUG | INFO | WARNING | ERROR # MEMORY_LOG_FORMAT=text # text | json # HY_MEMORY_SERVER_HOST=127.0.0.1 # HY_MEMORY_SERVER_PORT=19527 # ── 可观测性(落库开关)── # MEMORY_PIPELINE_TRACE_ENABLED=true # pipeline_logs 表(LLM 调用链中间结果,供 Inspector)。JSONL 文件日志始终写入,不受此开关影响 # MEMORY_MEMORY_OPERATIONS_ENABLED=false # memory_operations 表(知识库 ADD/UPDATE 审计日志)。默认关闭 # MEMORY_LOG_LLM_CONTENT=false # 危险调试开关;true 才记录完整 LLM prompt/response # ── LLM(记忆提取/处理用,OpenAI 兼容协议)── MEMORY_LLM_MODEL=deepseek-chat MEMORY_LLM_API_KEY=sk-your-key MEMORY_LLM_BASE_URL=https://api.deepseek.com # MEMORY_LLM_TEMPERATURE=0.1 # MEMORY_LLM_OMIT_TEMPERATURE=false # true: 请求中完全不发送 temperature # MEMORY_LLM_MAX_TOKENS=1024 # MEMORY_AGENT_MAX_TOKENS=2000 # MEMORY_LLM_TIMEOUT=180 # MEMORY_LLM_MAX_RETRIES=5 # MEMORY_LLM_RETRY_DELAY=1.0 # MEMORY_LLM_EXTRA_HEADERS={} # JSON,透传请求头 # MEMORY_LLM_EXTRA_BODY={} # JSON,透传请求体 # ── Embedding(向量化,OpenAI 兼容协议)── MEMORY_EMBEDDER_MODEL=text-embedding-v4 MEMORY_EMBEDDER_API_KEY=sk-your-key MEMORY_EMBEDDER_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 MEMORY_EMBEDDING_DIMS=1024 # MEMORY_EMBEDDER_TIMEOUT=15 # MEMORY_EMBEDDER_MAX_RETRIES=2 # MEMORY_EMBEDDER_RETRY_DELAY=0.3 # MEMORY_EMBEDDER_EXTRA_HEADERS={} # MEMORY_EMBEDDER_EXTRA_BODY={} # ── 向量存储 ── # 可选: chroma (默认,本地文件) | qdrant | faiss MEMORY_VECTOR_STORE=chroma # MEMORY_COLLECTION_NAME=agent_memories # MEMORY_VECTOR_API_KEY= # 远程向量后端 API Key # MEMORY_PERSIST_DIR= # 本地向量库持久化目录 # --- Qdrant --- # MEMORY_VECTOR_HOST=localhost # MEMORY_VECTOR_PORT=6333 # ── 图数据库(默认关闭)── # MEMORY_ENABLE_GRAPH=false # 仅 pro 生效;lite 强制关闭,ultra 强制开启 # MEMORY_GRAPH_PROVIDER=kuzu # kuzu (默认) | neo4j # MEMORY_GRAPH_DB_PATH= # Kuzu 数据库目录 # --- Neo4j --- # NEO4J_URL=bolt://localhost:7687 # NEO4J_USERNAME=neo4j # NEO4J_PASSWORD= # NEO4J_DATABASE=neo4j # ── 缓存 ── # MEMORY_CACHE_BACKEND=sqlite # sqlite (默认) | mysql # MEMORY_CACHE_DB_PATH= # SQLite 路径(默认 {DATA_DIR}/data/cache.db) # MEMORY_MYSQL_HOST=localhost # MEMORY_MYSQL_PORT=3306 # MEMORY_MYSQL_USER=root # MEMORY_MYSQL_PASSWORD= # MEMORY_MYSQL_DATABASE=hy_memory # MEMORY_MYSQL_POOL_SIZE=10 # MEMORY_MYSQL_POOL_RECYCLE=3600 # ── 处理模式 ── # MEMORY_MODE=pro # lite | pro | ultra # ── Coding Memory(生产力 / 编码场景独立链路,默认开启)── # 独立于 chat 记忆的一套链路:写入端对 messages 判类,coding 场景抽「任务→方案」存 sqlite; # 搜索端 scene=productivity 时走这套库(见 query rewrite / working memory 融合逻辑)。 # 也可通过 from_config({"coding": {...}}) 按 client 配置(键名去掉 MEMORY_CODING_ 前缀,小写)。 # MEMORY_CODING_ENABLED=true # false: 关闭 coding 链,所有 add 走 chat 链 # MEMORY_CODING_DB_PATH= # coding_memory.db 路径(默认 {DATA_DIR}/data/coding_memory.db) # MEMORY_CODING_TOOL_RESULT_MAX_BYTES=2048 # 单条 tool_result 截断字节上限 # MEMORY_CODING_VERBATIM_FALLBACK_ENABLED=false # 模型无结果时是否保存原文 fact;默认关,避免 tool trace 外泄 # MEMORY_CODING_CHAIN_BLOCK_ENABLED=false # search 是否注入版本演进链块(diff);默认关,省 token # MEMORY_EXTRACT_HISTORY_TURNS=5 # 除本次 write 外,额外注入 extractor 的历史 user-turn 数 # ── 写入流程开关 ── # RECONCILE_ENABLED=true # false: 跳过 reconcile,extractor 结果直插 VDB # MEMORY_ENABLE_SEARCH_QUERY=false # true: reconcile 前 LLM 扩写 search query(默认关,用 hybrid 直接搜) # MEMORY_FEW_SHOT_ENABLED=false # true: extractor 与 reconcile prompt 附加 few-shot 示例(默认关) # MEMORY_ENABLE_INTENTION=true # false: 不抽取/写入 L7 intention # ── System 2 (ultra 模式) ── # SWEEPER_ENABLED=true # false: 跳过 cross-domain sweeper # MEMORY_SUMMARY_ENABLED_IN_SYS2=false # true: S2 preprocess 扫描包含 L3_SUMMARY # MEMORY_EVOLING_BALANCED_CATALOG_ENABLED=false # Ultra evolve: 从 active/latest L2 选择 exact、分领域 catalog,默认关 # MEMORY_EVOLING_BALANCED_CATALOG_MAX_FACTS=120 # 写侧最多审阅的 L2 数 # MEMORY_EVOLING_BALANCED_CATALOG_CONTENT_CHARS=180 # 写侧 prompt 每条 L2 截断;可见 catalog 保留完整 exact L2 # MEMORY_EVOLING_BALANCED_CATALOG_MAX_TOKENS=512 # catalog 编号选择的最大输出 tokens # MEMORY_EVOLING_SPECIFIC_SUPPLEMENT_ENABLED=false # Ultra evolve: 生成 exact-evidence supplement # MEMORY_USER_PROFILE_BALANCED_CATALOG_ENABLED=false # get_user_profile: 附加 active balanced catalog,默认关 # MEMORY_USER_PROFILE_SPECIFIC_SUPPLEMENT_ENABLED=false # get_user_profile: 附加 active specific supplement,默认关 # ── Sweeper 碰撞参数 ── # MEMORY_CROSS_DOMAIN_ENABLE=true # sweeper 内部开关 # MEMORY_CROSS_DOMAIN_MIN_BASICS=5 # 碰撞扫描最低 schema 数(beh_embed 不受此限制) # MEMORY_CROSS_DOMAIN_BEH_THRESHOLD=0.70 # 行为相似度碰撞阈值 # MEMORY_CROSS_DOMAIN_CON_THRESHOLD=0.60 # 内容相似度碰撞阈值(低于此值才算跨域) # ── Reader 配置 ── # HY_MEMORY_READER=legacy # legacy | hybrid # MEMORY_LOCAL_RERANK_ENABLED=false # 本地 cross-encoder rerank;默认关闭 # MEMORY_LOCAL_RERANK_MODEL=nreimers/mmarco-mMiniLMv2-L6-H384-v1 # MEMORY_LOCAL_RERANK_POOL_FACTOR=3 # MEMORY_LOCAL_RERANK_MAX_LENGTH=512 # MEMORY_LOCAL_RERANK_BATCH_SIZE=16 # MEMORY_LOCAL_RERANK_DEVICE=auto # ── Query Rewrite(搜索端指代消解 + 时间跨度,client 级,默认关)── # 针对「我昨天说的那个 xx」「上周聊的重要的事」这类缺时间/指代的 query。开启后 search 调一次 # LLM 用 queries 上下文改写成简洁 query,相对时间换算成 created_after 下界过滤。与 working # memory(coding.enable)同开时合并为一次 LLM(判类+改写),chat 场景不走两次 LLM。 # MEMORY_ENABLE_QUERY_REWRITE=false # 只控制 default + 显式 queries=[...];default 单 query 始终零 LLM # MEMORY_QUERY_REWRITE_MAX_CHARS=1000 # default 多-query 的长度保护;agentic 使用内部有界视图 # ── Memory Strength(基于闲置时长的时间衰减排序,默认关闭)── # strength = (1 + log(access_count)) * exp(-idle_days / tau),乘进 normal 通道分数 # MEMORY_RECALL_STRENGTH_ENABLED=false # 总开关(默认关闭):开启后才做 strength 重排 + 回写 access # MEMORY_RECALL_STRENGTH_TAU=180 # 衰减时间常数(天) # MEMORY_RECALL_ACCESS_TRACKING=true # 搜索后回写 access_count/last_accessed_at(受总开关约束) # ── Entity Store(默认关闭)── # 仅控制写入侧为 L2_FACT 建立独立 entity collection;当前 reader 不直接消费该 collection。 # 旧数据可用 client.build_entity_store(user_id) 补建;需要 spaCy en_core_web_sm。 # MEMORY_ENTITY_STORE_ENABLED=false