# -*- coding: utf-8 -*-
# AI 助手知识库检索回归集（改检索层后必跑）
# 用法: python3 脚本/kb_eval.py     期望来源写成关键词, 命中即 PASS
import os, sys
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(ROOT, '脚本'))
import ai_chat as A

CASES = [  # (问题, [期望来源关键词...], 命中的任一条即 PASS)
    ('培养箱污染怎么办', ['百问百答']),
    ('冻干保护剂怎么选', ['冻干程序汇总', '冻干服务']),
    ('分子诊断原料酶有哪些货号', ['货号主数据', '产品册']),
    ('Taq 酶有哪些规格', ['货号主数据', 'Taq']),
    ('新人培训', ['新人培训']),
    ('客户嫌价格贵怎么回应', ['销售六步法', '报价']),
    ('甲基化试剂盒怎么用', ['货号主数据']),
    ('AS33-B10T 有几个组分', ['产品主数据']),
    ('E02-15 是什么产品', ['产品主数据']),
    ('BR1D301-01 含哪些组分', ['产品主数据']),
]


def main():
    line = sys.argv[1] if len(sys.argv) > 1 else 'da'
    ok = 0
    for q, keys in CASES:
        out = A._search_knowledge_base(q, line)
        head = out[:1200]
        hit = [k for k in keys if k in head]
        flag = 'PASS' if hit else 'FAIL'
        ok += 1 if hit else 0
        src = [b.split('｜')[0].replace('【本地知识库内容】', '').strip()
               for b in out.split('\n\n') if b.startswith('【')][1:3]
        print('%s  %-22s %5d字  命中=%s  top: %s' % (
            flag, q, len(out), '/'.join(hit) or '-', ' ⟶ '.join(s[:46] for s in src)))
    print('\n%d/%d 通过（line=%s）' % (ok, len(CASES), line))
    return 0 if ok == len(CASES) else 1


if __name__ == '__main__':
    sys.exit(main())
