彻底清除掉命令行交互方式的代码,改造为提供 HTTP 接口,端口6001。 并提供scripts/service_ctl.sh的方式管理服务的启停 返回分类结果的list(results):list由多个dict组成,每个dict的key为对应的分类任务,value是三元组,即值、打分、概率(如果值为none则该项不输出) 完善日志系统,当前cli方式输出的重要信息,在日志以及http接口的details字段体现。 提供一个压测脚本放到本项目的合适的目录下,作为压测工具。该压测工具针对每条请求打印出结果,并最后给出性能指标,参考: #!/bin/bash
默认值
concurrency=${1:-1} top_lines=${2:-100}
固定查询文件路径
query_file="/data/saas-search/scripts/evaluation/queries/queries.txt"
检查文件是否存在
if [ ! -f "$query_file" ]; then echo "错误: 查询文件不存在: $query_file" >&2 exit 1 fi
检查 jq 是否可用
if ! command -v jq &> /dev/null; then echo "错误: 需要安装 jq 来解析 JSON" >&2 exit 1 fi
url="http://127.0.0.1:6001/..." max_jobs=$concurrency job_count=0
读取文件前 top_lines 行,每行作为一个 query
while IFS= read -r query; do # 跳过空行 [ -z "$query" ] && continue
# 启动子进程执行请求
(
# 安全构建 JSON payload
payload=$(jq -n --arg q "$query" '{query: $q}')
# 发送请求并获取响应
response=$(curl -s -X POST "$url" \
-H 'Content-Type: application/json' \
-d "$payload")
# 提取 results 字段(紧凑 JSON 格式)
results=$(echo "$response" | jq -c '.results')
# 输出 query 和对应的 results
printf "%s\t%s\n" "$query" "$results"
) &
# 控制并发数量
((job_count++))
if (( job_count >= max_jobs )); then
wait -n # 等待任意一个后台进程完成
((job_count--))
fi
done
等待所有剩余后台进程完成
在这里统计处性能情况,指标:
平均耗时: 最大耗时: 最小耗时: TP50: TP90: TP99: wait