shinic1/fieldops-copilot
GitHub: shinic1/fieldops-copilot
一个将现场通讯转化为结构化事件并协调响应调度的 AI 辅助指挥中心原型,强调模型提取与确定性策略分离的安全边界。
Stars: 0 | Forks: 0
# FieldOps Copilot
一个交互式指挥中心原型,用于将现场通讯转化为
结构化、有证据支持的事件,并协调响应。
**在线演示:** [fieldops-copilot-nico.pages.dev](https://fieldops-copilot-nico.pages.dev)

这是一项基于公开信息构建的独立产品实践。它
不是官方的 Calvis 产品,也不隶属于
或受 Calvis 认可。所有人员、事件、地点和运营数据均为虚构。
## 两分钟体验
1. 选择 **Unauthorized vehicle** 并运行 copilot。
2. 检查结构化字段及其来源证据。
3. 打开 Camera 04,核实事件,并派遣距离最近的警官。
4. 观察在警官移动时,规划路线如何避开仓库。
5. 重置,然后输入 `Need all officers in the north perimeter.`
6. 尝试 `Officer Chen needs immediate support.`,查看 Chen 如何被排除在
响应名单之外。
支持在任意位置使用文本输入。语音捕获是可选的浏览器功能。
## 原型展示内容
- 从打字或语音报告中进行英语和西班牙语的事件提取
- 严格将证据追溯到原始通讯
- 模型之外的确定性严重性和响应策略
- 针对中等、高和关键严重性事件的自动人员调配
- 全员请求和请求者排除
- 基于每条步行路线选择最近的警官——而非名单顺序
- 基于路线的 ETA 和动画时间
- 具有障碍物感知的路径,与移动标记共享相同的几何结构
- 六个特定位置的模拟摄像头视图
- 离线排队和同步
- 实时 OpenAI 提取,具备确定性回退机制
- 用于提取和策略行为的内置产品评估套件
## 产品和安全边界
模型仅提取明确陈述的事实。它不能设定严重性、选择
警官或决定运营策略。在标准化值被接受之前,证据引用必须是
通讯记录的精确子字符串。
```
Typed or spoken report
│
▼
Structured fact extraction ── unavailable ──▶ deterministic fallback
│
▼
Evidence validation
│
▼
Deterministic severity + staffing policy
│
▼
Walkable-route ranking + response animation
```
公开演示没有事件数据库。排队的离线报告仅
存储在审核者的浏览器中,并在同步或重置后删除。
OpenAI 请求使用 `store: false`。
## 架构
- 运行在 vinext 上的兼容 Next.js 的 App Router
- React 19 和严格的 TypeScript
- Cloudflare Workers 运行时和 Cloudflare Pages 公共域名
- 带有严格 Structured Outputs 的 OpenAI Responses API
- 功能同域的领域、数据、服务器、组件和测试模块
- 用于增强弹性及公开评估用例的本地确定性引擎
```
app/
api/analyze/route.ts # guarded server endpoint
layout.tsx
page.tsx
src/features/field-ops/
components/ # interactive operations console
data/ # synthetic site configuration
domain/ # extraction, policy, and routing rules
server/ # OpenAI boundary
cloudflare-pages/ # public-hostname reverse proxy
```
视觉系统和界面设计理由记录在
[`DESIGN.md`](./DESIGN.md) 中。安全性和数据处理说明位于
[`SECURITY.md`](./SECURITY.md)。
## 本地开发
要求:Node.js 22 或更高版本以及 npm。
```
npm install
cp .env.example .env.local
npm run dev
```
本地环境下 `OPENAI_API_KEY` 是可选的。如果没有它,确定性引擎也能
保持完整的交互可用。
运行完整的验证套件:
```
npm run validate
```
或者分别运行检查:
```
npm run lint
npm run typecheck
npm test
npm run build
npx knip
```
## Cloudflare 部署
将 API 密钥存储为加密的 Worker 密钥,然后部署应用程序:
```
npx wrangler secret put OPENAI_API_KEY
npm run deploy
```
Pages 域名通过 `cloudflare-pages/_worker.js` 转发到 Worker。
将其 `UPSTREAM_ORIGIN` 配置为 Pages 密钥并部署该目录:
```
npx wrangler pages secret put UPSTREAM_ORIGIN \
--project-name fieldops-copilot-nico
npx wrangler pages deploy cloudflare-pages \
--project-name fieldops-copilot-nico \
--branch main
```
没有任何密钥以 `NEXT_PUBLIC_` 为前缀、嵌入到浏览器包中,或
被提交到代码仓库。
标签:人工智能, 信息提取, 原型设计, 库, 应急响应, 指挥调度, 用户模式Hook绕过, 程序员工具, 自动化攻击, 路径规划