基于LangGraph与MongoDB Atlas的智能场地推荐系统实战
这次我们来看一个结合 MongoDB Atlas、Voyage AI 和 LangGraph 的智能活动场地运营解决方案。这个项目不是简单的概念演示而是能够实际部署运行的业务智能体系统专门解决活动场地管理中的多维度决策问题。最值得关注的是这个智能体能够处理从客户咨询到场地推荐的完整流程通过 LangGraph 的工作流引擎协调多个 AI 组件利用 MongoDB Atlas 进行实时数据存储并通过 Voyage AI 的嵌入能力实现精准的语义匹配。对于需要构建企业级 AI 应用的开发者来说这个技术栈提供了完整的参考架构。本文将带读者完成从环境准备到功能验证的全流程重点演示如何搭建这个智能体系统、测试其核心业务逻辑以及在实际场景中的性能表现。无论你是想学习 LangGraph 的工作流设计还是需要构建类似的业务智能体这篇文章都能提供实用的技术路径。1. 核心能力速览能力项技术实现说明智能体类型活动场地运营决策智能体核心技术栈LangGraph工作流引擎、MongoDB Atlas数据存储、Voyage AI语义嵌入主要功能客户需求分析、场地数据库查询、多维度匹配推荐、决策流程管理数据处理实时语义搜索、结构化数据存储、向量化匹配部署方式本地 Python 环境部署支持 API 服务集成硬件要求常规开发环境即可运行无需特殊 GPU 配置适合场景活动策划平台、场地管理系统、智能客服集成2. 适用场景与使用边界这个智能体系统特别适合需要处理复杂决策流程的业务场景。比如活动策划公司需要根据客户预算、人数、日期、场地类型等多重条件来推荐合适的场地传统的关键词搜索往往无法理解客户的真实意图而这个系统能够通过语义理解实现更精准的匹配。典型使用场景包括活动场地预订平台的智能推荐引擎企业活动策划部门的内部决策支持系统酒店、会议中心等场地运营商的客户服务自动化使用边界需要特别注意系统依赖准确的场地数据质量垃圾数据会导致推荐结果失真涉及真实交易决策时需要人工审核环节作为安全保障商业部署前必须进行充分测试避免因算法偏差导致业务损失3. 环境准备与前置条件在开始构建之前需要确保开发环境满足以下要求操作系统要求Windows 10/11、macOS 10.15 或 Ubuntu 18.04 均可建议使用 Linux 或 macOS 以获得更稳定的 Python 环境Python 环境# 推荐使用 Python 3.9-3.11 版本 python --version # 应显示 Python 3.9.x 或更高版本 # 创建独立的虚拟环境 python -m venv venue_agent_env source venue_agent_env/bin/activate # Linux/macOS # 或 venue_agent_env\Scripts\activate # Windows第三方服务账户准备MongoDB Atlas 账户需要注册并创建免费集群Voyage AI API 密钥申请开发者账户获取访问权限OpenAI API 密钥或其他 LLM 服务密钥用于 LangGraph 的对话能力4. 依赖安装与项目初始化首先安装核心依赖包这些是构建智能体系统的基础# 安装 LangGraph 和相关AI组件 pip install langgraph langchain langchain-community # 安装 MongoDB 驱动程序 pip install pymongo motor # 安装 Voyage AI 嵌入库 pip install voyageai # 安装环境管理依赖 pip install python-dotenv创建项目目录结构venue_agent_project/ ├── .env # 环境变量配置文件 ├── requirements.txt # 依赖列表 ├── src/ │ ├── __init__.py │ ├── agent.py # 智能体主逻辑 │ ├── database.py # MongoDB 操作封装 │ ├── embeddings.py # Voyage AI 嵌入服务 │ └── config.py # 配置管理 ├── tests/ # 测试文件 └── data/ # 示例数据环境配置文件 (.env) 示例# MongoDB Atlas 连接配置 MONGODB_ATLAS_URImongodbsrv://username:passwordcluster.mongodb.net/venue_db MONGODB_DATABASEvenue_db # Voyage AI API 配置 VOYAGEAI_API_KEYyour_voyageai_api_key_here # LLM 服务配置如 OpenAI OPENAI_API_KEYyour_openai_api_key_here5. 数据库设计与初始化智能体的核心是场地数据需要在 MongoDB Atlas 中设计合适的集合结构场地信息集合 (venues) 文档结构{ _id: ObjectId(...), name: 国际会议中心A厅, capacity: 500, price_range: {min: 10000, max: 50000}, location: 北京市朝阳区, amenities: [投影设备, 音响系统, 茶歇区], availability: [ {date: 2024-03-15, available: true}, {date: 2024-03-16, available: false} ], embedding: [0.123, 0.456, ...] // Voyage AI 生成的向量 }数据库初始化脚本示例# src/database.py import os from pymongo import MongoClient from dotenv import load_dotenv load_dotenv() class VenueDatabase: def __init__(self): self.client MongoClient(os.getenv(MONGODB_ATLAS_URI)) self.db self.client[os.getenv(MONGODB_DATABASE)] self.venues self.db.venues def initialize_sample_data(self): 初始化示例场地数据 sample_venues [ { name: 科技园会议厅, capacity: 200, price_range: {min: 5000, max: 20000}, location: 海淀区中关村, amenities: [WiFi, 投影仪, 白板], type: 会议厅 }, # 更多示例数据... ] if self.venues.count_documents({}) 0: self.venues.insert_many(sample_venues) print(示例数据初始化完成)6. LangGraph 智能体工作流设计LangGraph 的核心价值在于能够定义复杂的多步骤工作流。以下是场地推荐智能体的状态图设计# src/agent.py from typing import Dict, Any, List from langgraph.graph import StateGraph, END from langchain_core.messages import HumanMessage, AIMessage class VenueAgentState: 智能体状态定义 def __init__(self): self.messages: List [] self.user_requirements: Dict[str, Any] {} self.candidate_venues: List[Dict] [] self.final_recommendation: Dict[str, Any] {} def create_venue_agent_workflow(): 创建场地推荐工作流 workflow StateGraph(VenueAgentState) # 定义工作流节点 workflow.add_node(analyze_requirements, analyze_user_requirements) workflow.add_node(search_venues, search_appropriate_venues) workflow.add_node(evaluate_options, evaluate_venue_options) workflow.add_node(generate_recommendation, generate_final_recommendation) # 定义边工作流路径 workflow.set_entry_point(analyze_requirements) workflow.add_edge(analyze_requirements, search_venues) workflow.add_edge(search_venues, evaluate_options) workflow.add_edge(evaluate_options, generate_recommendation) workflow.add_edge(generate_recommendation, END) return workflow.compile() def analyze_user_requirements(state: VenueAgentState): 分析用户需求节点 # 从对话消息中提取关键信息 last_message state.messages[-1] if state.messages else # 使用LLM解析用户需求 requirements { event_type: 会议, # 解析出的活动类型 participants: 150, # 解析出的参与人数 budget_range: [8000, 25000], # 预算范围 date_preference: 2024-03-20, location_preference: 海淀区 } state.user_requirements requirements return state7. Voyage AI 语义嵌入集成Voyage AI 负责将文本需求转换为向量实现语义级别的场地匹配# src/embeddings.py import voyageai from dotenv import load_dotenv import os load_dotenv() class VoyageEmbedder: def __init__(self): self.client voyageai.Client(api_keyos.getenv(VOYAGEAI_API_KEY)) def get_embedding(self, text: str) - List[float]: 获取文本的向量表示 result self.client.embed([text], modelvoyage-2) return result.embeddings[0] def semantic_search(self, query: str, venues: List[Dict], top_k: int 5): 基于语义的场地搜索 query_embedding self.get_embedding(query) # 计算余弦相似度 scored_venues [] for venue in venues: venue_embedding venue.get(embedding, []) if venue_embedding: similarity self.cosine_similarity(query_embedding, venue_embedding) scored_venues.append((venue, similarity)) # 按相似度排序并返回前k个结果 scored_venues.sort(keylambda x: x[1], reverseTrue) return [venue for venue, score in scored_venues[:top_k]] staticmethod def cosine_similarity(vec1: List[float], vec2: List[float]) - float: 计算余弦相似度 import numpy as np dot_product np.dot(vec1, vec2) norm1 np.linalg.norm(vec1) norm2 np.linalg.norm(vec2) return dot_product / (norm1 * norm2) if norm1 * norm2 ! 0 else 08. 完整系统集成测试现在将各个组件集成测试完整的智能体工作流# tests/test_full_workflow.py import asyncio from src.agent import create_venue_agent_workflow from src.database import VenueDatabase from src.embeddings import VoyageEmbedder async def test_venue_recommendation(): 测试完整的场地推荐流程 # 初始化各组件 db VenueDatabase() embedder VoyageEmbedder() agent create_venue_agent_workflow() # 模拟用户查询 user_query 我需要找一个能容纳200人的会议场地预算2万左右最好在海淀区下周三使用 # 初始化智能体状态 initial_state { messages: [{role: user, content: user_query}], user_requirements: {}, candidate_venues: [], final_recommendation: {} } # 执行工作流 result await agent.ainvoke(initial_state) print(推荐结果:, result[final_recommendation]) return result if __name__ __main__: asyncio.run(test_venue_recommendation())9. API 服务封装与部署为了实际使用需要将智能体封装为 REST API 服务# app.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel import uvicorn from src.agent import create_venue_agent_workflow app FastAPI(title智能场地推荐API) class RecommendationRequest(BaseModel): query: str user_id: str None class RecommendationResponse(BaseModel): recommendation: dict status: str processing_time: float app.post(/recommend, response_modelRecommendationResponse) async def get_venue_recommendation(request: RecommendationRequest): 场地推荐接口 import time start_time time.time() try: agent create_venue_agent_workflow() initial_state { messages: [{role: user, content: request.query}], user_requirements: {}, candidate_venues: [], final_recommendation: {} } result await agent.ainvoke(initial_state) processing_time time.time() - start_time return RecommendationResponse( recommendationresult[final_recommendation], statussuccess, processing_timeprocessing_time ) except Exception as e: raise HTTPException(status_code500, detailstr(e)) if __name__ __main__: uvicorn.run(app, host0.0.0.0, port8000)启动服务后可以使用 curl 进行测试curl -X POST http://localhost:8000/recommend \ -H Content-Type: application/json \ -d {query: 200人会议场地预算2万海淀区}10. 性能优化与监控在实际部署中需要关注系统性能指标关键性能指标API 响应时间目标 3秒MongoDB 查询延迟目标 100msVoyage AI 嵌入生成时间目标 500ms并发处理能力根据业务需求设定优化策略# 添加缓存层减少重复计算 from functools import lru_cache lru_cache(maxsize1000) def get_cached_embedding(text: str) - List[float]: 带缓存的嵌入获取 return embedder.get_embedding(text) # 数据库查询优化添加索引 db.venues.create_index([(location, text)]) db.venues.create_index([(capacity, 1)]) db.venues.create_index([(embedding, vector)]) # 如果使用 Atlas Vector Search11. 常见问题与排查方法问题现象可能原因排查方式解决方案MongoDB 连接失败网络问题或凭证错误检查 Atlas 白名单设置添加当前IP到白名单验证连接字符串Voyage AI API 错误API密钥无效或配额不足测试API密钥有效性检查密钥配置确认账户余额LangGraph 工作流卡住状态转换逻辑错误检查各节点日志输出验证状态转移条件添加超时机制推荐结果不准确数据质量或嵌入模型问题检查场地数据完整性优化数据清洗流程调整嵌入参数API 响应缓慢网络延迟或资源瓶颈监控各组件响应时间添加缓存优化数据库查询12. 生产环境最佳实践安全配置使用环境变量管理敏感信息避免硬编码为 MongoDB Atlas 设置最小权限原则API 服务添加速率限制和认证机制数据管理定期备份场地数据到冷存储建立数据质量监控告警实现场地信息的版本管理监控运维添加 Prometheus 指标收集设置关键业务指标告警实现日志集中管理和分析扩展性考虑设计支持多租户的数据隔离方案预留插件机制支持新的推荐算法考虑横向扩展的架构设计这个基于 MongoDB Atlas、Voyage AI 和 LangGraph 的智能体系统展示了现代AI技术在业务场景中的实际应用价值。通过合理的工作流设计和组件集成可以构建出既智能又可靠的业务决策支持系统。建议在实际部署时先从核心功能开始验证确保基础流程稳定后再逐步添加高级特性。这种模块化的架构设计也便于后续的功能扩展和性能优化。