Files
2026-07-26 21:32:12 +08:00

144 lines
4.9 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.
# K1412 Agent
中文 · [English](README.md)
K1412 Agent 是一个多人 Web 编码 Agent。每一次用户请求都会进入同一套可独立演进的
Agent Loop;调度器、上下文策略、记忆、工具、证据规则和子 Agent 均由本仓库实现和维护。
生产环境:<https://agent.k1412.top>
架构、Agent 实现细节和实验台账:<https://agent.k1412.top/doc/>
## 架构
```text
浏览器
|
v
Open WebUI(鉴权、RBAC、对话历史、界面)
|
v
Agent Runtime(模型网关 + Agent Loop
|
v
Workspace Gateway(身份、策略、审计)
|
v
专用执行主机上,每个 Open WebUI 用户对应一个 Docker 工作区
```
Open WebUI 被固定到明确版本并进行少量补丁修改。它的选择器只展示四个模型名称,以及一个
独立、只读的思考状态。Provider URL、上游模型 ID、API Key、工具服务设置、系统提示词和
Runtime 参数全部保留在服务端。
模型身份与思考能力有意分开表达:
| 界面模型 | Provider 模型 | 思考 | 推理强度 |
| --- | --- | --- | --- |
| Luna | `ChatGPT-5.6:Luna` | 开启,不分强度档位 | — |
| Terra | `ChatGPT-5.6:Terra` | 开启,不分强度档位 | — |
| Sol | `ChatGPT-5.6:Sol` | 开启,不分强度档位 | — |
| DeepSeek V4 Pro | `deepseek-v4-pro` | 开启 | 极高(`max` |
三个 Ollama 模型会声明 `thinking` 能力,但它们属于仅提供思考开关的 Qwen 系列模型,
没有 GPT-OSS 风格的低、中、高推理强度。Luna、Terra、Sol 是三个不同的模型,不是同一个
模型的三个推理设置。
## 本地开发
1.`.env.example` 复制为 `.env` 并填写密钥。绝不能提交 `.env`。可使用
`./scripts/init-secrets.sh` 生成新值。
2. 构建用户工作区镜像:
```bash
docker compose --profile build-only build workspace-image
```
3. 启动完整服务栈:
```bash
docker compose up --build
```
4. 打开 <http://localhost:3000>。新用户注册后的角色为 `pending`,必须由初始化管理员批准。
Provider 凭据不会保存在仓库中,只能放在受保护的部署 `.env` 中。
## 测试
```bash
python3 -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/pytest
```
运行包含真实 Docker 隔离测试的完整本地验证:
```bash
./scripts/verify.sh
```
在唯一、可销毁、禁用网络的 Docker 工作区中运行真实 Agent 评测:
```bash
set -a
source /path/to/protected/deepseek.env
set +a
.venv/bin/python scripts/eval-live-work.py --model deepseek-v4-pro
```
评测器会报告延迟、Token 使用、工具调用次数、完成证据和生成文件列表。除非传入
`--keep-workspace`,否则结束时只会删除本次评测唯一对应的容器、卷和网络。
运行使用确定性假模型 Provider 的一次性六服务集成栈,验证注册审批、Agent Loop、
工作区隔离和文件交付:
```bash
./scripts/verify-e2e.sh
```
E2E 服务栈及其测试专用卷会在退出时删除。只有需要检查运行中容器时才设置
`E2E_KEEP_STACK=1`。
审计所有最终服务镜像和工作区镜像,要求 Python 环境依赖一致、没有已知 Python 漏洞,
且不存在可修复的 High/Critical 镜像漏洞:
```bash
./scripts/audit-images.sh
```
生成文件可通过模型选择器旁边的“工作区文件”按钮获取。用户可以浏览目录、下载单个文件,
或者将当前目录下载为 `.tar.gz` 归档。浏览器请求先由 Open WebUI 鉴权,再为 Workspace
Gateway 重新签名;任何内部密钥都不会暴露给浏览器。
## 文档
- [中文文档索引](docs/README.zh-CN.md)
- [架构与 Agent Loop](docs/architecture.zh-CN.md)
- [Agent Loop 实现](docs/agent-loop.zh-CN.md)
- [实验体系](docs/experiments.zh-CN.md)
- [项目历史与决策](docs/project-history.zh-CN.md)
- [Open WebUI 集成](docs/openwebui-integration.zh-CN.md)
- [基础设施地图](docs/infrastructure.zh-CN.md)
- [开发与验证](docs/development.zh-CN.md)
- [运维手册](docs/operations.zh-CN.md)
- [安全模型](docs/security.zh-CN.md)
- [English documentation](docs/README.md)
## 部署
生产环境使用 `docker.k1412.top/wuyang/*` 中不可变的 `linux/amd64` 镜像、Unraid Compose
Manager 项目、私有服务网络,以及唯一的公开 HTTPS 入口
<https://agent.k1412.top>。
用户工作区通过 SSH 运行在专用 Docker 主机上;应用服务和数据库仍运行在 NAS。
## 许可证与 Open WebUI 归属
Web 服务派生自 Open WebUI v0.9.6。Open WebUI 的版权、许可证和归属继续遵循上游
Open WebUI License。K1412 原创的 Runtime、Gateway、部署、测试和文档使用 Apache-2.0。
因此本仓库是混合许可证仓库;派生自 Open WebUI 的 Web 层不会被重新许可为 Apache-2.0。
生产部署使用 Open WebUI 针对滚动 30 天内不超过 50 名最终用户的品牌移除例外。公开构建
默认保留上游品牌。详见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。