Files
Hy-Memory/.env.example
T
e089d4b800 fix(coding): default-off search chain_block (diff) injection (#128)
Medium/heavy coding users pay large prompt tokens for the version-evolution
diff block; make MEMORY_CODING_CHAIN_BLOCK_ENABLED opt-in (default false).
Write-side observe is unchanged; HCM_BLOCK_OFF remains an advanced kill switch.

Co-authored-by: alvinfei <alvinfei@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 14:46:23 +08:00

141 lines
7.9 KiB
Bash
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 环境变量配置示例
# 复制为 .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