职位URL分析服务

一个基于FastAPI的微服务,用于分析职位URL并提取详细的招聘公司信息,支持数据增强和报告生成。

  • by subslink326
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 subslink326/job-url-analyzer-mcp

使用说明

作业URL分析器MCP服务器

一个全面的基于FastAPI的微服务,用于分析作业URL并提取详细的公司信息。该服务使用现代异步Python构建,可以抓取招聘信息和公司网站,通过外部提供商的数据丰富来构建丰富的公司简介。

✨ 特性

  • 🕷️ 智能网络爬行:尊重robots.txt的爬行合规性和速率限制
  • 🧠 内容提取:使用Selectolax进行高级HTML解析,以实现快速、准确的数据提取
  • 🔗 数据丰富:可插入的丰富服务提供商(Crunchbase、LinkedIn、自定义API)
  • 📊 质量评分:提取数据的完整性和置信度指标
  • 📝 Markdown报告:漂亮、全面的公司分析报告
  • 🔍 可观测性:OpenTetry跟踪、Prometheus指标、结构化日志记录
  • 🚀 生产就绪:Docker、Kubernetes、健康检查、优雅关机
  • 🧪 测试良好:全面的测试套件,覆盖率超过80%

🏗️ 建筑

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   FastAPI App   │───▶│   Orchestrator  │───▶│   Web Crawler   │
└─────────────────┘    └─────────────────┘    └─────────────────┘
                                │                        │
                                ▼                        ▼
                       ┌─────────────────┐    ┌─────────────────┐
                       │ Content Extract │    │    Database     │
                       └─────────────────┘    │   (SQLAlchemy)  │
                                │             └─────────────────┘
                                ▼                        
                       ┌─────────────────┐    ┌─────────────────┐
                       │   Enrichment    │───▶│    Providers    │
                       │    Manager      │    │ (Crunchbase,etc)│
                       └─────────────────┘    └─────────────────┘
                                │                        
                                ▼                        
                       ┌─────────────────┐              
                       │ Report Generator│              
                       └─────────────────┘              

🚀 快速开始

先决条件

  • Python 3.11+
  • 诗歌(用于依赖管理)
  • Docker和Docker Compose(可选)

地方发展

  1. 克隆和设置

    git clone https://github.com/subslink326/job-url-analyzer-mcp.git
    cd job-url-analyzer-mcp
    poetry install
    
  2. 环境配置 (可选)

    # The application has sensible defaults and can run without environment configuration
    # To customize settings, create a .env file with your configuration
    # See src/job_url_analyzer/config.py for available settings
    
  3. 数据库设置

    poetry run alembic upgrade head
    
  4. 运行开发服务器

    poetry run python -m job_url_analyzer.main
    # Server starts at http://localhost:8000
    

Docker部署

  1. 发展

    docker-compose up --build
    
  2. 生产

    docker-compose -f docker-compose.prod.yml up -d
    

📡 API使用

分析作业URL

curl -X POST "http://localhost:8000/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://company.com/jobs/software-engineer",
    "include_enrichment": true,
    "force_refresh": false
  }'

响应示例

{
  "profile_id": "123e4567-e89b-12d3-a456-426614174000",
  "source_url": "https://company.com/jobs/software-engineer",
  "company_profile": {
    "name": "TechCorp",
    "description": "Leading AI company...",
    "industry": "Technology",
    "employee_count": 150,
    "funding_stage": "Series B",
    "total_funding": 25.0,
    "headquarters": "San Francisco, CA",
    "tech_stack": ["Python", "React", "AWS"],
    "benefits": ["Health insurance", "Remote work"]
  },
  "completeness_score": 0.85,
  "confidence_score": 0.90,
  "processing_time_ms": 3450,
  "enrichment_sources": ["crunchbase"],
  "markdown_report": "# TechCorp - Company Analysis Report\n..."
}

⚙️ 配置

环境变量

