跳到主内容
快讯直播
AI智模界
教程

上手AgentGarten:让智能体在试炼场边玩边进化

适用场景

这套方案适合两类人:一是手里已经有若干 prompt 或 Agent 工作流,但每次迭代都靠"改一版、手动跑几遍、凭感觉判断好坏"的团队;二是想给智能体搭一个可以反复试错、自动打分、按分数筛选并生成下一代的闭环环境的人。AgentGarten 的核心思路很朴素:把"智能体—任务—评分—变异—再试"这条链路做成一个持续运行的实时试炼场,让智能体在对抗和反馈里自己往前走,而不是靠人一次次手改。

下面从零开始把试炼场跑起来,接上模型、注册智能体、设计试炼任务、启动进化、看结果。

> 说明:AgentGarten 的配置字段、CLI 子命令、镜像名会随版本调整。本文重点在流程与排查思路,凡是涉及具体版本、仓库地址、镜像 tag 的地方,都以官方文档和 --help 输出为准。命令里的子命令形态如果不一致,用 agentgarten --help 逐层找即可。

环境与前置条件

操作系统:Linux 服务器优先(主流 LTS 发行版均可),macOS 也能跑通,Windows 建议走 WSL2。

运行时:

  • Docker Engine + Docker Compose v2(版本以官方文档当前版本为准)
  • Python 3.10 以上,建议用虚拟环境
  • 如果用官方前端单独部署,还需要一个较新的 Node.js LTS

硬件建议:

  • 纯调用云端模型 API:4 核 8GB 内存起步,16GB 更稳(试炼场 + 数据库 + 队列一起跑)
  • 磁盘:至少 20GB 可用,试炼记录、日志、快照都会写盘,长期跑建议 50GB 以上并配日志轮转
  • 本地跑模型:显存按所选模型的实际需求准备,7B 级别量化后通常需要 8GB 以上显存;显存不够就切 API 模式

其他:

  • 一个 OpenAI 兼容的模型接口(base_url + api_key + 模型名)
  • 能访问容器镜像仓库和模型端点
  • 给试炼场分配一个固定端口,别和现有服务冲突

分步骤部署

第 1 步:拉取代码,先看目录结构

```bash

git clone <AgentGarten 官方仓库地址> agentgarten

cd agentgarten

ls

```

仓库地址以官方文档为准。拉下来之后先别急着 up,花两分钟看目录:通常会有 docker-compose.yml、.env.example、agents/(智能体定义)、trials/(试炼任务)、evolution/(进化策略)这几块。看清哪块放什么,后面配置就不会乱。

第 2 步:准备环境变量

```bash

cp .env.example .env

```

然后编辑 .env,填上这几类值:

```bash

试炼场对外端口

ARENA_PORT=8080

数据库与队列

PG_PASSWORD=change-me-please

DATABASE_URL=postgresql://agentgarten:change-me-please@db:5432/agentgarten

REDIS_URL=redis://cache:6379/0

模型接入(OpenAI 兼容端点)

LLM_BASE_URL=https://your-llm-endpoint/v1

LLM_API_KEY=sk-xxxxxxxxxxxxxxxx

LLM_MODEL=your-model-name

试炼场 API 鉴权

ARENA_API_TOKEN=change-me-too

```

三个要点:数据库密码和 API AI 词典:Token">Token 一定要改掉,别用示例值直接上公网;LLM_BASE_URL 记得带 /v1 这类路径后缀,很多人在这里踩坑;模型名要写接口实际接受的那个字符串。

第 3 步:先做一次配置检查,再启动

```bash

docker compose config

```

这条命令会把变量替换后的最终配置打印出来,成功的话你会看到完整的 YAML,没有 variable is not set 之类的警告。确认无误再启动:

```bash

docker compose up -d

docker compose ps

```

docker compose ps 里所有服务状态应该是 running 或 healthy。如果有服务反复重启,先跳到最后一节看报错排查。

第 4 步:确认试炼场活着

打开浏览器访问 http://<服务器IP>:8080,应该能看到试炼场控制台。如果是纯命令行环境,用健康检查接口验证:

```bash

curl -s http://localhost:8080/healthz

```

返回类似 {"status":"ok"} 的 JSON 就算通了。具体路径以官方文档为准,常见的是 /healthz 或 /api/health。

第 5 步:接入模型

