Files
qiming/qiming-rcoder/specs/computer-agent-runner/computer-agent-runner.md
2026-06-01 13:54:52 +08:00

55 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Instruction
## project alpha
我要做一个带有虚拟远程桌面的agentic aiagent 可以在这个带有远程桌面的docker容器里操作浏览器搜索访问自己需要的网络资料用户还可以通过 vnc 远程虚拟桌面查看操作使用最终agent在docker容器里挂载的目录下按照用户的 prompt 的要求,完成复杂任务。
我现在初步想法点,大概如下:
* agent 复用当前 `crates/agent_runner` 模块使用的docker容器是 docker/rcoder-agent-runner/Dockerfile 通过这个构建出来的容器 ,通过 `ServiceType::ComputerAgentRunner` 来创建使用我们的新的docker 容器,进行使用。
* `crates/rcoder` 模块的 `crates/rcoder/src/router.rs` 的http router 参考现有使用的agent_runner 模块的http接口("/agent"前缀的接口,"/chat"),我们统一增加新接口,前缀是 "/computer" 的http接口对外服务内部还是调用 `crates/agent_runner` 模块在 `ServiceType::ComputerAgentRunner` docker 容器里运行。
1 "/computer/chat" 接口,入参需要增加字段 `user_id` 用户id必填,根据 `user_id` 来检查有无对应的 docker容器一个 `user_id`对应一个docker容器一一对应如果没有则自动动态创建和现在的 `ServiceType::RCoder`创建容器方式一样),然后动态创建的子容器,是根据入参 `user_id` ,`project_id` 来进行挂载。容器挂载路径: /app/computer-project-workspace/{user_id} 。
挂载目录示意: /app/computer-project-workspace/{user_id}/{project_id}
如果 `user_id` 对应的docker容器已经启动容器里可以有多个agent服务运行根据 `project_id` 启动对应的agent 服务,当前 `crates/agent_runner` 模块是支持在一个docker容器里按照 `project_id` 启动对应的agent 服务)
注: 我在本地测试用的docker compose配置文件docker/docker-compose.yml有挂载 `computer-project-workspace` 目录到容器里,你可以去看下这个配置文件
* `docker/rcoder-agent-runner/Dockerfile` docker镜像配置文件本身有用 noVnc 提供vnc服务用于连接虚拟远程桌面。 但用户访问是通过 `crates/rcoder` 模块 所在的主容器来访问vnc服务的不能直接让用户访问内部动态创建的子容器服务我这里想法是可以通过 pingora 来提供反向透明代理服务按照我定义的路径规则透明代理vnc服务。
我设想的vnc路径规则是 "/computer/desktop/{user_id}/{project_id}" ,这样 pingora 就知道要访问的是哪个子容器的vnc服务了可以进行透明代理操作。
然后关于vnc服务我还有些不清楚的点如果以后vnc 的虚拟远程桌面,需要粘贴复制,是不是应该进一步封装成接口,做一些处理,而不是仅仅只使用 pingora 透明代理了?
* `ServiceType::ComputerAgentRunner` docker 容器里的agent在当前的默认mcp配置下增加mcp工具 Chrome DevTools MCP 对应github仓库地址是 https://github.com/ChromeDevTools/chrome-devtools-mcp?tab=readme-ov-file
mcp参考json配置
```
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest"]
}
}
}
```
`crates/agent_config/configs/default_agents.json` 这个是 `ServiceType::RCoder` 默认使用的agent配置我们的新功能 `ServiceType::ComputerAgentRunner` 也可以使用这个配置吗? 但需要额外增加 "Chrome DevTools MCP" 这个浏览器操作的mcp工具。 `ServiceType::ComputerAgentRunner`对应的docker容器里已经有提前安装好的 chromium 浏览器,并设置开发里 9200 端口,用于开发调试使用。
* 现有的接口 "/agent/stop" 是停止对应的 project_id 对应的容器,但是新接口: "/computer/agent/stop"对应的逻辑,是根据 `user_id` ,`project_id` 停止对应的agent服务就行了。
* 现有根据 agent是否闲置的规则需要有区分枚举`ServiceType`,之前因为一个 `project_id` 对应一个docker容器现在`ServiceType::ComputerAgentRunner` 对应容器,是根据 `user_id` 对应一个docker容器 `user_id` 可能有多个 `project_id` 对应的agent 在运行,需要 `user_id`下的所有 `project_id` 对应的agent 都是闲置状态(复用现有闲置时间规则),才能销毁对应的 docker 容器。
* 目前`crates/rcoder` 通过 gRPC和 `crates/agent_runner` 模块通信,如果失败,不要回退成 http通信`crates/agent_runner` 模块里的http接口后面是要彻底删除的。`crates/agent_runner` 模块只用gRPC通信。
### vnc虚拟远程桌面手动测试
开发结束后在帮我开发一个html网页放在 `fixtures`目录下方便我打开网页输入本地的ip和端口来测试验证 vnc虚拟桌面。
按照这个想法,帮我生成详细的需求和设计文档,输出为中文。涉及到代码部分,不要写详细的具体实现,只需要写 trait 和 结构体 struct