mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-14 03:25:57 +08:00
docs(api/core/tools/docs/en_US/tool_scale_out.md): Format by markdownlint. (#5903)
This commit is contained in:
parent
e3006f98c9
commit
e7494d632c
@ -5,6 +5,7 @@ Here, we will use GoogleSearch as an example to demonstrate how to quickly integ
|
|||||||
## 1. Prepare the Tool Provider yaml
|
## 1. Prepare the Tool Provider yaml
|
||||||
|
|
||||||
### Introduction
|
### Introduction
|
||||||
|
|
||||||
This yaml declares a new tool provider, and includes information like the provider's name, icon, author, and other details that are fetched by the frontend for display.
|
This yaml declares a new tool provider, and includes information like the provider's name, icon, author, and other details that are fetched by the frontend for display.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
@ -28,9 +29,11 @@ identity: # Basic information of the tool provider
|
|||||||
- search
|
- search
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
- The `identity` field is mandatory, it contains the basic information of the tool provider, including author, name, label, description, icon, etc.
|
- The `identity` field is mandatory, it contains the basic information of the tool provider, including author, name, label, description, icon, etc.
|
||||||
- The icon needs to be placed in the `_assets` folder of the current module, you can refer to [here](../../provider/builtin/google/_assets/icon.svg).
|
- The icon needs to be placed in the `_assets` folder of the current module, you can refer to [here](../../provider/builtin/google/_assets/icon.svg).
|
||||||
- The `tags` field is optional, it is used to classify the provider, and the frontend can filter the provider according to the tag, for all tags, they have been listed below:
|
- The `tags` field is optional, it is used to classify the provider, and the frontend can filter the provider according to the tag, for all tags, they have been listed below:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class ToolLabelEnum(Enum):
|
class ToolLabelEnum(Enum):
|
||||||
SEARCH = 'search'
|
SEARCH = 'search'
|
||||||
@ -56,6 +59,7 @@ identity: # Basic information of the tool provider
|
|||||||
Google, as a third-party tool, uses the API provided by SerpApi, which requires an API Key to use. This means that this tool needs a credential to use. For tools like `wikipedia`, there is no need to fill in the credential field, you can refer to [here](../../provider/builtin/wikipedia/wikipedia.yaml).
|
Google, as a third-party tool, uses the API provided by SerpApi, which requires an API Key to use. This means that this tool needs a credential to use. For tools like `wikipedia`, there is no need to fill in the credential field, you can refer to [here](../../provider/builtin/wikipedia/wikipedia.yaml).
|
||||||
|
|
||||||
After configuring the credential field, the effect is as follows:
|
After configuring the credential field, the effect is as follows:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
identity:
|
identity:
|
||||||
author: Dify
|
author: Dify
|
||||||
@ -87,6 +91,7 @@ credentials_for_provider: # Credential field
|
|||||||
- `type`: Credential field type, currently can be either `secret-input`, `text-input`, or `select` , corresponding to password input box, text input box, and drop-down box, respectively. If set to `secret-input`, it will mask the input content on the frontend, and the backend will encrypt the input content.
|
- `type`: Credential field type, currently can be either `secret-input`, `text-input`, or `select` , corresponding to password input box, text input box, and drop-down box, respectively. If set to `secret-input`, it will mask the input content on the frontend, and the backend will encrypt the input content.
|
||||||
|
|
||||||
## 3. Prepare Tool yaml
|
## 3. Prepare Tool yaml
|
||||||
|
|
||||||
A provider can have multiple tools, each tool needs a yaml file to describe, this file contains the basic information, parameters, output, etc. of the tool.
|
A provider can have multiple tools, each tool needs a yaml file to describe, this file contains the basic information, parameters, output, etc. of the tool.
|
||||||
|
|
||||||
Still taking GoogleSearch as an example, we need to create a `tools` module under the `google` module, and create `tools/google_search.yaml`, the content is as follows.
|
Still taking GoogleSearch as an example, we need to create a `tools` module under the `google` module, and create `tools/google_search.yaml`, the content is as follows.
|
||||||
@ -155,6 +160,7 @@ parameters: # Parameter list
|
|||||||
- `form` Form type, currently supports `llm`, `form` two types, corresponding to Agent self-inference and frontend filling
|
- `form` Form type, currently supports `llm`, `form` two types, corresponding to Agent self-inference and frontend filling
|
||||||
|
|
||||||
## 4. Add Tool Logic
|
## 4. Add Tool Logic
|
||||||
|
|
||||||
After completing the tool configuration, we can start writing the tool code that defines how it is invoked.
|
After completing the tool configuration, we can start writing the tool code that defines how it is invoked.
|
||||||
|
|
||||||
Create `google_search.py` under the `google/tools` module, the content is as follows.
|
Create `google_search.py` under the `google/tools` module, the content is as follows.
|
||||||
@ -176,7 +182,7 @@ class GoogleSearchTool(BuiltinTool):
|
|||||||
query = tool_parameters['query']
|
query = tool_parameters['query']
|
||||||
result_type = tool_parameters['result_type']
|
result_type = tool_parameters['result_type']
|
||||||
api_key = self.runtime.credentials['serpapi_api_key']
|
api_key = self.runtime.credentials['serpapi_api_key']
|
||||||
# TODO: search with serpapi
|
# Search with serpapi
|
||||||
result = SerpAPI(api_key).run(query, result_type=result_type)
|
result = SerpAPI(api_key).run(query, result_type=result_type)
|
||||||
|
|
||||||
if result_type == 'text':
|
if result_type == 'text':
|
||||||
@ -185,12 +191,15 @@ class GoogleSearchTool(BuiltinTool):
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Parameters
|
### Parameters
|
||||||
|
|
||||||
The overall logic of the tool is in the `_invoke` method, this method accepts two parameters: `user_id` and `tool_parameters`, which represent the user ID and tool parameters respectively
|
The overall logic of the tool is in the `_invoke` method, this method accepts two parameters: `user_id` and `tool_parameters`, which represent the user ID and tool parameters respectively
|
||||||
|
|
||||||
### Return Data
|
### Return Data
|
||||||
|
|
||||||
When the tool returns, you can choose to return one message or multiple messages, here we return one message, using `create_text_message` and `create_link_message` can create a text message or a link message.
|
When the tool returns, you can choose to return one message or multiple messages, here we return one message, using `create_text_message` and `create_link_message` can create a text message or a link message.
|
||||||
|
|
||||||
## 5. Add Provider Code
|
## 5. Add Provider Code
|
||||||
|
|
||||||
Finally, we need to create a provider class under the provider module to implement the provider's credential verification logic. If the credential verification fails, it will throw a `ToolProviderCredentialValidationError` exception.
|
Finally, we need to create a provider class under the provider module to implement the provider's credential verification logic. If the credential verification fails, it will throw a `ToolProviderCredentialValidationError` exception.
|
||||||
|
|
||||||
Create `google.py` under the `google` module, the content is as follows.
|
Create `google.py` under the `google` module, the content is as follows.
|
||||||
@ -227,6 +236,7 @@ class GoogleProvider(BuiltinToolProviderController):
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Completion
|
## Completion
|
||||||
|
|
||||||
After the above steps are completed, we can see this tool on the frontend, and it can be used in the Agent.
|
After the above steps are completed, we can see this tool on the frontend, and it can be used in the Agent.
|
||||||
|
|
||||||
Of course, because google_search needs a credential, before using it, you also need to input your credentials on the frontend.
|
Of course, because google_search needs a credential, before using it, you also need to input your credentials on the frontend.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user