# koishi-plugin-yesimbot-extension-online-prompt

一个为 YesImBot 设计的 Koishi 插件，用于从在线源动态加载自定义提示词。支持 GitHub Gist、Notion 等多种平台的实时同步。

**⚠️ 注意：本插件由 AI 完成编写，不保证可用性。**

**作者：我是小鸭头**

## 📖 介绍

这是一个为 YesImBot 设计的在线提示词加载扩展插件。它允许你从在线源（如 GitHub Gist、Notion 等）动态加载自定义提示词，实现提示词的实时同步和更新。

## ✨ 特性

- 🌐 **多源支持**: 支持从多个在线源加载提示词
- 🔄 **自动刷新**: 可配置的自动刷新间隔
- 💾 **智能缓存**: 内置缓存机制，减少网络请求
- 🔁 **重试机制**: 网络请求失败时自动重试
- ⚡ **优先级控制**: 支持设置不同提示词源的优先级
- 🛡️ **错误处理**: 完善的错误处理和日志记录

## 🚀 安装

1. 将此插件放置在 YesImBot 项目的 `packages` 目录下
2. 在项目根目录运行构建命令：
   ```bash
   npm run build
   ```

## 📝 配置

### 基本配置

```yaml
plugins:
  yesimbot-extension-online-prompt:
    urls:
      - name: "my-custom-prompt"
        url: "https://gist.githubusercontent.com/username/gist-id/raw/prompt.txt"
        priority: 10
        enabled: true
        headers:
          Authorization: "token your-github-token"  # 可选
      - name: "notion-prompt"
        url: "https://your-notion-export-url.com/prompt.txt"
        priority: 20
        enabled: true
    refreshInterval: 300  # 5分钟刷新一次
    timeout: 10
    retryAttempts: 3
    enableCache: true
    cacheExpiry: 3600  # 1小时缓存过期
```

### 配置项说明

| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `urls` | Array | `[]` | 在线提示词源配置列表 |
| `refreshInterval` | Number | `300` | 自动刷新间隔（秒），0 表示不自动刷新 |
| `timeout` | Number | `10` | 请求超时时间（秒） |
| `retryAttempts` | Number | `3` | 请求失败时的重试次数 |
| `enableCache` | Boolean | `true` | 是否启用缓存 |
| `cacheExpiry` | Number | `3600` | 缓存过期时间（秒） |

### URL 配置项说明

| 配置项 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `name` | String | ✅ | 提示词源的名称，用于生成占位符 |
| `url` | String | ✅ | 提示词内容的 URL |
| `priority` | Number | ❌ | 优先级，数字越小越靠前（默认：10） |
| `enabled` | Boolean | ❌ | 是否启用此提示词源（默认：true） |
| `headers` | Object | ❌ | 可选的 HTTP 请求头 |

## 🎯 使用方法

### 1. 在提示词中使用占位符

配置完成后，你可以在 YesImBot 的提示词模板中使用以下占位符：

```mustache
{{online.my-custom-prompt}}
{{online.notion-prompt}}
```

占位符格式为：`{{online.{name}}}`，其中 `{name}` 是你在配置中设置的提示词源名称。

### 2. 示例提示词模板

```mustache
你是一个AI助手。

{{online.my-custom-prompt}}

当前时间：{{date.now}}
用户：{{user.name}}

请根据以上信息回复用户。
```

## 🔗 支持的在线源

### GitHub Gist

1. 创建一个 GitHub Gist
2. 获取 Raw URL（格式：`https://gist.githubusercontent.com/username/gist-id/raw/filename`）
3. 在配置中使用该 URL

### Notion

1. 在 Notion 中创建包含提示词的页面
2. 导出为 Markdown 或纯文本
3. 将导出的文件上传到可公开访问的位置
4. 在配置中使用该 URL

### 其他平台

任何能够提供纯文本内容的 HTTP(S) URL 都可以作为提示词源。

## 🔧 高级用法

### 1. 使用认证头

对于需要认证的私有源，可以在配置中添加认证头：

```yaml
headers:
  Authorization: "Bearer your-token"
  X-API-Key: "your-api-key"
```

### 2. 优先级控制

通过设置不同的 `priority` 值来控制提示词的加载顺序：

```yaml
urls:
  - name: "system-prompt"
    priority: 1  # 最高优先级
  - name: "user-prompt"
    priority: 10  # 较低优先级
```

### 3. 条件启用

可以通过 `enabled` 字段来临时禁用某个提示词源：

```yaml
urls:
  - name: "debug-prompt"
    enabled: false  # 临时禁用
```

## 🐛 故障排除

### 常见问题

1. **提示词内容为空**
   - 检查 URL 是否可访问
   - 确认网络连接正常
   - 查看日志中的错误信息

2. **请求超时**
   - 增加 `timeout` 配置值
   - 检查网络延迟

3. **认证失败**
   - 确认认证头配置正确
   - 检查 token 是否有效

### 日志查看

插件会输出详细的日志信息，包括：
- 提示词加载状态
- 网络请求结果
- 缓存操作
- 错误信息

## 📄 许可证

MIT License

## 🤝 贡献

欢迎提交 Issue 和 Pull Request！