Greasy Fork

来自缓存

Greasy Fork is available in English.

Linux.do Agent

OpenAI Chat格式可配置baseUrl/model/key;多会话跨刷新;Discourse工具:搜索/抓话题全帖/查用户近期帖子/分类/最新话题/Top话题/Tag话题/用户Summary(含热门帖子)/单帖/按(topicId+postNumber)完整抓取指定楼(<=10000)/站点最新帖子列表;模型JSON输出自动find/rfind修复并回写history;final.refs 显示到UI;AG悬浮球支持拖动并记忆位置。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

作者
CassiopeiaCode
日安装量
11
总安装量
11
评分
0 0 0
版本
0.3.7
创建于
2025-12-19
更新于
2025-12-19
大小
136.4 KB
许可证
GPL-3.0-or-later
适用于

Linux.do Agent 用户脚本介绍

版本 许可证 平台

📖 项目简介

Linux.do Agent 是一个功能强大的用户脚本(UserScript),专为 linux.do 论坛设计。它为论坛添加了一个基于 AI 的智能助手界面,能够通过兼容 OpenAI Chat Completions 格式的 API 与 Discourse 论坛 API 进行交互,提供丰富的论坛数据查询和分析功能。

✨ 核心特性

🤖 AI 助手集成

  • OpenAI 兼容 API:支持配置自定义 baseUrlmodel 和 API Key
  • 灵活的模型配置:Temperature、maxTurns、maxContextChars 等参数可调
  • 自定义 System Prompt:可完全自定义 AI 的行为模式

💬 会话管理

  • 多会话支持:可创建、切换、重命名和删除多个独立会话
  • 跨刷新持久化:所有会话数据自动保存,刷新页面后依然保留
  • 会话过滤:支持按标题快速筛选会话
  • 草稿保存:输入框内容自动保存,切换会话不丢失

🛠️ Discourse 工具集

脚本提供了 11 个强大的 Discourse API 工具:

  1. discourse.search - 搜索论坛内容
  2. discourse.getTopicAllPosts - 获取话题的所有帖子
  3. discourse.getUserRecent - 查询用户近期活动
  4. discourse.getCategories - 获取分类列表
  5. discourse.listLatestTopics - 列出最新话题
  6. discourse.listTopTopics - 列出热门话题(按周期)
  7. discourse.getTagTopics - 获取特定标签的话题
  8. discourse.getUserSummary - 获取用户详细概览(含热门帖子)
  9. discourse.getPost - 获取单个帖子详情
  10. discourse.getTopicPostFull - 按话题 ID 和楼层号完整抓取指定楼层(最多 10000 字符)
  11. discourse.listLatestPosts - 获取站点最新帖子列表

🎨 现代化 UI

Workbench 界面

  • 三标签页设计
    • Chat:用户与 AI 的对话界面
    • Tools:手动运行工具,不走模型
    • Debug:查看工具调用日志和模型输出

主题支持

  • 支持浅色、深色和自动三种主题模式
  • 响应式设计,适配各种屏幕尺寸
  • 优雅的渐变色和动画效果

交互特性

  • 可拖动悬浮球:记忆位置,自动吸附边缘
  • 折叠/展开长消息:自动检测并折叠过长内容
  • 复制/引用功能:一键复制或引用消息内容
  • Markdown 渲染:支持 Markdown 格式的消息显示

🔧 高级功能

Agent 引擎

  • FSM 状态机:精确控制执行流程(IDLE → RUNNING → WAITING_MODEL → WAITING_TOOL → DONE/ERROR)
  • 多轮工具调用:AI 可自主决定调用多个工具获取完整信息
  • JSON 自动修复:自动修复模型输出的 JSON 格式错误(find/rfind)
  • 停止控制:支持随时中止运行中的任务

工具结果优化

  • 智能上下文压缩:将工具返回的大量数据压缩为精炼的上下文
  • 分段显示:长话题自动提取"前 N 楼 + 后 M 楼"
  • 引用链接:final 回答中的 refs 字段自动显示为可点击链接

数据导出

  • 支持导出会话为 JSON 格式
  • 包含完整的聊天记录、工具调用日志和状态信息

📦 安装方法

前置要求

  1. 安装浏览器扩展:

  2. 准备 OpenAI 兼容的 API:

    • OpenAI 官方 API
    • 或其他兼容 OpenAI Chat Completions 格式的 API 服务

安装步骤

  1. 复制 1.js 的全部内容
  2. 在浏览器扩展中创建新脚本
  3. 粘贴代码并保存
  4. 访问 linux.do 论坛即可看到悬浮球

🚀 快速开始

1. 基础配置