变量 描述 默认值
DEBUG 启用调试模式 false
HOST 服务器主机 0.0.0.0
PORT 服务器端口 8000
DATABASE_URL 数据库连接字符串 sqlite+aiosqlite:///./data/job_analyzer.db
MAX_CONCURRENT_REQUESTS 最大并发HTTP请求数 10
REQUEST_TIMEOUT HTTP请求超时(秒) 30
CRAWL_DELAY 请求之间的延迟(秒) 1.0
RESPECT_ROBOTS_TXT 尊重robots.txt true
ENABLE_CRUNCHBASE 启用Crunchbase富集 false
CRUNCHBASE_API_KEY Crunchbase API密钥 ""
DATA_RETENTION_DAYS 数据保留期 90

📊 监控

指标端点

  • 健康检查: GET /health
  • 普罗米修斯指标: GET /metrics

主要绩效指标

  • job_analyzer_requests_total -API请求总数
  • job_analyzer_analysis_success_total -成功的分析
  • job_analyzer_completeness_score -数据完整性分布
  • job_analyzer_crawl_requests_total -按状态抓取请求
  • job_analyzer_enrichment_success_total -提供商的扩展成功

🧪 测试

运行测试

# Unit tests
poetry run pytest

# With coverage
poetry run pytest --cov=job_url_analyzer --cov-report=html

# Integration tests only
poetry run pytest -m integration

# Skip slow tests
poetry run pytest -m "not slow"

🚀 部署

Kubernetes

# Apply manifests
kubectl apply -f kubernetes/

# Check deployment
kubectl get pods -l app=job-analyzer
kubectl logs -f deployment/job-analyzer

生产检查表

  • []已配置环境变量
  • []已应用数据库迁移
  • []已配置SSL证书
  • []设置监控仪表板
  • []已配置日志聚合
  • []已实施备份策略
  • []已配置速率限制
  • []已设置资源限制

🔧 发展

项目结构

job-url-analyzer/
├── src/job_url_analyzer/          # Main application code
│   ├── enricher/                  # Enrichment providers
│   ├── main.py                    # FastAPI application
│   ├── config.py                  # Configuration
│   ├── models.py                  # Pydantic models
│   ├── database.py                # Database models
│   ├── crawler.py                 # Web crawler
│   ├── extractor.py               # Content extraction
│   ├── orchestrator.py            # Main orchestrator
│   └── report_generator.py        # Report generation
├── tests/                         # Test suite
├── alembic/                       # Database migrations
├── kubernetes/                    # K8s manifests
├── monitoring/                    # Monitoring configs
├── docker-compose.yml             # Development setup
├── docker-compose.prod.yml        # Production setup
└── Dockerfile                     # Container definition

代码质量

该项目使用:

  • 黑色 用于代码格式化
  • 拉夫 对于linting
  • MyPy 用于类型检查
  • 预承诺 质量闸门挂钩
# Setup pre-commit
poetry run pre-commit install

# Run quality checks
poetry run black .
poetry run ruff check .
poetry run mypy src/

📝 最近更改

依赖关系更新

  • 固定的:替换不存在 aiohttp-robotparser 依赖与 robotexclusionrulesparser 用于robots.txt解析
  • 改进的:安装过程现在可以开箱即用,无需 .env 文件配置

🤝 贡献

  1. 分叉存储库
  2. 创建要素分支(git checkout -b feature/amazing-feature)
  3. 进行更改
  4. 添加新功能的测试
  5. 确保所有测试通过(poetry run pytest)
  6. 提交您的更改(git commit -m 'Add amazing feature')
  7. 推到分支(git push origin feature/amazing-feature)
  8. 打开拉取请求

📄 许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

🆘 支持

  • 文档:此README和内联代码注释
  • 问题:GitHub错误报告和功能请求问题
  • 讨论:GitHub问题和社区讨论

内置于❤️ 使用FastAPI、SQLAlchemy和现代Python工具。