mongodb-developer/event-venue-operator
GitHub: mongodb-developer/event-venue-operator
基于 MongoDB Atlas 和 LangGraph 构建的活动场馆运营 Agent 演示,展示三层记忆架构、混合向量检索和角色细分决策等 Agentic 模式。
Stars: 33 | Forks: 11
# 活动场馆运营 Agent
基于 MongoDB Atlas 构建的 Agentic 活动场馆运营 Agent 演示。展示了三层记忆架构(长期、短期、共享)、结合 Voyage AI 多模态 embeddings 的混合检索、可选的 Langfuse 追踪,以及在顶级网球锦标赛因雨延迟场景下基于角色细分的 Agent 决策。
**在线演示:** [event-venue-operator.vercel.app](https://event-venue-operator.vercel.app/)
## 这是什么
这是一个为探索者在 MongoDB 上实践 Agentic 模式而提供的演示种子。展示了如何建模 Agent 记忆、从过往活动中检索模式,并按角色类型细分操作——所有这些都由单个 Atlas 集群提供支持。
场景叙述:一个 AI 运营 Agent 正在第 6 天监控一场网球锦标赛。即将下大雨。Agent 读取实时的场馆状态,通过向量搜索从过往活动中检索模式,规划特定于角色的操作(引导初次来访的游客前往空闲球场;为高级访客预订带顶棚的餐饮区),并将结果写回长期记忆。
可见的 UI 在设计上是确定性的,以保证演示的可靠性。后端的验证点是真实的:Atlas 设置、种子记忆、Voyage embeddings、混合搜索、Atlas Vector Search、视觉文档 RAG、可选的 Langfuse 可观测性,以及可运行的 LangGraph Agent 路径。
## 这不是什么
这不是一个生产级的 Agentic 平台。这里仅对模式进行了演示;生产环境的加固(CI、生产级可观测性、错误恢复、实时操作员审批)有意不在本教程的范围内。
## 三种交互方式
### 1. 舞台演示(确定性 UI)
```
uv run python -m event_venue_operator.server
```
打开 http://127.0.0.1:8000。依次体验三个选项卡的叙述,然后使用第四个选项卡进行实时后端验证:
- **Tab 1 — 场馆运营**(下午 2:15):带有球场、款待服务和 KPI 的实时仪表板。天气指示器显示 90 分钟后将有降雨。
- **Tab 2 — 场景(下雨)**:逐步的 Agent 演练。五个步骤:READ 短期记忆、READ 长期记忆(向量搜索)、PLAN、ACT(Agent 项目出现在访客视图中)、WRITE(记忆更新)。在 Mikiko(初次来访者,蓝色)和 Nina(高级访客,紫色)之间切换。
- **Tab 3 — 最终结果**(晚上 10:00):每日总结。收入、留存率、声誉提升。为未来活动写入的记忆模式。
- **Tab 4 — 实时后端**:对 Atlas 运行实时检索调用,并在配置后发出可选的 Langfuse 追踪。
UI 的数值是硬编码的,以确保舞台演示效果可预测。请使用下方的 API 端点和脚本来测试实时后端。
### 2. 实时 Agent(真实 LangGraph 执行)
```
uv run python scripts/run_poc.py
```
端到端运行完整的 LangGraph 链:
1. **perceive** — 从 Atlas 读取(通过向量搜索获取访客记忆 + 整体模式)
2. **plan** — 调用 Claude Sonnet 4.6 生成行程安排
3. **hitl_gate** — 保留审批插入点并在 V1 中自动批准
4. **act** — 执行工具(update_itinerary, book_reservation)
5. **reflect** — 将新的推断写回记忆库
Agent 的决策是非确定性的,取决于检索到的记忆,但种子场景现在遵循与舞台 UI 相同的 Mikiko/Nina 网球因雨延迟的故事情节。
配置 Langfuse 密钥后,此脚本会发出运行级别的 `langgraph.run_agent` 观察,以便可以在 UI 之外验证实时 Agent 路径。
### 3. API 探索
FastAPI 服务器暴露了用于直接与记忆库交互的端点:
- `GET /api/search?q=...&namespace=guests` — 对记忆进行 Atlas Vector Search
- `GET /api/hybrid-search?q=...&namespace=guests` — 对记忆进行向量+词法混合检索
- `POST /api/unified-search` — 跨 namespace 搜索并结合用户画像事实
- `POST /api/vision-rag/query` — 向量搜索 + Claude Vision 读取操作文档
- `GET /api/debug/embed?text=...` — 直接查看 Voyage embeddings
- `GET /api/observability/status` — 确认是否配置了 Langfuse 追踪
## 设置
### 前提条件
- Python 3.12+
- 启用了 Atlas Vector Search 的 MongoDB Atlas 集群
- Anthropic API key
- Voyage AI API key
### 安装
```
git clone https://github.com/mikikob-mongodb/event-venue-operator.git
cd event-venue-operator
uv sync
```
### 配置
```
cp .env.example .env
# 编辑 .env: MONGODB_URI, ANTHROPIC_API_KEY, VOYAGE_API_KEY
# 可选: LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, LANGFUSE_HOST
```
### 初始化 Atlas
```
uv run python scripts/setup_atlas.py
# 等待约 60 秒以构建 vector index
```
### 种子数据
```
uv run python scripts/seed_data.py
uv run python scripts/seed_visual_docs.py
```
### 运行
```
# Stage 演示
uv run python -m event_venue_operator.server
# Live agent
uv run python scripts/run_poc.py
```
### 验证
在一个终端中运行服务器的情况下,执行:
```
uv run python scripts/smoke_test.py
```
冒烟测试会检查 MongoDB 健康状况、Atlas Vector Search、混合搜索、视觉文档索引、Vision RAG、Langfuse 连接以及集合统计信息。
## 架构
- **前端**:位于 `static/index.html` 的原生 HTML/JS(三个选项卡的故事流加上实时后端验证选项卡)
- **后端**:位于 `src/event_venue_operator/server.py` 的 FastAPI
- **Agent**:位于 `src/event_venue_operator/graph.py` 的 LangGraph 链 (perceive -> plan -> hitl_gate -> act -> reflect)
- **数据**:MongoDB Atlas (memory_store, guests, visits, venue_status, weather_events, venues, reservations, agent_actions)
- **Embeddings**:Voyage AI `voyage-multimodal-3.5`(1024d,跨模态文本+图像)
- **LLM**:Claude Sonnet 4.6(plan 节点),Claude Sonnet 4.5(vision RAG)
- **可观测性**:当配置了 `LANGFUSE_PUBLIC_KEY` 和 `LANGFUSE_SECRET_KEY` 时,针对检索端点和实时 LangGraph 运行的可选 Langfuse 追踪
## 记忆层
| 层级 | 存储 | 检索方式 |
|---|---|---|
| 长期记忆 | 带有 Voyage embeddings 的 `memory_store` 集合 | Atlas Vector Search 和混合检索 |
| 短期记忆 | `venue_status`, `weather_events` 集合 | 直接文档查找 |
| 共享记忆 | `agent_actions` 集合 | Agent 与子 Agent 的协调日志 |
## 用户画像
- **Mikiko 初次来访者**(蓝色,`#60a5fa`)— 首次到访,关注比赛,正在探索场地
- **Nina 高级访客**(紫色,`#a78bfa`)— 拥有高级访问权限,有接待服务记录,偏好带顶棚的座位
## 仓库结构
```
event-venue-operator/
├── src/event_venue_operator/ # Package: server, agent, db, config, seed
├── scripts/ # Setup, seeding, POC runner, visual doc generation
├── static/ # Stage demo HTML + visual documents
└── docs/ # Architecture notes and feature inventory
```
## 范围边界
- 舞台 UI 在设计上是引导式/静态的;API 端点和脚本用于测试实时后端的验证点。
- Change stream 监听器作为扩展路径存在,但 V1 教程并未将它们接入 UI。
- `hitl_gate` 作为生产审批的占位符包含在图结构中,但 V1 会自动批准操作。
- CI、评估测试框架、生产环境错误处理和部署加固不在此教程仓库的范围内。
## 延伸阅读
- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) — 设计决策
- [docs/LANGGRAPH.md](docs/LANGGRAPH.md) — 实时 Agent 演练
- [docs/OBSERVABILITY.md](docs/OBSERVABILITY.md) — 可选的 Langfuse 设置和验证
- [docs/VERCEL.md](docs/VERCEL.md) — 托管预览部署计划
- [docs/features.md](docs/features.md) — 当前功能清单
## 许可证
MIT 许可证。详情请参阅 LICENSE 文件。
标签:AI智能体, LangChain, MongoDB, 向量搜索, 检索增强生成, 活动运营管理, 轻量级, 逆向工具