nonebot-plugin-marshoai/README_TOOLS_EN.md

91 lines
4.5 KiB
Markdown
Raw Normal View History

2024-11-26 22:34:41 +08:00
# 🛠MarshoTools
2024-11-26 21:07:05 +08:00
Marsho is a simple module loader. It allows to load kits and its function from `tools` in plugin directory, for AI to use.
More information for Function Call, please refr to [OpenAI Offical Documentation](https://platform.openai.com/docs/guides/function-calling)
2024-11-26 22:34:41 +08:00
## ✍️ Writing Tools
2024-11-26 21:07:05 +08:00
### 📁 Directory Structure
2024-11-26 22:34:41 +08:00
`tools` in plugin directory is called **Toolset**. It contains many **Toolkit**, Toolkit is similar with **Packages** in Python in structure. It need `__init__.py` file and `tools.json` definition file in it. They are used to store and define functions.
2024-11-26 21:07:05 +08:00
A directory structure of Toolkit:
```
tools/ # Toolset Directory
└── marshoai-example/ # Toolkit Directory, Named as Packages' name
└── __init__.py # Tool Module
2024-11-26 22:34:41 +08:00
└── tools.json # Function Definition File
2024-11-26 21:07:05 +08:00
```
In this directory tree:
2024-11-26 22:34:41 +08:00
- **Toolset Directory** is named as `marshoai-xxxxx`, its name is the name of Toolset. Please follow this naming standard.
- ***Tool Module* could contain many callable **Asynchronous** function, it could have parameters or be parameterless and the return value should be supported by AI model. Generally speaking, the `str` type is accepted to most model.
- **Function Definition File** is for AI model to know how to call these function.
2024-11-26 21:07:05 +08:00
### Function Writing
Let's write a function for getting the weather and one for getting time.
###### **\_\_init\_\_.py**
```python
from datetime import datetime
async def get_weather(location: str):
return f"The temperature of {location} is 114514℃。" #To simulate the return value of weather.
async def get_current_time():
current_time = datetime.now().strftime("%Y.%m.%d %H:%M:%S")
time_prompt = f"Now is {current_time}。"
return time_prompt
```
2024-11-26 22:34:41 +08:00
In this example, we define two functions, `get_weather` and `get_current_time`. The former accepts a `str` typed parameter. Let AI to know the existence of these funxtions, you shuold write **Function Definition File**
2024-11-26 21:07:05 +08:00
###### **tools.json**
```json
[
{
"type": "function",
"function": {
2024-11-26 22:34:41 +08:00
"name": "marshoai-example__get_weather", # Function Call Name
2024-11-26 21:07:05 +08:00
"description": "Get the weather of a specified locatin.", # Description, it need to descripte the usage of this Functin
"parameters": { # Define the parameters
"type": "object",
"properties": {
"location": { # 'location' is the name that _init__.py had defined.
"type": "string", # the Type of patameters
"description": "City or district. Such as Beijing, Hangzhou, Yuhang District" # Descriptionit need to descripte the type or example of Actual Parameter
}
}
},
"required": [ # Define the Required Parameters
"location"
]
}
},
{
"type": "function",
"function": {
"name": "marshoai-example__get_current_time",
"description": "Get time",
"parameters": {} # No parameter requried, so it is blanked
}
}
]
```
2024-11-26 22:34:41 +08:00
In this file, we defined tow function. This Function Definition File will be typed into AI model, for letting AI to know when and how to call these function.
**Function Call Name** is specific required. Using weather-getting as an example, this Function Call Name, `marshoai-example__get_weather`, contain these information.
2024-11-26 21:07:05 +08:00
- **marshoai-example** is the name of its Toolkit.
- **get_weather** is the name of function.
2024-11-26 22:34:41 +08:00
- Two **underscores** are used as a separator.
2024-11-26 21:07:05 +08:00
Using this Naming Standard, it could be compatible with more APIs in the standard format of OpenAI. So don't use two underscores as the name of Toolkit or Function.
### Function Testing
After developing the Tools, start the Bot. There loading information of Toolkit in Nonebot Logs.
2024-11-26 22:34:41 +08:00
This is the test example:
2024-11-26 21:07:05 +08:00
```
> marsho What's the weather like in Shenzhen?
2024-11-26 21:17:39 +08:00
Meow! The temperature in Shenzhen is currently an astonishing 114514°C! That's super hot! Make sure to keep cool and stay hydrated! 🐾☀️✨
2024-11-26 21:07:05 +08:00
> marsho Please tell me the weather in Shimokitazawa, Hangzhou, and Suzhou separately.
2024-11-26 21:17:39 +08:00
Meow! Here's the weather for each place:
- Shimokitazawa: The temperature is 114514°C.
- Hangzhou: The temperature is also 114514°C.
- Suzhou: The temperature is again 114514°C.
That's super hot everywhere! Please stay cool and take care! 🐾☀️✨
2024-11-26 21:07:05 +08:00
> marsho What time is it now?
2024-11-26 21:17:39 +08:00
Meow! The current time is 1:15 PM on November 26, 2024. 🐾✨
```