首次使用需要配置 API 信息:

  1. 点击右上角悬浮球打开界面
  2. 点击"设置"按钮
  3. 填写以下信息:
    • Base URL:API 端点(如 https://api.openai.com/v1
    • Model:模型名称(如 gpt-4o-mini
    • API Key:你的 API 密钥
    • Temperature:0-1 之间,控制回答随机性
    • maxTurns:最大工具调用轮数(1-30)
    • maxContextChars:最大上下文字符数(4000-80000)

2. 使用示例

搜索内容

帮我找一下关于 Docker 的教程

查看用户信息

查看 @username 的个人概览和热门帖子

获取话题详情

总结话题 12345 的内容

抓取特定楼层

帮我获取话题 12345 的第 10 楼完整内容

列出最新内容

列出最新的 20 个帖子

3. 手动工具模式

Tools 标签页中,你可以手动运行工具而不通过 AI:

  1. 选择工具名称
  2. 编辑参数 JSON
  3. 点击"运行工具"
  4. 查看结果后可选择:
    • 加入上下文:将结果添加到当前会话上下文
    • 发到聊天:直接显示在聊天界面
    • 复制结果:复制到剪贴板

🔍 架构设计

核心模块

// 1. 配置存储
class ConfigStore {
  - 管理 API 配置
  - 持久化到 GM_getValue/GM_setValue
}

// 2. 会话存储
class SessionStore {
  - 管理多个会话
  - 每个会话包含 chat、agent、fsm、draft
  - 跨刷新持久化
}

// 3. Discourse API
class DiscourseAPI {
  - 11 个静态方法对应 11 个工具
  - 统一的错误处理和信号控制
}

// 4. Agent 引擎
function runAgent() {
  - FSM 状态机控制
  - 多轮工具调用循环
  - JSON 自动修复
}

// 5. UI 类
class UI {
  - 三标签页界面渲染
  - 事件绑定和交互逻辑
  - 主题切换和响应式布局
}

数据流

用户输入 → runAgent()
    ↓
buildLLMMessages() → callOpenAIChat()
    ↓
parseModelJsonWithRepair()
    ↓
type="tool" → runTool() → toolResultToContext()
    ↓                            ↓
回到 runAgent() ←───────────────┘
    ↓
type="final" → 显示回答 + refs

🎯 System Prompt 设计

脚本使用了精心设计的 System Prompt,将 AI 定位为"JSON 协议路由引擎":

{
  "type": "tool",
  "name": "工具名称",
  "args": { "参数": "值" }
}

{
  "type": "final",
  "answer": "回答内容(支持 Markdown)",
  "refs": [
    { "title": "标题", "url": "链接" }
  ]
}

关键约束

  • ❌ 禁止自然语言废话
  • ❌ 禁止 Markdown 代码块包裹 JSON
  • ✅ 二选一输出:tool 或 final
  • ✅ refs 必须基于真实数据
  • ✅ 积极进行多次工具调用

🛡️ 错误处理

JSON 修复机制

如果模型输出格式错误,脚本会自动:

  1. 使用 indexOf("{")lastIndexOf("}") 查找边界
  2. 切片并重新解析
  3. 回写修复后的 JSON 到 history

取消机制

每个会话维护一个 cancelToken

{
  cancelled: boolean,
  aborts: Function[] // 用于中止网络请求
}

点击"Stop"按钮会:

  1. 设置 cancelled = true
  2. 调用所有 aborts 函数
  3. 终止所有进行中的请求

📊 性能优化

上下文压缩

  • 搜索结果:限制 12 条,摘要 420 字符
  • 话题帖子:前 18 楼 + 后 8 楼
  • 用户概览:热门/近期各 10-12 条
  • 总上下文:< 22000 字符

批量请求

getTopicAllPosts 使用批量加载:

  • 每次请求 18 个帖子 ID
  • 间隔 160ms 避免触发限流
  • 支持取消控制

🎨 UI 主题

CSS 变量系统

:root {
  --a-bg: 背景渐变
  --a-card: 卡片背景
  --a-primary: 主色调渐变
  --a-text: 文字颜色
  /* ... */
}

响应式设计

  • 宽屏:侧栏 300px
  • 中屏:侧栏折叠按钮
  • 小屏(<860px):自动隐藏侧栏

🔐 隐私与安全

  • 本地存储:所有数据存储在浏览器本地
  • API Key 安全:使用 password 类型输入框
  • 无第三方追踪:不包含任何分析或追踪代码
  • CSRF 保护:Discourse API 调用自动附加 CSRF Token

📝 开发者信息

  • 作者:Bytebender
  • 版本:0.2.4
  • 许可证:GPL-3.0-or-later
  • 命名空间:https://example.com/linuxdo-agent

🤝 贡献指南

欢迎提交 Issue 和 Pull Request!

代码结构

  • 第 0 节:常量和工具函数
  • 第 1 节:配置存储
  • 第 2 节:会话存储
  • 第 3 节:Discourse API
  • 第 4 节:工具注册表
  • 第 5 节:OpenAI 客户端
  • 第 6 节:JSON 修复
  • 第 7 节:Agent 引擎
  • 第 8 节:UI 实现
  • 第 9 节:启动入口

📜 更新日志

v0.2.4(当前版本)

  • ✅ 完整的 Workbench UI(Chat/Tools/Debug)
  • ✅ 主题切换(light/dark/auto)
  • ✅ FAB 可拖动并记忆位置
  • ✅ final.refs 显示到 UI
  • ✅ JSON 自动修复并回写 history
  • ✅ 11 个 Discourse 工具
  • ✅ 多会话跨刷新持久化
  • ✅ Stop 按钮支持取消运行

🙏 致谢

📧 联系方式

如有问题或建议,欢迎在 linux.do 论坛联系作者或提交 Issue。


注意:使用本脚本需要自行准备兼容 OpenAI Chat Completions 格式的 API Key。请遵守相关服务条款和论坛规则。