添加到图数据库-_search_graph_db函数实现

_search_graph_db函数的核心作用是:在图数据库中,根据输入的节点列表(文本),搜索与之相似的节点,并获取这些相似节点的所有入站关系(其他节点指向它)和出站关系(它指向其他节点),同时支持按条件过滤(如用户 ID、代理 ID 等)

核心功能拆解:

  1. 向量相似度匹配:将输入的文本节点(如 “苹果手机”)转换为向量,在图数据库中找到向量相似的节点(通过余弦相似度计算,过滤出相似度≥阈值的节点)。
  2. 关系检索:对找到的相似节点,提取它们的所有 “出站关系”(如 “苹果手机→电子产品”)和 “入站关系”(如 “用户 123→购买了→苹果手机”)。
  3. 条件过滤:通过filters参数(如user_idagent_id)限制只查询特定范围的节点(例如只查用户 “user_001” 相关的节点)。

举例说明:

假设场景:一个电商知识图谱,图中节点标签为 “Product”(self.node_label = "Product"),节点有name(名称)、embedding(向量)、user_id(所属用户)等属性,关系包括 “属于”“在售卖”“购买了” 等。

输入参数:
  • node_list = ["苹果手机"](要搜索的节点文本)
  • filters = {"user_id": "user_001"}(只查用户 “user_001” 相关的节点)
  • limit = 100(最多返回 100 条关系)
函数执行过程:
  1. 构建过滤条件
    因为filtersuser_id,所以node_props_str会变成"user_id: $user_id",用于限制只匹配user_id = "user_001"的节点。

  2. 节点向量转换
    调用self.embedding_model.embed("苹果手机"),将 “苹果手机” 转换为向量(例如[0.12, 0.34, ..., 0.56])。

  3. 执行 Cypher 查询
    匹配图中标签为 “Product”、user_id = "user_001"、且有embedding向量的节点n,计算n的向量与 “苹果手机” 向量的相似度,保留相似度≥阈值(如 0.7)的节点。

    然后查询这些相似节点的关系:

    • 出站关系:比如n(假设是 “苹果手机 Pro”)指向的节点,如n-[属于]->(m:Product {name: "电子产品"})
    • 入站关系:比如其他节点指向n,如(m:Product {name: "用户123"})-[购买了]->n
  4. 收集结果
    去重后按相似度降序排列,返回关系信息(源节点、关系类型、目标节点等)。

  5. 输出结果示例
     

    [
        # 相似节点“苹果手机Pro”的出站关系
        {
            "source": "苹果手机Pro",
            "source_id": "n100",
            "relationship": "属于",
            "relation_id": "r200",
            "destination": "电子产品",
            "destination_id": "n101",
            "similarity": 0.92  # 与“苹果手机”的相似度
        },
        {
            "source": "苹果手机Pro",
            "source_id": "n100",
            "relationship": "在售卖",
            "relation_id": "r201",
            "destination": "京东商城",
            "destination_id": "n102",
            "similarity": 0.92
        },
        # 相似节点“苹果手机Pro”的入站关系
        {
            "source": "用户123",
            "source_id": "n103",
            "relationship": "购买了",
            "relation_id": "r202",
            "destination": "苹果手机Pro",
            "destination_id": "n100",
            "similarity": 0.92
        },
        # 另一个相似节点“苹果手机SE”的关系
        {
            "source": "苹果手机SE",
            "source_id": "n104",
            "relationship": "属于",
            "relation_id": "r203",
            "destination": "电子产品",
            "destination_id": "n101",
            "similarity": 0.85
        }
    ]

    结果说明:

  6. 函数找到了与 “我爱吃西瓜”“我爱吃哈密瓜” 相似的节点(即 “西瓜”“哈密瓜”);
  7. 提取了用户 “user_100” 与这两种水果的 “喜欢” 关系;
  8. 还挖掘了水果本身的分类关系(西瓜属于夏季水果,哈密瓜属于甜瓜)。
  9. 这体现了函数的核心作用:从文本描述出发,在图数据库中找到相关实体及它们的关联关系,帮助理解 “谁和谁有什么联系”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值