semvec/pypi-packages huggingface dataset:
nonebot-plugin-word-bank2 0.2.1
无数据问答插件
Requires Python: <4.0,>=3.10

<div align="center">

# nonebot-plugin-word-bank2

_✨ 无数据库的轻量问答插件 ✨_

</div>

# 功能

- 无数据库的轻量问答插件
- 支持模糊问答
- 支持特殊回复
- 自动转译 CQ 码
- 支持图片回复
- 支持指令大杂烩

# 安装

```
pip install nonebot-plugin-word-bank2
```

# 开始使用

## 问答教学

- 设置词条命令由`问句`和`答句`组成。设置之后, 收到`消息`时触发。并非所有人都可以设置词条, 详见[权限](#permission)

- 格式`[模糊|全局|正则|@]问...答...`

  - `模糊|正则` 匹配模式中可任性一个或`不选`, `不选` 表示 `全匹配`
  - `全局`, `@` 可与以上匹配模式组合使用

- 教学中可以使用换行

  - 例如
    ```
    问
    123
    答
    456
    ```

- 问答句中的首首尾空白字符会被自动忽略

- 私聊好友个人也可以建立属于自己的词库, 可以实现类似备忘录的功能

### 问句选项

- `问...答...` 全匹配模式, 必须全等才能触发答

- `模糊问...答...` 当`问句`出现在`消息`里时则会触发

- `正则问...答...`, 当`问句`被`消息`正则捕获时则会匹配
- 例如: 正则问[他你]不理答你被屏蔽了

  | 消息     | 回复       |
  | -------- | ---------- |
  | 他不理   | 你被屏蔽了 |
  | 他不理我 | 你被屏蔽了 |
  | 你不理我 | 你被屏蔽了 |

- `全局问...答...`, 在所有群聊和私聊中都可以触发, 可以和以上几种组合使用

  - 例如: `全局模糊问 晚安 答 不准睡`

- `@问...答...`, 只有 `event.tome` 时才会触发，如被@、被回复时或在私聊中，可以和以上几种组合使用

  - 例如: `全局模糊@问 晚安 答 不准睡`

- 问句可包含`at` 即在 QQ 聊天中手动 at 群友
  - 建议只在`问...答...`中使用
  - 例如: `问 @这是群名称 答 老婆!`

### 答句选项

- `/at` + `qq号`, 当答句中包含`/at` + `qq号`时将会被替换为@某人

  - 例如: `问 群主在吗 答 /at 123456789在吗`

- `/self`, 当答句中包含`/self`时将会被替换为发送者的群昵称

  - 例如: `问 我是谁 答 你是/self` (群昵称为: 我老婆)

- `/atself`, 当答句中包含`/atself`时将会被替换为@发送者
  - 例如: `问 谁是牛头人 答 @这是群昵称`

## 删除词条

- `删除[模糊|全局|正则|@]词条` + 需要删除的`问句`

  - 例如: `删除全局模糊@词条 你好`

- 以下指令需要结合自己的`COMMAND_START` 这里为 `/`

- 删除词库: 删除当前群聊/私聊词库

  - 例如: `/删除词库`

- 删除全局词库

  - 例如: `/删除全局词库`

- 删除全部词库
  - 例如: `/删除全部词库`

## 查询词条

- 超管查询指定词库

  - `查询[群|用户]{id}[全局][模糊|正则]词库`
  - 例如：`查询群123模糊词库` `查询用户114514词库` `查询全局词库`

- 查询指定词库

  - `查询[模糊|正则]词库`
  - 例如 `查询词库`

- <span id="permission">权限</span>

|              | 群主 | 群管理 | 私聊好友 | 超级用户 |
| ------------ | ---- | ------ | -------- | -------- |
| 增删词条     | O    | O      | O        | O        |
| 增删全局词条 | X    | X      | X        | O        |
| 删除词库     | O    | O      | O        | O        |
| 删除全局词库 | X    | X      | X        | O        |
| 删除全部词库 | X    | X      | X        | O        |

# 特别感谢

- [Mrs4s/go-cqhttp](https://github.com/Mrs4s/go-cqhttp)
- [nonebot/nonebot2](https://github.com/nonebot/nonebot2)
- [Joenothing-lst/word-bank](https://github.com/Joenothing-lst/word-bank)
- [MeetWq](https://github.com/MeetWq)

# 优化建议

- 请提交 issue 或者 pr
openai-tools-decorator 1.0.3
Python module, that provides a simple way to create and manage ChatGPT tools by python decorators
Requires Python: >=3.6

# openai_tools_decorator

A lightweight Python library that streamlines creating and invoking “tools” (functions) in your OpenAI ChatCompletion-based projects. It lets you register and call both **synchronous** and **asynchronous** functions via decorators.

## Installation

```bash
pip install openai_tools_decorator
```

## Quick Start

### 1. Import and Initialization

```python
from openai_tools_decorator import OpenAIT

client = OpenAIT()
```

### 2. Adding Tools

```python
@client.add_tool(
    {
        "description": "Get current weather for a city",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "The city name in English"}
            },
            "required": ["city"]
        },
    }
)
def get_weather(city: str):
    return f"Weather in {city}: 25°C"
```

### 3. Using Tools with Chat

```python
user_input = "How cold is it in Moscow right now?"
response = await client.run_with_tool(
    user_input,
    messages=[],
    model="gpt-4o"
)
print(response)  # The assistant’s response, possibly including a tool call
```

### 4. Removing Tools

To remove a tool, use `remove_tool` with function's name as an argument:

```python
client.remove_tool("get_weather")
```

If the tool is not found, `remove_tool` will raise `ValueError`.

## Example

```python
import asyncio
import aiohttp
from openai_tools_decorator import OpenAIT

client = OpenAIT()
api_key = "<YOUR_API_KEY>"

async def fetch_url(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as resp:
            return await resp.text()

@client.add_tool(
    {
        "description": "Fetch weather from an API",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "The city name in English"
                }
            },
            "required": ["city"]
        },
    }
)
async def get_weather(city: str):
    url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
    return await fetch_url(url)

async def main():
    question = "What's the temperature in London?"
    result = await client.run_with_tool(question, messages=[])
    print("Assistant says:", result)

asyncio.run(main())
```

## Key Points

-   You can register **sync and async ** functions.
-   Tools are automatically registered and described for the OpenAI model.
-   The model decides whether to call a tool during the dialogue.
-   You can quickly remove unnecessary tools using `remove_tool`.

## License

Distributed under MIT or any other license of your choice. Contributions and feedback are always welcome!