issue-2026-04-07-服务化.md 2.11 KB

彻底清除掉命令行交互方式的代码,改造为提供 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