feat: 新增多格式文件上传入库与认证体系

- 新增 JWT 认证模块,支持登录/注册/用户管理
- 新增文件上传接口,支持 .txt/.md/.html/.pdf/.docx 等格式解析入库
- 新增检索结果 AI 总结功能
- 新增文本去重缓存机制
- 新增全局认证夹具简化测试
- 新增配置项与环境变量支持
- 完善文档与测试覆盖
This commit is contained in:
2026-07-30 10:30:15 +08:00
parent 51dc8dc4f6
commit dce9e31bde
31 changed files with 3021 additions and 45 deletions
+63
View File
@@ -148,6 +148,69 @@ class TestQueryParserParse:
assert [c.name for c in parsed.categories] == ["财务行政"]
async def test_parse_new_fields_populated(self):
"""JSON 含 entities/intent/time_range → 正确填充字段"""
response = json.dumps(
{
"categories": [{"name": "技术文档", "confidence": 0.9}],
"rewrite": "如何设计微服务架构",
"keywords": ["架构"],
"entities": ["微服务", "Kubernetes"],
"intent": "操作",
"time_range": "2023年",
},
ensure_ascii=False,
)
parser = _make_parser(response)
parsed = await parser.parse("怎么做微服务部署")
assert parsed.parse_failed is False
assert parsed.entities == ["微服务", "Kubernetes"]
assert parsed.intent == "操作"
assert parsed.time_range == "2023年"
async def test_parse_new_fields_missing_defaults(self):
"""JSON 缺 entities/intent/time_range → 降级为默认值,parse_failed=False(向后兼容)"""
response = json.dumps(
{
"categories": [{"name": "技术文档", "confidence": 0.9}],
"rewrite": "如何设计架构",
"keywords": ["架构"],
},
ensure_ascii=False,
)
parser = _make_parser(response)
parsed = await parser.parse("怎么做架构设计")
assert parsed.parse_failed is False
assert parsed.entities == []
assert parsed.intent == ""
assert parsed.time_range == ""
async def test_parse_new_fields_wrong_type_defaults(self):
"""entities 非列表 / intent 非字符串 / time_range 非字符串 → 置空,parse_failed=False(容错)"""
response = json.dumps(
{
"categories": [{"name": "技术文档", "confidence": 0.9}],
"rewrite": "如何设计架构",
"keywords": ["架构"],
"entities": "微服务", # 非列表
"intent": 123, # 非字符串
"time_range": ["2023"], # 非字符串
},
ensure_ascii=False,
)
parser = _make_parser(response)
parsed = await parser.parse("怎么做架构设计")
assert parsed.parse_failed is False
assert parsed.entities == []
assert parsed.intent == ""
assert parsed.time_range == ""
class TestDecideRoute:
"""decide_route 纯函数的四个分支"""