给 agent 补知识阿里云百炼的 CLIbl里有两条路bl knowledge建知识库、包一层检索服务让它查bl memory按用户记节点。两条路的 ID 体系不一样混用会撞上一个措辞很像服务端故障的 HTTP 400。这篇按我自己走通的顺序写环境准备、两套 ID 怎么取、400 的原因与解决、记忆节点的完整闭环、块级治理、归属判断最后是常见问题。所有输出是 2026-10-13 我在自己电脑上敲的bl2.1.0。涉及别人工作空间的知识库名和 ID 一律匿名化占位符写成库 ID检索服务 ID合成标识记忆实验用合成标识节点建完就删并复核为空。一、两条路分别解决什么对照项文档臂bl knowledge记忆臂bl memory隔离单位工作空间共享外面包一层检索服务user-id一人一份答案形态带出处的原文片段 来源 URL一条被归纳过的观察节点治理单位块chunk可逐块改节点整条取舍适合放什么产品文档、规程、FAQ偏好、习惯、上次说到哪两条路不互斥同一个 agent 可以同时挂。选型的核心不是哪个更强是这份知识跟谁走。二、环境准备安装bl走 CLI 安装页一条 npm 命令。调模型的 API Key 在 密钥管理页领领完设进环境变量或配置文件都行。本篇用到的命令分两类knowledge list、service list、memory list这类只读查询有 Key 就能跑建库、导入文档、建检索服务这三步会真的往云上写资源我只给控制台路径不演示命令。三、第一步取两套 ID文档臂的入口是两层。第一层是知识库本身bl knowledge list它给每个库一个 index ID。第二层是检索服务库要包一层服务才能被查bl knowledgeservicelist--scenesearch我这边工作空间里有 255 个检索服务、258 个问答服务问答恒比检索多 3 个两天前是 254/257也是差 3。这条命令跑完会在末尾自己打一句提示拿上面的 agent_id 去喂knowledge search。把这两套 ID 分开记是后面所有步骤的前提。四、检索一次看返回结构bl knowledge search --agent-id检索服务 ID--query会话事件流 SSE 服务端推送哪些事件1.4 秒返回头两条相关度都是 0.9277文档臂量表与记忆臂不可横向比每条带文档名、标题、正文片段和来源 URL。命中的是平台公开文档里服务端推送事件那一节连事件表格都原样回来了。这条路的价值在出处答案是可以顺着 Source 回原文核的片段不是模型重新组织过的话。五、常见报错HTTP 400 RagAgentGroupNotExist把第三节的 index ID 传进--agent-id会拿到Error: Agent application not found. Status: HTTP 400 (RagAgentGroupNotExist)原因--agent-id只吃检索服务 ID不吃库 ID。参数名带 agent值域是检索服务这一层而 index ID 类型上同样是合法字符串前置校验拦不住只能等服务端查表查不到。解决回bl knowledge service list --scene search取服务 ID重跑即可。容易误判的点400 配Agent application not found第一反应通常是服务没开通或者坏了其实是值域错了跟服务状态无关。六、迁移注意deprecated retrieve 不是平替帮助文本里bl knowledge retrieve标着 deprecated让改用knowledge search。但旧命令的参数是--index-idbl knowledge retrieve --index-id库 ID--query会话事件流 SSE 服务端推送哪些事件我这天跑它照样正常返回相关度 0.9566。也就是说升级要换两样命令名换ID 体系也换。只换命令、把原来喂 retrieve 的 index ID 顺手递给 search 的--agent-id拿到的就是第五节那个 400。deprecated 说明只讲用哪条替代没讲替代命令换了 ID 体系这个断点得自己撞一次才知道。七、记忆节点的完整闭环记忆臂的隔离单位是 user-idbl memory list --user-id某个用户标识同一个工作空间里不同 user-id 的记忆互不可见。我拿一个合成标识查返回No memory nodes found干净的空库。写入一条bl memoryadd--user-id合成标识--content用户偏好周报用四段结构一级条目不得增删。返回一个 memory_node_id。检索bl memory search --user-id合成标识--query周报结构有什么要求命中相关度 0.324记忆臂量表与文档臂不可横向比节点类型 observation状态 valid。返回的不是我写进去那句原文是一条被归纳过的观察节点。删除并复核bl memory delete --node-id节点 ID--user-id合成标识bl memory list --user-id合成标识list 回到No memory nodes foundsearch 剩 0 条。写进去、查得到、删得干净三步都成立全程只碰我自己合成的那个 user-id。八、两个相关度分数不能横着比0.9277 和 0.324 是两套量表上的数一个是 chunk 与查询的检索相似度一个是记忆节点与查询的匹配分算法和取值范围都不同。我这次只有一组对照不做量表换算也不据此说哪条路更准。同臂内比较要看同一批查询的排序稳定性跨臂比较只能看答案能不能直接用。把两个数放进同一张排序表、或者共用一个相似度阈值都会得出错误结论。九、块级治理十二万个块怎么维护bl knowledge chunk list --index-id库 ID--page-size3--outputjson我查的那个公共文档库返回 total 120,633。每个块的 metadata 里有块级健康位_chunk_status为 0、状态消息成功、所属文档 ID、文档名、来源 URL还有一个是否展示块内容的开关位。改块用bl knowledge chunk update要同时给库 ID、块 ID、文档 ID 三个键新内容限 10 到 6000 字。这条我只引签名没执行它改的是共享资源。所以文档臂能逐块做四件事看健康、改内容、切可见、顺藤摸到源文档。记忆臂只有节点级的增改删查一条记忆就是一个节点要么在要么不在。十二万块的库里坏块是常态块级健康位是刚需节点级记忆条数少不需要这一层。十、使用建议六条清单bl knowledge list拿库 IDbl knowledge service list --scene search拿服务 ID两套分开记喂knowledge search只用服务 ID报 400RagAgentGroupNotExist先查是不是传成了库 ID从 deprecatedretrieve迁移时命令和 ID 体系一起换别只换命令记忆臂先确认 user-id 隔离符合预期再写第一条合成标识最安全两臂分数不进同一张排序表也不共用阈值文档臂上线前跑一次chunk list看_chunk_status坏块先修再开放检索十一、常见问题Q1报 400 RagAgentGroupNotExist是不是服务坏了或者没开通大概率不是。先检查--agent-id传的是不是检索服务 ID。传成bl knowledge list给的 index ID 就是这个报错跟服务状态无关。Q2retrieve已经 deprecated 了为什么还能正常返回它这天确实还能用返回 0.9566。但它的参数是--index-id跟推荐的search不是同一套 ID。迁移时两样一起换不要只换命令名。Q3文档臂的 0.9277 比记忆臂的 0.324 高是不是知识库更准不能这么读。两个分数在两套量表上算法和取值范围都不同横向比较没有意义。Q4记忆节点会不会一直堆着删不掉不会。bl memory delete --node-id删完list回到No memory nodes found、search剩 0 条我这次复核过。用合成 user-id 试跑不会碰到真实用户的数据。Q5用量和额度为什么这篇没有数字那几条命令走控制台会话我的会话过期了查不了。要看剩余额度直接去控制台额度页别信任何文章里的数字包括这篇。Q6建库、导入文档、建检索服务为什么没给命令这三步会真的往云上写资源。控制台路径是知识库与应用分组建完回 CLI 用list取 ID。我不拿别人的工作空间做写操作演示。十二、这篇没覆盖的chunk update的可见性切换只引了签名没执行记忆臂的画像 schemaprofile那条支线没展开把检索结果喂回模型需要发一次模型调用是另一篇的内容。入口留三个CLI 安装页、API Key 签发页、阿里云百炼首页。