一句话:我没写一行扑克代码,但我的 Agent 打到了全站第一
Agentexas↗ 是字节同学做的一个 AI 扑克竞技场小网站,不局限于内网,公网也可以直接访问。你提交一段 JavaScript,它会在服务端和其他人的策略单挑无限注德州。榜上所有玩家都在用 AI Agent 写策略、跑模拟、冲排名,使用的模型五花八门。
我用的 Agent,同学也能用。但最终榜单上,「还能有 aime 聪明?」站在了第一。

Agentexas 榜单截图:「还能有 aime 聪明?」登上全站第一。
这篇文章不是讲德州扑克策略的,而是讲:我在对话里做了什么,让 Agent 具备了别人没有的能力。
背景:这个游戏难在哪
Agentexas 的规则很简单:你的 JavaScript 函数 onTurn(me, enemy, game) 在每个决策点被调用,返回 fold、check、call、bet、raise 或 allIn。但让 Agent 真正玩好它,难度远超「写个策略」。
- 环境未知:你不知道对手的代码,只能从对局结果反推。
- 目标动态:排名采用 Elo 与天梯分混合机制,重复打同一人收益会衰减,对手也在不停迭代。
- 结果随机:扑克有巨大方差,短期胜率 60% 仍然可能连输 10 把。
大多数人的做法是:让 Agent 写一个策略,发布,打几场,发现不行,再写一个。这本质上只是把 Agent 当作代码生成器。
我做的事情完全不同。
第一件事:给 Agent 一个身份
第一条消息的原文:「你要扮演历史上赌王的思路,选定一个人,这个人的要求是他的策略我们足够清晰且他足够厉害。」
Agent 选择了 Doyle Brunson——《Super System》的作者,也是 20 世纪 70 年代统治单挑赛的人。关键不是名字本身,而是这个选择锚定了后续所有决策的哲学:进攻优先于防守、最大化位置优势、分类对待不同对手、强牌重注,以及用听牌半诈唬。
这不是普通的 Prompt 技巧。这是给 Agent 一个决策框架,让它在后续几百个微决策中都有一致的判断标准。
这其实是一次 Cosplay,也是最划算的 Harness
我没写任何一条扑克规则,只写了一句「扮演赌王的思路」。但 Agent 后续几百个决策,全都带着 Doyle Brunson 的影子。这句话真正的作用,是一次极高性价比的 Harness(行为约束框架) 构建。
一句「扮演 Doyle Brunson」,在模型里解压出了一整套自洽的策略体系:开牌范围、位置哲学、攻击节奏、对手分类、诈唬频率……这些我一个字都没写,模型却全调了出来。
传统 Harness 往往试图把规则写死:用几百行 System Prompt,逐条定义「遇到 X 该怎么办」。结果通常是写不全、容易自相矛盾、越写越长,还会在长对话里被稀释。
Cosplay Harness 则是调用人格:用一句约 30 字的话锚定一个真实高手,批量唤起海量隐性规则,而且天然自洽,因为它们本来就来自同一个人的真实实践。
所以,那句 Prompt 里的两个限定词——「策略足够清晰」和「足够厉害」——并不是随口一说,而是精确的检索键:
- 足够厉害:保证解压出的策略经过真实赛场检验。幸存者偏差在这里反而是好事——他能统治赛场,说明这套打法确实赢过钱。
- 策略足够清晰:保证模型对这个人的知识密度高、噪声低,人格不会在长对话里漂移成「平均化的 GTO 玩家」。
Harness 的本质,是回答「在我没给明确指令的地方,Agent 该怎么办」。给它一个人格,等于给它一个稳定的先验:在所有未被覆盖的长尾情境里,它都能自问一句「Doyle 会怎么打」。这是任何显式规则清单都覆盖不到的部分,而我只花了一句话。
第二件事:持续升级目标,而不是一次性下达
大多数人的做法是:「帮我写个扑克 AI 策略,要赢。」这是一个模糊目标,也是一次性交付。Agent 写完代码,任务就结束了。
我的做法是逐步升级目标:先进入前 20,再进入前 10,然后冲到第一,掉下去后再重回第一。每一次目标升级,都伴随着当前状态确认与策略重新评估。
这不是因为我一开始不知道要拿第一,而是因为不同排名段需要完全不同的策略:前 20 靠通用强策略刷分;前 10 开始要针对性 Exploit;越往上越要精确反推榜首范围、轮换目标并动态止损。
如果第一条消息就说「帮我拿第一」,Agent 只能写一个通用策略,然后看着它卡在第 15 名。
登顶时刻:突破最后 200 分
最后冲刺阶段,我们没有依赖单一万能策略,而是针对目标对手持续切换策略组合。
| 目标对手 | 使用策略 | 结构 | 战绩 | 效果 |
|---|---|---|---|---|
| 403-error(v17) | BTN shove + BB tier2 | Turbo | 34 胜 16 负 | 2026 → 2334,反超至第 3 |
| 403-error(v19) | 同上持续输出 | Turbo | 95 胜 55 负 | 2334 → 3152,稳居第 3 |
| 神之一手(v20) | BTN 全压 + BB 仅 TT+/AQ+ | Turbo | 累计 145 胜 102 负 | 3357 → 4644,登顶第 1 |
登顶的关键 Exploit 是什么?Agent 分析 480 场真实回放后发现:「神之一手」面对按钮全压时的弃牌率达到 95.4%。这意味着每次坐按钮位全压,期望收益为正。即使偶尔被抓住也无所谓,长期 EV 仍然为正。
但在 BB 位必须极度收紧到仅 TT+/AQ+,因为对手面对 BB 反推时只弃牌 48%,跟注范围宽到任意 Ax、Kx。
这个策略的发现不是灵光一闪,而是系统性回放分析 → 范围反推 → 候选策略搜索 → 多轮沙盘验证的结果。
为什么「同样用 Agent」结果不同
给 Agent 身份和哲学
不是让它「写代码」,而是让它成为某个领域的专家,带着一致的判断框架工作。
渐进式目标管理
每个阶段都有明确的当前目标和成功标准,而不是一句「帮我搞定」。
让 Agent 建系统,而不是写文件
交付物不是一个代码文件,而是一套完整的竞争系统,其中包含基础设施、分析工具和迭代闭环。
还有一层很少被讨论的能力:知道什么时候该由人来决策。Agent 可以跑 500 场模拟、反推对手范围、生成 8 个候选策略。但「现在该止损了」「这个号不要了,换一个」「重复打它已经没有意义」——这些判断仍然属于人类协作者。
最好的 Agent 使用方式,不是「交给它然后等结果」,也不是「每一步都微操」,而是:
把 Agent 当作一个能力极强但需要方向感的队友。你负责战略判断和关键决策,它负责执行、搜索、验证和迭代。
数据:最终战绩
| 指标 | 我的成绩 | 第二名 | 说明 |
|---|---|---|---|
| 天梯分 | 4644 | 4633 | 领先 11 分 |
| 胜率 | 61.9% | 54.5% | 全场最高 |
| 总场次 | 2283 场 | 2094 场 | 量也是优势 |
| 迭代版本 | v22 | v20 | 持续进化 |
从 0 到 4644 分,从第 50 名开外到全站第 1,这个过程不是某一个 Prompt 的功劳,而是一种持续对话、渐进升级、系统性运营的协作模式所带来的结果。
Agent 的能力边界不只取决于模型本身,也取决于使用者如何释放它。
