# GitHub Copilot SDK 插件进阶实战教程

**作者:** [Fu-Jie](https://github.com/Fu-Jie) | **版本:** 1.0.0 | **项目:** [OpenWebUI Extensions](https://github.com/Fu-Jie/openwebui-extensions)

本教程旨在指导您如何深度发挥 GitHub Copilot SDK 插件的全部潜力，特别是在自动化文件生成、BYOK 模式自定义以及复杂任务调度方面的进阶用法。

---

## 1. 核心协议：文件交付三步法 (File Delivery Protocol)

这是本插件最强大的功能之一。Agent 不再只是“说话”，它可以在其隔离的工作区内生成真正的物理文件（如 `.xlsx`, `.pdf`, `.csv`），并将其发布给您下载。

### 自动化执行逻辑：
1.  **本地写入 (Write)**：Agent 在其隔离目录（即 Python 执行的当前目录 `.`）下通过代码生成文件。
2.  **显式发布 (Publish)**：Agent 自动调用 `publish_file_from_workspace(filename='report.xlsx')`。
3.  **获取链接 (Link)**：插件会自动处理 S3 或本地存储映射，绕过 RAG 干扰，并返回一个类似 `/api/v1/files/.../content` 的安全链接。

> [!TIP]
> **用户指令技巧**：您可以直接对 Agent 说：“分析刚才的表格并导出一份 Excel 给我”。它会自动触发这一连串动作。

---

## 2. BYOK (自带 Key) 模式进阶

如果您没有 GitHub Copilot 订阅，或者希望使用自己购买的 OpenAI/Anthropic 高阶模型，可以使用 BYOK 模式。

### 如何配置：
1.  **设置 Base URL**：如 `https://api.openai.com/v1`。
2.  **设置 API Key**：在个人设置中填入您的密钥。
3.  **模型实时刷新**：插件具备**配置感知刷新**机制。当您在 Valve 中修改了 API Key 或 Base URL 后，无需重启，只需刷新模型选择器，插件会自动向后端拉取最新的可用模型列表。

---

## 3. 工作区隔离与调试 (Workspace & Debugging)

每个聊天会话都有一个物理上隔离的文件夹，确保不同任务的文件互不干扰。

### 物理路径规则：
- **容器内路径**：`/app/backend/data/copilot_workspace/{user_id}/{chat_id}/`
- **Agent 的视角**：它看到的 `.` 目录即是上述路径。

### 调试秘籍：
1.  **开启 DEBUG Valve**：在配置中将 `DEBUG` 设为 `True`。
2.  **查看控制台**：打开浏览器开发者工具 (F12) -> Console。
3.  **捕获路径**：您会看到类似 `📂 Workspace Resolved: /.../` 的日志，这能帮您确认 Agent 到底把文件写到了哪里。

---

## 4. 绕过 RAG 的深度分析

传统的 OpenWebUI 文件上传会触发向量化（RAG），这对于大批量数据分析往往不够精确。

**本插件的优势**：
- 配合 [Files Filter](https://openwebui.com/posts/403a62ee-a596-45e7-be65-fab9cc249dd6) 插件使用时，Agent 可以**直接读取**原始文件的每一个字节。
- 它能像在本地运行脚本一样分析 CSV 的每一行，而不会因为切片检索（Retrieval）导致信息丢失。

---

## 5. 常见交互指令示例

- **数据转换**：“把这个 JSON 内容转换成格式精美的 Word 文档并提供下载链接。”
- **代码审查**：“读取工作区内的所有 `.py` 文件，找出潜在的 Bug，并把修改建议发布为 Markdown 报告。”
- **图表生成**：“根据刚才的财务数据生成一份 Excel 报表，并用 Python 画一个趋势图给我。”

---

## 🚀 实战示例：全自动财务分析报告

### 场景描述
用户上传了一个名为 `sales_data.csv` 的原始销售清单，要求 AI 进行汇总统计，并生成一份带样式的 Excel 报表。

### 1. 用户的指令
> “请分析当前目录下的 `sales_data.csv`，按产品类别统计总销售额，并导出一份名为 `category_summary.xlsx` 的 Excel 给我就好。”

### 2. Agent 的自动化执行过程
Agent 会在后台连续执行以下动作：

*   **步骤 1: 编写并运行 Python 脚本**
    ```python
    import pandas as pd
    # 直接在隔离工作区读取原始文件（绕过 RAG，保证数据 100% 准确）
    df = pd.read_csv('sales_data.csv')
    summary = df.groupby('Category')['Revenue'].sum().reset_index()
    # 保存结果到当前目录
    summary.to_excel('category_summary.xlsx', index=False)
    ```
*   **步骤 2: 调用发布工具**
    Agent 自动执行工具调用：`publish_file_from_workspace(filename="category_summary.xlsx")`
*   **步骤 3: 交付链接**
    工具返回 `download_url`，Agent 最终回复用户。

### 3. 最终交付效果
Agent 会向用户展示：
> “分析完成！我已经为您统计了产品类别的销售额。您可以点击下方链接下载报表：
> 
> [📊 点击下载：分类销售统计报表.xlsx](/api/v1/files/uuid-hash/content)”

#### 实际运行截图示例
![GitHub Copilot SDK 测试结果](2026-02-10_165530.png)

---

## ⭐ 持续改进

如果您在使用过程中发现任何问题，或有新的功能建议，欢迎到 [OpenWebUI Extensions](https://github.com/Fu-Jie/openwebui-extensions) 提交 Issue 或参与讨论。
