基于FastAPI和大模型实现无限拦截警察游戏:对抗性NPC开发实战
2026/9/21 20:28:53 网站建设 项目流程

最近不少开发者群里都在讨论 “The Infinite Policeman – A Crookery” 这类对话型恶搞游戏:你明明只是开车去看奶奶,却被一个彬彬有礼又极其较真的警察反复拦下,从车尾灯颜色问到汤盒提手方向,只要回答稍有矛盾,嫌疑值立刻上涨。很多人以为这种效果靠的是写好的分支剧情,实际上它更像一个“大模型实时生成 NPC 反应”的案例:警察的每次追问、每轮态度变化,都不是提前写在剧情表里的,而是由角色提示词在运行时动态生成的。

本文不讨论原作品的具体作者、版权或素材来源,只从技术拆解和复刻的角度,讲解如何用 FastAPI + 一个兼容 OpenAI 协议的大模型接口,自己实现一款名为 “The Infinite Policeman – A Crookery” 风格的“无限拦截”对话小游戏。即使你还没有申请任何大模型 API,我也会提供一个可运行的本地 Mock 模式,让代码在没有任何外部依赖的情况下也能玩起来。

读完这篇文章,你可以掌握:怎样设计玩家的核心循环和失败条件、怎样让大模型输出结构化的 JSON 控制游戏状态、怎样用 FastAPI 管理多轮对话会话、怎样用原生 HTML/JS 做一个简单的聊天界面,以及这类“对抗性 NPC”游戏在实际工程化时要注意的坑。

1. 项目背景:一个“永远在拦你”的警察游戏

1.1 玩法体验拆解

“The Infinite Policeman” 这个名字里有两个关键词:Infinite 和 Policeman。

Infinite,指的并不是游戏地图真的无限大,而是玩家面对的追问是近乎无限的。当你解释完一个问题,警官不会说“好的我相信你”,而是从你的解释里又找到一个新疑点,继续往下问。比如你说汤盒是保温的,他会继续问保温盒是什么材质;你说盒子上没有字,他又会问你为什么没有出厂标签。这个连续追问的过程,天然适合交给大模型来完成,因为手写 if-else 分支根本不可能覆盖玩家输入的无数种解释。

Policeman,在这里可以理解成一个“高对抗性的 NPC”。在普通剧情游戏里,NPC 的目标是配合玩家推进故事;在这类游戏里,NPC 的目标是让玩家失败,但表面上又必须保持礼貌、克制、讲逻辑。这种“外表温和、内心怀疑”的反差,就是游戏喜剧效果的来源。

副标题里的 Crookery 在英文里有“欺诈、骗局、耍花招”的含义。玩家如果想顺利过关,就必须编造一个足够自洽的借口,在警察连续质疑下不露馅。所以这本质上是一场“玩家编故事”和“警察拆故事”的攻防对话。

1.2 为什么值得用技术手段复刻

从技术角度看,这个项目非常有代表性,因为它同时涉及了好几个在真实 AI 应用中经常遇到的问题:

  • 角色扮演提示词如何稳定控制大模型的说话风格;
  • 如何用 JSON 格式约束大模型输出,让游戏后端能够读取状态;
  • 如何管理多轮对话历史,避免上下文越来越长导致 token 超限;
  • 如何设计一个有限的状态机,把“无限追问”收敛成可以正常结束的游戏关卡。

这些知识点并不只属于“做小游戏”,在很多客服机器人、剧本杀生成器、虚拟角色陪伴产品里都会用到。所以这篇文章虽然以一个恶搞游戏为切入点,背后的工程方法完全可以用到更正经的场景里。

1.3 本文边界与读者对象

需要提前说明的是:游戏中的警察、规定、罚单全部是架空虚构设定,目的是营造幽默和荒诞感,与现实中的任何法律、执法程序无关。代码中的系统提示词也会反复强调这一点,避免模型生成与现实执法相关的敏感内容。

本文适合以下读者:

  • 会一点 Python,想体验大模型应用开发但没做过完整项目;
  • 熟悉 Python,但对提示词工程、结构化输出、对话会话管理感兴趣;
  • 想给自己的游戏或互动产品加入一个“会怀疑人”的动态 NPC;
  • 需要一个能离线运行的示例,先把代码跑通再接入大模型 API。

2. 环境准备与技术选型

2.1 运行环境

本文示例使用 Python 开发,建议使用 Python 3.10 及以上版本。不同系统安装方式有差异,本文不对具体小版本做绑定,重点演示整体配置思路。

推荐环境如下:

  • 操作系统:Windows 10/11、macOS 或 Linux 均可;
  • Python 3.10+;
  • 包管理工具:pip;
  • 虚拟环境:venv;
  • 开发工具:VS Code 或 PyCharm;
  • 浏览器:Chrome / Edge 等现代浏览器。

在项目目录下创建虚拟环境并激活:

cd infinite-policeman python -m venv .venv

Windows 下激活虚拟环境:

.venv\Scripts\activate

macOS 或 Linux 下激活虚拟环境:

source .venv/bin/activate

2.2 依赖与模型服务

安装依赖前,先准备 requirements.txt:

fastapi uvicorn[standard] requests python-dotenv

然后执行:

pip install -r requirements.txt

后端选择 FastAPI,原因是

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询