[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"post-v2-\u002Fblog\u002F2026-06-06-cognee-memory-system-deployment":3},{"id":4,"title":5,"body":6,"date":1955,"description":1956,"draft":1957,"extension":1958,"meta":1959,"navigation":1960,"path":1961,"seo":1962,"stem":1963,"tags":1964,"__hash__":1971},"blog\u002Fblog\u002F2026-06-06-cognee-memory-system-deployment.md","Cognee 部署纪实：2核4G 服务器上，LanceDB 嵌入模式 + e5-large + DeepSeek 跑通知识图谱",{"type":7,"value":8,"toc":1930},"minimark",[9,16,21,29,46,49,52,114,117,120,124,129,132,138,151,198,207,213,216,219,223,226,229,232,246,253,257,260,267,286,292,344,347,351,354,359,362,379,398,403,430,433,439,529,534,611,614,617,622,670,675,683,686,700,705,784,787,791,797,804,809,881,884,888,891,913,916,922,927,942,945,948,1020,1023,1026,1074,1080,1083,1171,1175,1178,1182,1192,1198,1204,1257,1260,1264,1277,1280,1324,1327,1338,1344,1348,1351,1354,1357,1368,1375,1378,1382,1386,1391,1397,1403,1410,1415,1448,1451,1457,1462,1478,1482,1510,1513,1539,1555,1559,1618,1628,1643,1647,1650,1661,1686,1689,1693,1696,1699,1703,1706,1709,1714,1719,1724,1793,1797,1803,1808,1883,1887,1890,1914,1917,1926],[10,11,12],"blockquote",{},[13,14,15],"p",{},"2 核 4G、无 GPU、预算有限。从 LanceDB 踩坑到 pgvector 试探，最终回到 LanceDB 嵌入模式——少一个容器、省 ~300MB 内存、cp 目录即备份。不是绕了一圈，是找到了最适合当前规模的最简方案。",[17,18,20],"h2",{"id":19},"一背景为什么需要-cognee","一、背景：为什么需要 Cognee",[13,22,23,24,28],{},"Hermes Agent 有一套内置的 ",[25,26,27],"code",{},"memory"," 系统，但它有两个硬伤：",[30,31,32,40],"ol",{},[33,34,35,39],"li",{},[36,37,38],"strong",{},"单会话隔离"," — 每个 session 的记忆独立存储，无法跨会话引用",[33,41,42,45],{},[36,43,44],{},"无结构化检索"," — 只能做简单的文本匹配，不能做语义搜索和图遍历",[13,47,48],{},"对于需要跨天记住用户偏好、项目决策、技术约束的 Agent 来说，这远远不够。",[13,50,51],{},"Cognee 是一个开源知识图谱系统，提供了三个核心能力：",[53,54,55,71],"table",{},[56,57,58],"thead",{},[59,60,61,65,68],"tr",{},[62,63,64],"th",{},"能力",[62,66,67],{},"说明",[62,69,70],{},"Hermes 对标",[72,73,74,88,101],"tbody",{},[59,75,76,80,83],{},[77,78,79],"td",{},"语义搜索",[77,81,82],{},"向量相似度匹配",[77,84,85],{},[25,86,87],{},"cognee_search",[59,89,90,93,96],{},[77,91,92],{},"图遍历",[77,94,95],{},"实体关系图谱查询",[77,97,98],{},[25,99,100],{},"cognee_recall",[59,102,103,106,109],{},[77,104,105],{},"持久化存储",[77,107,108],{},"PostgreSQL 元数据 + LanceDB 向量索引",[77,110,111],{},[25,112,113],{},"cognee_remember",[13,115,116],{},"目标很明确：把 Cognee 部署到服务器，通过 Hermes 插件对接，让 Agent 拥有一套跨会话、可查询的外部记忆。",[13,118,119],{},"下面是这趟旅程的真实记录——没有虚构，每条配置都经服务器验证。",[17,121,123],{"id":122},"二真实技术演进","二、真实技术演进",[125,126,128],"h3",{"id":127},"阶段一lancedb默认配置初探与回归","阶段一：LanceDB（默认配置，初探与回归）",[13,130,131],{},"Cognee 的默认向量库是 LanceDB——一个嵌入式文件级向量数据库。它不跑独立进程，以 Python 库的形式随 Cognee API 进程运行。",[13,133,134,137],{},[36,135,136],{},"首次尝试","：",[13,139,140,141,143,144,147,148,150],{},"几乎零配置，装好 Cognee API 就能跑。",[25,142,113],{}," 写入成功，",[25,145,146],{},"cognify"," 知识图谱构建流水线也能触发，但 ",[25,149,100],{}," 返回空数组。",[152,153,158],"pre",{"className":154,"code":155,"language":156,"meta":157,"style":157},"language-json shiki shiki-themes github-light github-dark","{\n  \"results\": [],\n  \"pipelineRunStatus\": \"PipelineRunCompleted\"\n}\n","json","",[25,159,160,169,179,192],{"__ignoreMap":157},[161,162,165],"span",{"class":163,"line":164},"line",1,[161,166,168],{"class":167},"sVt8B","{\n",[161,170,172,176],{"class":163,"line":171},2,[161,173,175],{"class":174},"sj4cs","  \"results\"",[161,177,178],{"class":167},": [],\n",[161,180,182,185,188],{"class":163,"line":181},3,[161,183,184],{"class":174},"  \"pipelineRunStatus\"",[161,186,187],{"class":167},": ",[161,189,191],{"class":190},"sZZnC","\"PipelineRunCompleted\"\n",[161,193,195],{"class":163,"line":194},4,[161,196,197],{"class":167},"}\n",[13,199,200,203,204,206],{},[36,201,202],{},"根因","：LanceDB 的数据文件存放在容器内部路径，Docker 重启后目录被重置，向量索引丢失。数据在 PostgreSQL 的关系表里躺着，但向量层是空的——",[25,205,146],{}," 虽然 report 成功，向量化那一步静默失败了。",[13,208,209,212],{},[36,210,211],{},"修复与认知转变","：将 LanceDB 数据目录挂载到持久化 Docker volume。LanceDB 的文件存储结构让持久化极其简单——cp 整个目录就能完成备份和迁移。",[13,214,215],{},"这次踩坑暴露的不是 LanceDB 的缺陷，而是 Docker 文件系统生命周期与嵌入式数据库的磨合问题。LanceDB 嵌入模式的核心优势——零独立进程、零网络开销、文件级持久化——在这次排障之后反而变得更清晰了。它不是在「开发环境能用、生产环境不行」，而是「只要 volume 挂对，生产环境反而比独立向量库更省心」。",[13,217,218],{},"这一阶段的经验为后续回归 LanceDB 埋下了伏笔。",[125,220,222],{"id":221},"阶段二pgvector-试探有想法但未完全切换","阶段二：pgvector 试探（有想法但未完全切换）",[13,224,225],{},"LanceDB 的持久化问题解决后，下一个探索方向是 pgvector——PostgreSQL 的向量扩展。一个数据库搞定关系和向量，听起来很完美。",[13,227,228],{},"配置了 pgvector 镜像，尝试让 Cognee 把向量和元数据都存到同一个 PostgreSQL 实例。",[13,230,231],{},"但实际使用时发现两个问题：",[30,233,234,240],{},[33,235,236,239],{},[36,237,238],{},"Cognee 对 pgvector 的支持不够成熟"," — 部分 API 路径对 pgvector 的向量维度处理有兼容性问题",[33,241,242,245],{},[36,243,244],{},"专用向量库的检索性能更优"," — ANN 近似最近邻搜索是向量数据库的核心优化点，pgvector 的 HNSW 索引在功能和性能上不及专用方案",[13,247,248,249,252],{},"最终 pgvector 容器留下来专门管关系元数据，向量存储继续用 LanceDB。",[36,250,251],{},"这不是「pgvector 不行」，而是「关系库和向量库各司其职」的混合架构","——最终选择 LanceDB 嵌入模式而非独立向量库，纯粹是因为当前数据规模不需要一个独立向量库进程。",[125,254,256],{"id":255},"阶段三双-compose-配置冲突差点全崩","阶段三：双 compose 配置冲突（差点全崩）",[13,258,259],{},"真正的危机不是选型，是配置管理。",[13,261,262,263,266],{},"在调试过程中积累了两套 ",[25,264,265],{},"docker-compose"," 配置——一套指向旧的镜像版本，一套指向新的。某次重启时两条 compose 同时生效，导致：",[268,269,270,273,276],"ul",{},[33,271,272],{},"容器名冲突，部分服务反复 crash-restart",[33,274,275],{},"Cognee API 间歇性不可用",[33,277,278,279,282,283],{},"日志里全是 ",[25,280,281],{},"port already allocated"," 和 ",[25,284,285],{},"container name conflict",[13,287,288,291],{},[36,289,290],{},"修复","：合并为单一 compose 文件，清理所有废弃的服务定义。统一后的服务栈只有三个容器：",[53,293,294,307],{},[56,295,296],{},[59,297,298,301,304],{},[62,299,300],{},"服务",[62,302,303],{},"镜像",[62,305,306],{},"职责",[72,308,309,320,333],{},[59,310,311,314,317],{},[77,312,313],{},"cognee-api",[77,315,316],{},"自建 fastembed 镜像",[77,318,319],{},"知识图谱 API + LanceDB（嵌入）",[59,321,322,325,330],{},[77,323,324],{},"postgres",[77,326,327],{},[25,328,329],{},"postgres:16-alpine",[77,331,332],{},"关系元数据",[59,334,335,338,341],{},[77,336,337],{},"cognee-ui",[77,339,340],{},"Cognee 前端",[77,342,343],{},"可视化管理",[13,345,346],{},"LanceDB 嵌入在 Cognee API 进程内，不占独立容器——这是相比独立向量库方案最直接的收益：省一个容器进程，省 ~300MB 内存。",[125,348,350],{"id":349},"阶段四fastembed-lancedb首次跑通","阶段四：fastembed + LanceDB（首次跑通）",[13,352,353],{},"这是从零到一的突破。核心变化只有两个：",[13,355,356],{},[36,357,358],{},"① 自建 fastembed 镜像",[13,360,361],{},"不要外部 Embedding API。从 Cognee 基础镜像出发，在 venv 中安装 fastembed：",[152,363,367],{"className":364,"code":365,"language":366,"meta":157,"style":157},"language-dockerfile shiki shiki-themes github-light github-dark","FROM cognee\u002Fcognee:latest\nRUN \u002Fusr\u002Flocal\u002Fbin\u002Fpip install fastembed --target \u002Fopt\u002Fvenv\u002Flib\u002Fpython3.11\u002Fsite-packages\u002F\n","dockerfile",[25,368,369,374],{"__ignoreMap":157},[161,370,371],{"class":163,"line":164},[161,372,373],{},"FROM cognee\u002Fcognee:latest\n",[161,375,376],{"class":163,"line":171},[161,377,378],{},"RUN \u002Fusr\u002Flocal\u002Fbin\u002Fpip install fastembed --target \u002Fopt\u002Fvenv\u002Flib\u002Fpython3.11\u002Fsite-packages\u002F\n",[13,380,381,382,385,386,389,390,393,394,397],{},"关键细节：",[25,383,384],{},"pip"," 路径是 ",[25,387,388],{},"\u002Fusr\u002Flocal\u002Fbin\u002Fpip","（不是 ",[25,391,392],{},"\u002Fusr\u002Fbin\u002Fpip","），且必须 ",[25,395,396],{},"--target"," 到 venv 目录——否则 Cognee 运行时找不到 fastembed。",[13,399,400],{},[36,401,402],{},"② 切换到本地 Embedding",[152,404,408],{"className":405,"code":406,"language":407,"meta":157,"style":157},"language-env shiki shiki-themes github-light github-dark","# .env 关键配置\nEMBEDDING_PROVIDER=fastembed\nLLM_PROVIDER=deepseek\nLLM_MODEL=deepseek-v4-pro\n","env",[25,409,410,415,420,425],{"__ignoreMap":157},[161,411,412],{"class":163,"line":164},[161,413,414],{},"# .env 关键配置\n",[161,416,417],{"class":163,"line":171},[161,418,419],{},"EMBEDDING_PROVIDER=fastembed\n",[161,421,422],{"class":163,"line":181},[161,423,424],{},"LLM_PROVIDER=deepseek\n",[161,426,427],{"class":163,"line":194},[161,428,429],{},"LLM_MODEL=deepseek-v4-pro\n",[13,431,432],{},"Embedding 走本地 fastembed，LLM 走 DeepSeek。两者职责彻底分离。",[13,434,435,438],{},[36,436,437],{},"初始组件对照","（bge-small 时代）：",[53,440,441,454],{},[56,442,443],{},[59,444,445,448,451],{},[62,446,447],{},"组件",[62,449,450],{},"实际用的是什么",[62,452,453],{},"关键特征",[72,455,456,467,481,492,505,516],{},[59,457,458,461,464],{},[77,459,460],{},"Cognee 版本",[77,462,463],{},"v1.1.2",[77,465,466],{},"稳定版",[59,468,469,472,478],{},[77,470,471],{},"Embedding",[77,473,474,477],{},[36,475,476],{},"fastembed"," + BAAI\u002Fbge-small-en-v1.5",[77,479,480],{},"384 维，模型 130MB，本地推理",[59,482,483,486,489],{},[77,484,485],{},"LLM",[77,487,488],{},"deepseek-v4-pro（OpenAI 兼容）",[77,490,491],{},"仅做图构建和查询理解",[59,493,494,497,502],{},[77,495,496],{},"向量库",[77,498,499],{},[36,500,501],{},"LanceDB（嵌入模式）",[77,503,504],{},"随 Cognee 进程运行，文件级持久化",[59,506,507,510,513],{},[77,508,509],{},"关系库",[77,511,512],{},"PostgreSQL 16",[77,514,515],{},"元数据存储",[59,517,518,521,526],{},[77,519,520],{},"并行",[77,522,523],{},[25,524,525],{},"parallel=None",[77,527,528],{},"ONNX 底层已多线程，开并行反而慢 70%",[13,530,531,137],{},[36,532,533],{},"三段真实对比",[53,535,536,552],{},[56,537,538],{},[59,539,540,543,546,549],{},[62,541,542],{},"维度",[62,544,545],{},"LanceDB 初探",[62,547,548],{},"pgvector 试探",[62,550,551],{},"fastembed + LanceDB",[72,553,554,568,583,597],{},[59,555,556,559,562,565],{},[77,557,558],{},"向量持久化",[77,560,561],{},"❌ 未挂载 volume",[77,563,564],{},"✅ 但兼容性问题",[77,566,567],{},"✅ volume 持久化",[59,569,570,573,576,578],{},[77,571,572],{},"Embedding 成本",[77,574,575],{},"外部 API 收费",[77,577,575],{},[77,579,580],{},[36,581,582],{},"零 API 费用",[59,584,585,588,591,594],{},[77,586,587],{},"运维复杂度",[77,589,590],{},"低",[77,592,593],{},"中",[77,595,596],{},"低（零额外容器）",[59,598,599,602,605,608],{},[77,600,601],{},"全流程通过",[77,603,604],{},"❌",[77,606,607],{},"未完成切换",[77,609,610],{},"✅",[125,612,613],{"id":613},"向量库原理与选型",[13,615,616],{},"在进入模型升级之前，有必要理解 Cognee 的双层存储架构。这是整套系统最精巧的设计。",[13,618,619,137],{},[36,620,621],{},"存储分层",[53,623,624,640],{},[56,625,626],{},[59,627,628,631,634,637],{},[62,629,630],{},"存储层",[62,632,633],{},"技术",[62,635,636],{},"存储内容",[62,638,639],{},"检索方式",[72,641,642,657],{},[59,643,644,647,651,654],{},[77,645,646],{},"语义层",[77,648,649],{},[36,650,501],{},[77,652,653],{},"文本块的向量指纹 + chunk 元数据",[77,655,656],{},"ANN 近似最近邻",[59,658,659,662,664,667],{},[77,660,661],{},"结构层",[77,663,512],{},[77,665,666],{},"原始文本、实体节点、关系边",[77,668,669],{},"SQL + 图遍历",[13,671,672,137],{},[36,673,674],{},"搜索流程",[152,676,681],{"className":677,"code":679,"language":680},[678],"language-text","用户查询 \"Hermes 配置在哪里\"\n  ↓\nfastembed 向量化 → [0.023, -0.147, ..., 0.091]  (1024d)\n  ↓\nLanceDB ANN 搜索 → top-5 相似向量\n  ↓\n返回 chunk_id: [c42, c17, c88, c03, c55]\n  ↓\nPostgreSQL: SELECT content FROM chunks WHERE id IN (...)\n  ↓\n组装上下文 + 关联实体 → 返回给 LLM\n","text",[25,682,679],{"__ignoreMap":157},[13,684,685],{},"LanceDB 只存向量指纹——不存原始文本。原始文本和知识图谱（实体-关系）都在 PostgreSQL 中。这种分离意味着：",[268,687,688,691,694,697],{},[33,689,690],{},"向量检索走 LanceDB 的 ANN 索引（专为高维向量优化，毫秒级）",[33,692,693],{},"原文提取走 PostgreSQL 的 B-tree 索引（专为精确查询优化）",[33,695,696],{},"图遍历走 PostgreSQL 的递归 CTE（实体关系查询）",[33,698,699],{},"三者互不耦合，各用各的长处",[13,701,702,137],{},[36,703,704],{},"为什么最终是 LanceDB 嵌入模式",[53,706,707,720],{},[56,708,709],{},[59,710,711,714,717],{},[62,712,713],{},"考量",[62,715,716],{},"LanceDB 嵌入",[62,718,719],{},"独立向量库",[72,721,722,735,748,762,773],{},[59,723,724,727,732],{},[77,725,726],{},"额外容器",[77,728,729],{},[36,730,731],{},"0",[77,733,734],{},"+1（~300MB 内存）",[59,736,737,740,745],{},[77,738,739],{},"网络开销",[77,741,742,744],{},[36,743,731],{},"（进程内调用）",[77,746,747],{},"每次查询一次 HTTP 往返",[59,749,750,753,759],{},[77,751,752],{},"持久化",[77,754,755,758],{},[25,756,757],{},"cp"," 目录即备份",[77,760,761],{},"需要管理独立数据卷",[59,763,764,767,770],{},[77,765,766],{},"数据规模",[77,768,769],{},"数十条记忆足够",[77,771,772],{},"百万级以上才显优势",[59,774,775,778,781],{},[77,776,777],{},"运维",[77,779,780],{},"零额外运维",[77,782,783],{},"需监控独立服务健康",[13,785,786],{},"在当前约束下——2C8G 服务器、数十条记忆条目、单人使用——LanceDB 嵌入模式是最简选择。少一个容器不只是省 ~300MB 内存，还少了一个需要监控、重启、排障的独立服务。等数据量真的长到百万级那天，再切独立向量库也不迟——而且到那时，LanceDB 的文件格式让迁移成本极低（导出 Lance 文件即可）。",[125,788,790],{"id":789},"阶段五embedding-模型升级-从-bge-small-到-multilingual-e5-large","阶段五：Embedding 模型升级 — 从 bge-small 到 multilingual-e5-large",[13,792,793,794],{},"bge-small-en-v1.5 跑稳之后，下一个问题自然浮现：",[36,795,796],{},"这个只有英文能力、384 维的小模型，够不够用？",[13,798,799,800,803],{},"实际场景中，Hermes 记忆里混杂着中英文、代码片段、配置文件路径，bge-small 对这些混合内容的语义理解明显吃力。再加上 384 维的向量精度天花板较低——",[36,801,802],{},"1024 维的 multilingual-e5-large 成了有据可查的升级目标","。",[805,806,808],"h4",{"id":807},"为什么选-e5-large","为什么选 e5-large",[53,810,811,824],{},[56,812,813],{},[59,814,815,818,821],{},[62,816,817],{},"对比维度",[62,819,820],{},"bge-small-en-v1.5",[62,822,823],{},"multilingual-e5-large",[72,825,826,840,854,868],{},[59,827,828,831,834],{},[77,829,830],{},"向量维度",[77,832,833],{},"384",[77,835,836,839],{},[36,837,838],{},"1024","（2.7× 精度空间）",[59,841,842,845,848],{},[77,843,844],{},"模型大小",[77,846,847],{},"~130MB",[77,849,850,853],{},[36,851,852],{},"~2.2GB","（16× 存储开销）",[59,855,856,859,862],{},[77,857,858],{},"语言支持",[77,860,861],{},"仅英文",[77,863,864,867],{},[36,865,866],{},"多语言","（中\u002F英\u002F代码混合）",[59,869,870,873,876],{},[77,871,872],{},"MTEB 平均分",[77,874,875],{},"~62",[77,877,878],{},[36,879,880],{},"~66",[13,882,883],{},"维度提升不只是在数字上多几位——1024 维的向量在高维空间中类间距离更大，对相似和近似的区分度更好。",[805,885,887],{"id":886},"代价内存翻倍-维度断裂","代价：内存翻倍 + 维度断裂",[13,889,890],{},"升级不是换个模型名字那么简单。e5-large 带来了两个直接冲击：",[30,892,893,907],{},[33,894,895,898,899,902,903,906],{},[36,896,897],{},"内存暴涨","：cognify 时的内存峰值从 ",[36,900,901],{},"~915MB"," 飙升至 ",[36,904,905],{},"~2.1GB","（实测 2.109GB），占 4G 总内存的 52%。bge-small 时代剩余 3GB+ 可分配给系统和 PostgreSQL，e5-large 时代只剩不到 2GB。",[33,908,909,912],{},[36,910,911],{},"维度不兼容","：384 → 1024 不是平滑迁移。LanceDB 的向量表在创建时就固化了维度，384 维的表无法接受 1024 维的向量写入。",[805,914,915],{"id":915},"迁移步骤",[152,917,920],{"className":918,"code":919,"language":680,"meta":157},[678],"1. 停止 Cognee API（避免写入脏数据）\n2. 删除 LanceDB 向量数据目录（维度不兼容，必须全量重建）\n3. 修改 .env：\n   EMBEDDING_MODEL=intfloat\u002Fmultilingual-e5-large\n   DIMENSIONS=1024\n4. 重启 Cognee API\n5. 重新执行 cognify（e5-large 首次加载 ONNX 模型，冷启动较慢）\n6. 等待 PipelineRunCompleted\n",[25,921,919],{"__ignoreMap":157},[10,923,924],{},[13,925,926],{},"e5-large 首次启动时，fastembed 需要从 HuggingFace 下载 2.2GB 模型文件并转换为 ONNX 格式。缓存到本地后后续启动就快了。",[13,928,929,930,933,934,937,938,941],{},"此外，DeepSeek v4-pro 的 ",[25,931,932],{},"tool_choice"," 参数与 Cognee 内部的 structured output 格式存在冲突，需在 ",[25,935,936],{},".env"," 中追加 ",[25,939,940],{},"LLM_INSTRUCTOR_MODE=json_mode"," 强制 JSON 输出模式。",[805,943,944],{"id":944},"性能实测",[13,946,947],{},"基于真实环境的三模型对比数据：",[53,949,950,965],{},[56,951,952],{},[59,953,954,957,960,962],{},[62,955,956],{},"指标",[62,958,959],{},"e5-large",[62,961,820],{},[62,963,964],{},"bge-small-zh-v1.5",[72,966,967,981,993,1007],{},[59,968,969,972,975,978],{},[77,970,971],{},"模型加载",[77,973,974],{},"6.2s",[77,976,977],{},"0.2s",[77,979,980],{},"-",[59,982,983,986,989,991],{},[77,984,985],{},"50条批量推理",[77,987,988],{},"3.2s",[77,990,980],{},[77,992,980],{},[59,994,995,998,1001,1004],{},[77,996,997],{},"内存峰值",[77,999,1000],{},"2.1GB",[77,1002,1003],{},"261MB",[77,1005,1006],{},"826MB",[59,1008,1009,1011,1014,1017],{},[77,1010,830],{},[77,1012,1013],{},"1024d",[77,1015,1016],{},"384d",[77,1018,1019],{},"512d",[805,1021,1022],{"id":1022},"升级后验证",[13,1024,1025],{},"cognify 流水线完成后，用三条不同语言的查询做 recall 测试：",[53,1027,1028,1041],{},[56,1029,1030],{},[59,1031,1032,1035,1038],{},[62,1033,1034],{},"查询",[62,1036,1037],{},"语言",[62,1039,1040],{},"结果",[72,1042,1043,1054,1064],{},[59,1044,1045,1048,1051],{},[77,1046,1047],{},"\"Hermes Agent 的配置在哪里\"",[77,1049,1050],{},"中文",[77,1052,1053],{},"✅ 命中",[59,1055,1056,1059,1062],{},[77,1057,1058],{},"\"how to set up the cognee plugin\"",[77,1060,1061],{},"英文",[77,1063,1053],{},[59,1065,1066,1069,1072],{},[77,1067,1068],{},"\"COG_API_KEY vs COGNEE_API_KEY\"",[77,1070,1071],{},"混合",[77,1073,1053],{},[13,1075,1076,1079],{},[36,1077,1078],{},"3\u002F3 全部命中，无漏召回","。服务运行 7+ 小时无错误，容器持续健康。",[805,1081,1082],{"id":1082},"升级后组件对照",[53,1084,1085,1097],{},[56,1086,1087],{},[59,1088,1089,1091,1094],{},[62,1090,447],{},[62,1092,1093],{},"升级后实际配置",[62,1095,1096],{},"变化",[72,1098,1099,1112,1123,1135,1147,1160],{},[59,1100,1101,1104,1109],{},[77,1102,1103],{},"Embedding 模型",[77,1105,1106],{},[36,1107,1108],{},"intfloat\u002Fmultilingual-e5-large",[77,1110,1111],{},"从 bge-small-en-v1.5 切换",[59,1113,1114,1116,1120],{},[77,1115,830],{},[77,1117,1118],{},[36,1119,838],{},[77,1121,1122],{},"从 384 升级",[59,1124,1125,1128,1132],{},[77,1126,1127],{},"内存峰值（cognify）",[77,1129,1130],{},[36,1131,905],{},[77,1133,1134],{},"从 915MB 上涨 2.3×",[59,1136,1137,1140,1144],{},[77,1138,1139],{},"模型文件大小",[77,1141,1142],{},[36,1143,852],{},[77,1145,1146],{},"从 130MB 上涨 16×",[59,1148,1149,1152,1157],{},[77,1150,1151],{},"多语言支持",[77,1153,1154],{},[36,1155,1156],{},"中\u002F英\u002F混合",[77,1158,1159],{},"从仅英文扩展",[59,1161,1162,1165,1168],{},[77,1163,1164],{},"LanceDB",[77,1166,1167],{},"删除旧向量数据，重建 1024 维表",[77,1169,1170],{},"维度断裂，全量重做",[17,1172,1174],{"id":1173},"三资源受限下的优化","三、资源受限下的优化",[13,1176,1177],{},"服务器只有 2 核 4G，无 GPU。每一兆内存都要计较。e5-large 的升级更是把资源压力推到了顶点。",[125,1179,1181],{"id":1180},"_31-fastembed零成本-embedding模型任选","3.1 fastembed：零成本 Embedding，模型任选",[13,1183,1184,1185,1188,1189,1191],{},"这是最重要的决策。之前所有方案——不管是 OpenAI ",[25,1186,1187],{},"text-embedding-3-small"," 还是 DeepSeek 的 Embedding API——都有调用费用。虽然单价低，但 ",[25,1190,146],{}," 流水线会批量向量化，用量上去成本就起来了。",[13,1193,1194,1195,803],{},"fastembed 是 ONNX Runtime 绑定的本地推理引擎。无论是 130MB 的 bge-small 还是 2.2GB 的 e5-large，成本结构完全一样——",[36,1196,1197],{},"零 API 费用，只有服务器的电和内存",[13,1199,1200,1203],{},[36,1201,1202],{},"成本对比","（按日均 1000 次向量化估算）：",[53,1205,1206,1219],{},[56,1207,1208],{},[59,1209,1210,1213,1216],{},[62,1211,1212],{},"方案",[62,1214,1215],{},"日均成本",[62,1217,1218],{},"月成本",[72,1220,1221,1232,1243],{},[59,1222,1223,1226,1229],{},[77,1224,1225],{},"OpenAI text-embedding-3-small",[77,1227,1228],{},"~$0.02",[77,1230,1231],{},"~$0.60",[59,1233,1234,1237,1240],{},[77,1235,1236],{},"DeepSeek Embedding API",[77,1238,1239],{},"~$0.01",[77,1241,1242],{},"~$0.30",[59,1244,1245,1248,1253],{},[77,1246,1247],{},"fastembed（bge-small 或 e5-large）",[77,1249,1250],{},[36,1251,1252],{},"$0",[77,1254,1255],{},[36,1256,1252],{},[13,1258,1259],{},"「零外部依赖」的价值远不止省钱——没有 API 限流、没有网络抖动、不会因为欠费突然停服。e5-large 的 2.2GB 模型虽然吃内存，但选择权在自己手里：要么用更大的内存换更好的精度，要么退回 bge-small 省资源。不需要跟第三方讨价还价。",[125,1261,1263],{"id":1262},"_32-parallel-陷阱开并行反而慢-70","3.2 parallel 陷阱：开并行反而慢 70%",[13,1265,1266,1267,1269,1270,1273,1274,803],{},"Cognee 的 ",[25,1268,146],{}," 支持 ",[25,1271,1272],{},"parallel"," 参数控制并发任务数。直觉上 2 核应该用 ",[25,1275,1276],{},"parallel=2",[13,1278,1279],{},"实测结果（基于 bge-small）：",[53,1281,1282,1294],{},[56,1283,1284],{},[59,1285,1286,1289,1292],{},[62,1287,1288],{},"parallel 设置",[62,1290,1291],{},"cognify 耗时",[62,1293,997],{},[72,1295,1296,1310],{},[59,1297,1298,1304,1307],{},[77,1299,1300,1303],{},[25,1301,1302],{},"None","（默认）",[77,1305,1306],{},"基准 100%",[77,1308,1309],{},"915MB",[59,1311,1312,1316,1321],{},[77,1313,1314],{},[25,1315,1276],{},[77,1317,1318],{},[36,1319,1320],{},"170%",[77,1322,1323],{},"OOM 边缘",[13,1325,1326],{},"根因：fastembed 底层的 ONNX Runtime 已经做了多线程优化。外层再开 Python 多进程（parallel=2），不仅线程竞争 CPU，每个子进程还会独立加载一份 ONNX 模型。在 e5-large 的 2.2GB 模型体积下，parallel=2 意味着 4.4GB+ 的纯模型内存——直接超过 4G 物理上限。",[10,1328,1329],{},[13,1330,1331,1332,1334,1335,1337],{},"升级到 e5-large 后，",[25,1333,1272],{}," 必须保持 ",[25,1336,1302],{},"。2.2GB 模型 × 2 进程 = OOM 是确定性结果。",[13,1339,1340,1343],{},[36,1341,1342],{},"教训","：在资源受限环境下，默认值往往就是最优值。不要为了「看起来更合理」而调参数。",[125,1345,1347],{"id":1346},"_33-内存管理bge-small-和-e5-large-两套策略","3.3 内存管理：bge-small 和 e5-large 两套策略",[13,1349,1350],{},"bge-small 时代，Cognee 容器内存占用约 915MB，剩余 3GB+ 分给 PostgreSQL 和系统。",[13,1352,1353],{},"e5-large 时代，这一数字翻到 ~2.1GB。4GB 总内存的 52% 被一个容器吃掉，容错空间急剧缩小。",[13,1355,1356],{},"bge-small 时期的内存管理已经打好基础：",[268,1358,1359,1362,1365],{},[33,1360,1361],{},"清理废弃容器和未使用镜像（回收 ~1.8GB 磁盘）",[33,1363,1364],{},"为每个服务设置内存上限，防止单个容器无限制扩张",[33,1366,1367],{},"确保留有足够的系统余量",[13,1369,1370,1371,1374],{},"e5-large 的升级让这些限制变得不再是「锦上添花」，而是",[36,1372,1373],{},"不设就必挂","的底线。2.1GB 的 cognify 峰值意味着如果系统或 PostgreSQL 同时有内存需求，OOM Killer 随时可能介入。",[13,1376,1377],{},"LanceDB 嵌入模式在这里还有一个意外的好处：它不占独立内存配额。如果用的是独立向量库容器，还需要额外分配 ~300MB，那 4GB 的总内存根本不够分。",[17,1379,1381],{"id":1380},"四踩坑记录","四、踩坑记录",[125,1383,1385],{"id":1384},"坑1hermes-端-unknown-tool-之谜最具技术深度","坑1：Hermes 端 \"Unknown tool\" 之谜（最具技术深度）",[13,1387,1388,137],{},[36,1389,1390],{},"现象",[13,1392,1393,1394,137],{},"Hermes 的三个 cognee 工具全部返回 ",[25,1395,1396],{},"Unknown tool",[152,1398,1401],{"className":1399,"code":1400,"language":680},[678],"cognee_recall → \"Unknown tool\"\ncognee_remember → \"Unknown tool\"\ncognee_search → \"Unknown tool\"\n",[25,1402,1400],{"__ignoreMap":157},[13,1404,1405,1406,1409],{},"但 Cognee 服务端一切正常，API 健康检查通过，",[25,1407,1408],{},"curl"," 直接调用也都返回正确结果。",[13,1411,1412,137],{},[36,1413,1414],{},"排查过程",[152,1416,1420],{"className":1417,"code":1418,"language":1419,"meta":157,"style":157},"language-python shiki shiki-themes github-light github-dark","# Cognee 插件的原始代码（问题所在）\ndef get_tool_schemas(self) -> List[Dict[str, Any]]:\n    if not self._ready:   # ← 这里\n        return []         # ← 返回空列表\n    return [RECALL_SCHEMA, REMEMBER_SCHEMA, SEARCH_SCHEMA]\n","python",[25,1421,1422,1427,1432,1437,1442],{"__ignoreMap":157},[161,1423,1424],{"class":163,"line":164},[161,1425,1426],{},"# Cognee 插件的原始代码（问题所在）\n",[161,1428,1429],{"class":163,"line":171},[161,1430,1431],{},"def get_tool_schemas(self) -> List[Dict[str, Any]]:\n",[161,1433,1434],{"class":163,"line":181},[161,1435,1436],{},"    if not self._ready:   # ← 这里\n",[161,1438,1439],{"class":163,"line":194},[161,1440,1441],{},"        return []         # ← 返回空列表\n",[161,1443,1445],{"class":163,"line":1444},5,[161,1446,1447],{},"    return [RECALL_SCHEMA, REMEMBER_SCHEMA, SEARCH_SCHEMA]\n",[13,1449,1450],{},"链式依赖链：",[152,1452,1455],{"className":1453,"code":1454,"language":680},[678],"get_tool_schemas() 依赖 _ready\n→ _ready 在 initialize() 中设置\n→ initialize() 依赖 COG_API_KEY 环境变量\n→ 如果 COG_API_KEY 为空 → _ready = False → get_tool_schemas() 返回 []\n→ has_tool() 通过 tool_id 查找失败 → 所有调用返回 \"Unknown tool\"\n",[25,1456,1454],{"__ignoreMap":157},[13,1458,1459,1461],{},[36,1460,202],{},"：两个问题叠加——",[30,1463,1464,1472],{},[33,1465,1466,1469,1470],{},[25,1467,1468],{},"COG_API_KEY"," 未被正确设置到 manager profile 的 ",[25,1471,936],{},[33,1473,1474,1477],{},[25,1475,1476],{},"get_tool_schemas()"," 不应该因为配置缺失就返回空——应该始终返回 schema 列表，让上游决定可用性",[13,1479,1480,137],{},[36,1481,290],{},[152,1483,1485],{"className":1417,"code":1484,"language":1419,"meta":157,"style":157},"# 修复后的代码\ndef get_tool_schemas(self) -> List[Dict[str, Any]]:\n    # 始终返回工具 schema，不依赖 _ready 状态\n    # 可用性由 is_available() 控制\n    return [RECALL_SCHEMA, REMEMBER_SCHEMA, SEARCH_SCHEMA]\n",[25,1486,1487,1492,1496,1501,1506],{"__ignoreMap":157},[161,1488,1489],{"class":163,"line":164},[161,1490,1491],{},"# 修复后的代码\n",[161,1493,1494],{"class":163,"line":171},[161,1495,1431],{},[161,1497,1498],{"class":163,"line":181},[161,1499,1500],{},"    # 始终返回工具 schema，不依赖 _ready 状态\n",[161,1502,1503],{"class":163,"line":194},[161,1504,1505],{},"    # 可用性由 is_available() 控制\n",[161,1507,1508],{"class":163,"line":1444},[161,1509,1447],{},[13,1511,1512],{},"同时补充了：",[30,1514,1515,1521,1530],{},[33,1516,1517,1520],{},[36,1518,1519],{},"多副本同步"," — 11 个 profile 各自有一份 Cognee 插件副本，必须全部更新",[33,1522,1523,1529],{},[36,1524,1525,1526],{},"清 ",[36,1527,1528],{},"pycache"," — Python 缓存不刷新会导致旧代码继续生效",[33,1531,1532,1535,1536,1538],{},[36,1533,1534],{},"COG_API_KEY 注入"," — 在 manager ",[25,1537,936],{}," 中添加密钥",[13,1540,1541,1543,1544,1546,1547,1550,1551,1554],{},[36,1542,1342],{},"：插件的 ",[25,1545,1476],{}," 是注册入口，它如果返回空，下游完全感知不到这个工具的存在。",[36,1548,1549],{},"工具造册和工具可用性应该是两个独立的概念","——前者始终返回，后者通过 ",[25,1552,1553],{},"is_available()"," 判断。",[125,1556,1558],{"id":1557},"坑2cog_api_key-vs-cognee_api_key-命名不一致","坑2：COG_API_KEY vs COGNEE_API_KEY 命名不一致",[53,1560,1561,1574],{},[56,1562,1563],{},[59,1564,1565,1568,1571],{},[62,1566,1567],{},"位置",[62,1569,1570],{},"使用的变量名",[62,1572,1573],{},"Header 名",[72,1575,1576,1591,1604],{},[59,1577,1578,1581,1586],{},[77,1579,1580],{},"Cognee API",[77,1582,1583],{},[25,1584,1585],{},"COGNEE_API_KEY",[77,1587,1588],{},[25,1589,1590],{},"X-API-Key",[59,1592,1593,1596,1600],{},[77,1594,1595],{},"Hermes 插件",[77,1597,1598],{},[25,1599,1468],{},[77,1601,1602],{},[25,1603,1590],{},[59,1605,1606,1609,1613],{},[77,1607,1608],{},"Cognee 官方文档",[77,1610,1611],{},[25,1612,1585],{},[77,1614,1615],{},[25,1616,1617],{},"Authorization: Bearer ***",[13,1619,1620,1621,1623,1624,1627],{},"一个 API Key，三个名字。两种不同的认证方式（",[25,1622,1590],{}," vs ",[25,1625,1626],{},"Bearer","）。",[13,1629,1630,1633,1634,1636,1637,1640,1641,803],{},[36,1631,1632],{},"最终方案","：统一在 Hermes 端使用 ",[25,1635,1468],{},"，Cognee 服务端配置 ",[25,1638,1639],{},"AUTH_METHOD=api_key","，Header 用 ",[25,1642,1590],{},[125,1644,1646],{"id":1645},"坑3approvalsmode-死锁","坑3：approvals.mode 死锁",[13,1648,1649],{},"修复完代码后重启 Hermes Gateway，发现新会话仍然报 Unknown tool。",[13,1651,1652,1653,1656,1657,1660],{},"根因是 Hermes 的 ",[25,1654,1655],{},"approvals.mode"," 默认处于 ",[25,1658,1659],{},"block"," 模式，Gateway 在实际执行工具调用时会因为审批拦截而中断。必须先执行：",[152,1662,1666],{"className":1663,"code":1664,"language":1665,"meta":157,"style":157},"language-bash shiki shiki-themes github-light github-dark","hermes config set approvals.mode auto\n","bash",[25,1667,1668],{"__ignoreMap":157},[161,1669,1670,1674,1677,1680,1683],{"class":163,"line":164},[161,1671,1673],{"class":1672},"sScJk","hermes",[161,1675,1676],{"class":190}," config",[161,1678,1679],{"class":190}," set",[161,1681,1682],{"class":190}," approvals.mode",[161,1684,1685],{"class":190}," auto\n",[13,1687,1688],{},"然后重启 Gateway 才能生效。这个配置变更不会因为重载而自动应用。",[125,1690,1692],{"id":1691},"坑4ssh-maxstartups-限制","坑4：SSH MaxStartups 限制",[13,1694,1695],{},"多 Agent 并行工作时会同时 SSH 到服务器。默认 SSH 配置在并发峰值下会拒绝连接。",[13,1697,1698],{},"表现为某几个 Worker 的 SSH 操作随机失败，错误信息不明。调高限制后恢复正常。",[125,1700,1702],{"id":1701},"坑5onnx-缓存损坏导致重启循环e5-large-升级时新增","坑5：ONNX 缓存损坏导致重启循环（e5-large 升级时新增）",[13,1704,1705],{},"升级到 e5-large 后，某次重启 Cognee 容器时陷入循环——容器启动后立即 crash，Docker 自动重启，再 crash，再重启。",[13,1707,1708],{},"日志显示 fastembed 在加载模型时 ONNX Runtime 报了 session 初始化错误。排查发现是之前 ONNX 模型缓存文件在非正常关机时损坏，导致每次启动都尝试用损坏的缓存初始化。",[13,1710,1711,1713],{},[36,1712,290],{},"：删除 ONNX 缓存目录（通常在 fastembed 的默认缓存路径下），让 fastembed 重建 ONNX 模型。2.2GB 的模型重新下载和转换需要几分钟，后续启动就正常了。",[13,1715,1716,1718],{},[36,1717,1342],{},"：大模型的 ONNX 缓存是持久化风险点。非正常关机后建议先清缓存再启动，而不是让容器陷入 crash-restart 循环。",[13,1720,1721,137],{},[36,1722,1723],{},"五坑难度排序",[53,1725,1726,1739],{},[56,1727,1728],{},[59,1729,1730,1733,1736],{},[62,1731,1732],{},"坑",[62,1734,1735],{},"难度",[62,1737,1738],{},"关键教训",[72,1740,1741,1751,1762,1771,1782],{},[59,1742,1743,1745,1748],{},[77,1744,1396],{},[77,1746,1747],{},"⭐⭐⭐⭐⭐",[77,1749,1750],{},"插件注册与可用性应该解耦",[59,1752,1753,1756,1759],{},[77,1754,1755],{},"ONNX 缓存损坏",[77,1757,1758],{},"⭐⭐⭐",[77,1760,1761],{},"大模型缓存 = 持久化风险点",[59,1763,1764,1766,1768],{},[77,1765,1655],{},[77,1767,1758],{},[77,1769,1770],{},"配置变更 ≠ 运行时生效",[59,1772,1773,1776,1779],{},[77,1774,1775],{},"API Key 命名",[77,1777,1778],{},"⭐⭐",[77,1780,1781],{},"文档先行，统一命名规范",[59,1783,1784,1787,1790],{},[77,1785,1786],{},"SSH MaxStartups",[77,1788,1789],{},"⭐",[77,1791,1792],{},"多 Agent 并发 = 多连接",[17,1794,1796],{"id":1795},"五最终架构","五、最终架构",[152,1798,1801],{"className":1799,"code":1800,"language":680},[678],"┌─────────────────────────────────────────────┐\n│                 Hermes Agent                 │\n│  ┌─────────────────────────────────────┐    │\n│  │     CogneeMemoryProvider (Plugin)    │    │\n│  │  ┌─────────┬──────────┬──────────┐  │    │\n│  │  │ recall  │ remember │  search  │  │    │\n│  │  └────┬────┴────┬─────┴────┬─────┘  │    │\n│  └───────┼─────────┼──────────┼────────┘    │\n│          │ HTTP    │          │              │\n└──────────┼─────────┼──────────┼──────────────┘\n           │         │          │\n    ┌──────┴─────────┴──────────┴──────┐\n    │         Cognee API v1.1.2         │\n    │  ┌─────────────────────────────┐  │\n    │  │   \u002Fapi\u002Fv1\u002Fsearch            │  │\n    │  │   \u002Fapi\u002Fv1\u002Frecall            │  │\n    │  │   \u002Fapi\u002Fv1\u002Fremember\u002Fentry    │  │\n    │  │   \u002Fapi\u002Fv1\u002Fcognify           │  │\n    │  └──────────┬──────────────────┘  │\n    │             │                     │\n    │  ┌──────────┴──────────────────┐  │\n    │  │   PostgreSQL 16             │  │\n    │  │   • 关系元数据 + 原始文本     │  │\n    │  │   • 知识图谱（实体-关系）     │  │\n    │  └─────────────────────────────┘  │\n    │  ┌──────────────────────────────┐ │\n    │  │   LanceDB（嵌入模式）          │ │\n    │  │   • 向量索引（1024 维）        │ │\n    │  │   • 进程内 ANN 检索           │ │\n    │  └──────────────────────────────┘ │\n    │             ↑                       │\n    │     fastembed (本地 ONNX)            │\n    │     multilingual-e5-large           │\n    └─────────────────────────────────────┘\n",[25,1802,1800],{"__ignoreMap":157},[13,1804,1805,137],{},[36,1806,1807],{},"当前组件清单",[53,1809,1810,1820],{},[56,1811,1812],{},[59,1813,1814,1816,1818],{},[62,1815,447],{},[62,1817,633],{},[62,1819,306],{},[72,1821,1822,1833,1844,1854,1863,1872],{},[59,1823,1824,1827,1830],{},[77,1825,1826],{},"知识图谱",[77,1828,1829],{},"Cognee v1.1.2",[77,1831,1832],{},"结构化\u002F非结构化混合存储",[59,1834,1835,1837,1841],{},[77,1836,496],{},[77,1838,1839],{},[36,1840,501],{},[77,1842,1843],{},"语义相似度检索（1024 维），无独立容器",[59,1845,1846,1848,1851],{},[77,1847,471],{},[77,1849,1850],{},"fastembed + multilingual-e5-large",[77,1852,1853],{},"文本→向量，本地推理，零 API 成本，多语言",[59,1855,1856,1858,1860],{},[77,1857,485],{},[77,1859,488],{},[77,1861,1862],{},"图构建 + 查询理解",[59,1864,1865,1867,1869],{},[77,1866,509],{},[77,1868,512],{},[77,1870,1871],{},"实体\u002F关系元数据 + 原始文本",[59,1873,1874,1877,1880],{},[77,1875,1876],{},"插件",[77,1878,1879],{},"Hermes CogneeMemoryProvider",[77,1881,1882],{},"3 个工具注册，11 个 profile 全覆盖",[17,1884,1886],{"id":1885},"六总结","六、总结",[13,1888,1889],{},"这次部署教会了我三件事——e5-large 的升级又强化了每条：",[30,1891,1892,1898,1906],{},[33,1893,1894,1897],{},[36,1895,1896],{},"在资源受限的环境里，选型的第一原则是「少即是多」","。LanceDB 嵌入模式比独立向量库少一个容器、省 ~300MB 内存、不需要额外监控。当数据量只有几十条时，嵌入式方案不只是在功能上「够用」——在运维成本上它是显著更优的。fastembed 同理：bge-small 和 e5-large 的成本曲线完全重合（都是零 API 费用），但内存成本天差地别——915MB vs 2.1GB。选择权在你手里：要精度就吃更多内存，要省内存就降模型。没有「既要又要」。",[33,1899,1900,803,1903,1905],{},[36,1901,1902],{},"并行不是免费的",[25,1904,1276],{}," 在 2 核机器上反而慢 70%。底层 ONNX 已经做了多线程优化，外层再加多进程只会争抢资源。e5-large 的 2.2GB 模型体积更是让 parallel > 1 直接等于 OOM。在约束条件下，「什么都不做」常常比「做点什么」更好。",[33,1907,1908,803,1911,1913],{},[36,1909,1910],{},"\"Unknown tool\" 的本质是接口设计问题",[25,1912,1476],{}," 不应该因为配置缺失就返回空数组——工具注册和工具可用性必须解耦。这条原则适用于所有插件系统，不仅仅适用于 Hermes。ONNX 缓存损坏的教训则是另一面：大模型的持久化状态是隐性风险，不要假定缓存总是好的。",[13,1915,1916],{},"现在的 Cognee 服务稳定运行：fastembed + multilingual-e5-large (1024d) 本地向量化、多语言语义理解，LanceDB 嵌入做向量索引（零额外容器），DeepSeek 做推理，PostgreSQL 管元数据。三个容器，干净利落。在那台 2 核 4G 的小服务器上，每一步都是精确算计后的取舍。",[10,1918,1919],{},[13,1920,1921,1922,1925],{},"下一步：写一个 ",[25,1923,1924],{},"cognee_sync.py"," 定时任务，把 Hermes 的 built-in memory 批量同步到 Cognee。记忆孤岛问题，才算真正解决。",[1927,1928,1929],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":157,"searchDepth":171,"depth":171,"links":1931},[1932,1933,1941,1946,1953,1954],{"id":19,"depth":171,"text":20},{"id":122,"depth":171,"text":123,"children":1934},[1935,1936,1937,1938,1939,1940],{"id":127,"depth":181,"text":128},{"id":221,"depth":181,"text":222},{"id":255,"depth":181,"text":256},{"id":349,"depth":181,"text":350},{"id":613,"depth":181,"text":613},{"id":789,"depth":181,"text":790},{"id":1173,"depth":171,"text":1174,"children":1942},[1943,1944,1945],{"id":1180,"depth":181,"text":1181},{"id":1262,"depth":181,"text":1263},{"id":1346,"depth":181,"text":1347},{"id":1380,"depth":171,"text":1381,"children":1947},[1948,1949,1950,1951,1952],{"id":1384,"depth":181,"text":1385},{"id":1557,"depth":181,"text":1558},{"id":1645,"depth":181,"text":1646},{"id":1691,"depth":181,"text":1692},{"id":1701,"depth":181,"text":1702},{"id":1795,"depth":171,"text":1796},{"id":1885,"depth":171,"text":1886},"2026-06-06","给 Hermes Agent 接上 Cognee 知识图谱做跨会话记忆。LanceDB 嵌入模式省一个容器 ~300MB，fastembed 本地免费 Embedding + multilingual-e5-large（1024d）多语言语义检索。含 cognify 流水线、parallel 陷阱、Unknown tool 之谜、ONNX 缓存损坏等真实踩坑记录。",false,"md",{},true,"\u002Fblog\u002F2026-06-06-cognee-memory-system-deployment",{"title":5,"description":1956},"blog\u002F2026-06-06-cognee-memory-system-deployment",[1965,1966,476,1967,1968,1673,1969,1970,959],"cognee","knowledge-graph","lancedb","deepseek","docker","embedding","X1CVArxYCIIlxz_KFAiRHHsUz3r_Cg9CqqScNsxMldg"]