# AgentGo **Repository Path**: cng1985/agent-go ## Basic Information - **Project Name**: AgentGo - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-10-28 - **Last Updated**: 2026-11-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AgentGo AgentGo 是一个 Go + Vue 的 AI 工作空间原型,提供账号注册与登录、个人智能体配置、持久化对话,以及目标任务的计划和文本结果生成。 演示环境:[http://120.48.156.84:8091/login](http://120.48.156.84:8091/login) ## 本地运行 需要 Go 1.25+、Node.js 和 npm。SQLite 使用纯 Go 驱动,不需要安装 C 编译器。生成 PPT 和视频还需要 Python 3、`python-pptx`、`Pillow`;视频还需要 `ffmpeg`、`ffprobe` 和可显示中文的字体。 ```powershell npm install --prefix web npm run build --prefix web npm --prefix skill-runtime/node ci py -3 -m pip install -r scripts/requirements.txt go run ./cmd/server ``` 启动前,在 `configs/application-local.yaml` 中填写密钥;如果该文件不存在,先复制 `configs/application-local.example.yaml` 并重命名为 `application-local.yaml`: ```yaml ai: api_key: "你的服务端 API Key" ``` 这个本地文件已加入 `.gitignore`。也可以通过环境变量 `OPENAI_API_KEY` 设置密钥;设置后环境变量优先。修改配置后需要重启服务。 在浏览器打开 http://localhost:8080,注册账号后即可使用。数据保存在 `data/agentgo.db`。API Key 仅由服务端读取;不要将密钥提交到版本库。没有配置密钥时,注册及管理功能仍可使用,模型请求会返回明确错误。 上例的 `py -3` 用于 Windows;其他平台可使用 `python3 -m pip install -r scripts/requirements.txt`。默认使用 Windows 的 `py -3` 或其他平台的 `python3`,可设置 `AGENTGO_PYTHON` 指向 Python 3 可执行文件。视频默认从系统字体中选择字体,也可通过 `AGENTGO_FONT` 指定字体文件。需确保 FFmpeg 与 ffprobe 在 PATH 中。 前端开发时先启动 Go 服务,再运行 `npm run dev --prefix web`;Vite 会代理 `/api` 到本地 8080 端口。 ## 构建程序 安装 Go 1.25+、Node.js 和 pnpm 后,在项目根目录运行: ```cmd scripts\build.cmd ``` Linux 或 macOS 使用 `sh scripts/build.sh`。脚本根据锁文件安装前端依赖,构建 `web/dist` 并将其嵌入服务端程序,输出到 `build/agentgo`(Windows 目标为 `build/agentgo.exe`)。所有 Go 构建、`go run` 和测试均需要先生成 `web/dist`;前端变更后需重新构建前端及 Go 程序才能更新内置页面。运行程序时需以项目根目录为工作目录,并保留 `configs` 及运行所需的其他资源;配置和技能资源没有打包进可执行文件。 ### 从 Windows 构建并运行 Linux 版本 在 Windows 项目根目录运行以下命令,默认构建 Linux x86-64 版本;ARM64 服务器使用第二条命令: ```cmd scripts\build.cmd linux scripts\build.cmd linux arm64 ``` 程序分别输出到 `build/linux-amd64/agentgo` 和 `build/linux-arm64/agentgo`,已包含前端静态文件。将适合服务器架构的 `agentgo`、`scripts/start.sh` 和 `configs` 放在 Linux 应用目录中;如需安装服务,也将 `scripts/install-service.sh` 放在同一目录。按需配置 `configs/application-local.yaml`。如需完整的技能与文件生成功能,还需按项目结构复制 `agent-skills`、`scripts`、`skill-runtime` 等资源,在服务器安装相应的 Python、Node.js、FFmpeg 和依赖;Node 依赖应在 Linux 上运行 `npm --prefix skill-runtime/node ci` 安装。 在服务器的项目根目录后台启动: ```sh sh start.sh ``` 启动脚本使用同一目录下的 `agentgo`,以包含 `configs/application.yaml` 的应用目录为工作目录。后台启动日志写入启动脚本同目录的 `logs/agentgo.log`,进程号写入应用目录的 `data/agentgo.pid`;如需前台运行,可使用 `sh start.sh --foreground`。也支持将启动脚本与程序放在应用目录下的 `scripts` 子目录。使用 systemd 的服务器可安装并启动开机自启服务: ```sh sudo sh install-service.sh # 或指定服务运行用户;该用户须能读取项目文件并写入数据目录 sudo sh install-service.sh your-user systemctl status agentgo.service journalctl -u agentgo.service -f ``` 不指定用户时,服务使用执行 sudo 的用户;直接以 root 运行安装脚本时使用 root。数据默认写入项目的 `data` 目录,服务用户需要对该目录有写权限。服务通过前台模式交由 systemd 管理,已安装旧版服务的用户需重新执行安装脚本以更新配置并重启服务;停止或禁用可使用 `sudo systemctl stop agentgo` 和 `sudo systemctl disable agentgo`。 ## 对话联网和推理 输入框中的「联网」用于获取最新内容:开启后先实时搜索,再读取关键来源核对,最后回答。默认检索最近一周;模型可选择最近一天、一个月、一年,或为历史问题选择不限时间。搜索会请求时间筛选,并过滤已知超出范围的结果;上游索引可能不完整,日期未知的来源会明确标注,检索时间不会被当作发布日期。 搜索词会发送给 Bing;来源链接会用于读取公开网页,标题、摘要、正文片段及页面明确标注的发布/更新时间会发送给配置的模型服务。系统要求模型优先使用官方来源,标明信息截至日期并引用链接。搜索或原文读取失败时会显示工具错误,并标明资料未核实,不能把旧知识冒充最新情况。搜索和来源读取次数不设固定上限,模型可按任务需要调整关键词、反复检索并核对来源,直到资料充分、用户停止或无法继续;单次网络请求仍有超时和大小限制,模型及服务本身的上下文容量也可能限制复杂任务。联网需要服务端能够访问 Bing 和来源网站,且模型支持工具调用。 推理强度可选择低、中、高、极高、最大(`low`、`medium`、`high`、`xhigh`、`max`),选择后请求会发送 `reasoning_effort` 参数;MiniMax M3.1 系列还会发送 `thinking: {"type": "adaptive"}`。模型返回的 `reasoning_content` 会在回答中实时显示并保存。不同模型或服务对参数、档位及推理内容的支持不同:不支持时可能返回错误,或不提供可展示的内容。关闭推理时不发送这些参数,模型是否仍进行推理取决于服务。两项选择在当前页面会话中保持,刷新后恢复默认。 ## 功能和边界 - 账号:邮箱注册、密码登录、服务端会话及退出。密码使用 bcrypt 哈希,会话令牌仅存储哈希。登录和注册设有单实例 IP 限流。 - 智能体:每个账号维护自己的名称、描述和系统指令;新账号首次进入工作空间时创建通用助手。删除智能体后,依赖它的旧对话不能继续发送消息。 - 对话:按用户隔离,历史保存在 SQLite;每次请求携带最近 20 条消息。前端通过 `POST /api/chat/stream` 接收 SSE 的 `delta`、`reasoning`、`skill`、`tool`、`done` 和 `error` 事件;工具调用状态实时显示并随完成的回答保存,完整回答持久化后才发送 `done`。生成时可点击「停止生成」,中断或模型失败时不保存不完整对话,未提交成功的输入会恢复。对话、任务和问数回答支持 Mermaid 图表、Markdown 和代码复制。Mermaid 按需在本地渲染并作为安全过滤后的图片显示,源码可展开;超过 30000 字符、带外部资源或配置指令的图表不渲染。渲染成功的 Mermaid 和 SVG 图形可点击查看、缩放、拖动和下载为 SVG;下载的是经过安全过滤的图形,原始源码仍可展开复制。SVG 预览会过滤脚本及外部资源,任意原始 HTML 不执行。原有 `/api/chat/send` 普通响应接口仍可使用。 - 记忆:在「设置 → 记忆」添加、编辑或删除个人偏好等长期信息,每个账号最多 50 条、每条最多 300 字。使用记忆和自动提取分别默认关闭;开启使用后,普通对话会将该账号全部已保存记忆发送给所选模型服务,任务和问数不使用记忆。额外开启自动提取后,成功保存的普通对话会在后台使用所选模型判断当前用户消息是否包含值得长期保留的信息;提取会额外调用模型并计入 Token 用量,只发送当前消息文本与已有记忆,不读取附件。提取失败或达到上限时不会影响对话;结果可能有误,请定期检查。关闭使用记忆会暂停提取但不删除记忆;删除对话也不会删除已经保存的记忆,可在设置中单独删除或全部清除。请勿保存密码等敏感信息。 - 对话附件和语音:输入框可选择多个文件,完整保存在本地 `data/chat-files`。文本文件每次模型请求最多读取共 128 KiB UTF-8 内容;其他未支持的二进制文件不会发送给模型。图片和视频分别限 20 MiB、100 MiB,使用前需在「设置 → 云文件存储」配置地域 ID、Bucket 和访问密钥,测试并保存;支持阿里云 OSS、腾讯云 COS 和 Amazon S3,每人可以保存多个厂商配置,同时只能启用一家。已有阿里云配置会自动迁移并保持原来的启用状态;腾讯云 Bucket 名称需包含 APPID。推荐使用仅对指定 Bucket 拥有对象读写和删除权限的云账号。密钥保存在服务端数据库,不会返回给前端;请保护数据库和备份。图片、视频和视频抽取的画面上传成功后保留在当前启用的云存储,并以有效期一小时的签名链接提供给模型。后续对话复用相同云端对象并生成新链接;如果对象被手动删除且本地附件仍在,会重新上传。即使模型请求失败或对话被删除,已成功上传的云对象仍会保留,可按需在云存储控制台手动清理。模型须支持 OpenAI Chat Completions 的 `image_url` 图片输入。视频会均匀抽取最多 8 张画面,以带时间标记的图片发送给模型;不会提供视频音频或全部画面。视频分析需要服务端安装 FFmpeg 并加入 PATH,也可设置 `AGENTGO_FFMPEG_PATH` 指向 FFmpeg;安装了 Python imageio-ffmpeg 时可自动发现。图片和视频可在对话中预览;当浏览器无法显示视频画面时,服务端使用 FFmpeg 生成 H.264/AAC 兼容预览并缓存在本地,原视频保持不变。兼容预览要求 FFmpeg 支持 libx264,转码超时或失败时可下载原视频播放。删除对话会一并删除本地附件及预览缓存。磁盘空间和代理限制仍然适用。语音按钮使用浏览器语音识别,可能需要麦克风权限和网络服务。 - 前端路由:`/chat`、`/chat/:id`、`/tasks`、`/tasks/:id`、`/tasks/history`、`/data-query`、`/settings/profile`、`/settings/agents`、`/settings/datasources` 和 `/settings/dictionaries` 支持直接访问和刷新;旧 `/agents` 地址会跳转到智能体设置。未登录会跳转登录页。Go 服务与 Vite 开发服务器提供 SPA 路由回退。反向代理部署时也需要将页面路由回退到 `index.html`,不能将 API 请求回退到 HTML。 - 设置:可以修改姓名和邮箱;修改邮箱需要当前密码。智能体、数据源和数据字典在设置中管理。 - 资料:在「设置 → 资料」分页查看当前账号已保存的对话上传附件和已关联任务的输入文件,按文件扩展名筛选图片、视频、音频、文档和其他;任务重试复用的附件只显示一次。可下载原文件、打开来源,支持的对话图片和视频可预览。资料列表不包含模型生成文件、独立数据源文件及仅保留在云存储的对象;删除对话会同时移除本地附件。对话上传只有在消息成功保存后才会出现在列表中。 - 请求调试:在「设置 → 请求调试」为当前账号开启,查看之后发送给模型服务的请求地址、安全请求头、实际 JSON 请求体、状态码和连接重试;覆盖使用同一模型客户端的对话、任务、问数、数据字典和记忆提取。记录仅保存在本服务进程内存中,默认关闭、重启清空,不记录认证请求头;请求体本身可能包含对话、系统提示、工具结果和临时文件链接,分享前请自行检查。列表由服务端分页,每人最多保留 1000 条、总计 32 MiB,超出上限时自动移除较早记录,单条请求体超过 4 MiB 时截断并标记;状态和耗时只表示收到响应头,不代表流式生成已完成。图片签名链接在有效期结束或云对象被删除后失效。关闭记录不会清空已有记录,可手动清空。 - 数据源:支持上传 SQLite 文件副本或配置 MySQL、PostgreSQL、SQL Server 连接;数据源只保存连接配置,保存时测试连接,不指定表。请为数据库连接配置只读账号,并按环境启用 TLS 验证。SQLite 以只读模式打开;其他数据库的权限由数据库账号控制。 - 数据字典:一个字典对应一个数据源,可先创建空字典,再添加该数据库中需要分析的表或视图。支持搜索和分批加载表,表总数和字段数没有固定上限。添加时直接读取数据库中的表和字段注释,无注释时保留空白;PostgreSQL 数据库注释和 SQL Server 的数据库级 `MS_Description` 也会用于初始化字典介绍。MySQL 使用表和字段注释,SQLite 没有标准的数据库、表或字段注释,说明需手动填写或由 AI 辅助修改。可对单个字段使用 AI 修改说明,也可根据已选表生成字典介绍;这些操作会发送相关名称、类型和说明给模型,不发送表数据。说明及选定的表、字段均可编辑。支持导出为 AgentGo JSON 并导入为新字典,可选择目标数据源和映射模式;导出文件不含连接信息,保存前会校验表与字段。旧单表字典仍可使用。删除数据源前需要先删除关联的字典。 - 问数:选择已保存的数据字典,模型可在一次分析中依次生成并执行多条受限查询,支持同一数据源中字典内的表做 INNER/LEFT 等值关联、明细、筛选、分组和常用聚合;服务端核对表和字段、检查当前表结构,构造参数化查询,不执行模型直接生成的 SQL。每次查询最多展示 200 行,每次分析最多 8 条查询。字典说明、问题、查询计划和有限的查询结果预览会发送给配置的模型服务,以便继续分析;预览最多 20 行、40 列,并限制单个文本和总体长度。历史会话保存在本地。字典中保留的字段被删除、重命名或类型发生变化时,需要更新字典;新增其他字段不会影响现有字典。模型可能误解问题,请结合每步查询依据核对。 - 任务:在对话输入框选择“作为任务执行”,或在任务页提交目标。Agent 制定计划、按需加载本地技能、调用工具并读取结果。内置工具可以计算、统计、创建源码文件、PPTX,以及无音频的文字画面 MP4。生成的文件只保存到当前任务目录,可在任务详情中单独下载或按目录结构打包为 ZIP;运行中的任务会打包当前已生成的文件。源码不会自动执行或测试;PPT 是文字版;视频不是生成式镜头或配音视频。需要修正已有文本交付物时,任务可创建同名新版本,原版保留在“文件 → 历史版本与移出文件”;多余文件可移出最终交付列表并由用户恢复。打包下载和结果审查使用当前版本。 - 任务附件:任务页支持添加最多 5 个 UTF-8 文本文件(如 TXT、Markdown、源码)或 CSV。文本文件流式保存,服务端不设置固定上传大小上限;Agent 可通过 `read_input_text` 按需分段读取,每次最多 32 KiB,读取的内容会发送给当前模型服务。处理记录会区分完整读取和部分读取,大文件不保证会全部读入模型。CSV 保留每个文件不超过 2 MiB、5,000 行和 50 列的统计限制;Agent 可以调用确定性统计工具生成 Markdown 报告,文件名、表头和统计结果会发送给模型,原始 CSV 行不会通过这些统计工具发送。输入文件受账号隔离、使用 SHA-256 检查完整性,任务重试沿用原文件。实际上传仍受可用磁盘空间及反向代理等基础设施限制。 - 应用:侧边栏提供短剧创作和漫画创作,填写故事资料后创建任务,生成剧本、人物设定、文字分镜等交付物;不直接生成实拍视频、配音或漫画图片。可自定义应用名称、说明、执行指令及最多 10 个单行或多行输入字段,并设置必填项;应用按账号保存,可编辑或删除。运行时指令和资料会发送给任务使用的模型,任务使用默认模型,生成能力和结果取决于模型及可用工具。删除应用不会删除已创建的任务。 - 定时任务:在侧边栏的「定时任务」创建一次、每天或每周执行的目标,选择智能体并设置时间。重复任务使用创建时浏览器的时区;不提供推送通知,需在页面查看结果。可编辑、暂停、恢复或删除,查看最近 100 次执行记录并打开任务详情。服务必须保持运行;离线时错过的执行在恢复后合并为一次,同一定时任务不会同时运行多次。单次任务触发后显示已完成,实际结果请查看执行记录;暂停不取消已运行的任务。删除定时配置后,已有执行记录仍保留在任务历史。 - 任务模型与子 Agent:任务页可选择当前账号已启用且有可用供应商的模型;对话转任务沿用对话选中的模型。默认模型仍使用服务端配置。模型选择与是否允许子 Agent 分工会随任务保存,重试沿用设置;已停用或删除的模型不会静默切换为默认模型。大任务可允许主 Agent 按需调用最多 3 个子 Agent,子 Agent 顺序执行,使用相同模型、输入和任务交付物,不能继续派生子 Agent;任务的时间、模型步骤和工具调用预算由主子 Agent 共享,单个子 Agent 最多执行 8 个模型步骤。分工、工具调用与结果汇总可在执行过程查看,是否分工由模型决定。定时任务仍使用默认模型,暂不启用子 Agent。 - 任务进度与取消:任务详情通过 `GET /api/agent/task/events/stream?id=任务ID` 接收 SSE 事件,包括阶段、工具调用、计划增量和执行输出增量;事件持久化并支持 `Last-Event-ID` 或 `after_id` 恢复,也提供事件查询作为回退。模型在工具调用前输出的文字是执行过程,不一定是最终结果;任务结束前界面会明确标记。运行中的任务可以取消,取消信号会传给当前调用,已完成的操作不会撤销,外部进程可能无法立即停止。 - 运行中补充要求:任务处于执行阶段时可提交补充说明,系统保存后在下一次主任务模型步骤前加入;正在进行的子任务、模型或工具调用不会立即中断。若任务先结束,未处理的说明会在继续执行时带入。补充说明和检查点一起持久化,避免重启后无记录地丢失;模型是否正确执行仍需结合结果核验。 - 长任务与篇幅检查:执行上下文过长时会保留最近完整的工具调用和当前文件记录,提示 Agent 核对先前成果;历史细节仍可能丢失,不保证长篇内容前后一致。等待执行模型时,若连续三分钟没有文本、推理或工具参数片段,任务会保留已有成果并提示继续;仍在传输的长回复不会因总时长超过三分钟而中断。Agent 可选择当前文本交付物统计 Unicode 字母和数字的数量,不包含空白和标点,但包含标题等文字;系统在结果检验时重新统计所选文件。统计不能判断所选文件是否全部是正文,也不能证明作品完整或质量达标。 - 文本异常检查:结果检验会在限制范围内扫描当前 TXT 和 Markdown 交付物中的 Unicode 替换字符;发现后提示结合上下文判断是否为乱码,无法扫描时标记待核验。此检查不能识别所有乱码,也不能判断内容质量。 - Go 源码检查:结果检验会解析当前 Go 文件的语法,发现错误时列出文件并允许任务尝试修正;通过仅代表语法可解析,不代表依赖可用、项目可以编译或测试已经执行。 - 目标与计划:模型直接返回结构化计划,由服务端为每个节点分配稳定编号并以嵌套子节点保存;模型不遵循格式时,兼容旧式文本计划并尽量提取步骤,无法拆分的文本保留为单个步骤。原有扁平父子记录可读取并在后续执行时转换。交付物和验收标准标记为模型推断,任务结束后可由用户修改确认。每个节点分别保存执行者报告和模型审查结论;未报告不代表没有执行,模型判断不等于独立事实核验,缺乏依据的节点标记为待核验。更改验收标准、恢复交付物或继续执行会使原节点审查失效。完整计划原文仍可查看。 - 细化计划:执行时 Agent 可以在已有节点下批量添加子步骤(如章节),系统分配稳定编号供后续报告和检验;同一父节点下重复标题复用已有节点。计划最多 300 个节点、6 层,是否细化和报告由 Agent 决定,不能仅凭节点状态认定任务已经完成。 - 文件交付引导:当目标明确要求创建源码或文件、任务仍无任何交付物,模型却只描述准备工作时,引擎最多两次提示继续实际操作,并尝试要求模型调用工具;不支持该选项的模型服务会回退普通调用。若依然无法交付,任务按现有检验流程报告未完成,不保证模型一定能生成文件。 - 继续执行:失败、中断、取消、已完成或待人工核验的任务可在详情中继续,并可补充修正要求。继续执行保留同一任务的计划、事件、输入和交付物,恢复已保存的模型上下文及工具结果;每次继续重新获得配置的执行预算。服务中断时,进行中的工具调用可能已经产生结果,系统将其标记为状态未知,不自动重放;可检查现有文件和记录。为适应大任务,继续时会保留最近的完整步骤并压缩过长的历史内容;旧任务若没有完整上下文,则根据已有记录和文件继续,无法保证精确恢复原执行现场。 - 任务重试与执行历史:失败或服务中断的任务可以从详情重试;重试会从头创建一条新执行记录,沿用原目标、智能体和输入文件,原事件、输出和交付物仍可查看。重试前会校验原输入文件的完整性,每条执行记录只能派生一次重试;若要再次重试,请打开最新一次失败记录。执行历史提供关键词、状态筛选和分页加载,记录数量不受最近任务列表的 100 条限制。 - 自动重试:任务执行失败时会保留同一任务的计划、进度和交付物,最多自动继续重试 3 次,重试间隔依次为 1、2、4 秒;执行过程会记录失败原因和重试次数。每次重试重新获得执行预算,取消任务后停止重试;服务中断后仍需手动继续。状态未知的工具调用需要核查,不能保证外部操作不会重复。 - 结果核验:任务先明确预期结果与验收标准并生成计划,执行后通过程序检查结果非空、交付物可读取、输入完整性和处理记录,再由模型结合目标、计划和现有证据进行审查。审查会从交付物中分布抽取最多 10 个文件,将其中的文本片段发送给所选模型服务,每个最多 16 KiB、合计最多 64 KiB;截断或无法读取的部分不会视为已核验。模型发现明确问题时会增加调整建议并最多尝试三轮修正并再次审查;预算不足或仍有问题时保留成果,可继续执行。模型审查不是独立事实验证,模型无法直接检查的文件内容或外部事实仍需人工核验。 - 重新检验:任务结束且已有结果时,可以选择可用模型单独重新检验当前结果和交付物;重新检验不会执行计划或自动修改交付物。发现需要修正的问题后,可通过「继续执行」处理。审查结果仍有模型和证据范围限制。 - 任务限制:每次执行默认最多 80 次模型执行步骤、64 次工具调用,最长 15 分钟,并发上限为 4。可在 `configs/application.yaml` 或 `configs/application-local.yaml` 的 `task.max_model_steps`、`task.max_tool_calls`、`task.timeout_minutes` 中调整;修改后需重启服务。多文件代码可通过批量工具创建。达到上限时会保留已经生成的文件,尽可能整理已完成和未完成的内容,并按自动重试规则继续;重试耗尽后标记为失败,可手动重试。PPTX 和 MP4 在交付前检查格式,所有交付物检查是否可读取;目标是否达成仍标记为 `partially_completed`(待人工核验)。服务重启时未完成的任务标记为 `blocked`,可以手动继续或从头重试;继续时已中断的工具调用结果可能未知。 - 模型:使用服务端配置的 OpenAI 兼容 Chat Completions HTTP 接口。连接在收到响应前发生可恢复的网络错误时,对话和任务的单次模型请求最多自动重试 2 次,间隔为 1、2 秒;取消请求会中止等待。DNS 域名不存在和证书验证失败不会重复尝试,已收到响应后的流中断不会在此层重放。模型供应商可能已收到未成功返回的请求,因此重试仍可能产生额外用量。Agent 任务需要模型及服务支持 SSE 流式响应以及流式 `tools` / `tool_calls`;兼容部分服务在工具参数分片中重复返回工具 ID 和名称的格式。如果模型连续返回空的执行步骤,会有限重试并尝试普通工具调用,任务进度仍通过 SSE 返回。普通对话的 SSE 支持另行取决于模型服务。服务地址和模型名称见 `configs/application.yaml`。模型密钥是独立供应商凭据,与登录账号无关。 - Token 用量:设置中的「Token 用量」按当前账号展示今日、本月和累计的模型输入、输出与总用量,以及可分页查看的请求记录。对话、任务、问数和数据字典的模型请求均计入;多步骤和重试按实际成功接收的模型响应分别记录。流式调用会请求模型服务返回用量,不支持该选项的服务在明确拒绝后会回退;服务未返回完整用量或流被中断时,记录为未返回,不按零用量估算。仅从启用该功能之后开始记录,无法补算历史数据;统计非账单,可能低于供应商实际计费,日期按服务端本地时间计算。 - 个人主页:从左下角账号菜单进入设置,可查看当前账号的个人主页,包括累计及单日峰值 Token、最近 365 天活动、模型请求连续天数和有完整起止事件的任务最长用时。每日、每周和累计视图均基于已记录的模型请求,缺失用量不会估算。可从已完成或待核验任务中选取最多 6 个精选作品,点击进入任务详情;有 PNG、JPEG、GIF 或 WebP 交付物时展示图片预览。账号名称和邮箱仍可在设置中修改,所有数据仅对当前账号可见。 当前版本是本地开发原型,不是需求文档中完整的 Agent Runtime:技能脚本可以在配置的环境中执行,但尚未实现通用开发环境、生成式视频与配音、GoalSpec 更新与版本管理、完整的独立结果验证、精确到工具内部的任务恢复、审批、多租户/RBAC 及生产审计。详细的需求和实现状态见 [需求实现对照](docs/requirements-status.md)。 ## MCP 与技能 在设置的「MCP 服务」中可以为当前账号添加、编辑、启停、删除和测试 Streamable HTTP 或 stdio 服务,连接服务后自动发现并列出可用工具,无需填写工具名称;用户需确认服务提供的所有工具都适合只读使用。已有个人服务也会自动使用服务提供的全部可用工具。HTTP Bearer 令牌加密保存,新任务加载当前配置。由于服务支持注册且没有管理员角色,默认用户配置不能连接本机或内网地址,也不能启动本地命令;仅在信任所有注册用户时,可由服务管理员分别在 `configs/application-local.yaml` 中设置 `mcp.allow_user_private_http: true` 或 `mcp.allow_user_stdio: true` 并重启。启用本地命令意味着注册用户可以在服务端启动任意命令;内网访问也会开放对服务端网络的访问。设置项和原有的配置文件服务器可以同时使用。 配置文件中的受信任 MCP 服务器示例见 `configs/application-local.example.yaml`:需要显式填写 `read_only: true`、获授权的 `allowed_user_ids` 和精确的 `allowed_tools`;HTTP Bearer token 可通过 `token_env` 指定环境变量名。模型不能临时指定服务器或命令。 `read_only` 是管理员对服务器及工具的信任声明,不是强制隔离:外部 MCP 服务或本地进程仍拥有它自身的权限。只应配置可信、所有工具均确认为只读的个人服务;配置文件服务器仍使用白名单,不要把生产写操作或任意执行工具放入白名单。工具参数在调用前按服务器提供的 JSON Schema 校验,返回内容作为不可信数据处理。当前不支持旧版独立 SSE 传输、OAuth 交互流程或具副作用工具的审批。 在设置的「技能」中可切换腾讯 SkillHub(默认)、Skills.sh 和 ClawHub 搜索并安装,也可通过其他站点提供的公开 HTTPS `SKILL.md` 或单技能 ZIP 直链安装。Skills.sh 结果来自公开 GitHub 仓库,预览和安装需要访问 GitHub,并固定预览时的仓库版本;ClawHub 仅安装其提供 ZIP 的技能,其他托管方式请访问来源页面查看。Skills.sh 和 ClawHub 关键词搜索显示站点返回的有限结果;ClawHub 浏览支持翻页。安装内容只对当前账号可见,新任务通过 `list_skills`、`load_skill` 和 `read_skill_file` 读取说明及文本参考文件。技能须包含合法的 YAML `name`、`description`;下载文件最多 8 MB,ZIP 最多 200 个文件、解压文本最多 4 MB,单文件最多 256 KB;非文本及过大的参考文件会跳过。内置 `code`、`presentation`、`video` 位于 `agent-skills/<名称>/SKILL.md`,对所有用户可用。只安装可信的技能文件。 普通对话默认关闭技能,发送消息时不会向模型提供技能目录或技能工具。可在输入框切换为自动选择技能,让模型根据问题加载技能和参考文件;也可手动选择技能,发送时会先加载其说明。该选择在当前页面会话中保持,刷新页面后恢复默认关闭。实际加载的技能会显示在回答中并随对话记录保存。自动选择和参考文件读取需要模型支持 OpenAI 兼容的工具调用;流式工具调用返回 HTTP 406 时会尝试非流式工具调用,回答可能需要等待完整生成后才显示。自动选择是否调用由模型决定,选择特定技能可保证说明被传给模型,但不能保证模型遵循说明或具备技能依赖的外部能力。 对话技能流程的默认限制为 80 次模型步骤、128 次工具调用和 2 MiB 技能资料,可通过 `chat.max_skill_steps`、`chat.max_skill_calls` 和 `chat.max_skill_bytes` 调整;与任务限额分别配置。达到上限后不再调用工具,系统会请求模型说明已完成和未完成的部分,并保留已生成的附件。 对话和任务可通过 `run_skill_script` 运行当前用户已安装包内的 `.py` 和 `.js` 文件,也可传入新生成或修改后的完整脚本源码,在临时目录执行;替换已有脚本仅对本次运行生效,不修改已安装的技能。每次运行使用新的临时目录,重试需要重新提供源码和输入。默认 `skill_execution.mode: local` 使用本机 Python 和 Node.js,可通过 `skill_execution.python`、`skill_execution.node` 指定解释器路径;修改配置后重启服务。脚本工作目录及 HOME 是临时目录,可通过 `../skill` 访问技能包,通过 `../inputs` 访问模型传入的文本;默认写入 Desktop 的文件也位于临时工作目录。工具可指定输出路径,或在不指定时自动收集工作目录内的文件作为附件或任务交付物。 对话附件和任务交付物中的 `.pptx` 文件可在浏览器内预览、翻页、缩放和下载。任务交付物还支持预览 `.docx`、`.xlsx` 和 `.xls`,表格可切换工作表;为保证响应速度,每个工作表最多显示前 200 行、50 列,最多显示 30 个工作表。文件在本地浏览器解析,不上传到第三方服务,预览限 50 MB。Word 排版、表格格式、复杂动画、特殊字体和部分 Office 效果可能与原文件不同;受密码保护或无法解析的文件可下载后查看。旧版 `.ppt` 和 `.doc` 文件请下载后查看。 本机模式以 AgentGo 进程的账户权限运行脚本,临时目录和环境变量精简并不构成安全隔离:脚本仍可能访问本机文件、网络及启动其他程序。只在可信的单用户环境使用,并只安装可信技能;不要用于多人或对外开放服务。最多交付 10 个文件,每个不超过 20 MB;执行超时或取消时会终止脚本主进程,不保证终止其自行启动的子进程。 如需使用 Docker 模式,可配置 `skill_execution.mode: docker` 和 `skill_execution.image: agentgo-skill-runtime:local`,安装并启动本机 Docker(Linux 容器),在项目根目录构建镜像: ```sh docker build -t agentgo-skill-runtime:local -f docker/skill-runtime/Dockerfile . ``` 容器禁用网络,技能包和输入为只读,工作目录使用有限大小的临时内存,限制 CPU、内存、进程数和运行时间。容器不是虚拟机,对外或多用户部署应使用独立、受限的运行节点。镜像预装 Python、python-pptx、Pillow、Node.js 和 pptxgenjs;其他依赖需由管理员预先加入自定义镜像。容器中脚本通过 `/skill` 读取包、`/inputs` 读取文本,在 `/workspace` 输出。`skill_execution.enabled` 可关闭脚本工具。本机模式使用 `skill-runtime/node` 下预装的 pptxgenjs,也可通过 `skill_execution.node_modules` 指定其他模块目录,或通过 `NODE_PATH` 添加目录。两种方式都不会自动安装技能声明的其他依赖,技能安装目前只保存文本文件,二进制素材不会自动提供。对话附件不会自动作为原始文件传给脚本。 ## 配置及生产限制 基础配置位于 `configs/application.yaml`,可通过 `configs/application-local.yaml` 覆盖;`AGENTGO_ADDRESS`、`OPENAI_API_KEY`、`OPENAI_BASE_URL` 和 `OPENAI_MODEL` 环境变量优先级最高。dev/pro 文件是预留说明。默认监听 `:8080`、使用 SQLite 和非 Secure Cookie,适合本地开发;对外部署前必须启用 HTTPS 并将 `secure_cookie` 设置为 `true`,同时完成部署环境、密钥、备份、访问控制及安全评估。 数据源密码和用户配置的 MCP 令牌使用位于应用数据库同目录的 `datasource.key` 加密;备份和迁移时必须同时保护并保留密钥,否则无法解密已有凭据。上传的 SQLite 副本位于同目录的 `datasource-files`;删除该数据源时会删除副本。上传 WAL 模式数据库前应先完成检查点并确保上传文件包含完整数据。数据库连接和聚合查询可能对数据源造成负载,应使用受限只读账号、视图和适当索引。 目前数据库使用 GORM AutoMigrate,尚未提供带版本与互斥的生产迁移;其他数据库方言也尚未实现或验证。Go 程序内置构建时的前端静态文件。限流是进程内的,反向代理和多实例部署须另行配置。启动需从项目根目录执行。 ## 验证 ```powershell go test ./cmd/... ./internal/... npm run test --prefix web npm run build --prefix web ``` 上述 Go 测试只覆盖应用源码;任务生成的代码位于 `data/artifacts`,可能是独立项目,不适合随应用一起执行 `go test ./...`。自动测试还覆盖任务取消、事件续接、文本读取、CSV 分析及账号隔离和输入文件完整性。模型功能需要用户自行配置有效服务凭据。 ### 自定义对话模型 在“设置 → 模型配置”中分别添加统一模型和 OpenAI 兼容供应商,再添加供应商模型连接。启用三者后,可在对话输入框中选择统一模型;默认模型仍使用服务端配置。模型路由优先选择数值最小的优先级,同优先级按照非负整数权重选择(若权重均为零则等概率选择);推理模式仅使用支持推理的连接。部署名称是备注,实际请求使用模型代码。连接失败不会自动切换供应商。模型仅供创建它的账号使用,编辑时密钥留空会保留原值。该功能使用项目数据库中的 `ai_canonical_model`、`ai_provider` 和 `ai_provider_model` 三张表。三张表均包含 `user_id` 字段以隔离账号;本项目默认使用 SQLite,不会自动连接外部 MySQL。密钥保存在服务端数据库中,不会通过模型列表接口返回;请保护数据库文件及其备份。出于网络安全考虑,自定义地址仅支持 HTTPS 公网服务,不支持本机和内网地址;服务需要兼容 `/chat/completions` 接口。 ### 联网引擎扩展 对话联网由 `internal/modules/chat` 中的 `WebEngine` 提供:实现 `WebSearchProvider` 可接入搜索服务,按 `Providers` 顺序尝试,失败或无结果时使用下一个;实现 `WebPageReader` 可替换网页读取。初始化 `Resource.WebEngine` 即可注入,默认使用 Bing 和内置公开网页读取器。自定义读取器须限制私有网络访问及重定向,并支持取消;搜索结果会统一校验链接和时间。长检索会压缩较早结果的正文和摘要,保留来源信息,需要时可再次读取。技能调用仍使用原有独立额度。