feat: add list kbengine and parser api (#89)

This commit is contained in:
huanghuoguoguo
2026-03-12 22:15:48 +08:00
committed by GitHub
parent 35a0234c87
commit 94337e6c8e
6 changed files with 261 additions and 12 deletions
+74 -1
View File
@@ -82,6 +82,66 @@ async def get_query_vars(self) -> dict[str, Any]:
query_vars = await event_context.get_query_vars()
```
### 現在のパイプラインに設定されたナレッジベース一覧の取得
現在のリクエストで使用されているパイプラインに設定されたナレッジベース一覧を取得します。
```python
async def list_pipeline_knowledge_bases(self) -> list[dict[str, Any]]:
"""List knowledge bases configured for the current pipeline"""
# 使用例
knowledge_bases = await event_context.list_pipeline_knowledge_bases()
# 返却例
[
{
"uuid": "kb_uuid",
"name": "Product Docs",
"description": "社内製品ドキュメント",
}
]
```
返されるのは、現在のパイプラインの `Local Agent` 設定に紐づいたナレッジベースだけです。ナレッジベースが未設定、または `Local Agent` を使っていない場合は空配列になります。
### 現在のパイプライン範囲でナレッジを検索
現在のリクエストのパイプラインで許可されているナレッジベースの範囲内で検索を実行します。
```python
async def retrieve_knowledge(
self,
kb_id: str,
query_text: str,
top_k: int = 5,
filters: dict[str, Any] | None = None,
) -> list[dict[str, Any]]:
"""Retrieve relevant documents from a knowledge base"""
# 使用例
knowledge_bases = await event_context.list_pipeline_knowledge_bases()
results = await event_context.retrieve_knowledge(
kb_id=knowledge_bases[0]["uuid"],
query_text="エンタープライズ向けナレッジベースの設定方法は?",
top_k=3,
filters={"document_type": {"$eq": "manual"}},
)
# 返却例
[
{
"id": "chunk_0",
"content": [{"type": "text", "text": "ナレッジベース設定ガイド"}],
"metadata": {"document_id": "doc_001"},
"distance": 0.12,
"score": 0.88,
}
]
```
`kb_id` は `list_pipeline_knowledge_bases` の返却値から取得し、現在のパイプラインに設定されたナレッジベースである必要があります。そうでない場合、LangBot はエラーを返します。
## LangBot API
これらのAPIは、任意のプラグインコンポーネントで呼び出すことができます。アクセス方法:
@@ -213,6 +273,19 @@ llm_message = await self.plugin.invoke_llm(
)
```
### 利用可能な Parser の一覧取得
ホスト上で現在利用可能な Parser プラグインを列挙します。MIME タイプで絞り込むこともできます。
```python
async def list_parsers(self, mime_type: str | None = None) -> list[dict[str, Any]]:
"""List available Parser plugins"""
# 使用例
parsers = await self.plugin.list_parsers(mime_type="application/pdf")
# 各要素には plugin_id、plugin_author、plugin_name、name、description、supported_mime_types が含まれます
```
### プラグイン永続データの設定
プラグインデータを永続的に保存します。このインターフェースを通じて保存されたデータは、このプラグインのみがアクセスできます。値は手動でbytesに変換する必要があります。
@@ -495,4 +568,4 @@ async def get_knowledge_file_stream(self, storage_path: str) -> bytes:
# 使用例
file_bytes = await self.plugin.get_knowledge_file_stream(context.file_object.storage_path)
```
```
+13 -3
View File
@@ -177,12 +177,22 @@ async def ingest(self, context: IngestionContext) -> IngestionResult:
## クロスプラグインパーサー呼び出し
KnowledgeEngineプラグインは`self.plugin.invoke_parser`を通じて、他のプラグインが提供するパーサーを呼び出すことができます:
他のプラグインが提供するパーサーを呼び出す前に、`self.plugin.list_parsers` を使ってホスト上で現在利用可能なパーサーを列挙できます:
```python
parsers = await self.plugin.list_parsers(mime_type="application/pdf")
# 各要素には plugin_id、plugin_author、plugin_name、name、description、supported_mime_types が含まれます
```
空配列が返る場合、その MIME タイプに対応する接続済みの Parser プラグインは現在存在しません。
`plugin_author` と `plugin_name` を取得したら、`self.plugin.invoke_parser` で対象のパーサーを呼び出せます:
```python
parser = parsers[0]
result = await self.plugin.invoke_parser(
plugin_author="author_name",
plugin_name="plugin_name",
plugin_author=parser["plugin_author"],
plugin_name=parser["plugin_name"],
storage_path=context.file_object.storage_path,
mime_type=context.file_object.metadata.mime_type,
filename=context.file_object.metadata.filename,