进入控制台的模型/Provider 设置页,新增一个 OpenAI 兼容供应商,把 .env 里的 LLM_BASE_URL、LLM_API_KEY、LLM_MODEL 填进去,然后点"测试连接"。

也可以走 CLI:

```bash

docker compose exec arena agentgarten provider add \

--name default \

--base-url "$LLM_BASE_URL" \

--api-key "$LLM_API_KEY" \

--model "$LLM_MODEL"

docker compose exec arena agentgarten provider test --name default

```

测试成功的标志是会返回一段正常的模型回复,而不是超时或 401。

第 6 步:注册第一个智能体

在 agents/ 下新建一个 YAML,比如 agents/price-hunter.yaml:

```yaml

id: price-hunter

name: 比价小助手

provider: default

model:

temperature: 0.7

prompt:

system: |

你是一名电商比价助手。用户会给出一个商品名和一组候选报价,

你要在预算约束内选出性价比最高的选项,并用三句话说明理由。

如果没有任何选项满足预算,直接回答"无合适选项"。

memory:

type: window

size: 8

tools:

  • name: search_catalog

description: 按关键词检索商品目录,返回候选商品与价格

limits:

max_tokens_per_turn: 800

timeout_seconds: 30

```

注册并确认:

```bash

docker compose exec arena agentgarten agent apply -f agents/price-hunter.yaml

docker compose exec arena agentgarten agent list

```

agent list 里能看到 price-hunter 就成功了。

第 7 步:设计试炼任务与评分器

试炼任务的关键是评分规则要能被机器算出来,否则进化就没有方向。在 trials/ 下新建 trials/budget-pick.yaml:

```yaml

id: budget-pick

name: 预算内选品

rounds: 20

turns_per_round: 6

dataset:

path: data/products.csv

input_field: query

expected_field: best_option

scorers:

  • type: rule

name: 预算合规

weight: 0.3

  • type: exact_match

name: 选项正确

weight: 0.3

  • type: llm_judge

name: 理由质量

weight: 0.4

model: ${LLM_MODEL}

rubric: |

1 分:理由与选项一致,但空洞

3 分:理由提到价格与需求匹配

5 分:理由指出关键权衡,并说明为何排除其他候选

limits:

max_tokens_per_round: 20000

timeout_seconds: 120

```

三条经验:权重加起来是 1;规则类评分器(预算合规、精确匹配)负责给出稳定的下限,模型裁判负责评价"说得有没有道理",两者搭配比只用其中一种更靠谱;rubric 写具体一点,裁判的方差会明显变小。

第 8 步:先跑一轮,观察实时过程

```bash

docker compose exec arena agentgarten trial run \

--task trials/budget-pick.yaml \

--agent price-hunter \

--watch

```

--watch 会在终端实时刷新每一轮的输入、智能体输出、各项得分和累计分。同时打开控制台页面,可以看到同样的过程:每一轮走完就立刻出分。如果终端里迟迟不出内容,先看 docker compose logs -f worker,大概率是队列或模型连接的问题。

这一轮跑完,记下总分和失分最多的评分项。这个基线很重要——进化有没有效果,全靠跟它比。

第 9 步:开启进化

在 evolution/ 下新建 evolution/default.yaml:

```yaml

population: 8

generations: 5

selection:

strategy: top_k

k: 3

mutation:

targets:

  • prompt.system
  • model.temperature

rate: 0.3

temperature_range: [0.2, 1.0]

early_stop:

metric: mean_score

patience: 2

```

启动:

```bash

docker compose exec arena agentgarten evolve start \

--task budget-pick \

--config evolution/default.yaml \

--watch

```

运行逻辑是这样的:先并行跑 8 个变体(population),每个变体在试炼任务上拿分;然后取分数最高的 3 个(top_k)作为父代,对它们的系统提示词和温度做变异,生成下一代;重复 5 代。early_stop 表示连续两代平均分没进步就提前收工,省 token。

监控页面上会看到一条分数曲线,横轴是代数,纵轴是平均分和最高分。这条曲线不涨是常态,别慌——先去看失分分布,往往是指令冲突或评分器太严。

第 10 步:看结果与最优个体

```bash

docker compose exec arena agentgarten result list --task budget-pick

docker compose exec arena agentgarten result show --run <run-id>

docker compose exec arena agentgarten agent export --id <最佳变体ID> -o best-agent.yaml

```

