carlhinrichsen/network-scanner

GitHub: carlhinrichsen/network-scanner

一款基于 Claude AI 的 LinkedIn 人脉智能分析工具,支持自然语言搜索、ICP 客户画像匹配和实时数据丰富,帮助 B2B 销售和商务拓展人员高效挖掘和筛选潜在客户。

Stars: 0 | Forks: 1

# Network Scanner — B2B Network Intelligence 一款私有的 B2B network intelligence 工具,支持上传 LinkedIn connections 导出文件,通过自然语言(AI 驱动)搜索和筛选联系人,利用 Tavily 丰富联系人所属公司/行业/位置等数据,并执行 ICP(Ideal Customer Profile,理想客户画像)匹配。 ## 模式 | 模式 | 描述 | |------|-------------| | **Search** | 使用自然语言在你的网络中搜索(Claude Haiku) | | **ICP** | 定义 2-3 个 Ideal Customer Profiles,对你的网络进行评分,并按需自动丰富数据 | | **Discovery** | 深度研究模式 — 融合 DB 搜索、实时 Web 研究(Tavily)以及战略洞察(Claude Sonnet) | ## 设置 ### 1. Clone 并安装 ``` git clone https://github.com/carlhinrichsen/network-scanner.git cd network-scanner pip install -r requirements.txt ``` ### 2. 环境变量 将 `.env.example` 复制为 `.env` 并填入你的值: ``` cp .env.example .env ``` | 变量 | 必填 | 描述 | |----------|----------|-------------| | `ANTHROPIC_API_KEY` | ✅ | Anthropic API key (claude-haiku + claude-sonnet) | | `TAVILY_API_KEY` | ✅ | Tavily search API key(用于数据丰富和 Discovery 模式) | | `GOOGLE_CLIENT_ID` | ✅ | Google OAuth 2.0 client ID | | `GOOGLE_CLIENT_SECRET` | ✅ | Google OAuth 2.0 client secret | | `APP_BASE_URL` | ✅ | 你部署的应用 URL(例如 `https://your-app.onrender.com`) | | `ADMIN_EMAIL` | ✅ | 你的 Google 邮箱 — 将自动获得管理员权限 | | `APPROVED_DOMAINS` | 可选 | 登录时自动批准的逗号分隔域名列表(例如 `yourcompany.com`) | | `DB_PATH` | 可选 | SQLite DB 路径(默认:`data/connections.db`) | ### 3. Google OAuth 设置 1. 前往 [Google Cloud Console](https://console.cloud.google.com/) → APIs & Services → Credentials 2. 创建一个 OAuth 2.0 Client ID(Web application) 3. 添加已授权的重定向 URI:`{APP_BASE_URL}/api/auth/google/callback` 4. 将 Client ID 和 Secret 复制到你的 `.env` ### 4. 本地运行 ``` uvicorn main:app --reload --port 8000 ``` 应用将可通过 `http://localhost:8000` 访问。 ## 部署 该仓库包含 `render.yaml`,支持一键部署到 Render。 1. 推送到 GitHub 2. 在 Render dashboard 中连接仓库 3. 添加一个 **Persistent Disk**(挂载到 `/data`,1 GB) 4. 在 Render dashboard 中设置所有环境变量(出于安全考虑,它们不在 `render.yaml` 中) 5. 在 Render 环境变量中设置 `DB_PATH=/data/connections.db` ### 轮换 API keys 如果 API key 泄露: 1. 在相应的控制台(Anthropic / Tavily / Google Cloud)中撤销旧 key 2. 生成一个新 key 3. 在 Render 中更新环境变量 → 服务将自动重新部署 4. `.env.example` 文件仅包含**占位符值** — 切勿提交真实的 keys ## API endpoints | Method | Path | Auth | 描述 | |--------|------|------|-------------| | GET | `/api/auth/google/login` | — | 启动 Google OAuth 流程 | | GET | `/api/auth/google/callback` | — | OAuth 回调 | | POST | `/api/auth/logout` | session | 登出 | | GET | `/api/auth/me` | — | 检查会话状态 | | GET | `/api/healthz` | — | 健康检查 + 联系人数量 | | GET | `/api/stats` | session | DB 统计信息 | | POST | `/api/upload` | session | 上传 LinkedIn CSV(持久化到 DB) | | POST | `/api/guest/upload` | — | 上传 LinkedIn CSV(仅内存) | | POST | `/api/chat` | session/guest | 搜索 / ICP / Discovery | | POST | `/api/enrich` | session | 通过 Tavily 丰富联系人数据 | | POST | `/api/export` | — | 将结果导出为 CSV | | GET | `/api/admin/users` | admin | 列出所有用户 | | GET | `/api/admin/pending` | admin | 列出待审批用户 | | POST | `/api/admin/approve/{id}` | admin | 批准用户 | | POST | `/api/admin/revoke/{id}` | admin | 撤销用户权限 | ## 数据流 1. 用户通过 Google OAuth 登录 2. 上传 LinkedIn connections CSV(Settings → Export Data → Connections) 3. 在 Search 模式下运行自然语言搜索 4. 在 ICP 模式下运行 ICP 匹配(可选先进行数据丰富) 5. 使用 Discovery 模式结合实时 Web 上下文进行深度研究 6. 将筛选后的结果导出为 CSV ## 架构 ``` main.py FastAPI app, routes, OAuth, session management auth.py User/session CRUD, auto-approval logic database.py Connections CRUD, SQLite ai_engine.py Claude + Tavily integrations, scoring, all AI functions csv_parser.py LinkedIn CSV parsing static/ index.html Single-file frontend (HTML + CSS + JS) logo.png App logo favicon.png Browser favicon ```
标签:AI助手, Anthropic, B2B销售, CIS基准, Claude, CVE检测, DNS解析, Google认证, ICP匹配, LinkedIn, OAuth2.0, Python, SaaS工具, SQLite, Streamlit, Tavily, 人脉管理, 企业数据, 后端开发, 后端开发, 商业智能, 客户开发, 客户画像, 开源项目, 数据丰富, 数据泄露, 数据清洗, 无后门, 潜在客户开发, 系统分析, 网络分析, 网络安全审计, 自动化营销, 自然语言搜索, 访问控制, 足迹分析, 逆向工具, 销售赋能