Skip to content

Commit ec2faee

Browse files
committed
feat(knowledgebase): add knowledgebase adk capability
Change-Id: I40733b161d8ab1333cc83cfdbb5f32e6e2ff2638 Co-developed-by: Aone Copilot <[email protected]> Signed-off-by: Sodawyx <[email protected]>
1 parent 613723b commit ec2faee

32 files changed

+4648
-22
lines changed

agentrun/integration/agentscope/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
提供 AgentRun 模型与沙箱工具的 AgentScope 适配入口。 / 提供 AgentRun 模型with沙箱工具的 AgentScope 适配入口。
44
"""
55

6-
from .builtin import model, sandbox_toolset, toolset
6+
from .builtin import knowledgebase_toolset, model, sandbox_toolset, toolset
77

88
__all__ = [
99
"model",
1010
"toolset",
1111
"sandbox_toolset",
12+
"knowledgebase_toolset",
1213
]

agentrun/integration/agentscope/builtin.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
from typing_extensions import Unpack
1010

11+
from agentrun.integration.builtin import (
12+
knowledgebase_toolset as _knowledgebase_toolset,
13+
)
1114
from agentrun.integration.builtin import model as _model
1215
from agentrun.integration.builtin import ModelArgs
1316
from agentrun.integration.builtin import sandbox_toolset as _sandbox_toolset
@@ -63,3 +66,23 @@ def sandbox_toolset(
6366
config=config,
6467
sandbox_idle_timeout_seconds=sandbox_idle_timeout_seconds,
6568
).to_agentscope(prefix=prefix)
69+
70+
71+
def knowledgebase_toolset(
72+
knowledge_base_names: List[str],
73+
*,
74+
prefix: Optional[str] = None,
75+
modify_tool_name: Optional[Callable[[Tool], Tool]] = None,
76+
filter_tools_by_name: Optional[Callable[[str], bool]] = None,
77+
config: Optional[Config] = None,
78+
) -> List[Any]:
79+
"""将知识库检索封装为 AgentScope 工具列表。 / AgentScope Built-in Integration Functions"""
80+
81+
return _knowledgebase_toolset(
82+
knowledge_base_names=knowledge_base_names,
83+
config=config,
84+
).to_agentscope(
85+
prefix=prefix,
86+
modify_tool_name=modify_tool_name,
87+
filter_tools_by_name=filter_tools_by_name,
88+
)

agentrun/integration/builtin/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
This module provides built-in integration functions for quickly creating models and tools.
55
"""
66

