$git clone https://github.com/xiongQvQ/AI_Find_Customer> 面向外贸与 B2B 场景的自动化客户挖掘系统,基于 FastAPI、LangGraph、多 Agent 流水线与可配置多模型能力。
| 1 | # AI Hunter |
| 2 | |
| 3 | > 面向外贸与 B2B 场景的自动化客户挖掘系统,基于 FastAPI、LangGraph、多 Agent 流水线与可配置多模型能力。 |
| 4 | |
| 5 | [](https://python.org) |
| 6 | [](https://fastapi.tiangolo.com) |
| 7 | [](https://react.dev) |
| 8 | [](https://github.com/langchain-ai/langgraph) |
| 9 | |
| 10 | AI Hunter 是一个面向外贸与 B2B 线索挖掘场景的开源版项目。你只需要提供公司官网、产品文档或产品关键词,再指定目标市场,系统就会自动完成公司理解、关键词生成、网页搜索、线索提取和联系方式发现。 |
| 11 | |
| 12 | ## 官方链接 |
| 13 | |
| 14 | - 官网:https://b2binsights.io/ |
| 15 | - 视频介绍:https://www.bilibili.com/video/BV1AzwYzXEGD/?spm_id_from=333.1387.list.card_archive.click |
| 16 | - 开源仓库:https://github.com/xiongQvQ/AI_Find_Customer |
| 17 | |
| 18 | ## 不想自己折腾?试试 B2Binsights |
| 19 | |
| 20 | 这个开源项目适合愿意折腾的技术型用户。如果你只是想**拿到一份能打电话、能写邮件的客户名单**,不想折腾部署和配置,可以看看 [B2Binsights](https://b2binsights.pages.dev/)——我们把它做成了开箱即用的产品: |
| 21 | |
| 22 | - **部署在你电脑上**,API Key 是你自己的,客户数据从头到尾不经过我们 |
| 23 | - **你描述目标客户**(什么行业、哪几个国家、找谁),我们帮你配置好,跑出第一批线索 |
| 24 | - **拿到的是决策人联系方式**:姓名、职位、邮箱、LinkedIn、证据来源链接——不是一堆公司名 |
| 25 | - **每条线索附证据**,你可以点开链接自己验证 |
| 26 | - **一次性收费**,不是 SaaS 订阅 |
| 27 | |
| 28 | 开源版已经覆盖了主线能力,B2Binsights 在此基础上加了竞品渠道分析、展会名单清洗、CRM 对接、开发信生成、飞书/企微入口等定制模块。 |
| 29 | |
| 30 | > 拿不准适不适合?加微信 **XiongX0110**,说一下你的行业和目标客户,免费帮你跑一批线索样本先看质量。 |
| 31 | |
| 32 | ## 开源仓库范围 |
| 33 | |
| 34 | 这次公开的开源仓库只保留以下内容: |
| 35 | |
| 36 | - `backend/`:FastAPI + LangGraph 主服务 |
| 37 | - `frontend/`:React + Vite 前端 |
| 38 | - 必要的配置示例和文档 |
| 39 | |
| 40 | 以下模块不进入公开仓库: |
| 41 | |
| 42 | - `license-server/` |
| 43 | - `license-server-v2/` |
| 44 | - `landing/` |
| 45 | |
| 46 | ## 当前版本边界 |
| 47 | |
| 48 | 当前开源版已经开放“客户挖掘 + 邮件草稿生成 + 邮件发送配置”主链路,但仍有一些边界: |
| 49 | |
| 50 | - 邮件自动发送建议通过 `campaign / scheduler` 链路使用,不建议把详情页当成完整营销自动化系统 |
| 51 | - 邮件发送依赖你自己配置 SMTP / IMAP、授权码与安全策略,仓库不会提供任何第三方邮箱账号 |
| 52 | - 非本机访问 API 时,如果没有配置 `API_ACCESS_TOKEN`,接口默认只允许 localhost 访问 |
| 53 | |
| 54 | ## 功能特性 |
| 55 | |
| 56 | - 多 Agent 流水线:`Insight -> KeywordGen -> Search -> LeadExtract -> Evaluate` |
| 57 | - 双模型协作:推理模型负责 ReAct 决策,普通模型负责抽取、生成与改写 |
| 58 | - 输入灵活:支持官网 URL、PDF/Excel/CSV/Word/Markdown/TXT 等文件、或纯关键词 |
| 59 | - 多搜索通道:Google Search、Google Maps、B2B 平台站内搜索 |
| 60 | - 智能抓取:针对官网、B2B 列表页、内容页等不同 URL 自适应抓取策略 |
| 61 | - 联系方式发现:支持提取邮箱、电话、地址、社媒链接等结构化信息 |
| 62 | - AI 邮件生成:可基于 ICP、官网洞察与历史邮件样例生成 3 步开发信序列 |
| 63 | - 邮件预览与审核:支持在详情页预览生成邮件、人工批准/拦截、手动发送与回信检测 |
| 64 | - 邮件自动发送:支持把已批准邮件序列创建为 campaign,并通过 scheduler 持久化发送 |
| 65 | - 实时进度流:FastAPI + SSE 推送任务进展,前端实时展示各阶段状态 |
| 66 | - 成本可观测:接入 Langfuse 后可记录 LLM 调用成本、Token 与延迟 |
| 67 | - 可替换模型:统一通过 LiteLLM 接入 OpenAI、Anthropic、OpenRouter、Groq、GLM、Moonshot、MiniMax |
| 68 | - 继续挖掘参数可控:支持设置目标线索数、最大轮数、每轮最少新增线索阈值 |
| 69 | |
| 70 | ## 架构图 |
| 71 | |
| 72 | ```mermaid |
| 73 | flowchart LR |
| 74 | A[React Frontend\n任务创建 / 列表 / 详情 / SSE] --> B[FastAPI API] |
| 75 | B --> C[LangGraph Pipeline] |
| 76 | C --> C1[InsightAgent] |
| 77 | C --> C2[KeywordGenAgent] |
| 78 | C --> C3[SearchAgent] |
| 79 | C --> C4[LeadExtractAgent] |
| 80 | C --> C5[Evaluate] |
| 81 | |
| 82 | C1 --> D[LiteLLM] |
| 83 | C2 --> D |
| 84 | C4 --> D |
| 85 | D --> D1[MiniMax / OpenAI / Anthropic / OpenRouter / Groq / GLM / Moonshot] |
| 86 | |
| 87 | C3 --> E[Tavily] |
| 88 | C3 --> F[Serper] |
| 89 | C4 --> G[Jina Reader] |
| 90 | |
| 91 | B --> H[SQLite / JSON 持久化] |
| 92 | B --> I[SSE Stream] |
| 93 | I --> A |
| 94 | ``` |
| 95 | |
| 96 | ## 工作流 |
| 97 | |
| 98 | ```mermaid |
| 99 | flowchart TD |
| 100 | A[输入官网 / 上传文档 / 产品关键词] --> B[InsightAgent\n理解公司与产品] |
| 101 | B --> C[KeywordGenAgent\n生成搜索词] |
| 102 | C --> D[SearchAgent\n聚合搜索结果] |
| 103 | D --> E[LeadExtractAgent\n抽取结构化线索] |
| 104 | E --> F[Evaluate\n判断是否继续] |
| 105 | F -->|继续| C |
| 106 | F -->|结束| G[EmailCraft\n可选生成邮件序列] |
| 107 | G --> H[返回 leads / 邮件 / 成本 / 阶段结果] |
| 108 | ``` |
| 109 | |
| 110 | 当前停止逻辑由以下参数控制: |
| 111 | |
| 112 | - `target_lead_count`:目标线索总数 |
| 113 | - `max_rounds`:最多迭代轮数 |
| 114 | - `min_new_leads_threshold`:单轮最少新增线索数 |
| 115 | |
| 116 | 这个版本已经修正了“目标线索数设为 200 时,系统因隐藏动态阈值而过早停止”的问题。现在会按你显式配置的 `min_new_leads_threshold` 来判断是否继续。 |
| 117 | |
| 118 | ## 有界面模式 |
| 119 | |
| 120 | 前端现在也已经对齐到 producer / consumer 思路,不再把“新建任务”当成一个浏览器里直接等待完成的长请求。 |
| 121 | |
| 122 | 当前有界面模式的真实行为是: |
| 123 | |
| 124 | 1. 在 `新建任务` 页面填写官网、关键词、地区、模板样例等信息 |
| 125 | 2. 点击提交后,前端会创建一个 `automation job` |
| 126 | 3. `consumer` 领取这个 job 时,会先准备 `template_seed` |
| 127 | 4. 然后再创建真实 hunt,执行搜索、抽取、评估、邮件生成 |
| 128 | 5. hunt 完成后自动创建 campaign,并交给 `EmailScheduler` 消费发送 |
| 129 | 6. 首页和详情页优先展示 `job` 队列状态,只有在真实 hunt 已创建后,才继续下钻到 hunt 详情 |
| 130 | |
| 131 | 这意味着: |
| 132 | |
| 133 | - 前端负责 `提交任务 + 查看队列 + 查看 Hunt / Campaign 状态` |
| 134 | - 后端负责 `真正执行 producer / consumer + scheduler` |
| 135 | - 有界面和无界面现在走的是同一套底层任务系统,不再是两套分裂逻辑 |
| 136 | - 队列任务详情页会展示 `job 状态 / 尝试次数 / 目标线索数 / 当前线索数 / Hunt 阶段 / 最近错误` |
| 137 | - Dashboard 还会展示 `运营摘要卡 + 最近发现企业 / 最近发送邮件 / 最近回复` 事件流 |
| 138 | - 继续挖掘不再直接调用旧的同步 resume,而是基于当前 hunt 创建新的后续 queue job |
| 139 | |
| 140 | ## 邮件能力 |
| 141 | |
| 142 | 当前版本的邮件链路分成 3 层: |
| 143 | |
| 144 | 1. 可以先基 |