From bf73934b26107fadc14a09481e4e84d7de17b452 Mon Sep 17 00:00:00 2001 From: lazy <2512087764@qq.com> Date: Wed, 18 Mar 2026 01:09:48 +0800 Subject: [PATCH 01/10] Update wecom_qr.png --- images/zh/insight/wecom_qr.png | Bin 9782 -> 4718 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/zh/insight/wecom_qr.png b/images/zh/insight/wecom_qr.png index 9b09650b3766dc024db9d44ffab2c88d6ae3ce1e..5be03784e4ffaa762e83b9cb0da1a2d2f9adac3d 100644 GIT binary patch literal 4718 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 Mrl9lHCT5M^Lre}_dL$;amJe(U*Y8z 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 TPw52b!PpG+jW1y@-irDUy)Cg} From 7a5ed2482d0a65c7b12989f1a8438a5b7a88edb1 Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Mon, 23 Mar 2026 21:10:13 +0800 Subject: [PATCH 02/10] docs(plugin): add Knowledge Base API documentation (zh/en/ja) Document the new global list_knowledge_bases() and retrieve_knowledge() APIs in the LangBot API section of plugin common APIs docs. --- en/plugin/dev/apis/common.mdx | 63 +++++++++++++++++++++++++++++++++++ ja/plugin/dev/apis/common.mdx | 63 +++++++++++++++++++++++++++++++++++ zh/plugin/dev/apis/common.mdx | 63 +++++++++++++++++++++++++++++++++++ 3 files changed, 189 insertions(+) diff --git a/en/plugin/dev/apis/common.mdx b/en/plugin/dev/apis/common.mdx index d228ce2c6..b1d6174b1 100644 --- a/en/plugin/dev/apis/common.mdx +++ b/en/plugin/dev/apis/common.mdx @@ -382,6 +382,69 @@ file_bytes = await self.plugin.get_config_file("key") Use this in conjunction with configuration fields of type [``file or array[file``](/en/plugin/dev/basic-info.html#type-file). +## Knowledge Base API + +These APIs are accessible via `self.plugin` in any component, allowing you to list and retrieve from all knowledge bases in the LangBot instance without pipeline restrictions. + +### List All Knowledge Bases + +List all available knowledge bases in the LangBot instance. + +```python +async def list_knowledge_bases(self) -> list[dict[str, Any]]: + """List all knowledge bases + + Returns: + List of knowledge base dicts, each containing: + - uuid: Knowledge base UUID + - name: Knowledge base name + - description: Knowledge base description + """ + +# Usage example +knowledge_bases = await self.plugin.list_knowledge_bases() +for kb in knowledge_bases: + print(f"KB: {kb['name']} ({kb['uuid']})") +``` + +### Retrieve from Knowledge Base + +Retrieve relevant documents from any knowledge base. + +```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 from a knowledge base + + Args: + kb_id: Knowledge base UUID (from list_knowledge_bases) + query_text: Search query text + top_k: Number of results to return (default: 5) + filters: Optional metadata filters for retrieval + + Returns: + List of retrieval result entries + """ + +# Usage example +results = await self.plugin.retrieve_knowledge( + kb_id="kb-uuid-here", + query_text="How to configure the system?", + top_k=3, +) +for entry in results: + print(entry) +``` + +:::tip +Unlike the query-based `list_pipeline_knowledge_bases()` and `retrieve_knowledge()` in the Request API, these APIs do not require a `query_id` and can be used in any component (including Tool components). They can access all knowledge bases without being restricted to the current pipeline's configuration. +::: + ## RAG API These APIs are available for `KnowledgeEngine` components to access the LangBot host's embedding models, vector database, and file storage. Access method: diff --git a/ja/plugin/dev/apis/common.mdx b/ja/plugin/dev/apis/common.mdx index a681f30ab..dbe35f156 100644 --- a/ja/plugin/dev/apis/common.mdx +++ b/ja/plugin/dev/apis/common.mdx @@ -382,6 +382,69 @@ file_bytes = await self.plugin.get_config_file("key") これは[``fileまたはarray[file``](/en/plugin/dev/basic-info.html#type-file)型の設定フィールドと組み合わせて使用します。 +## ナレッジベース API + +これらのAPIは任意のコンポーネントから`self.plugin`経由でアクセスでき、パイプライン制限なしにLangBotインスタンス内のすべてのナレッジベースの一覧取得と検索が可能です。 + +### すべてのナレッジベースの一覧取得 + +LangBotインスタンスで利用可能なすべてのナレッジベースを一覧取得します。 + +```python +async def list_knowledge_bases(self) -> list[dict[str, Any]]: + """すべてのナレッジベースを一覧取得 + + Returns: + ナレッジベースのリスト、各要素は以下を含む: + - uuid: ナレッジベースUUID + - name: ナレッジベース名 + - description: ナレッジベースの説明 + """ + +# 使用例 +knowledge_bases = await self.plugin.list_knowledge_bases() +for kb in knowledge_bases: + print(f"KB: {kb['name']} ({kb['uuid']})") +``` + +### ナレッジベースからの検索 + +任意のナレッジベースから関連ドキュメントを検索します。 + +```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]]: + """ナレッジベースから検索 + + Args: + kb_id: ナレッジベースUUID(list_knowledge_basesから取得) + query_text: 検索クエリテキスト + top_k: 返す結果の数(デフォルト:5) + filters: オプションのメタデータフィルター + + Returns: + 検索結果エントリのリスト + """ + +# 使用例 +results = await self.plugin.retrieve_knowledge( + kb_id="kb-uuid-here", + query_text="システムの設定方法は?", + top_k=3, +) +for entry in results: + print(entry) +``` + +:::tip +リクエストAPIの`list_pipeline_knowledge_bases()`や`retrieve_knowledge()`とは異なり、これらのAPIは`query_id`を必要とせず、任意のコンポーネント(Toolコンポーネントを含む)で使用できます。現在のパイプライン設定に制限されることなく、すべてのナレッジベースにアクセスできます。 +::: + ## RAG API これらのAPIは`KnowledgeEngine`コンポーネントがLangBotホストの埋め込みモデル、ベクトルデータベース、ファイルストレージにアクセスするために使用できます。アクセス方法: diff --git a/zh/plugin/dev/apis/common.mdx b/zh/plugin/dev/apis/common.mdx index 1429c3041..2cd287bef 100644 --- a/zh/plugin/dev/apis/common.mdx +++ b/zh/plugin/dev/apis/common.mdx @@ -382,6 +382,69 @@ file_bytes = await self.plugin.get_config_file("key") 请结合 [``file 或 array[file] 类型配置项``](/zh/plugin/dev/basic-info.html#type-file)使用。 +## 知识库 API + +这些 API 可在任意组件中通过 `self.plugin` 访问,用于列出和检索 LangBot 实例中的所有知识库,不受流水线配置限制。 + +### 列出所有知识库 + +列出 LangBot 实例中所有可用的知识库。 + +```python +async def list_knowledge_bases(self) -> list[dict[str, Any]]: + """列出所有知识库 + + Returns: + 知识库列表,每个元素包含: + - uuid: 知识库 UUID + - name: 知识库名称 + - description: 知识库描述 + """ + +# 调用示例 +knowledge_bases = await self.plugin.list_knowledge_bases() +for kb in knowledge_bases: + print(f"KB: {kb['name']} ({kb['uuid']})") +``` + +### 检索知识库 + +从任意知识库中检索相关文档。 + +```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]]: + """从知识库中检索 + + Args: + kb_id: 知识库 UUID(从 list_knowledge_bases 获取) + query_text: 检索查询文本 + top_k: 返回结果数量(默认:5) + filters: 可选的元数据过滤条件 + + Returns: + 检索结果条目列表 + """ + +# 调用示例 +results = await self.plugin.retrieve_knowledge( + kb_id="kb-uuid-here", + query_text="如何配置系统?", + top_k=3, +) +for entry in results: + print(entry) +``` + +:::tip +与请求 API 中的 `list_pipeline_knowledge_bases()` 和 `retrieve_knowledge()` 不同,这些 API 不需要 `query_id`,可以在任何组件中使用(包括 Tool 组件),且可以访问所有知识库,不受当前流水线配置限制。 +::: + ## RAG API 这些 API 供 `KnowledgeEngine` 组件调用,用于访问 LangBot 宿主的嵌入模型、向量数据库和文件存储。访问方式: From ff512163de5a74e264787330c21251061241ce94 Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Mon, 23 Mar 2026 21:18:49 +0800 Subject: [PATCH 03/10] docs(plugin): remove deprecated pipeline-scoped KB API docs (zh/en/ja) Remove list_pipeline_knowledge_bases and retrieve_knowledge from Request API section as they are fully superseded by the global Knowledge Base APIs. --- en/plugin/dev/apis/common.mdx | 62 +---------------------------------- ja/plugin/dev/apis/common.mdx | 62 +---------------------------------- zh/plugin/dev/apis/common.mdx | 62 +---------------------------------- 3 files changed, 3 insertions(+), 183 deletions(-) diff --git a/en/plugin/dev/apis/common.mdx b/en/plugin/dev/apis/common.mdx index b1d6174b1..71b6b4f96 100644 --- a/en/plugin/dev/apis/common.mdx +++ b/en/plugin/dev/apis/common.mdx @@ -82,66 +82,6 @@ async def get_query_vars(self) -> dict[str, Any]: query_vars = await event_context.get_query_vars() ``` -### List Knowledge Bases Configured for the Current Pipeline - -Get the knowledge bases configured in the pipeline used by the current request. - -```python -async def list_pipeline_knowledge_bases(self) -> list[dict[str, Any]]: - """List knowledge bases configured for the current pipeline""" - -# Usage example -knowledge_bases = await event_context.list_pipeline_knowledge_bases() - -# Return example -[ - { - "uuid": "kb_uuid", - "name": "Product Docs", - "description": "Internal product documentation", - } -] -``` - -This only returns knowledge bases bound in the current pipeline's `Local Agent` configuration. If the pipeline has no knowledge base configured, or is not using `Local Agent`, an empty list is returned. - -### Retrieve Knowledge from the Current Pipeline Scope - -Run retrieval against the knowledge bases that are allowed for the current request's pipeline. - -```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""" - -# Usage example -knowledge_bases = await event_context.list_pipeline_knowledge_bases() -results = await event_context.retrieve_knowledge( - kb_id=knowledge_bases[0]["uuid"], - query_text="How do I configure the enterprise knowledge base?", - top_k=3, - filters={"document_type": {"$eq": "manual"}}, -) - -# Return example -[ - { - "id": "chunk_0", - "content": [{"type": "text", "text": "Knowledge base configuration guide"}], - "metadata": {"document_id": "doc_001"}, - "distance": 0.12, - "score": 0.88, - } -] -``` - -`kb_id` must come from `list_pipeline_knowledge_bases` and must belong to a knowledge base configured for the current pipeline. Otherwise, LangBot returns an error. - ## LangBot API These APIs can be called in any plugin component. Access methods: @@ -442,7 +382,7 @@ for entry in results: ``` :::tip -Unlike the query-based `list_pipeline_knowledge_bases()` and `retrieve_knowledge()` in the Request API, these APIs do not require a `query_id` and can be used in any component (including Tool components). They can access all knowledge bases without being restricted to the current pipeline's configuration. +These APIs do not require a `query_id` and can be used in any component (including Tool components). They can access all knowledge bases without being restricted to the current pipeline's configuration. ::: ## RAG API diff --git a/ja/plugin/dev/apis/common.mdx b/ja/plugin/dev/apis/common.mdx index dbe35f156..88eeaae72 100644 --- a/ja/plugin/dev/apis/common.mdx +++ b/ja/plugin/dev/apis/common.mdx @@ -82,66 +82,6 @@ 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は、任意のプラグインコンポーネントで呼び出すことができます。アクセス方法: @@ -442,7 +382,7 @@ for entry in results: ``` :::tip -リクエストAPIの`list_pipeline_knowledge_bases()`や`retrieve_knowledge()`とは異なり、これらのAPIは`query_id`を必要とせず、任意のコンポーネント(Toolコンポーネントを含む)で使用できます。現在のパイプライン設定に制限されることなく、すべてのナレッジベースにアクセスできます。 +これらのAPIは`query_id`を必要とせず、任意のコンポーネント(Toolコンポーネントを含む)で使用できます。現在のパイプライン設定に制限されることなく、すべてのナレッジベースにアクセスできます。 ::: ## RAG API diff --git a/zh/plugin/dev/apis/common.mdx b/zh/plugin/dev/apis/common.mdx index 2cd287bef..235cecc2d 100644 --- a/zh/plugin/dev/apis/common.mdx +++ b/zh/plugin/dev/apis/common.mdx @@ -82,66 +82,6 @@ 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 可在插件任何组件中调用。访问方式如下: @@ -442,7 +382,7 @@ for entry in results: ``` :::tip -与请求 API 中的 `list_pipeline_knowledge_bases()` 和 `retrieve_knowledge()` 不同,这些 API 不需要 `query_id`,可以在任何组件中使用(包括 Tool 组件),且可以访问所有知识库,不受当前流水线配置限制。 +这些 API 不需要 `query_id`,可以在任何组件中使用(包括 Tool 组件),且可以访问所有知识库,不受当前流水线配置限制。 ::: ## RAG API From 04d7bb143609d3ae28a140208e69e4bb26a18647 Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Mon, 23 Mar 2026 21:21:43 +0800 Subject: [PATCH 04/10] fix(plugin): use Mintlify Tip component instead of ::: syntax --- en/plugin/dev/apis/common.mdx | 4 ++-- ja/plugin/dev/apis/common.mdx | 4 ++-- zh/plugin/dev/apis/common.mdx | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/en/plugin/dev/apis/common.mdx b/en/plugin/dev/apis/common.mdx index 71b6b4f96..a3df17cdd 100644 --- a/en/plugin/dev/apis/common.mdx +++ b/en/plugin/dev/apis/common.mdx @@ -381,9 +381,9 @@ for entry in results: print(entry) ``` -:::tip + These APIs do not require a `query_id` and can be used in any component (including Tool components). They can access all knowledge bases without being restricted to the current pipeline's configuration. -::: + ## RAG API diff --git a/ja/plugin/dev/apis/common.mdx b/ja/plugin/dev/apis/common.mdx index 88eeaae72..af01ddd75 100644 --- a/ja/plugin/dev/apis/common.mdx +++ b/ja/plugin/dev/apis/common.mdx @@ -381,9 +381,9 @@ for entry in results: print(entry) ``` -:::tip + これらのAPIは`query_id`を必要とせず、任意のコンポーネント(Toolコンポーネントを含む)で使用できます。現在のパイプライン設定に制限されることなく、すべてのナレッジベースにアクセスできます。 -::: + ## RAG API diff --git a/zh/plugin/dev/apis/common.mdx b/zh/plugin/dev/apis/common.mdx index 235cecc2d..d21f7d905 100644 --- a/zh/plugin/dev/apis/common.mdx +++ b/zh/plugin/dev/apis/common.mdx @@ -381,9 +381,9 @@ for entry in results: print(entry) ``` -:::tip + 这些 API 不需要 `query_id`,可以在任何组件中使用(包括 Tool 组件),且可以访问所有知识库,不受当前流水线配置限制。 -::: + ## RAG API From 932dd36abf4129da6cf1005393bfd9a6a70179d6 Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Mon, 23 Mar 2026 21:23:53 +0800 Subject: [PATCH 05/10] docs(plugin): restore list_pipeline_knowledge_bases in Request API section (zh/en/ja) --- en/plugin/dev/apis/common.mdx | 23 +++++++++++++++++++++++ ja/plugin/dev/apis/common.mdx | 23 +++++++++++++++++++++++ zh/plugin/dev/apis/common.mdx | 23 +++++++++++++++++++++++ 3 files changed, 69 insertions(+) diff --git a/en/plugin/dev/apis/common.mdx b/en/plugin/dev/apis/common.mdx index a3df17cdd..2a04140c8 100644 --- a/en/plugin/dev/apis/common.mdx +++ b/en/plugin/dev/apis/common.mdx @@ -82,6 +82,29 @@ async def get_query_vars(self) -> dict[str, Any]: query_vars = await event_context.get_query_vars() ``` +### List Pipeline Knowledge Bases + +Get the list of knowledge bases configured for the pipeline used by the current request. + +```python +async def list_pipeline_knowledge_bases(self) -> list[dict[str, Any]]: + """List knowledge bases configured for the current pipeline""" + +# Usage example +knowledge_bases = await event_context.list_pipeline_knowledge_bases() + +# Return example +[ + { + "uuid": "kb_uuid", + "name": "Product Docs", + "description": "Internal product documentation", + } +] +``` + +Only returns knowledge bases bound in the `Local Agent` configuration of the pipeline corresponding to the current request. If the current pipeline has no knowledge bases configured, or does not use `Local Agent`, an empty list is returned. + ## LangBot API These APIs can be called in any plugin component. Access methods: diff --git a/ja/plugin/dev/apis/common.mdx b/ja/plugin/dev/apis/common.mdx index af01ddd75..499b1a0e8 100644 --- a/ja/plugin/dev/apis/common.mdx +++ b/ja/plugin/dev/apis/common.mdx @@ -82,6 +82,29 @@ 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` を使用していない場合は、空のリストが返されます。 + ## LangBot API これらのAPIは、任意のプラグインコンポーネントで呼び出すことができます。アクセス方法: diff --git a/zh/plugin/dev/apis/common.mdx b/zh/plugin/dev/apis/common.mdx index d21f7d905..6dfdd1489 100644 --- a/zh/plugin/dev/apis/common.mdx +++ b/zh/plugin/dev/apis/common.mdx @@ -82,6 +82,29 @@ 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`,则返回空列表。 + ## LangBot API 这些 API 可在插件任何组件中调用。访问方式如下: From 21c2d4183900a6d19533a5bbbf4834f401506425 Mon Sep 17 00:00:00 2001 From: RockChinQ Date: Tue, 24 Mar 2026 14:02:57 +0800 Subject: [PATCH 06/10] chore: add Google Search Console verification file --- googleebab2ef285c63b19.html | 1 + 1 file changed, 1 insertion(+) create mode 100644 googleebab2ef285c63b19.html diff --git a/googleebab2ef285c63b19.html b/googleebab2ef285c63b19.html new file mode 100644 index 000000000..14dca127c --- /dev/null +++ b/googleebab2ef285c63b19.html @@ -0,0 +1 @@ +google-site-verification: googleebab2ef285c63b19.html \ No newline at end of file From 23133ee5eb691e526f532a17cb0697cec5f943ce Mon Sep 17 00:00:00 2001 From: RockChinQ Date: Tue, 24 Mar 2026 14:11:59 +0800 Subject: [PATCH 07/10] chore: add Google Search Console meta tag verification --- docs.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs.json b/docs.json index ec089241e..f00b417a1 100644 --- a/docs.json +++ b/docs.json @@ -688,5 +688,8 @@ "description": "Production-grade No-code AI Bot Platform. Connect DeepSeek, Dify, GPT-4 & Claude to WeChat, Discord, Telegram, Slack, Lark & DingTalk in 5 minutes.", "fonts": { "family": "Source Sans Pro" + }, + "metadata": { + "google-site-verification": "LBNmWbXCAXdoqrbwg5Gep-xzQ7u7lJHSdpR49N3Ttgg" } } \ No newline at end of file From 13e74e4fbf40603b31c486fd7baed364d0335aec Mon Sep 17 00:00:00 2001 From: RockChinQ Date: Tue, 24 Mar 2026 17:53:27 +0800 Subject: [PATCH 08/10] feat(seo): add description, seo indexing, and OG metatags for GEO optimization --- docs.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs.json b/docs.json index f00b417a1..39044d82f 100644 --- a/docs.json +++ b/docs.json @@ -14,6 +14,15 @@ "href": "https://langbot.app" }, "favicon": "/favicon.ico", + "description": "Official documentation for LangBot — the open-source multi-platform AI bot framework. Deploy Dify, Coze, n8n, GPT-4, Claude, and DeepSeek to Discord, Slack, Telegram, WeChat, DingTalk, Lark, LINE, and QQ in minutes.", + "seo": { + "indexing": "all", + "metatags": { + "og:site_name": "LangBot Docs", + "twitter:card": "summary_large_image", + "og:image": "https://langbot.app/og-image.png" + } + }, "navbar": { "links": [ { From 4654a28f55a3ff03ed60beb091a70513c3764160 Mon Sep 17 00:00:00 2001 From: RockChinQ Date: Wed, 25 Mar 2026 21:17:55 +0800 Subject: [PATCH 09/10] docs: add personal access token login method to plugin publish guide --- en/plugin/dev/publish/market.mdx | 18 +++++++++++++++++- zh/plugin/dev/publish/market.mdx | 18 +++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/en/plugin/dev/publish/market.mdx b/en/plugin/dev/publish/market.mdx index 7be746d83..2758b0505 100644 --- a/en/plugin/dev/publish/market.mdx +++ b/en/plugin/dev/publish/market.mdx @@ -14,6 +14,22 @@ This will redirect to GitHub authorization page, please complete authorization a ## Log in to LangBot Space Using CLI +### Option 1: Personal Access Token (Recommended) + +1. Log in to [LangBot Space](https://space.langbot.app), go to **Settings → Personal Access Tokens**, and create a new token. +2. Copy the generated token (shown only once), then run: + +```bash +➜ HelloPlugin > lbp login --token lbpat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + +================================================== +✅ Logged in with personal access token! +Token saved to: ~/.langbot/cli/config.json +================================================== +``` + +### Option 2: Device Code Verification + Execute command `lbp login` in any directory: ```bash @@ -44,7 +60,7 @@ Expires in: 21600 seconds ================================================== ``` -After successful login, you can continue using CLI to upload plugins. +After successful login with either method, you can continue using CLI to upload plugins. ## Upload Plugin diff --git a/zh/plugin/dev/publish/market.mdx b/zh/plugin/dev/publish/market.mdx index 866552705..399483106 100644 --- a/zh/plugin/dev/publish/market.mdx +++ b/zh/plugin/dev/publish/market.mdx @@ -14,6 +14,22 @@ LangBot Space 是 LangBot 提供中心化服务平台。请访问[LangBot Space] ## 使用 CLI 登录 LangBot Space +### 方式一:使用个人访问令牌(推荐) + +1. 登录 [LangBot Space](https://space.langbot.app),前往 **设置 → 个人访问令牌**,创建一个新的令牌。 +2. 复制生成的令牌(仅显示一次),在终端执行: + +```bash +➜ HelloPlugin > lbp login --token lbpat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + +================================================== +✅ 使用个人访问令牌登录成功! +令牌已保存至:~/.langbot/cli/config.json +================================================== +``` + +### 方式二:使用设备码验证 + 在任意目录执行命令`lbp login`: ```bash @@ -44,7 +60,7 @@ Expires in: 21600 seconds ================================================== ``` -登录成功后,您可以继续使用 CLI 上传插件。 +两种方式登录成功后,均可继续使用 CLI 上传插件。 ## 上传插件 From e41ede941cadfc774359adb976a39a6eb0b94375 Mon Sep 17 00:00:00 2001 From: RockChinQ Date: Wed, 25 Mar 2026 21:57:44 +0800 Subject: [PATCH 10/10] docs: fix PAT login instructions and add Japanese translation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - zh/en: update path to '账户设置 → 账户 → 个人访问令牌' - ja: add PAT login as recommended method with device code fallback --- en/plugin/dev/publish/market.mdx | 2 +- ja/plugin/dev/publish/market.mdx | 24 ++++++++++++++++++++---- zh/plugin/dev/publish/market.mdx | 2 +- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/en/plugin/dev/publish/market.mdx b/en/plugin/dev/publish/market.mdx index 2758b0505..76f1d3166 100644 --- a/en/plugin/dev/publish/market.mdx +++ b/en/plugin/dev/publish/market.mdx @@ -16,7 +16,7 @@ This will redirect to GitHub authorization page, please complete authorization a ### Option 1: Personal Access Token (Recommended) -1. Log in to [LangBot Space](https://space.langbot.app), go to **Settings → Personal Access Tokens**, and create a new token. +1. Log in to [LangBot Space](https://space.langbot.app), click your avatar to open **Account Settings**, find **Personal Access Tokens** under the **Account** tab, and create a new token. 2. Copy the generated token (shown only once), then run: ```bash diff --git a/ja/plugin/dev/publish/market.mdx b/ja/plugin/dev/publish/market.mdx index a80f8f696..959b76ea3 100644 --- a/ja/plugin/dev/publish/market.mdx +++ b/ja/plugin/dev/publish/market.mdx @@ -14,7 +14,23 @@ GitHubの認証ページにリダイレクトされますので、プロンプ ## CLIを使用してLangBot Spaceにログイン -任意のディレクトリでコマンド`lbp login`を実行します: +### 方法1:個人アクセストークンを使用(推奨) + +1. [LangBot Space](https://space.langbot.app)にログインし、アバターをクリックして**アカウント設定**を開き、**アカウント**タブの**個人アクセストークン**で新しいトークンを作成します。 +2. 生成されたトークンをコピーし(一度しか表示されません)、ターミナルで以下を実行します: + +```bash +➜ HelloPlugin > lbp login --token lbpat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + +================================================== +✅ 個人アクセストークンでログインしました! +トークンの保存先:~/.langbot/cli/config.json +================================================== +``` + +### 方法2:デバイスコード認証を使用 + +任意のディレクトリでコマンド`lbp login`を実行します: ```bash ➜ HelloPlugin > lbp login @@ -44,11 +60,11 @@ Expires in: 21600 seconds ================================================== ``` -ログインが成功したら、CLIを使用してプラグインをアップロードできます。 +どちらの方法でもログインが成功したら、CLIを使用してプラグインをアップロードできます。 ## プラグインのアップロード -プラグインディレクトリで`lbp publish`を実行してください: +プラグインディレクトリで`lbp publish`を実行してください: ```bash ➜ HelloPlugin > lbp publish @@ -64,4 +80,4 @@ Plugin built successfully: dist/tmp/RockChinQ-HelloPlugin-0.1.0.lbpkg -ご質問がある場合は、`hello@langbot.app`にメールを送信するか、[コミュニティ](/en/insight/community)を通じてお問い合わせください。 +ご質問がある場合は、`hello@langbot.app`にメールを送信するか、[コミュニティ](/ja/insight/community)を通じてお問い合わせください。 diff --git a/zh/plugin/dev/publish/market.mdx b/zh/plugin/dev/publish/market.mdx index 399483106..5b0de4aa2 100644 --- a/zh/plugin/dev/publish/market.mdx +++ b/zh/plugin/dev/publish/market.mdx @@ -16,7 +16,7 @@ LangBot Space 是 LangBot 提供中心化服务平台。请访问[LangBot Space] ### 方式一:使用个人访问令牌(推荐) -1. 登录 [LangBot Space](https://space.langbot.app),前往 **设置 → 个人访问令牌**,创建一个新的令牌。 +1. 登录 [LangBot Space](https://space.langbot.app),点击头像进入 **账户设置**,在 **账户** 标签页中找到 **个人访问令牌**,创建一个新的令牌。 2. 复制生成的令牌(仅显示一次),在终端执行: ```bash