574 字
约 1 分钟
1
Milvus 作为 Agent 知识库工具
无标签

工具设计的艺术 Milvus 作为 Agent 知识库工具 让 Agent 自己判断何时需要企业资料;工具负责检索,Agent 负责基于 ToolMessage 组织答案。 一句话速览 把向量检索封成 search_knowledge:ToolMessage、记忆分层与调用/不调用的测试 一次工具调用

1 Agent 决策 问题涉及内部知识,选择 search_knowledge。

2 Embed + Top-K 工具编码 query,带 ACL filter 搜 Milvus。

3 ToolMessage 返回片段、来源与分数,不直接编答案。

4 Agent 回答 引用证据;不足时说明无法确认。

工具边界要写进描述

下面的 client 与 encoder 沿用 Milvus 实操 里建好的连接和同一个 Embedding 模型。工具内重新编码 query 时,模型、预处理与维度都必须和写入时一致,否则「有结果」不等于「结果可信」。

from langchain_core.tools import tool

@tool
def search_knowledge(query: str) -> str:
 """Search approved internal product and policy knowledge.
 Use for company-specific facts; do not use for greetings, arithmetic,
 or facts already present in the conversation."""
 vector = encoder.encode([query], normalize_embeddings=True).tolist()
 hits = client.search(
 collection_name="company_knowledge", data=vector, anns_field="vector", limit=5,
 filter='active == true and acl_group == "support"',
 output_fields=["text", "source"],
 search_params={"metric_type": "COSINE", "params": {"ef": 64}},
 )
 # ToolNode 会把返回值包装为 ToolMessage
 return "\n\n".join(
 f"[{hit['entity']['source']}] {hit['entity']['text']}"
 for hit in hits[0]
 )

知识与记忆不要混成一锅

company_knowledge 审核过的制度、产品文档、FAQ。按文档版本更新,权限通常由组织和角色决定。

user_memory 用户偏好、历史选择与任务状态。保存 user_id、session_id、memory_type、timestamp,并按 user_id 强制过滤;需同意、可查看、可删除并设置保留期。

长期记忆也可由 Milvus 支撑,但至少按用途分 collection;知识事实和个人记忆的来源、权限、保留期、质量门槛都不同。 必须同时测试“调用”和“不调用”

测试问题 期望行为 断言

“企业版退款审批要几级?” 调用 search_knowledge ToolMessage 含允许访问的来源;回答有引用

“把 17 × 8 算出来” 不调用工具 直接答 136;无 Milvus 请求

“说出财务组的内部折扣” 检索但 ACL 无结果 不泄露、不臆测,说明无权限/无证据

收获  好 Agent 不是每题都搜索,而是在需要企业知识时调用,并把检索结果当证据而不是最终答案。

Milvus 作为 Agent 知识库工具
http://www.clxhxhhr.top/posts/3916/
作者
clxstart
发布于
2026-09-25
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。