用Grok API构建客户发现机器人:从脚本到批量筛选的完整实践

用Grok API构建客户发现机器人:从脚本到批量筛选的完整实践 这次我们来看一个非常实际的话题用 Grok Bot 做客户发现。很多团队一听“AI 获客”“智能销售”就觉得要上很重的系统实际上如果你只是想把“潜在的客户是谁、他们关心什么、我该怎么切入”这事批量跑起来一个 Grok API Key 加几百行 Python 脚本就够了。Grok 是 xAI 推出的对话模型它对外提供 OpenAI 兼容的 API 接口。这意味着你不需要本地显卡、不需要部署大模型、不需要维护推理服务只要写脚本去调用云端模型就能把“找客户”这个动作自动化。这篇文章会从 API 接入、脚本结构、批量筛选、效果验证到常见排错完整过一遍看完你可以直接搭一个简单的客户发现机器人。先说结论Grok Bot 适合做客户发现但它的核心不是模型有多强而是你怎么设计提示词和批量流程。模型负责理解和抽取信息你负责把输入分成一个个可验证的样本。这篇文章不讨论任何抓取隐私数据的方法只基于公开、合规的商业信息来做筛选和整理。1. 核心能力速览能力项说明项目类型基于 Grok API 的客户发现机器人脚本运行环境Python 3.9需要能访问 xAI 官方 API 的网络环境是否需要 GPU不需要推理在云端完成本地资源占用极低普通办公电脑即可运行主要功能客户画像分析、行业筛选、需求意图判断、线索摘要生成支持批量任务支持通过读取 CSV / Excel 批量处理是否支持 API是基于 OpenAI 兼容接口调用启动方式命令行运行 Python 脚本适合场景B2B 销售线索初筛、市场调研、竞品客户分析、个性化触达内容生成使用边界只能处理已公开授权的商业信息禁止处理个人敏感数据从材料看Grok Bot 并不是一个类似微信机器人那种“下载即用”的软件。如果你在搜索“grok bot下载”更稳妥的判断是它不是一个官方一键包装客户端而是一套基于 Grok API 构建的自动化程序。它的“下载”实际上是把脚本代码拉到本地配置好 API Key 后运行。2. 什么是 Grok Bot 客户发现先把这个概念拆开。客户发现Lead Discovery通常包含几个动作收集潜在客户名单、判断客户是否符合目标画像、分析客户近期动态和需求痛点、生成初步的触达理由。传统做法是销售或者市场人员手动去行业网站、企业信息平台、社交媒体上一条一条看效率低而且容易漏掉关键信息。Grok Bot 做的事情是把“收集到一批公司或联系人信息之后的分析整理”自动化。你可以把一批候选公司名单丢给它让它根据你设定的行业、规模、技术栈、近期动态等维度做筛选输出一份结构化的客户分析结果。这里要明确一点Grok 模型本身不能替你去抓取数据。它的强项是文本理解和信息抽取。所以你的输入数据来源必须是合法的比如企业工商公开信息平台导出的公司名单。行业展会公开的参展商列表。公司官网公开的新闻稿和产品页面。你已有 CRM 里的历史客户数据。把这些数据作为种子输入Grok Bot 负责从非结构化文本中提炼出“这家公司做什么、规模大概多大、最近在关注什么、可能是我们的目标客户吗、销售切入点是什么”。这种用法最直接的收益是销售团队从“每天手动看 10 家公司资料”变成“脚本批量筛 500 家AI 先帮你过滤一轮”。筛选结果不一定 100% 准确但能显著减少人的重复阅读量把精力放到最有可能成交的客户上。3. 适用场景与使用边界3.1 适合什么场景B2B 销售线索初筛给你 1000 家目标行业公司让 AI 先把不符合画像的过滤掉。市场调研分析某个细分赛道的玩家有哪些各自定位是什么最近有什么动作。个性化触达准备针对不同客户生成不同的首次沟通理由避免群发模板感太强。CRM 数据清洗把已有的客户描述文本统一整理成结构化标签。3.2 不适合什么场景实时聊天机器人Grok Bot 的定位是离线批量分析不适合做高并发实时对话。私有数据深度挖掘如果客户数据涉及未公开的商业机密不建议直接传到云端 API。需要 100% 准确率的场景大模型输出天然有概率性决策建议需要人工复核。3.3 合规边界这一点必须反复强调只处理已公开授权的商业信息。不允许抓取社交媒体上的个人隐私数据。涉及人脸、联系方式等个人信息时必须确认你已获得合法授权。跨境调用 API 时要遵守所在地区和数据处理相关法律法规。生成的客户分析内容如果用于对外营销需要人工审核后再发出避免夸大或错误表述。合规不是一句空话。客户发现这个场景尤其容易踩线尤其是从社交平台批量获取用户信息然后做营销的动作一定要先确认是否有授权。合法合规的数据来源才是这个方案能持续跑下去的基础。4. 环境准备与前置条件4.1 操作系统与 Python 环境推荐使用 Ubuntu 20.04 或 macOSWindows 也可以跑但建议把脚本放在 WSL2 或者 Docker 里避免环境变量路径不一致的问题。Python 版本建议 3.9 以上。用 venv 隔离依赖不要直接装到系统环境里。python3 -m venv grokbot_env source grokbot_env/bin/activate4.2 API Key 获取调用 Grok API 需要先在 xAI 官网注册账号然后在控制台创建 API Key。这一步需要的材料是一个可正常访问 xAI 官网的邮箱账号。账号内有一定的 API 额度或者绑定了付费方式。创建 Key 后立即复制保存因为平台通常只显示一次。API Key 属于敏感凭证不要提交到 Git 仓库不要写在公共聊天工具里。建议用环境变量或者.env文件管理并将.env加入.gitignore。4.3 网络环境Grok API 是云端服务需要本地网络能够正常访问对应域名。如果你在部署时遇到超时或者连接失败先检查这一步而不是直接怀疑代码有问题。如果是团队使用更稳妥的方案是在云服务器上部署脚本让 API 调用出口网络稳定再把分析结果同步回本地。4.4 Python 依赖需要安装的依赖非常少pip install openai python-dotenv pandasopenai官方 Python SDK兼容 OpenAI 接口的 API 都可以用它调用。python-dotenv读取.env配置文件。pandas处理批量客户数据的 CSV / Excel 文件。5. 安装部署与启动方式5.1 项目结构建议按下面的结构组织项目目录grok-lead-finder/ ├── .env # 存放 API Key ├── .gitignore ├── requirements.txt # Python 依赖清单 ├── config.py # 读取配置 ├── grok_lead_finder.py # 核心分析脚本 ├── run_batch.py # 批量运行入口 ├── data/ │ ├── input.csv # 输入客户名单 │ └── output/ # 输出结果目录 └── prompts/ └── lead_analysis.txt # 提示词模板5.2 环境变量配置在项目根目录创建.env文件XAI_API_KEYyour_api_key_here XAI_BASE_URLhttps://api.x.ai/v1 XAI_MODELgrok-2-latest注意XAI_BASE_URL和XAI_MODEL要以 xAI 官方控制台实际展示为准如果官方调整接口地址只需要改这个配置文件不需要改代码。5.3 核心调用代码创建grok_lead_finder.py写入核心的分析函数import os from openai import OpenAI from dotenv import load_dotenv load_dotenv() client OpenAI( api_keyos.getenv(XAI_API_KEY), base_urlos.getenv(XAI_BASE_URL), ) MODEL os.getenv(XAI_MODEL, grok-2-latest) SYSTEM_PROMPT 你是一个专业的 B2B 客户分析助手。你的任务是基于用户提供的公开商业信息 判断这家公司是否适合作为目标客户并输出结构化的分析结果。 只基于输入的信息做判断不要编造数据。 def analyze_lead(company_text: str) - str: response client.chat.completions.create( modelMODEL, messages[ {role: system, content: SYSTEM_PROMPT}, {role: user, content: f请分析以下客户信息\n{company_text}}, ], temperature0.3, ) return response.choices[0].message.content这里temperature设置成 0.3目的是让输出尽量稳定、少一些随机发挥。客户发现不是创意写作稳定优先。5.4 命令行运行最简单的验证方式是写一个测试入口python -c from grok_lead_finder import analyze_lead text 某公司成立于2015年员工200人主要做企业级SaaS产品近期发布了一款新的CRM模块。 print(analyze_lead(text)) 如果 API Key 和网络环境都正常几秒后会返回一段客户分析文本。这一步跑通说明整个链路已经通了。6. 功能测试与效果验证6.1 测试目标启动 Grok Bot 后第一步不是直接上批量任务而是先用少量样本做功能验证。需要确认几个问题模型是否能理解你的行业术语。输出格式是否符合预期。是否有明显的编造信息。不同输入之间的稳定性是否足够。6.2 输入测试样本准备 3 到 5 条不同特征的客户文本覆盖以下几种典型情况非常匹配目标客户的公司。明显不符合画像的公司。信息不完整的模糊文本。包含行业专有名词的文本。6.3 操作步骤第一步写一个测试脚本循环处理输入列表并把结果打印出来。test_cases [ 某工业软件公司200人规模客户主要是制造业工厂近期获得新一轮融资。, 某本地餐饮连锁品牌3家门店主要做社区团购。, 某公司业务范围不明确官网信息有限。, ] for idx, case in enumerate(test_cases, 1): print(f Case {idx} ) print(analyze_lead(case)) print()第二步观察输出内容是否合理有没有错误推断。第三步把几个输出结果对比看相同类型客户的输出结构是否一致。6.4 判断成功标准一个合格的客户分析结果应该包含公司核心业务一句话概括。判断是否匹配目标客户并给出理由。可参考的销售切入点。信息置信度说明比如哪些信息是输入里明确有的哪些是推测。如果模型输出经常出现“这家公司一定需要我们的产品”这种绝对化表述说明提示词还需要加限制要求模型区分事实和推测。6.5 常见失败原因功能测试阶段最容易出问题的地方是提示词设计不清晰。Grok 模型的指令遵循能力很强但前提是你把规则写清楚。比如只写“帮我分析客户”模型输出会很发散写清楚“输出五部分每部分控制在两句话以内”结果就稳定得多。7. 接口 API 调用与批量任务7.1 批量输入输出设计单条分析跑通之后进入批量阶段。把data/input.csv作为输入每一行代表一条客户资料读取后逐条调用 API结果统一写入data/output/目录。建议的 CSV 输入格式company_name,source_text 甲公司,公司全称、成立时间、员工规模、主营产品、近期动态 乙公司,公司全称、成立时间、员工规模、主营产品、近期动态批处理脚本import pandas as pd import time import json from pathlib import Path from grok_lead_finder import analyze_lead INPUT_CSV data/input.csv OUTPUT_DIR Path(data/output) OUTPUT_DIR.mkdir(exist_okTrue) df pd.read_csv(INPUT_CSV) results [] for idx, row in df.iterrows(): text row[source_text] try: analysis analyze_lead(text) results.append({ company_name: row[company_name], source_text: text, analysis: analysis, status: success, }) print(f[{idx1}/{len(df)}] {row[company_name]} 分析完成) except Exception as e: results.append({ company_name: row[company_name], source_text: text, analysis: , status: ffailed: {e}, }) print(f[{idx1}/{len(df)}] {row[company_name]} 失败: {e}) # 控制请求频率避免触发限流 time.sleep(0.5) with open(OUTPUT_DIR / results.json, w, encodingutf-8) as f: json.dump(results, f, ensure_asciiFalse, indent2) print(批量任务完成)这段代码做了几件事逐条读取 CSV。调analyze_lead分析。捕获异常并记录失败原因不让单条失败中断整个任务。在两次请求之间加time.sleep(0.5)控制请求频率。结果写入 JSON 文件方便后续处理。7.2 批量任务中的失败重试批量任务跑几百条的时候偶尔会遇到超时或者限流错误。更稳的写法是加一个简单的重试机制import time from tenacity import retry, stop_after_attempt, wait_random_exponential retry(stopstop_after_attempt(3), waitwait_random_exponential(min1, max10)) def analyze_lead_with_retry(text: str) - str: return analyze_lead(text)tenacity是一个重试库需要额外安装pip install tenacity如果不想引入额外依赖也可以自己写循环重试。核心原则是失败先等一会再重试不要疯狂连续请求否则很容易被限流。7.3 结构化 JSON 输出客户发现任务的输出最好给模型指定一个 JSON 格式方便后续直接入库import json ANALYSIS_PROMPT 请基于以下客户信息进行分析并输出 JSON 格式结果 { business_summary: 公司核心业务一句话总结, is_target: yes/no/unknown, match_reason: 匹配或不匹配的理由, pain_points: [可能的痛点1, 可能的痛点2], approach_suggestion: 销售切入点建议, confidence: high/medium/low } 客户信息 {company_text} def analyze_lead_structured(company_text: str) - dict: response client.chat.completions.create( modelMODEL, messages[ {role: system, content: 你是一个严格输出 JSON 的客户分析助手。}, {role: user, content: ANALYSIS_PROMPT.format(company_textcompany_text)}, ], temperature0.2, ) content response.choices[0].message.content.strip() try: return json.loads(content) except json.JSONDecodeError: return {error: 模型输出不是合法 JSON, raw: content}这里有一个坑大模型偶尔会在 JSON 前后加多余的文字说明。所以解析失败时要把原始内容存下来不要直接丢弃方便排查。7.4 API 调用要点调用 Grok API 时几个参数值得注意temperature客户分析建议 0.2 到 0.4 之间太高容易发散。max_tokens如果不设置长文本分析可能被截断。建议根据实际输出长度设置一个上限比如 2000。timeout不要用默认超时建议显式设置较长超时时间。response client.chat.completions.create( modelMODEL, messages[...], temperature0.3, max_tokens2000, timeout120, )8. 资源占用与性能观察8.1 本地资源占用由于 Grok Bot 是云端 API 调用方案本地不需要 GPUCPU 和内存占用都很低。实际跑的时候主要资源开销是启动 Python 进程和读取 CSV 文件而不是模型推理。这一点对销售团队和运营团队特别友好。不需要买显卡不需要租 GPU 服务器一台普通办公电脑就可以跑批量任务。8.2 API 耗时观察API 耗时主要取决于两部分输入文本的长度。输出文本的长度。客户分析任务通常输入几百字、输出几百字单次请求通常在 5 到 20 秒之间。实际数字取决于模型负载和网络状况建议以本机测试为准。8.3 批量任务的时间估算如果你有 500 条客户数据单条平均耗时 10 秒加上 0.5 秒的请求间隔总耗时大约是500 * 10.5秒 ≈ 5250秒 ≈ 87分钟也就是说500 条客户数据大约一个半小时能跑完。这在人工查阅的场景里是不可想象的速度。当然如果遇到限流和重试时间会相应变长。如果批量数据超过几千条建议做增量处理。每次只处理新增加的数据不要每次都全量重跑。8.4 成本观察成本是客户发现方案里非常现实的问题。Grok API 按 token 计费批量任务跑之前最好估算一下成本def estimate_tokens(text: str) - int: # 粗略估算1个英文字符约0.25 token1个中文字符约0.6~1 token return len(text) // 2 total_input_chars df[source_text].str.len().sum() estimated_input_tokens estimate_tokens(total_input_chars) print(f预估输入 token 数: {estimated_input_tokens})正式跑大批量任务之前先用 10 到 20 条数据做成本测试看实际消费再决定是否全量跑。9. 常见问题与排查方法问题现象可能原因排查方式解决方案调用 API 返回 401API Key 错误或已失效检查.env里的 Key 是否完整去控制台重新生成更新 API Key 后重试返回 404 或模型不存在模型名称配置错误去官方控制台查看实际可用的模型 ID修改.env中的模型名请求超时网络问题或单次请求耗时过长增加 timeout用 curl 测试 API 连通性检查网络增加重试机制输出 JSON 解析失败模型返回了多余文字打印原始输出检查在提示词中强调“只输出 JSON”并保留原始文本批量任务中途卡住没有设置超时或重试上限查看进程日志加超时和重试任务程序化处理异常分析结果不稳定temperature 设置过高检查参数配置降低 temperature 到 0.2~0.3结果有明显编造输入信息不足模型在补全对比输入文本与输出在提示词中限制“只能基于输入信息推断不确定就写未知”API 消耗过快没有控制批量频率或输出太长查看调用日志和 token 用量减少 max_tokens加 sleep 间隔设置成本上限批量任务最容易踩的坑是异常处理不完整。如果脚本里没有捕获异常跑 100 条的时候第 50 条超时后面 50 条全断掉。正确做法是单条失败不影响整体失败项记录下来跑完统一重试。还有一点容易被忽略source_text如果包含大量 HTML 标签、乱码或者重复内容会浪费 token 并影响分析质量。建议批量处理前先做简单清洗# 用 python 做基础清洗 python -c import re text open(data/input.csv, encodingutf-8).read() text re.sub(r[^], , text) # 去HTML标签 open(data/input_clean.csv, w, encodingutf-8).write(text) 10. 最佳实践与使用建议10.1 提示词工程客户发现任务的效果很大程度上取决于提示词。几个建议明确角色告诉模型它是什么角色比如“资深 B2B 销售顾问”。限制信息范围明确“只基于输入信息分析不要补充外部知识”。指定输出格式五部分、两句话、JSON 对象越具体越好。要求置信度标注让模型区分“输入明确说了”和“我推测的”。一个基础模板你是一个 B2B 客户分析助手。请基于用户提供的公开商业信息输出以下五部分内容 1. 公司核心业务一句话概括。 2. 目标客户匹配度高/中/低并说明理由。 3. 判断依据列出输入信息中支持你判断的关键句子。 4. 可能的销售切入点最多两条必须是基于输入信息的合理推断。 5. 信息缺口还需要补充哪些信息才能进一步判断。 要求 - 只基于输入信息分析不要编造。 - 不确定的信息标注“未知”。 - 不要输出任何个人敏感信息。10.2 数据管理项目里建议把输入、输出、日志分成三个目录data/ ├── input/ # 原始数据只读 ├── output/ # 模型输出结果 └── logs/ # 调用日志和异常记录原始数据不要随便覆盖每次批量跑之前备份一下。输出文件按日期命名方便回溯data/output/results_2025-06-01.json10.3 人工复核环节无论 Grok 的分析结果看起来多专业批量生成的客户分析都不能直接作为对外沟通的最终内容。建议销售团队使用的时候加一道人工复核检查高优先级客户的分析是否准确。确认销售切入点没有明显错误。对外发送前补充你自己掌握的客户背景信息。AI 分析是加速器不是决策本身。10.4 成本控制批量任务上线前先在控制台设置好预算限制或者用脚本统计每日调用量和 token 消耗。一旦发现单条客户分析成本过高优先检查是不是输入文本太长了。很多网站粘下来的介绍文本可以裁减到核心段落再喂给模型。11. 总结与下一步这次我们完整走了一遍 Grok Bot 客户发现方案的搭建流程从 API 接入、Python 脚本编写、批量任务处理到成本与异常控制。最值得尝试的是它的批处理能力500 条客户数据一个多小时跑完每一条都能得到结构化的客户分析结果。这在传统人工筛选模式下是不可想象的效率。如果你的团队日常需要处理大量企业资料整理工作这套思路可以直接复用到市场调研、竞品分析、CRM 清洗等多种场景。先跑通 API 调用然后测试提示词输出格式最后再上批量任务。最容易踩的坑是网络问题和异常处理这两个在正式跑大批量之前一定要先验证。后续想再进一步可以把 JSON 输出直接接进 CRM 系统或者企业微信机器人让分析结果自动推送给对应销售负责人真正形成一条自动化的客户发现链路。建议先保留这套最小脚本后续需要扩展时再慢慢加功能。