从Grok本地日志中提取高频问题,实际上相当于为模型做一次“深度体检”——哪些问题被反复提及,哪些表述容易引发歧义,日志中都有完整记录。具体执行可拆分为三个关键环节:首先准备好格式规范的日志文件,随后提取并清洗用户输入内容,最后借助语义聚类技术识别出最常出现的TOP10问题簇,并在每个簇中保留最短且最具代表性的问题。这样一来,你获得的就不是零散的原始字符串,而是一份可直接用于优化提示词的“用户真实痛点清单”。

需要特别强调的是:整个流程的起点是让日志自身“开口说话”,而非依赖人工猜测用户可能提问的内容。所以,日志文件本身的规范程度直接决定了后续所有操作的有效性和可靠性。
准备日志文件并确认格式规范
确保你手中的日志是Grok本地服务输出的原始文本日志,每条记录以ISO时间戳开头(如2024-06-12T08:32:15.789Z),后接JSON结构体,并且必须包含"user_input"字段。如果日志是二进制格式、压缩包,或混杂了stderr堆栈(非user_input行),则需要先解压,并用grep -v "ERROR|WARNING|traceback"过滤掉干扰行。
使用head -n 5查看前五行,确认每行都能被jq正常解析:
head -n 5 grok.log | jq -r '.user_input' 2>/dev/null | head -n 1
如果报错或返回空,说明日志格式不统一,【务必先用sed或python脚本清洗成单行JSON】,否则后续所有提取都会遗漏样本,影响分析准确性。
提取全部user_input字段并去重归一化
方法一:用jq批量抽取+sed轻量清洗
执行
jq -r '.user_input | select(type == "string")' grok.log | sed 's/^[[:space:]]*//; s/[[:space:]]*$//; s/[rnt]//g' | grep -v '^$' > raw_inputs.txt
该步骤会移除首尾空格、换行符、制表符,并剔除空行——Grok日志中经常出现空字符串输入,若不剔除,后续聚类会引入大量“空问题”噪声,影响结果质量。
方法二:用Python做语义级归一化(推荐用于中文场景)
新建normalize.py,写入以下代码:
import re, sys
for line in sys.stdin:
line = line.strip()
if not line: continue
line = re.sub(r'[^\u4e00-\u9fff\s\.!\?,;:\'"]', '', line)
line = re.sub(r'\s+', ' ', line).strip()
if len(line) < 4: continue
print(line)
然后运行
cat raw_inputs.txt | python normalize.py > normalized_inputs.txt
此步骤会清除不可见控制字符、合并多余空格,并过滤掉少于4个字符的无效输入(如“好”“??”“ok”),【有效避免将语气词和碎片化输入误判为高频问题】。
按语义相似度聚类并筛选Top10高频簇
第一步:安装sentence-transformers与hdbscan(仅需一次)
pip install sentence-transformers hdbscan numpy
第二步:运行聚类脚本cluster_questions.py
脚本核心逻辑:加载normalized_inputs.txt → 使用all-MiniLM-L6-v2模型生成句向量 → HDBSCAN聚类(参数min_cluster_size=3, min_samples=2)→ 输出每个簇的中心句与成员数。注意:不要使用KMeans,因为它强制划分且需预设K值;HDBSCAN能自动识别离群点和自然簇数量,更适合真实日志场景。
第三步:提取结果中成员数≥5的簇,按数量降序取前10组,每组只保留最短且最具代表性的原始输入
执行
python cluster_questions.py --input normalized_inputs.txt --output top10_clusters.json
输出文件top10_clusters.json每项格式示例如下:
{"representative": "怎么让Grok解释数学公式步骤", "count": 17, "examples": ["如何分步解释公式", "能不能一步步推导这个式子", "请详细拆解计算过程"]}
至此,你已成功获取用户反复追问的核心问题代表。接下来要做的是利用这些真实样本反向优化你的提示词——将模棱两可的指令改写为用户实际理解的表述,并补充缺失的上下文。日志中的每一个高频簇,都是一次优化提示词的珍贵机会,务必充分利用。