7+
from .knowledgebase import knowledgebase_toolset
78
from .model import model, ModelArgs
89
from .sandbox import sandbox_toolset
910
from .toolset import toolset
@@ -13,4 +14,5 @@
1314
"ModelArgs",
1415
"toolset",
1516
"sandbox_toolset",
17+
"knowledgebase_toolset",
1618
]
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
"""知识库工具集 / KnowledgeBase ToolSet
2+
3+
提供知识库检索功能的工具集,支持多知识库联合检索。
4+
Provides toolset for knowledge base retrieval, supporting multi-knowledge-base search.
5+
"""
6+
7+
from __future__ import annotations
8+
9+
from typing import Any, Dict, List, Optional
10+
11+
from agentrun.integration.utils.tool import CommonToolSet, tool
12+
from agentrun.knowledgebase import KnowledgeBase
13+
from agentrun.utils.config import Config
14+
15+
16+
class KnowledgeBaseToolSet(CommonToolSet):
17+
"""知识库工具集 / KnowledgeBase ToolSet
18+
19+
提供知识库检索功能,支持对多个知识库进行联合检索。
20+
Provides knowledge base retrieval capabilities, supporting joint retrieval
21+
across multiple knowledge bases.
22+
23+
使用指南 / Usage Guide:
24+
============================================================
25+
26+
## 基本用法 / Basic Usage
27+
28+
1. **创建工具集 / Create ToolSet**:
29+
- 使用 `knowledgebase_toolset` 函数创建工具集实例
30+
- Use `knowledgebase_toolset` function to create a toolset instance
31+
- 指定要检索的知识库名称列表
32+
- Specify the list of knowledge base names to search
33+
34+
2. **执行检索 / Execute Search**:
35+
- 调用 `search_document` 工具进行检索
36+
- Call `search_document` tool to perform retrieval
37+
- 返回所有指定知识库的检索结果
38+
- Returns retrieval results from all specified knowledge bases
39+
40+
## 示例 / Examples
41+
42+
```python
43+
from agentrun.integration.langchain import knowledgebase_toolset
44+
45+
# 创建工具集 / Create toolset
46+
tools = knowledgebase_toolset(
47+
knowledge_base_names=["kb-product-docs", "kb-faq"],
48+
)
49+
50+
# 在 Agent 中使用 / Use in Agent
51+
agent = create_react_agent(llm, tools)
52+
```
53+
"""
54+
55+
def __init__(
56+
self,
57+
knowledge_base_names: List[str],
58+
config: Optional[Config] = None,
59+
) -> None:
60+
"""初始化知识库工具集 / Initialize KnowledgeBase ToolSet
61+
62+
Args:
63+
knowledge_base_names: 知识库名称列表 / List of knowledge base names
64+
config: 配置 / Configuration
65+
"""
66+
super().__init__()
67+
68+
self.knowledge_base_names = knowledge_base_names
69+
self.config = config
70+
71+
@tool(
72+
name="search_document",
73+
description=(
74+
"Search and retrieve relevant documents from configured knowledge"
75+
" bases. Use this tool when you need to find information from the"
76+
" knowledge base to answer user questions. Returns relevant"
77+
" document chunks with their content and metadata. The search is"
78+
" performed across all configured knowledge bases and results are"
79+
" grouped by knowledge base name."
80+
),
81+
)
82+
def search_document(self, query: str) -> Dict[str, Any]:
83+
"""检索文档 / Search documents
84+
85+
根据查询文本从配置的知识库中检索相关文档。
86+
Retrieves relevant documents from configured knowledge bases based on query text.
87+
88+
Args:
89+
query: 查询文本 / Query text
90+
91+
Returns:
92+
Dict[str, Any]: 检索结果,包含各知识库的检索结果 /
93+
Retrieval results containing results from each knowledge base
94+
"""
95+
return KnowledgeBase.multi_retrieve(
96+
query=query,
97+
knowledge_base_names=self.knowledge_base_names,
98+
config=self.config,
99+
)
100+
101+
102+
def knowledgebase_toolset(
103+
knowledge_base_names: List[str],
104+
*,
105+
config: Optional[Config] = None,
106+
) -> KnowledgeBaseToolSet:
107+
"""创建知识库工具集 / Create KnowledgeBase ToolSet
108+
109+
将知识库检索功能封装为通用工具集,可转换为各框架支持的格式。
110+
Wraps knowledge base retrieval functionality into a common toolset that can be
111+
converted to formats supported by various frameworks.
112+
113+
Args:
114+
knowledge_base_names: 知识库名称列表 / List of knowledge base names
115+
config: 配置 / Configuration
116+
117+
Returns:
118+
KnowledgeBaseToolSet: 知识库工具集实例 / KnowledgeBase toolset instance
119+
120+
Example:
121+
>>> from agentrun.integration.builtin import knowledgebase_toolset
122+
>>>
123+
>>> # 创建工具集 / Create toolset
124+
>>> kb_tools = knowledgebase_toolset(
125+
... knowledge_base_names=["kb-docs", "kb-faq"],
126+
... )
127+
>>>
128+
>>> # 转换为 LangChain 格式 / Convert to LangChain format
129+
>>> langchain_tools = kb_tools.to_langchain()
130+
>>>
131+
>>> # 转换为 Google ADK 格式 / Convert to Google ADK format
132+
>>> adk_tools = kb_tools.to_google_adk()
133+
"""
134+
return KnowledgeBaseToolSet(
135+
knowledge_base_names=knowledge_base_names,
136+
config=config,
137+
)

agentrun/integration/crewai/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
CrewAI 与 LangChain 兼容,因此直接复用 LangChain 的转换逻辑。 / CrewAI with LangChain 兼容,因此直接复用 LangChain 的转换逻辑。
55
"""
66

7-
from .builtin import model, sandbox_toolset
7+
from .builtin import knowledgebase_toolset, model, sandbox_toolset
88

99
__all__ = [
1010
"model",
1111
"sandbox_toolset",
12+
"knowledgebase_toolset",
1213
]

agentrun/integration/crewai/builtin.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
from typing_extensions import Unpack
1010

11+
from agentrun.integration.builtin import (
12+
knowledgebase_toolset as _knowledgebase_toolset,
13+
)
1114
from agentrun.integration.builtin import model as _model
1215
from agentrun.integration.builtin import ModelArgs
1316
from agentrun.integration.builtin import sandbox_toolset as _sandbox_toolset
@@ -63,3 +66,23 @@ def sandbox_toolset(
6366
config=config,
6467
sandbox_idle_timeout_seconds=sandbox_idle_timeout_seconds,
6568
).to_crewai(prefix=prefix)
69+
70+
71+
def knowledgebase_toolset(
72+
knowledge_base_names: List[str],
73+
*,
74+
prefix: Optional[str] = None,
75+
modify_tool_name: Optional[Callable[[Tool], Tool]] = None,
76+
filter_tools_by_name: Optional[Callable[[str], bool]] = None,
77+
config: Optional[Config] = None,
78+
) -> List[Any]:
79+
"""将知识库检索封装为 CrewAI 工具列表。 / CrewAI Built-in Integration Functions"""
80+
81+
return _knowledgebase_toolset(
82+
knowledge_base_names=knowledge_base_names,
83+
config=config,
84+
).to_crewai(
85+
prefix=prefix,
86+
modify_tool_name=modify_tool_name,
87+
filter_tools_by_name=filter_tools_by_name,
88+
)

agentrun/integration/google_adk/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
提供与 Google Agent Development Kit 的模型与沙箱工具集成。 / 提供with Google Agent Development Kit 的模型with沙箱工具集成。
44
"""
55

