Blame view

docs/issues/issue-2026-04-07-服务化.md 2.11 KB
e50924ed   tangwang   1. tags -> enrich...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  彻底清除掉命令行交互方式的代码,改造为提供 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 < <(head -n "$top_lines" "$query_file")
  
  # 等待所有剩余后台进程完成
  # 在这里统计处性能情况,指标:
    平均耗时:
    最大耗时:
    最小耗时:
    TP50:
    TP90:
    TP99:
  wait