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와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

작성자
CassiopeiaCode
일일 설치 수
0
총 설치 수
23
평점
0 0 0
버전
0.3.8
생성일
2025-12-19
갱신일
2025-12-20
크기
136KB
라이선스
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。请遵守相关服务条款和论坛规则。