图
节点类型
基类: str, Enum
知识图谱中节点类型的枚举。
当前支持的节点类型有:UNKNOWN、DOCUMENT、CHUNK
节点
Bases: BaseModel
表示知识图谱中的一个节点。
属性
| 名称 | 类型 | 描述 |
|---|---|---|
id |
UUID
|
节点的唯一标识符。 |
属性 |
dict
|
与节点关联的属性字典。 |
类型 |
节点类型
|
节点的类型。 |
添加属性
向节点添加一个属性。
抛出
| 类型 | 描述 |
|---|---|
ValueError
|
如果该属性已存在。 |
源代码位于 src/ragas/testset/graph.py
获取属性
关系
知识图谱 dataclass
KnowledgeGraph(nodes: List[Node] = list(), relationships: List[Relationship] = list())
表示包含节点和关系的知识图谱。
属性
| 名称 | 类型 | 描述 |
|---|---|---|
节点 |
List[节点]
|
知识图谱中的节点列表。 |
关系 |
List[关系]
|
知识图谱中的关系列表。 |
添加
add(item: Union[Node, Relationship])
向知识图谱添加一个节点或关系。
抛出
| 类型 | 描述 |
|---|---|
ValueError
|
如果项的类型不是节点或关系。 |
源代码位于 src/ragas/testset/graph.py
save
将知识图谱保存到 JSON 文件。
参数
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
路径
|
Union[str, Path]
|
应保存 JSON 文件的路径。 |
必需 |
备注
文件使用 UTF-8 编码保存,以确保在不同平台上正确处理 Unicode 字符。
源代码位于 src/ragas/testset/graph.py
加载 classmethod
load(path: Union[str, Path]) -> KnowledgeGraph
从路径加载知识图谱。
参数
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
路径
|
Union[str, Path]
|
包含知识图谱的 JSON 文件的路径。 |
必需 |
返回
| 类型 | 描述 |
|---|---|
知识图谱
|
已加载的知识图谱。 |
备注
文件使用 UTF-8 编码读取,以确保在不同平台上正确处理 Unicode 字符。
源代码位于 src/ragas/testset/graph.py
通过id获取节点
get_node_by_id(node_id: Union[UUID, str]) -> Optional[Node]
通过 ID 检索节点。
参数
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
节点ID
|
UUID
|
要检索的节点的 ID。 |
必需 |
返回
| 类型 | 描述 |
|---|---|
节点 或 None
|
具有指定 ID 的节点,如果未找到则为 None。 |
源代码位于 src/ragas/testset/graph.py
查找间接簇
find_indirect_clusters(relationship_condition: Callable[[Relationship], bool] = lambda _: True, depth_limit: int = 3) -> List[Set[Node]]
根据关系条件在知识图谱中查找节点的“间接簇”。使用 Leiden 算法进行社区检测,并识别每个簇内的唯一路径。
注意:方法名中使用的“间接簇”是指“并非直接连接但通过其他节点共享共同关系的节点组”,而 Leiden 算法是一种“聚类”算法,它根据节点的连接来定义节点的邻域——这两种“簇”的定义并不等同。
参数
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
关系条件
|
Callable[[关系], bool]
|
一个接收关系并返回布尔值的函数,默认为 lambda _: True |
lambda _: True
|
深度限制
|
int
|
用于聚类的关系最大深度(边的数量),默认为 3。 |
3
|
返回
| 类型 | 描述 |
|---|---|
List[Set[节点]]
|
一个集合列表,其中每个集合包含形成一个簇的节点。 |
源代码位于 src/ragas/testset/graph.py
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 | |
查找n个间接簇
find_n_indirect_clusters(n: int, relationship_condition: Callable[[Relationship], bool] = lambda _: True, depth_limit: int = 3) -> List[Set[Node]]
根据关系条件在知识图谱中返回 n 个间接簇。通过使用邻接索引进行查找并限制相对于 n 的路径探索,针对大型数据集进行了优化。
一个簇代表图中的一条路径。例如,如果图中存在 A -> B -> C -> D,那么 {A, B, C, D} 形成一个簇。如果还存在一条路径 A -> B -> C -> E,它会形成一个独立的簇。
该方法返回最多 n 个集合的列表,其中每个集合包含从起始节点到叶节点形成的完整路径,或最多为 depth_limit 个节点长的路径段。如果图非常稀疏,或者没有足够的节点形成 n 个不同的簇,结果可能包含少于 n 个簇。
为使结果多样性最大化:1. 随机选择起始节点 2. 对每个起始节点的路径进行分组 3. 以轮询方式从每个组中选择簇,直到找到 n 个唯一的簇 4. 消除重复的簇 5. 当找到一个超集簇(例如 {A,B,C,D})时,任何现有的子集簇(例如 {A,B,C})都将被移除,以避免冗余
参数
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
n
|
int
|
要返回的目标簇数量。必须至少为 1。除非图极其稀疏,否则应返回 n 个簇。 |
必需 |
关系条件
|
Callable[[关系], bool]
|
一个接收关系并返回布尔值的函数,默认为 lambda _: True |
lambda _: True
|
深度限制
|
int
|
路径探索的最大深度,默认为 3。根据定义,必须至少为 2 才能形成簇。 |
3
|
返回
| 类型 | 描述 |
|---|---|
List[Set[节点]]
|
一个集合列表,其中每个集合包含形成一个簇的节点。 |
抛出
| 类型 | 描述 |
|---|---|
ValueError
|
如果 depth_limit < 2,n < 1,或者没有关系匹配提供的条件。 |
源代码位于 src/ragas/testset/graph.py
471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 | |
移除节点
remove_node(node: Node, inplace: bool = True) -> Optional[KnowledgeGraph]
从知识图谱中移除一个节点及其关联的关系。
参数
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
节点
|
节点
|
要从知识图谱中移除的节点。 |
必需 |
原地操作
|
bool
|
如果为 True,则原地修改知识图谱。如果为 False,则返回一个移除了该节点的修改后副本。 |
True
|
返回
| 类型 | 描述 |
|---|---|
知识图谱 或 None
|
如果 |
抛出
| 类型 | 描述 |
|---|---|
ValueError
|
如果节点不存在于知识图谱中。 |
源代码位于 src/ragas/testset/graph.py
查找两个节点间的单一关系
find_two_nodes_single_rel(relationship_condition: Callable[[Relationship], bool] = lambda _: True) -> List[Tuple[Node, Relationship, Node]]
根据关系条件在知识图谱中查找节点。(节点A,节点B,关系)三元组被视为多跳节点。
参数
| 名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
关系条件
|
Callable[[关系], bool]
|
一个接收关系并返回布尔值的函数,默认为 lambda _: True |
lambda _: True
|
返回
| 类型 | 描述 |
|---|---|
List[Set[节点, 关系, 节点]]
|
一个集合列表,其中每个集合包含两个节点和一个关系,构成一个多跳节点。 |