result show 会给出每一代的平均分、最高分,以及各个评分项的细分。把最优变体导出成 YAML,就能直接进生产或做下一轮人工打磨。

验证部署是否成功

按顺序做三个检查,全过就算部署完成:

```bash

1. 容器与服务健康

docker compose ps

期望:所有服务 running / healthy,没有反复重启

2. 试炼场接口可用

curl -s http://localhost:8080/healthz

期望:返回 {"status":"ok"} 一类 JSON

3. 模型与智能体可用

docker compose exec arena agentgarten provider test --name default

docker compose exec arena agentgarten agent list

期望:测试返回正常回复;列表中能看到已注册的智能体

```

最后再跑一遍第 8 步的单轮试炼,终端里能看到逐轮输出和最终总分,说明整条链路(智能体 → 模型 → 评分器 → 落库)都通了。

常见报错与解决

1. Error response from daemon: ports are not available: bind: address already in use

原因:ARENA_PORT 或数据库端口被其他进程占用。

解决:换端口后重启。

```bash

ss -lntp | grep 8080 # 看是谁占着

修改 .env 中的 ARENA_PORT 后

docker compose down && docker compose up -d

```

2. 容器启动几秒后退出,日志显示 connection refused 或 could not connect to server

原因:试炼场服务比数据库先起来,或者 DATABASE_URL 里的主机名、密码写错了。

解决:确认 compose 里数据库服务有健康检查、主服务有 depends_on: condition: service_healthy;再核对 .env 中的用户名密码。

```bash

docker compose logs db | tail -n 50

docker compose logs arena | tail -n 50

修正 .env 后

docker compose down && docker compose up -d

```

3. 模型调用报 401 Unauthorized 或 model not found

原因:API Key 失效、LLM_BASE_URL 缺路径后缀、模型名和接口实际提供的名字不一致。

解决:先在宿主机用 curl 直接打一次接口,把问题定位在密钥还是配置。

```bash

curl -s "$LLM_BASE_URL/chat/completions" \

-H "Authorization: Bearer $LLM_API_KEY" \

-H "Content-Type: application/json" \

-d "{\"model\":\"$LLM_MODEL\",\"messages\":[{\"role\":\"user\",\"content\":\"hi\"}]}"

```

4. 试炼一直卡在 pending,控制台分数不动

原因:worker 没起来、队列连接失败,或单轮超时时间设得太短导致反复重试。

解决:先看 worker 日志,再确认 REDIS_URL 可达,最后把 timeout_seconds 调大。

```bash

docker compose ps worker

docker compose logs -f worker

必要时单独重启 worker

docker compose restart worker

```

5. 磁盘写满,服务开始报 No space left on device

原因:试炼记录和容器日志长期累积。

解决:清理旧运行记录,并给 Docker 配日志轮转。

```bash

df -h

docker system df

docker compose exec arena agentgarten result prune --older-than 30d

在 /etc/docker/daemon.json 配置 log-opts 的 max-size / max-file 后重启 Docker

```

后续维护

备份:三样东西要定期存——数据库(试炼记录、分数、进化谱系)、agents/ 与 trials/ 配置目录、导出的最优变体 YAML。

```bash

docker compose exec db pg_dump -U agentgarten agentgarten > backup-$(date +%F).sql

tar czf config-$(date +%F).tar.gz agents/ trials/ evolution/ .env

```

建议把这几条写进 crontab,每天跑一次,.env 记得单独加密存放。

升级:先看官方 CHANGELOG,确认配置字段有没有破坏性变更;再备份;然后在 docker-compose.yml 里把镜像 tag 固定成具体版本(别用 latest),执行 docker compose pull && docker compose up -d。升级后重跑一遍验证清单里的三个检查。

日志与监控:docker compose logs -f arena 和 worker 是最常用的两条。生产环境建议给 Docker 配置 max-size、max-file 做日志轮转,避免日志把盘吃满。关注这几个指标:每轮试炼的平均耗时、模型调用失败率、每代平均分的趋势、token 消耗。给 token 消耗设一个日预算告警,进化这类任务很容易在无人看管时把额度烧掉。

日常节奏建议:不要一上来就开大队列。先用 population: 4、generations: 3 小步试跑,确认评分器打分和人工判断方向一致,再放大规模。评分器不靠谱的时候,种群越大只是越快地把错误的答案放大而已。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。