6-
from .builtin import model, sandbox_toolset, toolset
6+
from .builtin import knowledgebase_toolset, model, sandbox_toolset, toolset
77

88
__all__ = [
99
"model",
1010
"toolset",
1111
"sandbox_toolset",
12+
"knowledgebase_toolset",
1213
]

agentrun/integration/google_adk/builtin.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
from typing_extensions import Unpack
1010

11+
from agentrun.integration.builtin import (
12+
knowledgebase_toolset as _knowledgebase_toolset,
13+
)
1114
from agentrun.integration.builtin import model as _model
1215
from agentrun.integration.builtin import ModelArgs
1316
from agentrun.integration.builtin import sandbox_toolset as _sandbox_toolset
@@ -63,3 +66,23 @@ def sandbox_toolset(
6366
config=config,
6467
sandbox_idle_timeout_seconds=sandbox_idle_timeout_seconds,
6568
).to_google_adk(prefix=prefix)
69+
70+
71+
def knowledgebase_toolset(
72+
knowledge_base_names: List[str],
73+
*,
74+
prefix: Optional[str] = None,
75+
modify_tool_name: Optional[Callable[[Tool], Tool]] = None,
76+
filter_tools_by_name: Optional[Callable[[str], bool]] = None,
77+
config: Optional[Config] = None,
78+
) -> List[Any]:
79+
"""将知识库检索封装为 Google ADK 工具列表。 / Google ADK Built-in Integration Functions"""
80+
81+
return _knowledgebase_toolset(
82+
knowledge_base_names=knowledge_base_names,
83+
config=config,
84+
).to_google_adk(
85+
prefix=prefix,
86+
modify_tool_name=modify_tool_name,
87+
filter_tools_by_name=filter_tools_by_name,
88+
)

agentrun/integration/langchain/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@
2020
AgentRunConverter,
2121
) # 向后兼容
2222

23-
from .builtin import model, sandbox_toolset, toolset
23+
from .builtin import knowledgebase_toolset, model, sandbox_toolset, toolset
2424

2525
__all__ = [
2626
"AgentRunConverter",
2727
"model",
2828
"toolset",
2929
"sandbox_toolset",
30+
"knowledgebase_toolset",
3031
]

agentrun/integration/langchain/builtin.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
from typing_extensions import Unpack
1010

11+
from agentrun.integration.builtin import (
12+
knowledgebase_toolset as _knowledgebase_toolset,
13+
)
1114
from agentrun.integration.builtin import model as _model
1215
from agentrun.integration.builtin import ModelArgs
1316
from agentrun.integration.builtin import sandbox_toolset as _sandbox_toolset
@@ -69,3 +72,23 @@ def sandbox_toolset(
6972
modify_tool_name=modify_tool_name,
7073
filter_tools_by_name=filter_tools_by_name,
7174
)
75+
76+
77+
def knowledgebase_toolset(
78+
knowledge_base_names: List[str],
79+
*,
80+
prefix: Optional[str] = None,
81+
modify_tool_name: Optional[Callable[[Tool], Tool]] = None,
82+
filter_tools_by_name: Optional[Callable[[str], bool]] = None,
83+
config: Optional[Config] = None,
84+
) -> List[Any]:
85+
"""将知识库检索封装为 LangChain ``StructuredTool`` 列表。 / LangChain Built-in Integration Functions"""
86+
87+
return _knowledgebase_toolset(
88+
knowledge_base_names=knowledge_base_names,
89+
config=config,
90+
).to_langchain(
91+
prefix=prefix,
92+
modify_tool_name=modify_tool_name,
93+
filter_tools_by_name=filter_tools_by_name,
94+
)

0 commit comments

Comments
 (0)