本地规范检索服务
运行环境
- WSL(适用于 Linux 的 Windows 子系统)Ubuntu。
- Python(编程语言)3.12 或兼容版本。
安装
在项目根目录执行:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r standards_service/requirements.txt
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
启动
source .venv/bin/activate
uvicorn app:app --host 127.0.0.1 --port 8107
默认读取项目根目录下的 归集617清洗.csv,默认把查询日志写入 standards_service/logs/query.jsonl。
可以通过环境变量覆盖路径:
export STANDARDS_CSV_PATH=/app/data/归集617清洗.csv`
export STANDARDS_LOG_PATH=/app/logs/query.jsonl
调用
curl --noproxy '*' \
-X POST http://127.0.0.1:8107/v1/search \
-H 'Content-Type: application/json' \
-d '{"keywords":["GB 50330","建筑边坡工程技术规范"]}'
每条查询返回 0~3 条候选规范。状态、实施日期和替代情况只作为结果返回,不参与匹配。
测试
source .venv/bin/activate
python -m pytest -q tests
测试同时覆盖合成数据和项目中的真实规范清单。
并发和超时建议
当前服务支持多个 HTTP(网络请求)并发访问。匹配器在启动时加载本地规范库,查询阶段只读内存数据;查询日志在单进程内使用线程锁写入。
本地压测结果显示,单进程 Uvicorn(Python ASGI 服务)下:
- 10 个并发请求,每个请求约 50 条关键词,可以在 5 秒内返回。
- 10 个并发请求,每个请求 100 条关键词,建议调用端超时设置不低于 15 秒。
如果后续使用多进程部署,需要重新设计日志写入方式,避免多个进程同时写同一个 JSONL(逐行结构化日志)文件。
API 访问
- URL http://127.0.0.1:8107/v1/search
- 请求参数
- {
"keywords": [
"GB 50330-2013 建筑边坡工程技术规范",
"混凝土结构设计规范",
"GB 50330"
]
}
- 响应结果
- {
"results": [
{
"query": "GB 50330-2013 建筑边坡工程技术规范",
"candidates": [
{
"code": "GB 50330-2013",
"title": "建筑边坡工程技术规范",
"status": "现行",
"relation_text": "替代 GB 50330-2002;自《建筑与市政地基基础通用规范》 GB 55003-2021 实施之日起,该标准相关强制性条文第3.1.3、3.3.6、18.4.1、19.1.1条同时废止。",
"implement_date": "2014-6-1",
"match_score": 1.0
},
{
"code": "GB 50330-2002",
"title": "建筑边坡工程技术规范",
"status": "已作废",
"relation_text": "被 GB/T 50330-2013 代替",
"implement_date": "2002-8-1",
"match_score": 0.91
},
{
"code": "GB 50339-2013",
"title": "智能建筑工程质量验收规范",
"status": "现行",
"relation_text": "替代 GB 50339-2003;自《建筑电气与智能化通用规范》 GB 55024-2022 实施之日起,该标准相关强制性条文第12.0.2、22.0.4条同时废止",
"implement_date": "2014-2-1",
"match_score": 0.6886
}
]
},
{
"query": "混凝土结构设计规范",
"candidates": [
{
"code": "GB 50367-2013",
"title": "混凝土结构加固设计规范",
"status": "现行",
"relation_text": "替代 GB 50367-2006;自《既有建筑鉴定与加固通用规范》 GB 55021-2021 实施之日起,该标准相关强制性条文第3.1.8、4.3.1、4.3.3、4.4.2、4.5.3条同时废止。",
"implement_date": "2014-6-1",
"match_score": 0.9
},
{
"code": "GB/T 50476-2008",
"title": "混凝土结构耐久性设计规范",
"status": "已作废",
"relation_text": "被 GB/T 50476-2019 代替",
"implement_date": "2009-5-1",
"match_score": 0.8571
},
{
"code": "TB 10092-2017",
"title": "铁路桥涵混凝土结构设计规范(2026年局部修订)",
"status": "现行",
"relation_text": "替代 TB 10002.3-2005;TB 10002.4-2005 废止;公告:国家铁路局公告 2025年第31号",
"implement_date": "2017-5-1",
"match_score": 0.7932
}
]
},
{
"query": "GB 50330",
"candidates": [
{
"code": "GB 50330-2013",
"title": "建筑边坡工程技术规范",
"status": "现行",
"relation_text": "替代 GB 50330-2002;自《建筑与市政地基基础通用规范》 GB 55003-2021 实施之日起,该标准相关强制性条文第3.1.3、3.3.6、18.4.1、19.1.1条同时废止。",
"implement_date": "2014-6-1",
"match_score": 0.9
},
{
"code": "GB 50330-2002",
"title": "建筑边坡工程技术规范",
"status": "已作废",
"relation_text": "被 GB/T 50330-2013 代替",
"implement_date": "2002-8-1",
"match_score": 0.9
}
]
}
]
}