项目报告:人工智能驱动的实习童子军和欧洲城市生活质量MCP服务器
1.执行摘要
该项目通过将实时工作可用性与官方生活质量(QoL)指标进行交叉引用,自动搜索国际实习机会。通过弥合就业机会和生活水平之间的差距,该系统允许用户在城市中找到符合其个人价值观的角色。
2.系统架构
该系统采用通过Docker管理的容器化架构,确保Model MCP服务器和n8n自动化引擎的环境一致。
- MCP 服务器:使用构建的自定义Python应用程序
FastAPI(通过暴露FastMCP)这是作为 - n8n:协调逻辑流程、LLM提示和最终交付。
- 外部API:
- 欧盟统计局:欧洲城市级指标官方统计数据(https://ec.europa.eu/eurostat/web/cities/database). - 美味API:一个人工智能优化的搜索引擎,用于抓取实时实习列表。 - 简单地图:为城市数据提供地理骨干(纬度/经度和人口)(https://simplemaps.com/data/world-cities).
3.MCP服务器逻辑和数据管理
3.1欧盟统计局数据管理员
这 EurostatDataManager 类负责城市数据的生命周期,从摄入到排名。
排名方法
该系统为每个城市计算加权归一化分数。两个关键逻辑层确保排名准确:
- 极性校正:为了确保高分总是代表“更好”的质量,该系统确定了“负面”指标(例如犯罪、污染或通勤时间长)。对于这些,归一化值被反转。
- 归一化:价值根据其单位类型(百分比、分钟或货币)进行缩放,以便在“平均租金”和“空气质量”等不同指标之间进行公平比较
- 回退逻辑:认识到较小城市的数据可能很稀疏,服务器实现了递归回退。如果所请求的城市没有可用的统计指标,则默认为基于人口的排名,以确保用户仍然收到有效的地理建议。
3.2 Tavilly API经理
这 TavilyManager 作为连接实时网络的桥梁。与标准搜索引擎不同,Tavily针对LLM上下文进行了优化,返回了干净、高相关性的内容。
4.工作流实施
这 n8n工作流程 遵循8个阶段的流程,将用户模糊的偏好转换为结构化的报告:
- 用户输入捕获:收集目标技术、感兴趣的国家和生活质量偏好。
- 架构对齐:通过以下方式检索有效的欧盟统计局标准
get_criteria_list().
- LLM映射:将自然语言(例如“我讨厌交通”)翻译成数据库友好的代码。
- 多城市排名:确定每个国家符合加权标准的前两个城市。
- 有针对性的网络抓取:通话
search_offers()对于每个确定的城市。
- 信息抽取LLM将原始HTML/文本解析为结构化模式:
Company,Position,Skills,Summary,Location,以及URL.
- 数据整合:将前10个报价汇总为CSV和Discord就绪摘要。
- 最终交付:通过Discord webhook传播研究结果。
5.设置和安装
要启动并运行此项目,请执行以下步骤:
先决条件
- Python 3.12
- Docker&Docker编写部署。
- 紫外线
5.1.克隆存储库
首先,将项目存储库克隆到本地计算机:
git clone git@github.com:c-r-lewis/n8n-international-internship-scout.git5.2.环境配置
创建一个 .env 项目目录根目录中的文件。此文件将保存您的环境变量,包括API密钥。
TAVILY_API_KEY="your_tavily_api_key_here"
POSTGRES_PASSWORD="your_n8n_postgres_password_here"备注:从获取Tavily API密钥 Tavily网站.
5.3.安装依赖项
使用 uv,安装项目依赖项:
uv sync5.4.准备数据
该应用程序依赖于欧盟统计局数据和世界城市数据集。
- 欧盟统计局数据:The
eurostat_data_manager.py脚本负责填充eurostat_data/cities.dbSQLite数据库。要摄取数据,您可以使用mcp inspector并致电download_eurostat_data功能。
- 世界城市数据:确保
ressources/worldcities.csv存在。此文件提供了城市的基本地理信息。
6.运行应用程序
您可以使用Docker Compose运行应用程序进行容器化设置,也可以直接使用 uvicorn 为了地方发展。
6.1.使用Docker Compose(推荐)
此方法确保所有服务在隔离的容器中运行。
docker compose up --build然后,应用程序应可在以下位置访问 http://localhost:8000 (或在您的 docker-compose.yml).
6.2.地方(发展)
确保您已激活Python虚拟环境(如果使用)并安装了依赖项(uv sync).
uvicorn app:app --reload --host 0.0.0.0 --port 8000这 --reload flag允许在代码更改时自动重新加载,这对开发很有用。该应用程序将在 http://localhost:8000.
6.3.设置n8n工作流的凭据
为了能够在n8n界面中运行n8n工作流,您必须设置Mistral云API机密和Discord Webhook机密。
7.示例结果
对于在 英国 和 瑞士 定位 “计算机科学” 侧重于 犯罪率低,交通便利,该系统成功地确定了巴塞尔和南安普敦等城市的关键角色,提供了直接的 excel导出 以及自动化 不一致通知 以便立即审查。
8.挑战与解决方案
- 多维数据解析:欧盟统计局的JSON-STAT格式很难扁平化。解决方案涉及开发自定义
_index_to_coordsmapper以编程方式导航嵌套的维度大小和ID。
- 有效载荷管理:Discord的2000个字符限制对最终摘要构成了风险。我在最终的Code节点中实现了“循环”选择逻辑,以确保摘要包含来自所有顶级城镇的代表性样本,而不超过字符上限。
