From 86b9ac806aaa5e326f528953f1a0ce3d6ab17e97 Mon Sep 17 00:00:00 2001 From: ash66 Date: Mon, 18 May 2026 13:29:57 +0800 Subject: [PATCH] Delete log file for May 14, 2026, to clean up unnecessary data and maintain log management. --- .gitignore | 4 + .../aliyun_parser/.claude/settings.local.json | 8 + backend/app/aliyun_parser/parse_pdf.py | 475 ++ backend/app/aliyun_parser/schema.sql | 122 + backend/app/aliyun_parser/upload_to_milvus.py | 327 ++ backend/app/aliyun_parser/vector_chunks.json | 5212 +++++++++++++++++ backend/app/aliyun_parser/嵌入和召回.md | 263 + dev.bat | 105 +- .../backend-project-architecture.md | 717 +++ ...arsing-embedding-migration-requirements.md | 170 + frontend/vite.config.ts | 4 +- logs/api.log | 1487 ----- logs/app_2026-05-14.log | 119 - 13 files changed, 7359 insertions(+), 1654 deletions(-) create mode 100644 backend/app/aliyun_parser/.claude/settings.local.json create mode 100644 backend/app/aliyun_parser/parse_pdf.py create mode 100644 backend/app/aliyun_parser/schema.sql create mode 100644 backend/app/aliyun_parser/upload_to_milvus.py create mode 100644 backend/app/aliyun_parser/vector_chunks.json create mode 100644 backend/app/aliyun_parser/嵌入和召回.md create mode 100644 docs/architecture/backend-project-architecture.md create mode 100644 docs/rfc/backend-api-parsing-embedding-migration-requirements.md delete mode 100644 logs/api.log delete mode 100644 logs/app_2026-05-14.log diff --git a/.gitignore b/.gitignore index 26c8d36..85bb67d 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,7 @@ ENV/ # OS files .DS_Store Thumbs.db + + +# logs files +logs/ \ No newline at end of file diff --git a/backend/app/aliyun_parser/.claude/settings.local.json b/backend/app/aliyun_parser/.claude/settings.local.json new file mode 100644 index 0000000..4f72672 --- /dev/null +++ b/backend/app/aliyun_parser/.claude/settings.local.json @@ -0,0 +1,8 @@ +{ + "permissions": { + "allow": [ + "Bash(python3 *)", + "Bash(PGPASSWORD=postgresql123456 psql *)" + ] + } +} diff --git a/backend/app/aliyun_parser/parse_pdf.py b/backend/app/aliyun_parser/parse_pdf.py new file mode 100644 index 0000000..9dcc3fc --- /dev/null +++ b/backend/app/aliyun_parser/parse_pdf.py @@ -0,0 +1,475 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +阿里云文档智能 API 解析 PDF,输出三层结构 chunks +- structure_nodes: 目录树结构 +- semantic_blocks: 语义块(章节文本、表格、图片) +- vector_chunks: 检索块(带 overlap 切分) +""" + +import argparse +import json +import re +import time +from pathlib import Path +from typing import Dict, List + +from alibabacloud_docmind_api20220711.client import Client as DocmindClient +from alibabacloud_tea_openapi import models as open_api_models +from alibabacloud_docmind_api20220711 import models as docmind_models +from alibabacloud_tea_util import models as util_models + +# ===================== 阿里云配置 ===================== +ALIBABA_ACCESS_KEY_ID = "LTAI5t6fWvAsvZkoF9WTbtys" +ALIBABA_ACCESS_KEY_SECRET = "WX4oaE4FLYRa5L85TMQkqRPHeTJAF0" +ALIBABA_ENDPOINT = "docmind-api.cn-hangzhou.aliyuncs.com" + +# ===================== 切分参数 ===================== +MAX_CHARS = 600 +OVERLAP_CHARS = 80 + +# ===================== 布局类型常量 ===================== +TOC_TITLES = {"目次", "目录"} +TITLE_SUBTYPES = {"doc_title", "para_title"} +TEXT_SUBTYPES = {"para", "none"} +FIGURE_TYPES = {"figure", "figure_name", "figure_note"} +FIGURE_SUBTYPES = {"picture", "pic_title", "pic_caption"} + + +# ===================== 阿里云 API 客户端 ===================== +def init_client() -> DocmindClient: + config = open_api_models.Config( + access_key_id=ALIBABA_ACCESS_KEY_ID, + access_key_secret=ALIBABA_ACCESS_KEY_SECRET, + ) + config.endpoint = ALIBABA_ENDPOINT + return DocmindClient(config) + + +def submit_job(client: DocmindClient, file_path: str) -> str: + """提交文档解析任务""" + file_name = Path(file_path).name + request = docmind_models.SubmitDocParserJobAdvanceRequest( + file_url_object=open(file_path, "rb"), + file_name=file_name, + file_name_extension=Path(file_path).suffix.lstrip("."), + llm_enhancement=True, + enhancement_mode="VLM", + ) + runtime = util_models.RuntimeOptions() + response = client.submit_doc_parser_job_advance(request, runtime) + return response.body.data.id + + +def query_status(client: DocmindClient, task_id: str) -> Dict: + """查询任务状态""" + request = docmind_models.QueryDocParserStatusRequest(id=task_id) + response = client.query_doc_parser_status(request) + return response.body.data.to_map() if response.body.data else None + + +def wait_for_completion(client: DocmindClient, task_id: str, poll_interval: int = 5) -> bool: + """等待任务完成""" + while True: + status_data = query_status(client, task_id) + if not status_data: + return False + status = status_data.get("Status", "").lower() + if status == "success": + return True + elif status == "failed": + print(f"任务失败: {status_data}") + return False + print(f"任务状态: {status}, 等待中...") + time.sleep(poll_interval) + + +def get_result(client: DocmindClient, task_id: str, layout_num: int = 0, layout_step_size: int = 50) -> Dict: + """获取解析结果""" + request = docmind_models.GetDocParserResultRequest( + id=task_id, + layout_step_size=layout_step_size, + layout_num=layout_num, + ) + response = client.get_doc_parser_result(request) + return response.body.data if response.body.data else None + + +def collect_all_results(client: DocmindClient, task_id: str, layout_step_size: int = 50) -> List[Dict]: + """收集所有解析结果""" + all_layouts = [] + layout_num = 0 + while True: + result_data = get_result(client, task_id, layout_num, layout_step_size) + if not result_data: + break + layouts = result_data.get("layouts", []) + if not layouts: + break + all_layouts.extend(layouts) + layout_num += len(layouts) + if len(layouts) < layout_step_size: + break + return all_layouts + + +# ===================== 文本处理 ===================== +def normalize_text(text: str) -> str: + text = text.replace("\r", "\n") + text = text.replace(" ", " ") + text = re.sub(r"\n+", "\n", text) + text = re.sub(r"[ \t]+", " ", text) + return text.strip() + + +def get_page(layout: Dict) -> int: + return layout.get("pageNum", layout.get("pageNumber", 0)) + + +def get_text(layout: Dict) -> str: + text = normalize_text(layout.get("text", "")) + if text: + return text + return normalize_text(layout.get("markdownContent", "")) + + +# ===================== 布局类型判断 ===================== +def is_title(layout: Dict) -> bool: + return layout.get("type") == "title" or layout.get("subType") in TITLE_SUBTYPES + + +def is_text(layout: Dict) -> bool: + return layout.get("type") == "text" and layout.get("subType", "none") in TEXT_SUBTYPES + + +def is_figure(layout: Dict) -> bool: + return layout.get("type") in FIGURE_TYPES or layout.get("subType") in FIGURE_SUBTYPES + + +def is_table(layout: Dict) -> bool: + return layout.get("type") == "table" + + +def is_toc_layout(layout: Dict) -> bool: + text = get_text(layout) + if text in TOC_TITLES: + return True + if get_page(layout) == 1 and re.match(r"^\d+(\.\d+)*\s+.+[.。…]{2,}\s*\d+$", text): + return True + return False + + +def extract_table_text(layout: Dict) -> str: + rows = [] + for cell in layout.get("cells", []): + texts = [] + for cell_layout in cell.get("layouts", []): + cell_text = normalize_text(cell_layout.get("text", "")) + if cell_text: + texts.append(cell_text) + if texts: + rows.append(" ".join(texts)) + return "\n".join(rows).strip() + + +# ===================== 结构层:目录树 ===================== +def build_structure_nodes(layouts: List[Dict]) -> List[Dict]: + nodes = [] + for layout in layouts: + if not is_title(layout): + continue + text = get_text(layout) + if not text or text in TOC_TITLES: + continue + nodes.append( + { + "unique_id": layout.get("uniqueId"), + "page": get_page(layout), + "index": layout.get("index", 0), + "level": layout.get("level", 0), + "title": text, + "type": layout.get("type"), + "sub_type": layout.get("subType"), + } + ) + return nodes + + +# ===================== 语义层:章节内容 ===================== +def update_section_path(section_stack: List[Dict], layout: Dict) -> List[Dict]: + level = layout.get("level", 0) + title = get_text(layout) + while section_stack and section_stack[-1]["level"] >= level: + section_stack.pop() + section_stack.append( + { + "level": level, + "title": title, + "page": get_page(layout), + "unique_id": layout.get("uniqueId"), + } + ) + return section_stack + + +def section_path_titles(section_stack: List[Dict]) -> List[str]: + return [item["title"] for item in section_stack] + + +def flush_text_block(blocks: List[Dict], semantic_blocks: List[Dict], block_id: int) -> int: + if not blocks: + return block_id + + texts = [item["text"] for item in blocks if item["text"]] + merged_text = "\n".join(texts).strip() + if not merged_text: + return block_id + + semantic_blocks.append( + { + "semantic_id": f"semantic-{block_id}", + "block_type": "section_text", + "page_start": min(item["page"] for item in blocks), + "page_end": max(item["page"] for item in blocks), + "section_path": blocks[0]["section_path"], + "section_level": blocks[0]["section_level"], + "section_title": blocks[0]["section_title"], + "source_ids": [item["unique_id"] for item in blocks if item.get("unique_id")], + "text": merged_text, + } + ) + return block_id + 1 + + +def build_semantic_blocks(layouts: List[Dict]) -> List[Dict]: + semantic_blocks = [] + section_stack = [] + pending_text_blocks = [] + block_id = 1 + skip_toc_page = False + + for layout in layouts: + text = get_text(layout) + page = get_page(layout) + + if is_toc_layout(layout): + skip_toc_page = True + continue + if skip_toc_page and page == 1: + continue + if skip_toc_page and page != 1: + skip_toc_page = False + + if is_title(layout): + block_id = flush_text_block(pending_text_blocks, semantic_blocks, block_id) + pending_text_blocks = [] + section_stack = update_section_path(section_stack, layout) + continue + + section_path = section_path_titles(section_stack) + section_title = section_path[-1] if section_path else "未分类" + section_level = len(section_path) + + if is_table(layout): + block_id = flush_text_block(pending_text_blocks, semantic_blocks, block_id) + pending_text_blocks = [] + table_text = extract_table_text(layout) + if table_text: + semantic_blocks.append( + { + "semantic_id": f"semantic-{block_id}", + "block_type": "table", + "page_start": page, + "page_end": page, + "section_path": section_path, + "section_level": section_level, + "section_title": section_title, + "source_ids": [layout.get("uniqueId")], + "text": table_text, + } + ) + block_id += 1 + continue + + if is_figure(layout): + block_id = flush_text_block(pending_text_blocks, semantic_blocks, block_id) + pending_text_blocks = [] + if text: + semantic_blocks.append( + { + "semantic_id": f"semantic-{block_id}", + "block_type": "figure", + "page_start": page, + "page_end": page, + "section_path": section_path, + "section_level": section_level, + "section_title": section_title, + "source_ids": [layout.get("uniqueId")], + "text": text, + } + ) + block_id += 1 + continue + + if is_text(layout) and text: + pending_text_blocks.append( + { + "page": page, + "text": text, + "unique_id": layout.get("uniqueId"), + "section_path": section_path, + "section_level": section_level, + "section_title": section_title, + } + ) + + flush_text_block(pending_text_blocks, semantic_blocks, block_id) + return semantic_blocks + + +# ===================== 检索层:向量 chunks ===================== +def split_text_with_overlap(text: str, max_chars: int, overlap_chars: int) -> List[str]: + text = text.strip() + if len(text) <= max_chars: + return [text] if text else [] + + parts = [] + start = 0 + while start < len(text): + end = min(len(text), start + max_chars) + parts.append(text[start:end].strip()) + if end >= len(text): + break + start = max(0, end - overlap_chars) + return [part for part in parts if part] + + +def build_vector_chunks( + semantic_blocks: List[Dict], + doc_id: str, + doc_title: str, + max_chars: int, + overlap_chars: int, +) -> List[Dict]: + vector_chunks = [] + chunk_index = 1 + + for block in semantic_blocks: + pieces = split_text_with_overlap(block["text"], max_chars, overlap_chars) + for piece_index, piece in enumerate(pieces, start=1): + if block["section_path"]: + header = f"标准:{doc_title}\n章节:{' > '.join(block['section_path'])}\n\n" + else: + header = f"标准:{doc_title}\n\n" + vector_chunks.append( + { + "doc_id": doc_id, + "doc_title": doc_title, + "chunk_id": f"chunk-{chunk_index}", + "chunk_index": chunk_index, + "semantic_id": block["semantic_id"], + "chunk_type": block["block_type"], + "piece_index": piece_index, + "page_start": block["page_start"], + "page_end": block["page_end"], + "section_path": block["section_path"], + "section_level": block["section_level"], + "section_title": block["section_title"], + "source_ids": block["source_ids"], + "text": piece, + "embedding_text": header + piece, + } + ) + chunk_index += 1 + + return vector_chunks + + +# ===================== 主转换函数 ===================== +def convert_layouts( + layouts: List[Dict], + doc_id: str, + doc_title: str, + max_chars: int, + overlap_chars: int, +) -> Dict: + structure_nodes = build_structure_nodes(layouts) + semantic_blocks = build_semantic_blocks(layouts) + vector_chunks = build_vector_chunks( + semantic_blocks, + doc_id=doc_id, + doc_title=doc_title, + max_chars=max_chars, + overlap_chars=overlap_chars, + ) + return { + "doc_id": doc_id, + "doc_title": doc_title, + "structure_nodes": structure_nodes, + "semantic_blocks": semantic_blocks, + "vector_chunks": vector_chunks, + } + + +# ===================== CLI 入口 ===================== +def main() -> None: + parser = argparse.ArgumentParser(description="阿里云文档智能解析 PDF,输出三层结构 chunks") + parser.add_argument("pdf_path", help="PDF 文件路径") + parser.add_argument("--out", default="vector_chunks.json", help="输出 JSON 文件路径") + parser.add_argument("--layouts-out", dest="layouts_output", help="输出原始 layouts JSON") + parser.add_argument("--doc-id", default="GB14747-2006", help="文档 ID") + parser.add_argument("--doc-title", default="GB 14747—2006 儿童三轮车安全要求", help="文档标题") + parser.add_argument("--max-chars", type=int, default=MAX_CHARS, help="单个检索 chunk 最大字符数") + parser.add_argument("--overlap-chars", type=int, default=OVERLAP_CHARS, help="相邻检索 chunk 重叠字符数") + parser.add_argument("--poll-interval", type=int, default=5, help="轮询间隔(秒)") + args = parser.parse_args() + + pdf_path = Path(args.pdf_path).expanduser().resolve() + if not pdf_path.exists(): + raise FileNotFoundError(f"PDF 文件不存在: {pdf_path}") + + # 1. 提交阿里云任务 + client = init_client() + print(f"提交任务: {pdf_path}") + task_id = submit_job(client, str(pdf_path)) + print(f"任务 ID: {task_id}") + + # 2. 等待完成 + print("等待任务完成...") + if not wait_for_completion(client, task_id, args.poll_interval): + print("任务失败,退出") + return + + # 3. 获取 layouts + print("获取解析结果...") + layouts = collect_all_results(client, task_id) + print(f"获取到 {len(layouts)} 个布局块") + + # 4. 输出原始 layouts(可选) + if args.layouts_output: + layouts_path = Path(args.layouts_output).expanduser().resolve() + layouts_path.write_text(json.dumps(layouts, ensure_ascii=False, indent=2), encoding="utf-8") + print(f"原始 layouts 已写入: {layouts_path}") + + # 5. 转换为三层结构 + print("转换为三层结构...") + data = convert_layouts( + layouts, + doc_id=args.doc_id, + doc_title=args.doc_title, + max_chars=args.max_chars, + overlap_chars=args.overlap_chars, + ) + + # 6. 输出结果 + output_path = Path(args.out).expanduser().resolve() + output_path.write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8") + + print(f"结构层节点数: {len(data['structure_nodes'])}") + print(f"语义层块数: {len(data['semantic_blocks'])}") + print(f"检索层块数: {len(data['vector_chunks'])}") + print(f"输出文件: {output_path}") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/backend/app/aliyun_parser/schema.sql b/backend/app/aliyun_parser/schema.sql new file mode 100644 index 0000000..78ac9d6 --- /dev/null +++ b/backend/app/aliyun_parser/schema.sql @@ -0,0 +1,122 @@ +-- 法规文档向量检索系统数据库表结构 +-- PostgreSQL + +-- ==================== 文档表 ==================== +CREATE TABLE documents ( + id SERIAL PRIMARY KEY, + doc_id VARCHAR(128) UNIQUE NOT NULL, -- 文档唯一标识,如 "GB14747-2006" + title VARCHAR(512) NOT NULL, -- 文档标题 + doc_type VARCHAR(32), -- 文档类型:标准/法规/规范 + standard_number VARCHAR(64), -- 标准编号:如 "GB 14747-2006" + publish_date DATE, -- 发布日期 + implement_date DATE, -- 实施日期 + status VARCHAR(32), -- 状态:现行/废止/修订 + source_url VARCHAR(512), -- 来源 URL + file_path VARCHAR(512), -- 本地 PDF 文件路径 + file_size INT, -- 文件大小(字节) + upload_time TIMESTAMP DEFAULT NOW(), -- 上传时间 + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() +); + +COMMENT ON TABLE documents IS '文档元数据表'; +COMMENT ON COLUMN documents.doc_id IS '文档唯一标识,用于关联 Milvus 和其他表'; +COMMENT ON COLUMN documents.standard_number IS '标准编号,如 GB 14747-2006'; + +-- ==================== 章节结构表 ==================== +CREATE TABLE sections ( + id SERIAL PRIMARY KEY, + doc_id VARCHAR(128) NOT NULL, + unique_id VARCHAR(64) NOT NULL, -- 阿里云返回的唯一标识 + level INT NOT NULL, -- 层级:1, 2, 3... + title VARCHAR(512) NOT NULL, -- 章节标题 + page INT, -- 所在页码 + index INT, -- 页内顺序 + parent_id INT, -- 父章节 ID(树形结构) + created_at TIMESTAMP DEFAULT NOW(), + + CONSTRAINT fk_sections_doc_id FOREIGN KEY (doc_id) REFERENCES documents(doc_id), + CONSTRAINT fk_sections_parent_id FOREIGN KEY (parent_id) REFERENCES sections(id), + CONSTRAINT uq_sections_doc_unique UNIQUE (doc_id, unique_id) +); + +COMMENT ON TABLE sections IS '章节结构表,用于目录导航'; +COMMENT ON COLUMN sections.parent_id IS '父章节 ID,构建树形结构'; +COMMENT ON COLUMN sections.level IS '层级深度,1 为最顶层'; + +-- ==================== 语义块表 ==================== +CREATE TABLE semantic_blocks ( + id SERIAL PRIMARY KEY, + doc_id VARCHAR(128) NOT NULL, + semantic_id VARCHAR(64) NOT NULL, -- 语义块唯一标识 + block_type VARCHAR(32) NOT NULL, -- 类型:section_text/table/figure + page_start INT NOT NULL, -- 起始页码 + page_end INT NOT NULL, -- 结束页码 + section_id INT, -- 所属章节 + section_title VARCHAR(512), -- 章节标题(冗余,方便查询) + section_level INT, -- 章节层级 + source_ids JSONB, -- 原始 layout IDs(JSON 数组) + text TEXT NOT NULL, -- 完整内容(未被切分) + created_at TIMESTAMP DEFAULT NOW(), + + CONSTRAINT fk_semantic_blocks_doc_id FOREIGN KEY (doc_id) REFERENCES documents(doc_id), + CONSTRAINT fk_semantic_blocks_section_id FOREIGN KEY (section_id) REFERENCES sections(id), + CONSTRAINT uq_semantic_blocks_doc_semantic UNIQUE (doc_id, semantic_id) +); + +COMMENT ON TABLE semantic_blocks IS '语义块表,用于邻域扩展,恢复完整内容'; +COMMENT ON COLUMN semantic_blocks.block_type IS '类型:section_text(正文)、table(表格)、figure(图示)'; +COMMENT ON COLUMN semantic_blocks.source_ids IS '原始阿里云 layout 的 uniqueId 数组'; +COMMENT ON COLUMN semantic_blocks.text IS '完整语义内容,未被切分'; + +-- ==================== 向量块元数据表 ==================== +CREATE TABLE vector_chunks ( + id SERIAL PRIMARY KEY, + doc_id VARCHAR(128) NOT NULL, + chunk_id VARCHAR(64) NOT NULL, -- Milvus 主键 + semantic_id VARCHAR(64) NOT NULL, -- 关联语义块 + chunk_index INT NOT NULL, -- 切片序号(全局) + piece_index INT, -- 同语义块内的切片序号 + page_start INT, + page_end INT, + section_title VARCHAR(512), + text VARCHAR(2048), -- 切片文本(可选,缩短版用于展示) + source_ids JSONB, -- 原始 layout IDs(JSON 数组) + created_at TIMESTAMP DEFAULT NOW(), + + CONSTRAINT fk_vector_chunks_doc_id FOREIGN KEY (doc_id) REFERENCES documents(doc_id), + CONSTRAINT fk_vector_chunks_semantic_id FOREIGN KEY (doc_id, semantic_id) + REFERENCES semantic_blocks(doc_id, semantic_id), + CONSTRAINT uq_vector_chunks_doc_chunk UNIQUE (doc_id, chunk_id) +); + +COMMENT ON TABLE vector_chunks IS '向量块元数据表,用于快速关联查询'; +COMMENT ON COLUMN vector_chunks.chunk_id IS 'Milvus 向量库主键'; +COMMENT ON COLUMN vector_chunks.piece_index IS '同语义块内的切片序号,用于按序拼接'; + +-- ==================== 索引 ==================== +CREATE INDEX idx_sections_doc_id ON sections(doc_id); +CREATE INDEX idx_sections_parent_id ON sections(parent_id); +CREATE INDEX idx_sections_level ON sections(level); + +CREATE INDEX idx_semantic_blocks_doc_id ON semantic_blocks(doc_id); +CREATE INDEX idx_semantic_blocks_section_id ON semantic_blocks(section_id); +CREATE INDEX idx_semantic_blocks_block_type ON semantic_blocks(block_type); +CREATE INDEX idx_semantic_blocks_semantic_id ON semantic_blocks(semantic_id); + +CREATE INDEX idx_vector_chunks_doc_id ON vector_chunks(doc_id); +CREATE INDEX idx_vector_chunks_semantic_id ON vector_chunks(semantic_id); +CREATE INDEX idx_vector_chunks_chunk_id ON vector_chunks(chunk_id); + +-- ==================== 触发器:自动更新 updated_at ==================== +CREATE OR REPLACE FUNCTION update_updated_at() +RETURNS TRIGGER AS $$ +BEGIN + NEW.updated_at = NOW(); + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER tr_documents_updated_at + BEFORE UPDATE ON documents + FOR EACH ROW EXECUTE FUNCTION update_updated_at(); \ No newline at end of file diff --git a/backend/app/aliyun_parser/upload_to_milvus.py b/backend/app/aliyun_parser/upload_to_milvus.py new file mode 100644 index 0000000..0188879 --- /dev/null +++ b/backend/app/aliyun_parser/upload_to_milvus.py @@ -0,0 +1,327 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +将 vector_chunks.json 向量化并上传到 Milvus 和 PostgreSQL +使用中转站的 OpenAI 兼容 API +""" + +import argparse +import json +import time +from pathlib import Path +from typing import List, Dict + +import psycopg2 +from psycopg2.extras import execute_values +from pymilvus import ( + connections, + Collection, + FieldSchema, + CollectionSchema, + DataType, + utility, +) +from openai import OpenAI + +# ===================== 配置 ===================== +# 中转站配置 +RELAY_BASE_URL = "http://6.86.80.4:30080/v1" +RELAY_API_KEY = "sk-5HeY7gfSIlyZMacfuXOf5cphpymsNqufEu1ou4U3avbULcyY" +EMBEDDING_MODEL = "text-embedding-v3" # 中转站支持的 embedding 模型 + +# Milvus 配置 +MILVUS_HOST = "localhost" +MILVUS_PORT = "19530" +COLLECTION_NAME = "regulation_chunks" + +# PostgreSQL 配置 +PG_HOST = "6.86.80.10" +PG_PORT = 5432 +PG_USER = "postgresql" +PG_PASSWORD = "postgresql123456" +PG_DATABASE = "postgres" + + +# ===================== Embedding ===================== +def get_openai_client(api_key: str, base_url: str) -> OpenAI: + """创建 OpenAI 客户端连接到中转站""" + return OpenAI(api_key=api_key, base_url=base_url) + + +def get_embeddings_batch(client: OpenAI, texts: List[str], batch_size: int = 10) -> List[List[float]]: + """批量获取文本向量""" + all_embeddings = [] + + for i in range(0, len(texts), batch_size): + batch = texts[i:i + batch_size] + print(f"Embedding batch {i // batch_size + 1}/{(len(texts) - 1) // batch_size + 1}...") + + response = client.embeddings.create( + model=EMBEDDING_MODEL, + input=batch, + ) + + embeddings = [item.embedding for item in response.data] + all_embeddings.extend(embeddings) + + return all_embeddings + + +# ===================== Milvus ===================== +def init_milvus(host: str, port: str): + connections.connect("default", host=host, port=port) + print(f"已连接 Milvus: {host}:{port}") + + +def create_collection(name: str, dim: int) -> Collection: + """创建或获取 collection""" + if utility.has_collection(name): + print(f"Collection '{name}' 已存在,删除重建") + utility.drop_collection(name) + + fields = [ + FieldSchema(name="chunk_id", dtype=DataType.VARCHAR, max_length=64, is_primary=True), + FieldSchema(name="doc_id", dtype=DataType.VARCHAR, max_length=128), + FieldSchema(name="doc_title", dtype=DataType.VARCHAR, max_length=512), + FieldSchema(name="chunk_index", dtype=DataType.INT64), + FieldSchema(name="semantic_id", dtype=DataType.VARCHAR, max_length=64), + FieldSchema(name="chunk_type", dtype=DataType.VARCHAR, max_length=32), + FieldSchema(name="page_start", dtype=DataType.INT64), + FieldSchema(name="page_end", dtype=DataType.INT64), + FieldSchema(name="section_title", dtype=DataType.VARCHAR, max_length=512), + FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=2048), + FieldSchema(name="source_ids", dtype=DataType.VARCHAR, max_length=4096), # JSON 字符串 + FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=dim), + ] + + schema = CollectionSchema(fields, description="法规文档检索 chunks") + collection = Collection(name, schema) + + # 创建向量索引(IVF_FLAT,适合中小规模) + index_params = { + "metric_type": "COSINE", + "index_type": "IVF_FLAT", + "params": {"nlist": 128}, + } + collection.create_index("embedding", index_params) + print(f"Collection '{name}' 创建完成,索引已建立") + + return collection + + +def insert_chunks(collection: Collection, chunks: List[Dict], embeddings: List[List[float]]): + """插入 chunks 到 Milvus""" + data = [ + [c["chunk_id"] for c in chunks], + [c["doc_id"] for c in chunks], + [c["doc_title"] for c in chunks], + [c["chunk_index"] for c in chunks], + [c["semantic_id"] for c in chunks], + [c["chunk_type"] for c in chunks], + [c["page_start"] for c in chunks], + [c["page_end"] for c in chunks], + [c["section_title"] for c in chunks], + [c["text"] for c in chunks], + [json.dumps(c.get("source_ids", [])) for c in chunks], # JSON 字符串 + embeddings, + ] + + collection.insert(data) + collection.flush() + print(f"已插入 {len(chunks)} 个 chunks") + + +def load_collection(collection: Collection): + """加载 collection 到内存(搜索前必须)""" + collection.load() + print(f"Collection 已加载到内存") + + +# ===================== PostgreSQL ===================== +def get_pg_connection(host: str, port: int, user: str, password: str, database: str): + """获取 PostgreSQL 连接""" + conn = psycopg2.connect( + host=host, + port=port, + user=user, + password=password, + database=database, + ) + print(f"已连接 PostgreSQL: {host}:{port}/{database}") + return conn + + +def insert_chunks_to_pg(conn, chunks: List[Dict], doc_data: Dict): + """插入 chunks 和相关数据到 PostgreSQL""" + cursor = conn.cursor() + + try: + # 1. 插入文档 + cursor.execute(""" + INSERT INTO documents (doc_id, title, standard_number, upload_time) + VALUES (%s, %s, %s, NOW()) + ON CONFLICT (doc_id) DO UPDATE SET title = EXCLUDED.title, updated_at = NOW() + """, (doc_data["doc_id"], doc_data["doc_title"], doc_data.get("standard_number"))) + + # 2. 插入语义块 + semantic_blocks = doc_data.get("semantic_blocks", []) + if semantic_blocks: + block_rows = [ + ( + doc_data["doc_id"], + block["semantic_id"], + block["block_type"], + block["page_start"], + block["page_end"], + block.get("section_title"), + block.get("section_level"), + json.dumps(block.get("source_ids", [])), + block["text"], + ) + for block in semantic_blocks + ] + execute_values( + cursor, + """ + INSERT INTO semantic_blocks + (doc_id, semantic_id, block_type, page_start, page_end, section_title, section_level, source_ids, text) + VALUES %s + ON CONFLICT (doc_id, semantic_id) DO UPDATE SET text = EXCLUDED.text + """, + block_rows, + ) + print(f"已插入 {len(semantic_blocks)} 个语义块") + + # 3. 插入向量块元数据 + chunk_rows = [ + ( + doc_data["doc_id"], + chunk["chunk_id"], + chunk["semantic_id"], + chunk["chunk_index"], + chunk.get("piece_index"), + chunk["page_start"], + chunk["page_end"], + chunk.get("section_title"), + chunk["text"], + json.dumps(chunk.get("source_ids", [])), + ) + for chunk in chunks + ] + execute_values( + cursor, + """ + INSERT INTO vector_chunks + (doc_id, chunk_id, semantic_id, chunk_index, piece_index, page_start, page_end, section_title, text, source_ids) + VALUES %s + ON CONFLICT (doc_id, chunk_id) DO UPDATE SET text = EXCLUDED.text + """, + chunk_rows, + ) + print(f"已插入 {len(chunks)} 个向量块元数据") + + conn.commit() + print("PostgreSQL 数据插入完成") + + except Exception as e: + conn.rollback() + raise e + finally: + cursor.close() + + +# ===================== 主流程 ===================== +def load_data(file_path: Path) -> Dict: + """加载 vector_chunks.json,返回完整数据""" + data = json.loads(file_path.read_text(encoding="utf-8")) + return data + + +def upload_to_milvus_and_pg( + chunks_file: str, + api_key: str, + base_url: str, + milvus_host: str, + milvus_port: str, + collection_name: str, + batch_size: int, + pg_host: str, + pg_port: int, + pg_user: str, + pg_password: str, + pg_database: str, +): + # 1. 加载完整数据 + chunks_path = Path(chunks_file).expanduser().resolve() + if not chunks_path.exists(): + raise FileNotFoundError(f"文件不存在: {chunks_path}") + + data = load_data(chunks_path) + chunks = data.get("vector_chunks", []) + if not chunks: + raise ValueError("vector_chunks 为空") + print(f"加载 {len(chunks)} 个 chunks") + + # 2. 初始化连接 + client = get_openai_client(api_key, base_url) + init_milvus(milvus_host, milvus_port) + pg_conn = get_pg_connection(pg_host, pg_port, pg_user, pg_password, pg_database) + + # 3. 获取 embeddings + texts = [c["embedding_text"] for c in chunks] + embeddings = get_embeddings_batch(client, texts, batch_size) + print(f"生成 {len(embeddings)} 个向量") + + # 4. 获取 embedding 维度 + embedding_dim = len(embeddings[0]) + print(f"Embedding 维度: {embedding_dim}") + + # 5. 创建 collection 并插入 Milvus + collection = create_collection(collection_name, embedding_dim) + insert_chunks(collection, chunks, embeddings) + load_collection(collection) + + # 6. 插入 PostgreSQL + insert_chunks_to_pg(pg_conn, chunks, data) + + # 7. 关闭连接 + pg_conn.close() + + print("上传完成!") + + +# ===================== CLI ===================== +def main(): + parser = argparse.ArgumentParser(description="将 vector_chunks 向量化并上传到 Milvus 和 PostgreSQL") + parser.add_argument("chunks_file", help="vector_chunks.json 文件路径") + parser.add_argument("--api-key", default=RELAY_API_KEY, help="中转站 API Key") + parser.add_argument("--base-url", default=RELAY_BASE_URL, help="中转站 Base URL") + parser.add_argument("--milvus-host", default=MILVUS_HOST, help="Milvus host") + parser.add_argument("--milvus-port", default=MILVUS_PORT, help="Milvus port") + parser.add_argument("--collection", default=COLLECTION_NAME, help="Milvus collection 名称") + parser.add_argument("--batch-size", type=int, default=10, help="Embedding 批量大小(中转站限制最大10)") + parser.add_argument("--pg-host", default=PG_HOST, help="PostgreSQL host") + parser.add_argument("--pg-port", type=int, default=PG_PORT, help="PostgreSQL port") + parser.add_argument("--pg-user", default=PG_USER, help="PostgreSQL user") + parser.add_argument("--pg-password", default=PG_PASSWORD, help="PostgreSQL password") + parser.add_argument("--pg-database", default=PG_DATABASE, help="PostgreSQL database") + args = parser.parse_args() + + upload_to_milvus_and_pg( + chunks_file=args.chunks_file, + api_key=args.api_key, + base_url=args.base_url, + milvus_host=args.milvus_host, + milvus_port=args.milvus_port, + collection_name=args.collection, + batch_size=args.batch_size, + pg_host=args.pg_host, + pg_port=args.pg_port, + pg_user=args.pg_user, + pg_password=args.pg_password, + pg_database=args.pg_database, + ) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/backend/app/aliyun_parser/vector_chunks.json b/backend/app/aliyun_parser/vector_chunks.json new file mode 100644 index 0000000..0126ca2 --- /dev/null +++ b/backend/app/aliyun_parser/vector_chunks.json @@ -0,0 +1,5212 @@ +{ + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "structure_nodes": [ + { + "unique_id": "2113c6d0403ca72fa14627095c9719c1", + "page": 0, + "index": 2, + "level": 0, + "title": "中华人民共和国国家标准", + "type": "title", + "sub_type": "doc_title" + }, + { + "unique_id": "7c6827dc0432781cfe61802a53d90c49", + "page": 0, + "index": 5, + "level": 1, + "title": "儿童三轮车安全要求", + "type": "title", + "sub_type": "doc_title" + }, + { + "unique_id": "7f4a8dd2331a5039271641e80213f55a", + "page": 0, + "index": 6, + "level": 1, + "title": "Safety requirements for child tricycles", + "type": "title", + "sub_type": "doc_title" + }, + { + "unique_id": "fb1c096b04b7ed1a2fa8f798c6591794", + "page": 3, + "index": 1, + "level": 1, + "title": "前言", + "type": "title", + "sub_type": "doc_title" + }, + { + "unique_id": "360c35c38845e141d6cf17b8e4ae7642", + "page": 4, + "index": 1, + "level": 1, + "title": "儿童三轮车安全要求", + "type": "title", + "sub_type": "doc_title" + }, + { + "unique_id": "5859bd1732d2cef3ab7346031fea1177", + "page": 4, + "index": 2, + "level": 2, + "title": "1 范围", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "4f4b7842b1f8581ffeb0073f20e708fc", + "page": 4, + "index": 5, + "level": 2, + "title": "2 规范性引用文件", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "453b6317deebb287b0518d92697943f0", + "page": 4, + "index": 8, + "level": 2, + "title": "3 术语和定义", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "82dbd5ea74d4d90d1e08871c61875430", + "page": 4, + "index": 10, + "level": 3, + "title": "3.1", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "ed5824004cb35fe86489c591df0e2a26", + "page": 4, + "index": 11, + "level": 4, + "title": "儿童三轮车 child tricycles", + "type": "title", + "sub_type": "none" + }, + { + "unique_id": "37dd9d06bdd5efac134d7daa5aa5f103", + "page": 4, + "index": 13, + "level": 3, + "title": "3.2", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "74e13168c72838bdc6c0e69cda539c7c", + "page": 4, + "index": 14, + "level": 4, + "title": "轮距 track", + "type": "title", + "sub_type": "none" + }, + { + "unique_id": "2c58bd22a62a538b49c66ab30b264830", + "page": 5, + "index": 1, + "level": 3, + "title": "3.3", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "55e485e5a33daf40d2a7e28de88119b1", + "page": 5, + "index": 2, + "level": 4, + "title": "断裂 fracture", + "type": "title", + "sub_type": "none" + }, + { + "unique_id": "8939f54b6544f75b5e73b33b79eb88a3", + "page": 5, + "index": 4, + "level": 3, + "title": "3.4", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "7fc75ab3c9e07ee06aa91aca87bd6392", + "page": 5, + "index": 5, + "level": 4, + "title": "正常乘骑状态 normal ride gesture", + "type": "title", + "sub_type": "none" + }, + { + "unique_id": "958f214678940fbc04cca06a4bb96c5d", + "page": 5, + "index": 7, + "level": 3, + "title": "3.5", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "a9388ffee05db12e604696f34ad5c430", + "page": 5, + "index": 8, + "level": 4, + "title": "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal", + "type": "title", + "sub_type": "none" + }, + { + "unique_id": "2cfbf9aa74870ef05a78dca3dded9120", + "page": 5, + "index": 12, + "level": 3, + "title": "3.6", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "3f14b5187d49720b5e1222d29f8bfeba", + "page": 5, + "index": 13, + "level": 4, + "title": "外露突出物 exposed protrusion", + "type": "title", + "sub_type": "none" + }, + { + "unique_id": "14b51449ad1ff1fc8041033786992888", + "page": 5, + "index": 18, + "level": 3, + "title": "3.7", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "f20577e6a40fbae307d5b75cd56e3bdf", + "page": 5, + "index": 19, + "level": 4, + "title": "辅助推杆 assist-push-rod", + "type": "title", + "sub_type": "none" + }, + { + "unique_id": "a0516e15fe76fc88c7fd8bebf7d4ce4c", + "page": 5, + "index": 21, + "level": 3, + "title": "3.8", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "3869128795fe9bffd582173637a73196", + "page": 5, + "index": 22, + "level": 4, + "title": "后踏板 back-treadle", + "type": "title", + "sub_type": "none" + }, + { + "unique_id": "bdf7ea544e175ae6f9892d46b0e9aa19", + "page": 6, + "index": 1, + "level": 2, + "title": "4 技术要求", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "4ae8b8fff3a28152ecb6f8ef8e64a9d0", + "page": 6, + "index": 2, + "level": 3, + "title": "4.1 材料", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "5329412c708182fd7dc36d77c2da3d03", + "page": 6, + "index": 3, + "level": 4, + "title": "4.1.1 特定可迁移元素最大限量", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "ac39bfdb7787b7d5a3b4a0f61fa4c620", + "page": 6, + "index": 4, + "level": 5, + "title": "4.1.1.1 具体要求", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "31e4127253b33f41a2477846a4777c87", + "page": 6, + "index": 9, + "level": 5, + "title": "4.1.1.2 测试结果校正", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "c9d2dfda9368ad220854f9b208cdc27d", + "page": 6, + "index": 18, + "level": 4, + "title": "4.1.2 燃烧性能", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "b088c14b10630ac8839b3e9278099156", + "page": 6, + "index": 21, + "level": 3, + "title": "4.2 机械强度", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "35c738a1eb90e8a9eb7f541a67b926ff", + "page": 6, + "index": 23, + "level": 3, + "title": "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "0fbbf08755f89bd71c9a6a3d683ec9b2", + "page": 6, + "index": 24, + "level": 4, + "title": "4.3.1 锐利边缘", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "0b48002892848dfcfe83c9941c718958", + "page": 6, + "index": 26, + "level": 4, + "title": "4.3.2 锐利尖端", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "5765f709297e55c58a0e616fdb01da51", + "page": 6, + "index": 28, + "level": 4, + "title": "4.3.3 外露突出物", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "ee7828aa35a9d8bb72671297998a3065", + "page": 7, + "index": 5, + "level": 4, + "title": "4.3.4 挤夹点", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "3be5940358d0f65914a1cb1aa3e053cb", + "page": 7, + "index": 7, + "level": 4, + "title": "4.3.5 小零件", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "72c3bd9f956485a006a8875bd827ccf3", + "page": 7, + "index": 9, + "level": 3, + "title": "4.4 稳定性", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "568b38a6800eaf124b975ce2e6a26898", + "page": 7, + "index": 10, + "level": 4, + "title": "4.4.1 行驶稳定性", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "fc8b00aff4d5c159123dc450b09e966a", + "page": 7, + "index": 12, + "level": 4, + "title": "4.4.2 倾斜稳定性", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "3137104310afbbbb1887fdf35125d239", + "page": 7, + "index": 13, + "level": 5, + "title": "4.4.2.1 向前倾斜的稳定性", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "8df60cc9c81e7077f8ec7114f3bef58f", + "page": 7, + "index": 15, + "level": 5, + "title": "4.4.2.2 向后倾斜的稳定性", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "f0b124fad6ebdbb09b1274d161670a5f", + "page": 7, + "index": 17, + "level": 3, + "title": "4.5 零件", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "12a9fae457b16679a1ead9845e839596", + "page": 7, + "index": 18, + "level": 4, + "title": "4.5.1 连接紧固件", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "8aff0642faaebd13651211255a266329", + "page": 7, + "index": 20, + "level": 4, + "title": "4.5.2 防护罩帽", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "d848192def23fffe60dd8e32abe92561", + "page": 7, + "index": 22, + "level": 4, + "title": "4.5.3 操作系统", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "4ca7a36b016beb17a7d30098bdd54e4f", + "page": 7, + "index": 23, + "level": 5, + "title": "4.5.3.1 把立管插入深度标记", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "58865cffd6af73d713985bd89ded1925", + "page": 8, + "index": 1, + "level": 5, + "title": "4.5.3.2 把立管的强度", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "df2060e4b6f1a1c2e4fead3d6c35787d", + "page": 8, + "index": 3, + "level": 5, + "title": "4.5.3.3 把横管", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "b1e2e149fdbd46f3104b1dbe9c8c285b", + "page": 8, + "index": 5, + "level": 5, + "title": "4.5.3.4 把横管两端", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "9496ddad729cba17751b057d9337a40c", + "page": 8, + "index": 7, + "level": 5, + "title": "4.5.3.5 把立管夹紧装置", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "50ef2e2c9caaa46fb37ed6e242f8c43f", + "page": 8, + "index": 9, + "level": 4, + "title": "4.5.4 鞍座", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "a9bc1a01bc63d3fe2731c04e60abc7f0", + "page": 8, + "index": 10, + "level": 5, + "title": "4.5.4.1 鞍管插入深度", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "8e606434392bf4ab3579049f3cb66645", + "page": 8, + "index": 12, + "level": 5, + "title": "4.5.4.2 鞍座调节夹紧装置", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "c96d2f6be41f39b751a1464653dd60fd", + "page": 8, + "index": 14, + "level": 4, + "title": "4.5.5 冲击强度", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "59f054fe1f45de7a118356831225c4a1", + "page": 8, + "index": 16, + "level": 4, + "title": "4.5.6 靠背结构牢固性", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "541759189f40ecbafc72cb5c7c669f2c", + "page": 8, + "index": 18, + "level": 4, + "title": "4.5.7 辅助推杆强度", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "2ca828c5fa6f0cc1db7f7907ab3fa8e1", + "page": 8, + "index": 20, + "level": 4, + "title": "4.5.8 脚蹬", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "9b3324f545a3fdee72b3ac2620dbf606", + "page": 8, + "index": 21, + "level": 5, + "title": "4.5.8.1 脚蹬结构", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "a8d7a2e228efd068b2470da07a62b5f6", + "page": 8, + "index": 23, + "level": 5, + "title": "4.5.8.2 脚蹬离地高度", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "6f7ddfef8c1fe230e109324d4ac15964", + "page": 8, + "index": 25, + "level": 3, + "title": "4.6 产品标志和使用说明", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "6f26cb9133d44dd93fee6f384b859125", + "page": 8, + "index": 26, + "level": 4, + "title": "4.6.1 一般要求", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "8a398d6bcd7ff16a5c911817a3cfb39f", + "page": 9, + "index": 2, + "level": 4, + "title": "4.6.2 标志和使用说明", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "fc5b56ec30a16145951ceda0762a600c", + "page": 9, + "index": 3, + "level": 5, + "title": "4.6.2.1 产品名称", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "05c698ac1ad1c60607951d4c4fb9549c", + "page": 9, + "index": 5, + "level": 5, + "title": "4.6.2.2 产品型号", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "10807296732a3e33231fb3822e657f00", + "page": 9, + "index": 7, + "level": 5, + "title": "4.6.2.3 产品标准号", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "0b7b1d9c003df229025a5b3174865d97", + "page": 9, + "index": 9, + "level": 5, + "title": "4.6.2.4 适用年龄和体重", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "b77cb2cc6bf16b3a1c79f0a1e5c1aa59", + "page": 9, + "index": 11, + "level": 5, + "title": "4.6.2.5 安全警示", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "9d3cc8c63fd3f38937951a64fc619881", + "page": 9, + "index": 17, + "level": 5, + "title": "4.6.2.6 安全使用方法及组装装配说明", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "72621d6fe2ef835967412babb0b6fe62", + "page": 9, + "index": 21, + "level": 5, + "title": "4.6.2.7 维护和保养", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "e7edb70664a76cd90f820b04e17fc839", + "page": 9, + "index": 23, + "level": 5, + "title": "4.6.2.8 生产者名称和地址", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "e8b5ee8f942db3ade1f540a8f09d42eb", + "page": 9, + "index": 26, + "level": 2, + "title": "5 测试方法", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "6c30f1436c3f711514c05c83b82f860f", + "page": 9, + "index": 27, + "level": 3, + "title": "5.1 一般要求", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "61c28cb976f73ff81a391e72bddcf544", + "page": 9, + "index": 28, + "level": 4, + "title": "5.1.1 测试样品", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "41524c99fa95ebdab9e809b752794e6e", + "page": 9, + "index": 31, + "level": 4, + "title": "5.1.2 测试仪器精度", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "6c04480b19c60bb62165925ea0e853f6", + "page": 9, + "index": 33, + "level": 4, + "title": "5.1.3 测试环境", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "a533789371b75b54413d77405fb291ec", + "page": 10, + "index": 2, + "level": 3, + "title": "5.2 特定可迁移元素的测试(见 4.1.1)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "09f1d516bee1193effe224f007c11cfa", + "page": 10, + "index": 4, + "level": 3, + "title": "5.3 燃烧性能测试(见 4.1.2)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "a7400e41de39313d0853b5f1b27d467c", + "page": 10, + "index": 6, + "level": 4, + "title": "5.4 跌落测试(见 4.2, 4.5.4.2)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "dc61c8f26067d6dcef4886eaf3b86419", + "page": 10, + "index": 11, + "level": 3, + "title": "5.5 锐利边缘测试(见 4.3.1)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "b704d1aa918e97b401e1a9f872efa0d7", + "page": 10, + "index": 13, + "level": 3, + "title": "5.6 锐利尖端测试(见 4.3.2)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "aca37a4d679745e68270632f3fbe2b4b", + "page": 10, + "index": 15, + "level": 3, + "title": "5.7 小零件测试(见 4.3.5)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "9fd6c78813401b75d2e54e6f4f583493", + "page": 10, + "index": 17, + "level": 3, + "title": "5.8 行驶稳定性测试(见 4.4.1)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "a8d4b12b735d08d01f1aac9cdf1e6de6", + "page": 10, + "index": 20, + "level": 3, + "title": "5.9 向前倾斜的稳定性测试(见 4.4.2.1)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "2ff3cd2a2b425668ecfd431461b8cc1c", + "page": 11, + "index": 5, + "level": 3, + "title": "5.10 向后倾斜的稳定性测试(见 4.4.2.2)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "2797fe6b84695d56654689440c9501ed", + "page": 12, + "index": 2, + "level": 3, + "title": "5.11 把立管强度测试(见 4.5.3.2)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "3db7155812e76527667fb0cd087e1f9a", + "page": 12, + "index": 6, + "level": 3, + "title": "5.12 把立管夹紧装置测试(见 4.5.3.5)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "c37f510892709a41ee9f23c419e7f9b7", + "page": 13, + "index": 1, + "level": 3, + "title": "5.13 鞍座调节夹紧装置测试(见 4.5.4.2)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "b18c902d23e8497a1183d1ed3a6be2e7", + "page": 13, + "index": 3, + "level": 3, + "title": "5.14 冲击测试(见 4.5.5)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "80d6adcc2e05fd7ffca22123597c6067", + "page": 13, + "index": 5, + "level": 4, + "title": "5.15 靠背结构牢固性测试(见 4.5.6)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "ab85f31af59f4554b9466b5bcb464f02", + "page": 13, + "index": 7, + "level": 4, + "title": "5.16 辅助推杆强度测试(见 4.5.7)", + "type": "title", + "sub_type": "para_title" + }, + { + "unique_id": "63ddc9bee8af73da73c1a56610d2b8f6", + "page": 13, + "index": 12, + "level": 3, + "title": "5.17 脚蹬离地高度测试(见 4.5.8.2)", + "type": "title", + "sub_type": "para_title" + } + ], + "semantic_blocks": [ + { + "semantic_id": "semantic-1", + "block_type": "section_text", + "page_start": 0, + "page_end": 0, + "section_path": [ + "中华人民共和国国家标准" + ], + "section_level": 1, + "section_title": "中华人民共和国国家标准", + "source_ids": [ + "544d2c5ddb9e54fea38bc8fe4b7ba14d", + "3735a18a924f7063303437201694cf0a" + ], + "text": "GB 14747—2006\n代替 GB 14747—1993" + }, + { + "semantic_id": "semantic-2", + "block_type": "section_text", + "page_start": 0, + "page_end": 2, + "section_path": [ + "中华人民共和国国家标准", + "Safety requirements for child tricycles" + ], + "section_level": 2, + "section_title": "Safety requirements for child tricycles", + "source_ids": [ + "daf7eafb0181b5ad594493dc11ff1b4a", + "c8b66923988c6097208e8b7c20d3c465", + "ade1c5b56805a947f2f8fc867cf02813", + "e5f577808fa650f7033d5b01b5ac8cc2", + "ab44e43ac10c7e655fa914b9e16e6691", + "72f554bf4401e4ce24c66c060124f188", + "cce806bf34a0139b0902d452ee5475cb", + "c57294fd9d4249b2cc063e5a9d4b3b84", + "828d553f69ed8fedf6e76d2578de205b", + "b5c5cf976be57d1c9e438ad1f7454f73", + "0b90f290c15266343fa0fb2be2665b4e", + "f0b74832ad49e206ebc883d59820cb56", + "1e08e27edbfbcf6a26f29a453a8bdade", + "d97201fbca4c856d70169677e40c7b6f", + "35b988ccd15795316ecc7a0a470d084e", + "24152c699fcb5f669ab8cf51f55d7c5e", + "adfad2cf7d47b620505465132e2a131c", + "2f9c56f4f15e654de906af15f229f43e", + "0f04f0b07fc900d72abaed5db00526e1", + "8bd1e8d2619fe8bbac602c7efe105112", + "b4cff14549f353015a7061a0651d719b", + "c069a6a2d6bffd24115169128e241843", + "0a45edf7f8d28be6582cebc7e8081c73" + ], + "text": "2006-02-21 发布\n2007-01-01 实施\n5 测试方法 ..... 6\n5.1 一般要求 …… 6\n5.1.1 测试样品 ..... 6\n5.1.2 测试仪器精度 …… 6\n5.1.3 测试环境 ..... 6\n5.2 特定可迁移元素的测试(见 4.1.1) ..... 7\n5.3 燃烧性能测试(见 4.1.2) ..... 7\n5.4 跌落测试(见 4.2, 4.5.4.2) ..... 7\n5.5 锐利边缘测试(见 4.3.1) ..... 7\n5.6 锐利尖端测试(见 4.3.2) …… 7\n5.7 小零件测试(见 4.3.5) …… 7\n5.8 行驶稳定性测试(见 4.4.1) …… 7\n5.9 向前倾斜的稳定性测试(见 4.4.2.1) …… 7\n5.10 向后倾斜的稳定性测试(见 4.4.2.2) …… 8\n5.11 把立管强度测试(见 4.5.3.2) ..... 9\n5.12 把立管夹紧装置测试(见 4.5.3.5) …… 9\n5.13 鞍座调节夹紧装置测试(见 4.5.4.2) …… 10\n5.14 冲击测试(见 4.5.5) …… 10\n5.15 靠背结构牢固性测试(见 4.5.6) …… 10\n5.16 辅助推杆强度测试(见 4.5.7) …… 10\n5.17 脚蹬离地高度测试(见 4.5.8.2) …… 10" + }, + { + "semantic_id": "semantic-3", + "block_type": "section_text", + "page_start": 3, + "page_end": 3, + "section_path": [ + "中华人民共和国国家标准", + "前言" + ], + "section_level": 2, + "section_title": "前言", + "source_ids": [ + "d13e2d9d4ff68a7d2084bb71f5d919b6", + "5c14c127a4806807e16c8aa9c105f2e7", + "ed6ad6136055189dbce6cdcd31ff50c5", + "aa194df7d6bfa0ac472dd33eac69cfa4", + "c00dd20351fb22565fcb371c015e0dd2", + "20ad2b0521022d20997231883cc7692d", + "a47920b0a48ef36ef098372ff5a15e6d", + "a3d01d0ccb29bd8faf9ff9ecd4827820", + "ffd680b86af6af464cd4ae5203fe49dc", + "4b87ccc9d1cff0bdf55af102ab50a8f4", + "dd70726bfda482f4b36a0de72b86ccfa", + "fce7c45ba4cbc519e2daf41e9496d4f6", + "da8d89264690c0853c45c36f9d1ee2be", + "5be31e4b9f66e2e7754bf7301b4c24d2", + "b09facf84e2004e00c62f4f3f2609d84" + ], + "text": "本标准为强制性标准。\n本标准自实施之日起,代替 GB 14747—1993《儿童三轮车安全要求》。\n本标准与 GB 14747—1993 相比,主要变化如下:\n——新增了“3.7 辅助推杆”、“3.8 后踏板”两个定义;\n——根据 GB 6675—2003,对“4.1 材料”中的“4.1.1 特定可迁移元素最大限量”和“4.1.2 燃烧性能”的技术要求和测试方法进行了修改;\n——参照 GB 5296.5《消费品使用说明 玩具使用说明》,对“4.6 产品信息”进行了修改;\n——新增了“4.5.5 冲击强度”、“4.5.6 靠背结构牢固性”、“4.5.7 辅助推杆强度”和“4.5.8.2 脚蹬离地高度”共四项技术要求,并配套增加了相应测试方法;\n——修改了“5.10 向后倾斜的稳定性测试”测试方法;\n——新增了测试方法的“5.1 一般要求”,包括“5.1.1 测试样品”、“5.1.2 测试仪器精度”和“5.1.3 测试环境”的一般要求。\n本标准由中国轻工业联合会提出。\n本标准由全国玩具标准化技术委员会归口。\n本标准起草单位:北京中轻联认证中心、广东省产品质量监督检验中心、好孩子儿童用品有限公司。\n本标准主要起草人:刘唐书、胡官昌、高燕。\n本标准所代替标准的历次版本发布情况为:\n——GB 14747—1993。" + }, + { + "semantic_id": "semantic-4", + "block_type": "section_text", + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "1 范围" + ], + "section_level": 3, + "section_title": "1 范围", + "source_ids": [ + "c977c65db379fdaa06a58f14da022dad", + "34dcd76905ea7e6c679f95771fd485a5" + ], + "text": "本标准规定了供一名儿童或多名儿童乘坐的儿童三轮车的安全技术要求和测试方法。\n本标准不适用于玩具三轮车或设计用于其他特殊目的的三轮车(如游乐三轮车)。" + }, + { + "semantic_id": "semantic-5", + "block_type": "section_text", + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "2 规范性引用文件" + ], + "section_level": 3, + "section_title": "2 规范性引用文件", + "source_ids": [ + "c1787321c37863f1c4b0d5aacd7af0ae", + "fde56576959ea41ae8776a3f610843c4" + ], + "text": "下列文件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本标准,然而,鼓励根据本标准达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本标准。\nGB 6675—2003 国家玩具安全技术规范" + }, + { + "semantic_id": "semantic-6", + "block_type": "section_text", + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义" + ], + "section_level": 3, + "section_title": "3 术语和定义", + "source_ids": [ + "7802b558fd248b1608d3cd2ee2d4ceee" + ], + "text": "下列术语和定义适用于本标准。" + }, + { + "semantic_id": "semantic-7", + "block_type": "section_text", + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.1", + "儿童三轮车 child tricycles" + ], + "section_level": 5, + "section_title": "儿童三轮车 child tricycles", + "source_ids": [ + "a3088d05d9047e03b8bd1a38b696a884" + ], + "text": "一种轮式车辆,各车轮与地面的接触点应能形成三角形或梯形,并仅借人力靠脚蹬驱动前轮而行驶的车辆。如果轮子与地面的接触点构成的形状为梯形,则窄轮距宽度应小于宽轮距的一半。" + }, + { + "semantic_id": "semantic-8", + "block_type": "section_text", + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.2", + "轮距 track" + ], + "section_level": 5, + "section_title": "轮距 track", + "source_ids": [ + "a503cea57c1b094e81635583c8ba5ff6" + ], + "text": "有一根公共轮轴的两车轮之间的距离,即两车轮与地面接触的外端尺寸(见图1)。" + }, + { + "semantic_id": "semantic-9", + "block_type": "figure", + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.2", + "轮距 track" + ], + "section_level": 5, + "section_title": "轮距 track", + "source_ids": [ + "8fa690744d1ebd0921ef6a5200f3c5cd" + ], + "text": "$\\theta$\n车轮与地面接触点的外端尺寸" + }, + { + "semantic_id": "semantic-10", + "block_type": "figure", + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.2", + "轮距 track" + ], + "section_level": 5, + "section_title": "轮距 track", + "source_ids": [ + "abd6eafbc061d745eac477d42ff1385d" + ], + "text": "图 1 车轮行驶的稳定性测试" + }, + { + "semantic_id": "semantic-11", + "block_type": "section_text", + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.3", + "断裂 fracture" + ], + "section_level": 5, + "section_title": "断裂 fracture", + "source_ids": [ + "ebf51f0e05b17b7e9f1bd298e9226254" + ], + "text": "材料的折断程度达到可使构件不能再支承在正常使用中可能产生的负荷。" + }, + { + "semantic_id": "semantic-12", + "block_type": "section_text", + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.4", + "正常乘骑状态 normal ride gesture" + ], + "section_level": 5, + "section_title": "正常乘骑状态 normal ride gesture", + "source_ids": [ + "530f00c1b50f347440d61cdf3cd1dacf" + ], + "text": "骑车者坐在儿童三轮车的鞍座上,双脚放在脚蹬上,双手握住把横管或操纵机构的姿势。" + }, + { + "semantic_id": "semantic-13", + "block_type": "section_text", + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.5", + "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal" + ], + "section_level": 5, + "section_title": "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal", + "source_ids": [ + "e0c7ff15ea265a7f57753e22e95872c6" + ], + "text": "脚蹬转到离座位最远的位置,从鞍座面中心至脚蹬踩脚面中心的最大距离(见图2)。" + }, + { + "semantic_id": "semantic-14", + "block_type": "figure", + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.5", + "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal" + ], + "section_level": 5, + "section_title": "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal", + "source_ids": [ + "62ce78e3eee1f75d4d125421b8d4c244" + ], + "text": "$\\text { 脚蹬 }$" + }, + { + "semantic_id": "semantic-15", + "block_type": "figure", + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.5", + "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal" + ], + "section_level": 5, + "section_title": "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal", + "source_ids": [ + "4ff504b691648aaef1e950e82d90ae4b" + ], + "text": "图 2 鞍座到脚蹬距离(\\(C'\\)尺寸)测量" + }, + { + "semantic_id": "semantic-16", + "block_type": "section_text", + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.6", + "外露突出物 exposed protrusion" + ], + "section_level": 5, + "section_title": "外露突出物 exposed protrusion", + "source_ids": [ + "1ddd95aff7fad56781a5472b88ed2a22", + "8596b5858c1d5da889cb1e0468fd36b5", + "ef83b4e6f832cf32271c61f831d76fd3", + "ac4115d63e37fdd398fc953a8dfc5aef" + ], + "text": "凡符合以下情况者,均称为儿童三轮车的外露突出物:\na)除标准螺栓或螺钉头外,其他经组装后突出长度大于8 mm、且其末端倒圆半径小于6.3 mm的任何零部件;\nb)在螺母旋紧后,大于螺钉的外径尺寸的螺钉的外露突出部分;\nc) 在螺母旋紧后,突出部分大于 3.2 mm,正常骑行时与骑车者的任何部位可能接触的螺钉的外露突出部分。" + }, + { + "semantic_id": "semantic-17", + "block_type": "section_text", + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.7", + "辅助推杆 assist-push-rod" + ], + "section_level": 5, + "section_title": "辅助推杆 assist-push-rod", + "source_ids": [ + "a99b14bbd52ee81f29f18268802239e8" + ], + "text": "用于监护人辅助儿童乘骑儿童三轮车时前进或转向等的装置。" + }, + { + "semantic_id": "semantic-18", + "block_type": "section_text", + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.8", + "后踏板 back-treadle" + ], + "section_level": 5, + "section_title": "后踏板 back-treadle", + "source_ids": [ + "6d751c52b054f5604fa881ce01d9464f" + ], + "text": "儿童三轮车后部可供儿童站立的装置。" + }, + { + "semantic_id": "semantic-19", + "block_type": "section_text", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.1 具体要求" + ], + "section_level": 6, + "section_title": "4.1.1.1 具体要求", + "source_ids": [ + "989c1ad25a46e9f0ac97531f7be8a35c" + ], + "text": "儿童三轮车的可触及部件和材料,按5.2(特定可迁移元素的测试)测试,特定可迁移元素的测试结果的校正值应符合表1中的最大限量的规定。" + }, + { + "semantic_id": "semantic-20", + "block_type": "figure", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.1 具体要求" + ], + "section_level": 6, + "section_title": "4.1.1.1 具体要求", + "source_ids": [ + "8782ee5d923b91ed8cefe0ad46a36c94" + ], + "text": "表 1 儿童三轮车材料中特定可迁移元素的最大限量" + }, + { + "semantic_id": "semantic-21", + "block_type": "table", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.1 具体要求" + ], + "section_level": 6, + "section_title": "4.1.1.1 具体要求", + "source_ids": [ + "638307be07405ba5ebdb4c99a05a0e80" + ], + "text": "元素\n锑 Sb\n砷 As\n钡 Ba\n镉 Cd\n铬 Cr\n铅 Pb\n汞 Hg\n硒 Se\n最大限量/(mg/kg)\n60\n25\n1 000\n75\n60\n90\n60\n500" + }, + { + "semantic_id": "semantic-22", + "block_type": "section_text", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.1 具体要求" + ], + "section_level": 6, + "section_title": "4.1.1.1 具体要求", + "source_ids": [ + "d5d63e8d5a1f1d78d9f9c83b32240389" + ], + "text": "在考虑到儿童的正常和可预见的行为时,如果儿童三轮车某些部件或材料由于其可触及性、功能、质量、尺寸或其他特征可明显排除因吮吸、舔食或吞咽造成的危险,则这些部件或材料不适用本要求。" + }, + { + "semantic_id": "semantic-23", + "block_type": "section_text", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "ba83d6dd7439b29a0ceb91d3c968200b", + "5f552ef62ec8b17a2b4747d2780c96e7" + ], + "text": "由于 5.2(特定可迁移元素的测试)的精确度的原因,在考虑实验室之间测试结果时需要一个经校正的分析结果。5.2(特定可迁移元素的测试)的分析结果应减去表 2 中分析校正值,以得到校正后的分析结果。\n凡儿童三轮车材料的分析结果校正值低于或等于表1中最大限量,则被认为是符合本标准的要求。" + }, + { + "semantic_id": "semantic-24", + "block_type": "figure", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "38331bff9d7d1108ce07797570ede0a6" + ], + "text": "表 2 各元素分析校正系数" + }, + { + "semantic_id": "semantic-25", + "block_type": "table", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "a118d14010e3b6e95d93ef7cf9cd2462" + ], + "text": "元 素\n锑 Sb\n砷 As\n钡 Ba\n镉 Cd\n铬 Cr\n铅 Pb\n汞 Hg\n硒 Se\n分析校正系数/(%)\n60\n60\n30\n30\n30\n30\n50\n60" + }, + { + "semantic_id": "semantic-26", + "block_type": "figure", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "3a7dadd1194715edb601c0ad88063279" + ], + "text": "示例:" + }, + { + "semantic_id": "semantic-27", + "block_type": "figure", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "46a077403d2c81738701287eb03443a1" + ], + "text": "铅的分析结果为 120 mg/kg,表 2 中的分析结果校正系数为 30%,则:" + }, + { + "semantic_id": "semantic-28", + "block_type": "figure", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "f1902b79143d828178145c005af6253f" + ], + "text": "分析结果校正值=120-120×30%=120-36=84(mg/kg)。" + }, + { + "semantic_id": "semantic-29", + "block_type": "figure", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "c26dbeb2d2ba6c454cff1f55c359cf7c" + ], + "text": "这个数字被认为符合本标准的要求(表1中可迁移铅元素的最大限量为90 mg/kg)。" + }, + { + "semantic_id": "semantic-30", + "block_type": "section_text", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.2 燃烧性能" + ], + "section_level": 5, + "section_title": "4.1.2 燃烧性能", + "source_ids": [ + "b103a0fd0b8c851da4d4404e488465f7", + "bcf3b09ab8034b3b917cc3f0e7db1aa0" + ], + "text": "儿童三轮车的零部件禁止使用易燃材料。\n按 5.3(燃烧性能测试)测试,应符合 GB 6675—2003 附录 B(燃烧性能)的相关要求。" + }, + { + "semantic_id": "semantic-31", + "block_type": "section_text", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.2 机械强度" + ], + "section_level": 4, + "section_title": "4.2 机械强度", + "source_ids": [ + "ab9feaf09269cd18b42ebc2fde67e25b" + ], + "text": "儿童三轮车在正常使用和可预见的非正常使用的情况下,以及按5.4(跌落测试)进行测试后,其任何零部件均不应出现断裂或肉眼可见的裂纹。" + }, + { + "semantic_id": "semantic-32", + "block_type": "section_text", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.1 锐利边缘" + ], + "section_level": 5, + "section_title": "4.3.1 锐利边缘", + "source_ids": [ + "7f06b3eb6b16100206f204a41fe8144a" + ], + "text": "按 5.5(锐利边缘测试)测试,儿童三轮车上不应存在任何可触及的危险锐利边缘。" + }, + { + "semantic_id": "semantic-33", + "block_type": "section_text", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.2 锐利尖端" + ], + "section_level": 5, + "section_title": "4.3.2 锐利尖端", + "source_ids": [ + "583655fcf511483b0589c8116c0eae4e" + ], + "text": "按 5.6(锐利尖端测试)测试,儿童三轮车上不应存在任何可触及的危险锐利尖端。" + }, + { + "semantic_id": "semantic-34", + "block_type": "section_text", + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.3 外露突出物" + ], + "section_level": 5, + "section_title": "4.3.3 外露突出物", + "source_ids": [ + "21e82e8e335b028fa8c7021d5bee4158" + ], + "text": "在图 3 所示的 A、B 区域内不应存在外露突出物。" + }, + { + "semantic_id": "semantic-35", + "block_type": "figure", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.3 外露突出物" + ], + "section_level": 5, + "section_title": "4.3.3 外露突出物", + "source_ids": [ + "9a827c6dcf54d4f6d42cbf18faa12a33" + ], + "text": "A区域\nB区域" + }, + { + "semantic_id": "semantic-36", + "block_type": "figure", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.3 外露突出物" + ], + "section_level": 5, + "section_title": "4.3.3 外露突出物", + "source_ids": [ + "b8f8020140364639673a4c97b3503c15" + ], + "text": "注:A 区域由通过鞍座表面中心、前轮轴以及车把旋转轴线至两把套连线之交点所连成的线为界。" + }, + { + "semantic_id": "semantic-37", + "block_type": "figure", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.3 外露突出物" + ], + "section_level": 5, + "section_title": "4.3.3 外露突出物", + "source_ids": [ + "7742bfd192d96b95b39e27081a58d823" + ], + "text": "B 区域为鞍座表面中心、后轮轴以及车把旋转轴线至两把套连线之交点的后方和上方。" + }, + { + "semantic_id": "semantic-38", + "block_type": "figure", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.3 外露突出物" + ], + "section_level": 5, + "section_title": "4.3.3 外露突出物", + "source_ids": [ + "756a5c4f9c6ea6cd5ac70de848651f06" + ], + "text": "图 3 不允许存在外露突出物的区域" + }, + { + "semantic_id": "semantic-39", + "block_type": "section_text", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.4 挤夹点" + ], + "section_level": 5, + "section_title": "4.3.4 挤夹点", + "source_ids": [ + "95527ec7a1edfb81291ca93c5e85ba93" + ], + "text": "儿童三轮车不应有任何可造成伤害的挤夹点,骑车者在任何骑行位置时,任何可能触及的活动部分(例如:轮子与泥板之间、实体结构的轮辐内的孔隙)均应小于5 mm或大于12 mm。" + }, + { + "semantic_id": "semantic-40", + "block_type": "section_text", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.5 小零件" + ], + "section_level": 5, + "section_title": "4.3.5 小零件", + "source_ids": [ + "1cdf8c234ec35583f42b38e28a332891" + ], + "text": "供 36 个月及以下儿童使用的儿童三轮车,在测试前和测试后,其可拆卸或测试中脱落的部件,按 5.7(小零件测试)测试时均不应完全容入小零件试验器。" + }, + { + "semantic_id": "semantic-41", + "block_type": "section_text", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.4 稳定性", + "4.4.1 行驶稳定性" + ], + "section_level": 5, + "section_title": "4.4.1 行驶稳定性", + "source_ids": [ + "88896bc39ec3f6e164c75cbc18988c45" + ], + "text": "儿童三轮车按 5.8(行驶稳定性测试) 进行测试时, 不应翻倒。" + }, + { + "semantic_id": "semantic-42", + "block_type": "section_text", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.4 稳定性", + "4.4.2 倾斜稳定性", + "4.4.2.1 向前倾斜的稳定性" + ], + "section_level": 6, + "section_title": "4.4.2.1 向前倾斜的稳定性", + "source_ids": [ + "d63cc8f9175f9eba6895055ac9821703" + ], + "text": "儿童三轮车按 5.9(向前倾斜的稳定性测试) 进行测试时, 不应向前翻倒。" + }, + { + "semantic_id": "semantic-43", + "block_type": "section_text", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.4 稳定性", + "4.4.2 倾斜稳定性", + "4.4.2.2 向后倾斜的稳定性" + ], + "section_level": 6, + "section_title": "4.4.2.2 向后倾斜的稳定性", + "source_ids": [ + "7122861f73ae5c05e6f92746d6cde190" + ], + "text": "儿童三轮车按 5.10(向后倾斜的稳定性测试) 进行测试时, 不应向后翻倒。" + }, + { + "semantic_id": "semantic-44", + "block_type": "section_text", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.1 连接紧固件" + ], + "section_level": 5, + "section_title": "4.5.1 连接紧固件", + "source_ids": [ + "4b8ce8f8255dde1cc291db2a80e0db2e" + ], + "text": "所有用来连接或紧固用的螺栓、螺钉、螺母等,在按本标准要求进行测试时,不应出现断裂、松脱、肉眼可见的裂纹或失去应有的功效。" + }, + { + "semantic_id": "semantic-45", + "block_type": "section_text", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.2 防护罩帽" + ], + "section_level": 5, + "section_title": "4.5.2 防护罩帽", + "source_ids": [ + "49eef7a85f8decd815aef62404901515" + ], + "text": "用于防护外露突出物的防护罩帽应能承受 70 N 拉力而不脱落。" + }, + { + "semantic_id": "semantic-46", + "block_type": "section_text", + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.3 操作系统", + "4.5.3.1 把立管插入深度标记" + ], + "section_level": 6, + "section_title": "4.5.3.1 把立管插入深度标记", + "source_ids": [ + "132085f833dc4ac74f3fc96a504a107f" + ], + "text": "如果把立管是一种可调节的结构时,把立管上应有一个永久性的标记或环圈,清楚地标明把立管插入前叉组件的最小插入深度。标记不应损伤把立管应有的强度,最小插入深度从把立管末端起不应小于把立管直径的2.5倍,且把立管最小插入深度标记以下应在至少有一个管子直径的长度内保持其应有的强度。" + }, + { + "semantic_id": "semantic-47", + "block_type": "section_text", + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.3 操作系统", + "4.5.3.2 把立管的强度" + ], + "section_level": 6, + "section_title": "4.5.3.2 把立管的强度", + "source_ids": [ + "2409daa211616616486e03597148028d" + ], + "text": "把立管按 5.11(把立管强度测试) 进行测试, 不应断裂。" + }, + { + "semantic_id": "semantic-48", + "block_type": "section_text", + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.3 操作系统", + "4.5.3.3 把横管" + ], + "section_level": 6, + "section_title": "4.5.3.3 把横管", + "source_ids": [ + "1f66bf0f8d6662f8c4c19c5c84cb1b06" + ], + "text": "把横管应以儿童三轮车的纵向中心线中心保持其两端的对称,当把横管处于最高位置,鞍座处于最低位置时,它们之间的距离应不大于457 mm。" + }, + { + "semantic_id": "semantic-49", + "block_type": "section_text", + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.3 操作系统", + "4.5.3.4 把横管两端" + ], + "section_level": 6, + "section_title": "4.5.3.4 把横管两端", + "source_ids": [ + "89ff9b58c2d72ec207c31cde4ed45fdc" + ], + "text": "把横管两端应装有把套或其他保护装置,把套或其他保护装置应能承受 70 N 的拉力而不应脱落。塑料制成的把横管不受此条款的限制。" + }, + { + "semantic_id": "semantic-50", + "block_type": "section_text", + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.3 操作系统", + "4.5.3.5 把立管夹紧装置" + ], + "section_level": 6, + "section_title": "4.5.3.5 把立管夹紧装置", + "source_ids": [ + "7bfbf4097ac216c524e90e112646359b" + ], + "text": "按 5.12(把立管夹紧装置测试) 进行测试时, 把立管与前叉立管之间不应有相对位移。把立管/前叉组件及其他零件均不应损伤。" + }, + { + "semantic_id": "semantic-51", + "block_type": "section_text", + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.4 鞍座", + "4.5.4.1 鞍管插入深度" + ], + "section_level": 6, + "section_title": "4.5.4.1 鞍管插入深度", + "source_ids": [ + "ac9632188558bd7c352dacf000299175" + ], + "text": "如果鞍管是一种可调节的结构时,鞍管上应有一个永久性的标记或环圈,清楚地标明鞍管插入车架的最小插入深度(即鞍座可调节到的最大高度)。标记不应损伤鞍管应有的强度,最小插入深度从鞍管底端起不应小于鞍管直径的2倍,且鞍管最小插入标记以下应在至少有一个管子直径的长度内保持其应有的强度。" + }, + { + "semantic_id": "semantic-52", + "block_type": "section_text", + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.4 鞍座", + "4.5.4.2 鞍座调节夹紧装置" + ], + "section_level": 6, + "section_title": "4.5.4.2 鞍座调节夹紧装置", + "source_ids": [ + "cfac30368cdedf31d48e399a9b80ce48" + ], + "text": "在正常使用的情况下,鞍座夹头应能牢固地夹紧鞍座,使其不应在任何方向上移动。儿童三轮车按5.4(跌落测试)进行测试后,再按5.13(鞍座调节夹紧装置测试)进行测试时,鞍座夹紧装置相对于鞍管在任何方向上都不应有移动,且鞍管对于车架不应有转动。" + }, + { + "semantic_id": "semantic-53", + "block_type": "section_text", + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.5 冲击强度" + ], + "section_level": 5, + "section_title": "4.5.5 冲击强度", + "source_ids": [ + "19396b2939e8fb17b904381f1b2f2587" + ], + "text": "按 5.14(冲击测试) 进行测试后,儿童三轮车的各部位不应出现引起功能障碍的损坏或永久变形。" + }, + { + "semantic_id": "semantic-54", + "block_type": "section_text", + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.6 靠背结构牢固性" + ], + "section_level": 5, + "section_title": "4.5.6 靠背结构牢固性", + "source_ids": [ + "150c2d43ca776fa0288ae97396849685" + ], + "text": "儿童三轮车如果装有靠背,则按 5.15(靠背结构牢固性测试)进行测试时,靠背及靠背和车体结合处不应断裂或丧失功能。" + }, + { + "semantic_id": "semantic-55", + "block_type": "section_text", + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.7 辅助推杆强度" + ], + "section_level": 5, + "section_title": "4.5.7 辅助推杆强度", + "source_ids": [ + "626f24f13efd012b922fed2a86b6de19" + ], + "text": "儿童三轮车如果装有辅助推杆,则按 5.16(辅助推杆强度测试)进行测试时,辅助推杆及推杆与车体连接部位不应断裂或丧失功能。" + }, + { + "semantic_id": "semantic-56", + "block_type": "section_text", + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.8 脚蹬", + "4.5.8.1 脚蹬结构" + ], + "section_level": 6, + "section_title": "4.5.8.1 脚蹬结构", + "source_ids": [ + "0487dda3a84f7e5cae1b48d5c8b5b09c" + ], + "text": "儿童三轮车的脚蹬上、下都应有脚踩面,除非脚蹬有一个确定的优先脚踩面,能自动地为骑车者的脚底提供脚踩面。" + }, + { + "semantic_id": "semantic-57", + "block_type": "section_text", + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.8 脚蹬", + "4.5.8.2 脚蹬离地高度" + ], + "section_level": 6, + "section_title": "4.5.8.2 脚蹬离地高度", + "source_ids": [ + "c87b86d690ae96071af832c2911d4220" + ], + "text": "按 5.17(脚蹬离地高度测试) 进行测试, 脚蹬的最低处离地面不应小于 40 mm。" + }, + { + "semantic_id": "semantic-58", + "block_type": "section_text", + "page_start": 8, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.1 一般要求" + ], + "section_level": 5, + "section_title": "4.6.1 一般要求", + "source_ids": [ + "6f3f940e22f29d2639ba20e3651a0d97", + "cd5303b399cbecf8f03a92561535a178", + "f8998af7f9e011d45aa40be48502aa59", + "55470ee4d8678c13ff6345b2cec6f833" + ], + "text": "a)儿童三轮车产品的交付应包括产品标志和使用信息,且置于便于识别的部位,使消费者正确安全地使用儿童三轮车,将使用不当造成的伤害降到最低。\nb)当使用说明和安全警示同时采用多种形式时(如在儿童三轮车本体和/或其包装上标注和/或在其包装内另附),应保证其内容的一致性。\nc)在产品标志和使用说明上应使用规范汉字。“危险”、“警告”、“注意”等安全警示的字体应大于或等于四号黑体字,警示内容的字体应大于或等于小五号黑体字。\nd)安全警示(警示标志或警示说明)的标注应采用耐久性标签,并且应永久、醒目地附在产品和包装上。" + }, + { + "semantic_id": "semantic-59", + "block_type": "section_text", + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.1 产品名称" + ], + "section_level": 6, + "section_title": "4.6.2.1 产品名称", + "source_ids": [ + "d5b7adf331ec480aae63a000dbbf69d7" + ], + "text": "产品名称应符合国家、行业、企业标准的名称,且能表明产品真实属性的名称。" + }, + { + "semantic_id": "semantic-60", + "block_type": "section_text", + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.2 产品型号" + ], + "section_level": 6, + "section_title": "4.6.2.2 产品型号", + "source_ids": [ + "865b4846cb560a262804aada3ebbdc56" + ], + "text": "使用说明上需标注的型号、规格应与产品上型号相一致。" + }, + { + "semantic_id": "semantic-61", + "block_type": "section_text", + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.3 产品标准号" + ], + "section_level": 6, + "section_title": "4.6.2.3 产品标准号", + "source_ids": [ + "f2525934be9b7a6f711505a2106a4c32" + ], + "text": "在包装、使用说明书及标签上应标明产品所执行的国家标准、行业标准或企业标准编号。" + }, + { + "semantic_id": "semantic-62", + "block_type": "section_text", + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.4 适用年龄和体重" + ], + "section_level": 6, + "section_title": "4.6.2.4 适用年龄和体重", + "source_ids": [ + "fb340521de452fcae291826ca43bac67" + ], + "text": "在产品包装、使用说明书及标签上应标明产品所适用的年龄范围和预定承载的体重。" + }, + { + "semantic_id": "semantic-63", + "block_type": "section_text", + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.5 安全警示" + ], + "section_level": 6, + "section_title": "4.6.2.5 安全警示", + "source_ids": [ + "bc66f24a32812cdf4529c422ac62c9d8", + "6081f605bc354041cc5db64e78444178", + "8aeff2c8779ee65a9d2c7f239ee6296b", + "1c730494512fb5d0f062e909bc186712", + "701fdca8494972b69c0bf87e9e22819f" + ], + "text": "儿童三轮车应标明如下相关警示说明或警示标志。\na)在每辆儿童三轮车的产品、包装和/或使用说明书上应标注类似以下内容的提示:提醒使用者及监护人在使用前请仔细阅读本说明书并且请妥善保存供以后参照。如果不按照本说明书使用可能会影响儿童的安全。\nb)在每辆儿童三轮车车体和使用说明书上应设有类似以下内容的警示说明:\n“警告: 当儿童乘坐时, 看护人不应离开。”\nc)在每辆儿童三轮车的产品和/或包装和/或使用说明书上应标注骑行时的注意事项和安全要求。" + }, + { + "semantic_id": "semantic-64", + "block_type": "section_text", + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.6 安全使用方法及组装装配说明" + ], + "section_level": 6, + "section_title": "4.6.2.6 安全使用方法及组装装配说明", + "source_ids": [ + "681199923767b187baf279c0a8897537", + "35b754ba2df1f352b32aae5f358d11ba", + "49d821c09578497ffeb0fc16f907bae1" + ], + "text": "a)应标明详细的使用方法;\nb)需要时,应提供零部件和成车组装装配说明/组装图;\nc)应标明紧固件推荐的扭紧力矩(如:把立管夹紧装置的扭紧力矩,鞍座调节夹紧装置的扭紧力矩等)。" + }, + { + "semantic_id": "semantic-65", + "block_type": "section_text", + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.7 维护和保养" + ], + "section_level": 6, + "section_title": "4.6.2.7 维护和保养", + "source_ids": [ + "1c225edd359469d45bcc69876fc2917e" + ], + "text": "应标明整车和相关零部件应定期检查、维护、保养及清洁的有关说明。" + }, + { + "semantic_id": "semantic-66", + "block_type": "section_text", + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.8 生产者名称和地址" + ], + "section_level": 6, + "section_title": "4.6.2.8 生产者名称和地址", + "source_ids": [ + "9c4158dccc6ee47c35e80fe6c6f91959", + "f7b9b7a4a4bbd2e3492d1512d7652117" + ], + "text": "应标明产品生产者依法登记注册的名称和地址。\n进口产品应标明该产品的原产地(国家/地区)以及代理商或进口商或销售商在中国依法登记注册的名称和地址。" + }, + { + "semantic_id": "semantic-67", + "block_type": "section_text", + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.1 一般要求", + "5.1.1 测试样品" + ], + "section_level": 5, + "section_title": "5.1.1 测试样品", + "source_ids": [ + "f92f4b0fdc3e15aaf063772a3d5aa8fa", + "1359acc8798a67643699122c99288a2f" + ], + "text": "原则上所有测试应在同一样品上进行。\n测试顺序应按照先进行对样品无损坏的项目,后进行对样品有损坏的项目。如果样品测试后的损坏程度导致以后的测试项目无法进行,则可在新的样品上进行剩余项目的测试。" + }, + { + "semantic_id": "semantic-68", + "block_type": "section_text", + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.1 一般要求", + "5.1.2 测试仪器精度" + ], + "section_level": 5, + "section_title": "5.1.2 测试仪器精度", + "source_ids": [ + "f3732b248ec688065f2291532c0e5b64" + ], + "text": "除非特殊规定,本标准中力的测量精度为±5%;质量的测量精度为±1%;角度的测量精度为±1°;所有尺寸的测量精度为±0.5 mm。" + }, + { + "semantic_id": "semantic-69", + "block_type": "section_text", + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.1 一般要求", + "5.1.3 测试环境" + ], + "section_level": 5, + "section_title": "5.1.3 测试环境", + "source_ids": [ + "2df998046ac4f6969d7223674eea6e83" + ], + "text": "除非特殊规定,测试前样品应在温度为 \\(23^{\\circ}C \\pm 5^{\\circ}C\\) 的环境中至少放置 2 h,并且在温度为 \\(23^{\\circ}C \\pm\\)10℃环境中进行测试。" + }, + { + "semantic_id": "semantic-70", + "block_type": "section_text", + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.2 特定可迁移元素的测试(见 4.1.1)" + ], + "section_level": 4, + "section_title": "5.2 特定可迁移元素的测试(见 4.1.1)", + "source_ids": [ + "5de31e65aa25bec0d05bf2b8ecb4c7a6" + ], + "text": "三轮车上所使用的、符合 GB 6675—2003 中第 C.1 章范围所规定的材料和零、部件中特定可迁移元素的测试方法按 GB 6675—2003 附录 C 规定的测试方法进行测试。" + }, + { + "semantic_id": "semantic-71", + "block_type": "section_text", + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.3 燃烧性能测试(见 4.1.2)" + ], + "section_level": 4, + "section_title": "5.3 燃烧性能测试(见 4.1.2)", + "source_ids": [ + "8e2b5c7e95d6c14db62cd12d63255d5f" + ], + "text": "儿童三轮车的材料的燃烧性能的测试方法按 GB 6675—2003 附录 B 的有关规定进行。" + }, + { + "semantic_id": "semantic-72", + "block_type": "section_text", + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.3 燃烧性能测试(见 4.1.2)", + "5.4 跌落测试(见 4.2, 4.5.4.2)" + ], + "section_level": 5, + "section_title": "5.4 跌落测试(见 4.2, 4.5.4.2)", + "source_ids": [ + "a7264b18452459720db472cf1eec59f2" + ], + "text": "将表 3 中的规定负载缚在鞍座上;如有后踏板还应按 5.8(向后倾斜的稳定性测试)的要求将负载安装在后踏板上,或者鞍座最后面适当的部位上;并在每个把套上牢固固定 4.5 kg 负载。" + }, + { + "semantic_id": "semantic-73", + "block_type": "figure", + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.3 燃烧性能测试(见 4.1.2)", + "5.4 跌落测试(见 4.2, 4.5.4.2)" + ], + "section_level": 5, + "section_title": "5.4 跌落测试(见 4.2, 4.5.4.2)", + "source_ids": [ + "e45a6c6fed72d750e60c85b0e8a466ff" + ], + "text": "表 3 鞍座到脚蹬距离、负载质量和斜面倾斜角对照表" + }, + { + "semantic_id": "semantic-74", + "block_type": "table", + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.3 燃烧性能测试(见 4.1.2)", + "5.4 跌落测试(见 4.2, 4.5.4.2)" + ], + "section_level": 5, + "section_title": "5.4 跌落测试(见 4.2, 4.5.4.2)", + "source_ids": [ + "45f63fd4c7a2f44cfc95d7e3c3b5f0d4" + ], + "text": "序号\n鞍座到脚蹬距离/mm\n负载质量/kg\n斜面倾斜角度 θ\n1\n<355\n11\n7°\n2\n355~380\n11\n8°30'\n3\n381~420\n13.5\n9°\n4\n421~450\n15.8\n9°\n5\n451~480\n17\n9°30'\n6\n481~510\n18\n10°\n7\n511~550\n20\n11°30'\n8\n551~570\n20\n13°\n9\n571~600\n22.5\n15°\n10\n601~620\n22.5\n17°\n11\n621~660\n24.8\n17°\n12\n661~890\n27\n17°\n13\n891~710\n29.3\n17°" + }, + { + "semantic_id": "semantic-75", + "block_type": "section_text", + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.3 燃烧性能测试(见 4.1.2)", + "5.4 跌落测试(见 4.2, 4.5.4.2)" + ], + "section_level": 5, + "section_title": "5.4 跌落测试(见 4.2, 4.5.4.2)", + "source_ids": [ + "62f0f0485bf5b5b74039595a9ad2753d" + ], + "text": "儿童三轮车按上述负载加载后,从 $ 0.3 \\, m $ 的高度处使其跌落在平坦的水泥地上,重复三次。跌落前儿童三轮车应处于正常骑行状态,并自由落下。" + }, + { + "semantic_id": "semantic-76", + "block_type": "section_text", + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.5 锐利边缘测试(见 4.3.1)" + ], + "section_level": 4, + "section_title": "5.5 锐利边缘测试(见 4.3.1)", + "source_ids": [ + "d79cfd9813dcfb50b2e0679e451f3e32" + ], + "text": "按 GB 6675—2003 中 A.5.8(锐利边缘测试) 进行测试。" + }, + { + "semantic_id": "semantic-77", + "block_type": "section_text", + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.6 锐利尖端测试(见 4.3.2)" + ], + "section_level": 4, + "section_title": "5.6 锐利尖端测试(见 4.3.2)", + "source_ids": [ + "91b66e5ef7edaa08b63a28de2c2270cb" + ], + "text": "按 GB 6675—2003 中 A.5.9(锐利尖端测试) 进行测试。" + }, + { + "semantic_id": "semantic-78", + "block_type": "section_text", + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.7 小零件测试(见 4.3.5)" + ], + "section_level": 4, + "section_title": "5.7 小零件测试(见 4.3.5)", + "source_ids": [ + "5ae436da2e10a691115eea8a39cfa88c" + ], + "text": "按 GB 6675—2003 中 A.5.2(小零件测试)进行测试。" + }, + { + "semantic_id": "semantic-79", + "block_type": "section_text", + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.8 行驶稳定性测试(见 4.4.1)" + ], + "section_level": 4, + "section_title": "5.8 行驶稳定性测试(见 4.4.1)", + "source_ids": [ + "f31e8cfa4acf63606df9f87f367b3738", + "5e3460e855c89fc065daf1a94c8fba82" + ], + "text": "测量儿童三轮车的鞍座到脚蹬距离 $ (C^{\\prime} $ 尺寸,见图2),将儿童三轮车按图1的方式放置在表3中的规定倾斜角度的测试斜面上,使儿童三轮车的后轮轴线与倾斜方向平行。\n按表 3 中的规定负载在鞍座上加载,其重心应位于鞍座面几何中心上方 150 mm 处,儿童三轮车的操纵机构应固定于某一位置,该位置当儿童三轮车沿斜面向上运动时,可使前轮产生约 1.8 m 转弯半径的运动轨迹。当进行测试时应用楔块将其轮子堵住,以防其转动但不应阻止其翻倒。在静态条件下儿童三轮车不应翻倒。" + }, + { + "semantic_id": "semantic-80", + "block_type": "section_text", + "page_start": 10, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.9 向前倾斜的稳定性测试(见 4.4.2.1)" + ], + "section_level": 4, + "section_title": "5.9 向前倾斜的稳定性测试(见 4.4.2.1)", + "source_ids": [ + "56438323314fe8c8673a8691c5425671", + "767de9d5be8b9e506086d336067668d6" + ], + "text": "将前轮与车架之间用楔块堵住,并在儿童三轮车的鞍座上按表3中的规定负载进行加载,其重心应位于鞍座面几何中心上方 150 mm 处。将三轮车的两后车轮均垫高 100 mm(比前轮放置面高 100 mm,见图 4),儿童三轮车不应向前翻倒。\n单位为毫米" + }, + { + "semantic_id": "semantic-81", + "block_type": "figure", + "page_start": 11, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.9 向前倾斜的稳定性测试(见 4.4.2.1)" + ], + "section_level": 4, + "section_title": "5.9 向前倾斜的稳定性测试(见 4.4.2.1)", + "source_ids": [ + "a5b322ebb12a830b08e6e66bf2a32e7d" + ], + "text": "100" + }, + { + "semantic_id": "semantic-82", + "block_type": "figure", + "page_start": 11, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.9 向前倾斜的稳定性测试(见 4.4.2.1)" + ], + "section_level": 4, + "section_title": "5.9 向前倾斜的稳定性测试(见 4.4.2.1)", + "source_ids": [ + "fc6ff0391e4c0c765e8a310aa8be48a1" + ], + "text": "图 4 向前倾斜的稳定性测试" + }, + { + "semantic_id": "semantic-83", + "block_type": "section_text", + "page_start": 11, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.10 向后倾斜的稳定性测试(见 4.4.2.2)" + ], + "section_level": 4, + "section_title": "5.10 向后倾斜的稳定性测试(见 4.4.2.2)", + "source_ids": [ + "92010ebe02c7582aff25264b0da1e8f8", + "2e7e61b9b2fcd15f53dd427b44583543", + "393cc8440521029ffc0ae15851d9924d" + ], + "text": "按表 3 中的规定负载在儿童三轮车鞍座上进行加载,将前车轮垫高 100 mm(比后轮放置面高 100 mm,见图 5),此时儿童三轮车不应向后翻倒。\n如果儿童三轮车有一个后踏板或后座的类似装置,一名儿童可站/坐在上面与前面的骑行者一同乘骑,则应在从后踏板(或后座)中心沿与鞍座后部相切的轴线上按表3施加与骑行者相同质量的负载,该负载重心应位于该轴线上距离为图2所示的鞍座到脚蹬距离 $ (C^{\\prime} $ 尺寸 $ ) $ 加150 mm处。\n单位为毫米" + }, + { + "semantic_id": "semantic-84", + "block_type": "figure", + "page_start": 11, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.10 向后倾斜的稳定性测试(见 4.4.2.2)" + ], + "section_level": 4, + "section_title": "5.10 向后倾斜的稳定性测试(见 4.4.2.2)", + "source_ids": [ + "9b8580ea3da296e33cbc3f574d262314" + ], + "text": "001" + }, + { + "semantic_id": "semantic-85", + "block_type": "figure", + "page_start": 11, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.10 向后倾斜的稳定性测试(见 4.4.2.2)" + ], + "section_level": 4, + "section_title": "5.10 向后倾斜的稳定性测试(见 4.4.2.2)", + "source_ids": [ + "cfe0a2b170947f06ccff72915ae5f039" + ], + "text": "图 5 向后倾斜的稳定性测试" + }, + { + "semantic_id": "semantic-86", + "block_type": "section_text", + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.10 向后倾斜的稳定性测试(见 4.4.2.2)" + ], + "section_level": 4, + "section_title": "5.10 向后倾斜的稳定性测试(见 4.4.2.2)", + "source_ids": [ + "e7595b98cf63d9dc3e3ca404a8a5d432" + ], + "text": "如果儿童三轮车有一个以上的后踏板或后座的类似装置,则其向后倾斜的稳定性测试应对后踏板分别进行。如果类似装置上的负载与鞍座上的负载相干涉,则鞍座上的负载应转过一角度或向前偏置以使负载保持在预定位置上。鞍座上的负载与类似装置上的负载不应相互触及。转过的角度或偏置距离在保证两负载不产生干涉的前提下应为最小。该转角或偏置是考虑到当儿童三轮车向后倾斜时,乘骑者会自然补偿给由第二乘骑者引起的空间区域占用。" + }, + { + "semantic_id": "semantic-87", + "block_type": "section_text", + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.11 把立管强度测试(见 4.5.3.2)" + ], + "section_level": 4, + "section_title": "5.11 把立管强度测试(见 4.5.3.2)", + "source_ids": [ + "613424d081b07e6718465982917e23a6" + ], + "text": "用夹具将把立管夹紧在最小插入深度处。通过把横管的连接点施加 500 N 的力,其方向朝前并与把立管体的轴线成 $ 45^{\\circ} $ 角(见图 6)。" + }, + { + "semantic_id": "semantic-88", + "block_type": "figure", + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.11 把立管强度测试(见 4.5.3.2)" + ], + "section_level": 4, + "section_title": "5.11 把立管强度测试(见 4.5.3.2)", + "source_ids": [ + "f0ced9b7d11a88b2cee1a5bcd2888390" + ], + "text": "$\\begin{aligned}& \\text { 把横管 } \\\\& \\text { 所施负荷 } \\\\& \\text { 所施负荷 } \\\\& \\text { 夹具 } \\\\& \\text { 最少插入深度 } \\\\& 45^{\\circ} \\\\& \\text { 所施负荷 }\\end{aligned}$" + }, + { + "semantic_id": "semantic-89", + "block_type": "figure", + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.11 把立管强度测试(见 4.5.3.2)" + ], + "section_level": 4, + "section_title": "5.11 把立管强度测试(见 4.5.3.2)", + "source_ids": [ + "87dd09ec1df8a67099fc8d96d0467e9f" + ], + "text": "图 6 把立管强度测试" + }, + { + "semantic_id": "semantic-90", + "block_type": "section_text", + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.12 把立管夹紧装置测试(见 4.5.3.5)" + ], + "section_level": 4, + "section_title": "5.12 把立管夹紧装置测试(见 4.5.3.5)", + "source_ids": [ + "5534506706eb14cd547ed983a398767d" + ], + "text": "将把立管正确地装配在车架和前叉立管内,按生产者推荐的力矩旋紧夹紧装置,然后对把立管/前叉夹紧装置施加 $ 20 \\, N \\cdot m $ 的力矩(见图 7)。" + }, + { + "semantic_id": "semantic-91", + "block_type": "figure", + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.12 把立管夹紧装置测试(见 4.5.3.5)" + ], + "section_level": 4, + "section_title": "5.12 把立管夹紧装置测试(见 4.5.3.5)", + "source_ids": [ + "fdde53ce4df8e19e5b30953a71edf71d" + ], + "text": "$\\xrightarrow{\\text{所施负荷}}$" + }, + { + "semantic_id": "semantic-92", + "block_type": "figure", + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.12 把立管夹紧装置测试(见 4.5.3.5)" + ], + "section_level": 4, + "section_title": "5.12 把立管夹紧装置测试(见 4.5.3.5)", + "source_ids": [ + "92794fcd4088ce7ebade6748955fde90" + ], + "text": "图 7 把立管夹紧装置测试" + }, + { + "semantic_id": "semantic-93", + "block_type": "section_text", + "page_start": 13, + "page_end": 13, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.13 鞍座调节夹紧装置测试(见 4.5.4.2)" + ], + "section_level": 4, + "section_title": "5.13 鞍座调节夹紧装置测试(见 4.5.4.2)", + "source_ids": [ + "bf972ccf32661518519c5cc4f0b57e82" + ], + "text": "将鞍座和鞍管正确地装配在车架上,鞍座夹紧螺栓应按生产者推荐的力矩旋紧,在离鞍座前端或后端25 mm的范围内、能对鞍座夹产生较大力矩的一点,垂直向下施加至少为330 N的力。移去这个力后,应在离鞍座前端或后端25 mm的范围内、能对鞍座夹产生较大力矩的一点,水平施加110 N的力。" + }, + { + "semantic_id": "semantic-94", + "block_type": "section_text", + "page_start": 13, + "page_end": 13, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.14 冲击测试(见 4.5.5)" + ], + "section_level": 4, + "section_title": "5.14 冲击测试(见 4.5.5)", + "source_ids": [ + "00ed47ecd79d24c42a9563421af8cae0" + ], + "text": "将儿童三轮车按正常骑行状态放置于平坦的水平地面上,将质量 20 kg、底部直径为 200 mm 的砂袋从位于鞍座中心点上方 200 mm 的高度向鞍座面自由落下,重复测试三次。" + }, + { + "semantic_id": "semantic-95", + "block_type": "section_text", + "page_start": 13, + "page_end": 13, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.14 冲击测试(见 4.5.5)", + "5.15 靠背结构牢固性测试(见 4.5.6)" + ], + "section_level": 5, + "section_title": "5.15 靠背结构牢固性测试(见 4.5.6)", + "source_ids": [ + "ba5aedbd4a47adb0611cc6dc268a2525" + ], + "text": "将儿童三轮车按正常骑行状态放置于平坦的水平地面上,同时固定前轮和后轮,以防止测试过程中车体移动。在靠背顶端的中心部位水平向后施加200 N的力,该力在5 s内逐步施加并保持10 s后卸载作为一个周期,每两周期的间隔不超过10 s,重复10个周期。" + }, + { + "semantic_id": "semantic-96", + "block_type": "section_text", + "page_start": 13, + "page_end": 13, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.14 冲击测试(见 4.5.5)", + "5.16 辅助推杆强度测试(见 4.5.7)" + ], + "section_level": 5, + "section_title": "5.16 辅助推杆强度测试(见 4.5.7)", + "source_ids": [ + "661d9c8369140240aee5947e9f382c13", + "37e6f293070fc85a1e2f42aaceea4a66", + "cc6e98f6675f0316fae796a69e0b06b2", + "28d47b8086ac5101dc8f8213604c58a6" + ], + "text": "将儿童三轮车按正常骑行状态放置于平坦的水平地面上,测量儿童三轮车的鞍座到脚蹬距离 $ (C^{\\prime} $ 尺寸,见图2),按表3中的规定负载在鞍座中心部位加载,其重心应位于鞍座面几何中心上方150 mm处。\n将后轮用挡块挡住以防止其在测试过程中移动。在生产商设定的使用位置,将辅助推杆无冲击地施力向后压使前轮离地 10 mm,并保持 3 min。\n再将前轮用挡块挡住以防止其在测试过程中移动或向车体两侧转向。在生产商设定的使用位置,将辅助推杆无冲击地施力向前拉使后轮离地 30 mm,并保持 3 min。\n重复上述过程 10 次后,检查辅助推杆及其与车体连接部位。" + }, + { + "semantic_id": "semantic-97", + "block_type": "section_text", + "page_start": 13, + "page_end": 13, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.17 脚蹬离地高度测试(见 4.5.8.2)" + ], + "section_level": 4, + "section_title": "5.17 脚蹬离地高度测试(见 4.5.8.2)", + "source_ids": [ + "9fedb2339fa183c1ed157d35ded06295" + ], + "text": "将儿童三轮车放置于平坦的水平地面上,将一只脚蹬置于最低位置,脚蹬的平面与地面平行,测量脚蹬的下平面与地面间的间距;并以同样的方法测量另一脚蹬的离地高度。" + } + ], + "vector_chunks": [ + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-1", + "chunk_index": 1, + "semantic_id": "semantic-1", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 0, + "page_end": 0, + "section_path": [ + "中华人民共和国国家标准" + ], + "section_level": 1, + "section_title": "中华人民共和国国家标准", + "source_ids": [ + "544d2c5ddb9e54fea38bc8fe4b7ba14d", + "3735a18a924f7063303437201694cf0a" + ], + "text": "GB 14747—2006\n代替 GB 14747—1993", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准\n\nGB 14747—2006\n代替 GB 14747—1993" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-2", + "chunk_index": 2, + "semantic_id": "semantic-2", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 0, + "page_end": 2, + "section_path": [ + "中华人民共和国国家标准", + "Safety requirements for child tricycles" + ], + "section_level": 2, + "section_title": "Safety requirements for child tricycles", + "source_ids": [ + "daf7eafb0181b5ad594493dc11ff1b4a", + "c8b66923988c6097208e8b7c20d3c465", + "ade1c5b56805a947f2f8fc867cf02813", + "e5f577808fa650f7033d5b01b5ac8cc2", + "ab44e43ac10c7e655fa914b9e16e6691", + "72f554bf4401e4ce24c66c060124f188", + "cce806bf34a0139b0902d452ee5475cb", + "c57294fd9d4249b2cc063e5a9d4b3b84", + "828d553f69ed8fedf6e76d2578de205b", + "b5c5cf976be57d1c9e438ad1f7454f73", + "0b90f290c15266343fa0fb2be2665b4e", + "f0b74832ad49e206ebc883d59820cb56", + "1e08e27edbfbcf6a26f29a453a8bdade", + "d97201fbca4c856d70169677e40c7b6f", + "35b988ccd15795316ecc7a0a470d084e", + "24152c699fcb5f669ab8cf51f55d7c5e", + "adfad2cf7d47b620505465132e2a131c", + "2f9c56f4f15e654de906af15f229f43e", + "0f04f0b07fc900d72abaed5db00526e1", + "8bd1e8d2619fe8bbac602c7efe105112", + "b4cff14549f353015a7061a0651d719b", + "c069a6a2d6bffd24115169128e241843", + "0a45edf7f8d28be6582cebc7e8081c73" + ], + "text": "2006-02-21 发布\n2007-01-01 实施\n5 测试方法 ..... 6\n5.1 一般要求 …… 6\n5.1.1 测试样品 ..... 6\n5.1.2 测试仪器精度 …… 6\n5.1.3 测试环境 ..... 6\n5.2 特定可迁移元素的测试(见 4.1.1) ..... 7\n5.3 燃烧性能测试(见 4.1.2) ..... 7\n5.4 跌落测试(见 4.2, 4.5.4.2) ..... 7\n5.5 锐利边缘测试(见 4.3.1) ..... 7\n5.6 锐利尖端测试(见 4.3.2) …… 7\n5.7 小零件测试(见 4.3.5) …… 7\n5.8 行驶稳定性测试(见 4.4.1) …… 7\n5.9 向前倾斜的稳定性测试(见 4.4.2.1) …… 7\n5.10 向后倾斜的稳定性测试(见 4.4.2.2) …… 8\n5.11 把立管强度测试(见 4.5.3.2) ..... 9\n5.12 把立管夹紧装置测试(见 4.5.3.5) …… 9\n5.13 鞍座调节夹紧装置测试(见 4.5.4.2) …… 10\n5.14 冲击测试(见 4.5.5) …… 10\n5.15 靠背结构牢固性测试(见 4.5.6) …… 10\n5.16 辅助推杆强度测试(见 4.5.7) …… 10\n5.17 脚蹬离地高度测试(见 4.5.8.2) …… 10", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > Safety requirements for child tricycles\n\n2006-02-21 发布\n2007-01-01 实施\n5 测试方法 ..... 6\n5.1 一般要求 …… 6\n5.1.1 测试样品 ..... 6\n5.1.2 测试仪器精度 …… 6\n5.1.3 测试环境 ..... 6\n5.2 特定可迁移元素的测试(见 4.1.1) ..... 7\n5.3 燃烧性能测试(见 4.1.2) ..... 7\n5.4 跌落测试(见 4.2, 4.5.4.2) ..... 7\n5.5 锐利边缘测试(见 4.3.1) ..... 7\n5.6 锐利尖端测试(见 4.3.2) …… 7\n5.7 小零件测试(见 4.3.5) …… 7\n5.8 行驶稳定性测试(见 4.4.1) …… 7\n5.9 向前倾斜的稳定性测试(见 4.4.2.1) …… 7\n5.10 向后倾斜的稳定性测试(见 4.4.2.2) …… 8\n5.11 把立管强度测试(见 4.5.3.2) ..... 9\n5.12 把立管夹紧装置测试(见 4.5.3.5) …… 9\n5.13 鞍座调节夹紧装置测试(见 4.5.4.2) …… 10\n5.14 冲击测试(见 4.5.5) …… 10\n5.15 靠背结构牢固性测试(见 4.5.6) …… 10\n5.16 辅助推杆强度测试(见 4.5.7) …… 10\n5.17 脚蹬离地高度测试(见 4.5.8.2) …… 10" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-3", + "chunk_index": 3, + "semantic_id": "semantic-3", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 3, + "page_end": 3, + "section_path": [ + "中华人民共和国国家标准", + "前言" + ], + "section_level": 2, + "section_title": "前言", + "source_ids": [ + "d13e2d9d4ff68a7d2084bb71f5d919b6", + "5c14c127a4806807e16c8aa9c105f2e7", + "ed6ad6136055189dbce6cdcd31ff50c5", + "aa194df7d6bfa0ac472dd33eac69cfa4", + "c00dd20351fb22565fcb371c015e0dd2", + "20ad2b0521022d20997231883cc7692d", + "a47920b0a48ef36ef098372ff5a15e6d", + "a3d01d0ccb29bd8faf9ff9ecd4827820", + "ffd680b86af6af464cd4ae5203fe49dc", + "4b87ccc9d1cff0bdf55af102ab50a8f4", + "dd70726bfda482f4b36a0de72b86ccfa", + "fce7c45ba4cbc519e2daf41e9496d4f6", + "da8d89264690c0853c45c36f9d1ee2be", + "5be31e4b9f66e2e7754bf7301b4c24d2", + "b09facf84e2004e00c62f4f3f2609d84" + ], + "text": "本标准为强制性标准。\n本标准自实施之日起,代替 GB 14747—1993《儿童三轮车安全要求》。\n本标准与 GB 14747—1993 相比,主要变化如下:\n——新增了“3.7 辅助推杆”、“3.8 后踏板”两个定义;\n——根据 GB 6675—2003,对“4.1 材料”中的“4.1.1 特定可迁移元素最大限量”和“4.1.2 燃烧性能”的技术要求和测试方法进行了修改;\n——参照 GB 5296.5《消费品使用说明 玩具使用说明》,对“4.6 产品信息”进行了修改;\n——新增了“4.5.5 冲击强度”、“4.5.6 靠背结构牢固性”、“4.5.7 辅助推杆强度”和“4.5.8.2 脚蹬离地高度”共四项技术要求,并配套增加了相应测试方法;\n——修改了“5.10 向后倾斜的稳定性测试”测试方法;\n——新增了测试方法的“5.1 一般要求”,包括“5.1.1 测试样品”、“5.1.2 测试仪器精度”和“5.1.3 测试环境”的一般要求。\n本标准由中国轻工业联合会提出。\n本标准由全国玩具标准化技术委员会归口。\n本标准起草单位:北京中轻联认证中心、广东省产品质量监督检验中心、好孩子儿童用品有限公司。\n本标准主要起草人:刘唐书、胡官昌、高燕。\n本标准所代替标准的历次版本发布情况为:\n——GB 14747—1993。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 前言\n\n本标准为强制性标准。\n本标准自实施之日起,代替 GB 14747—1993《儿童三轮车安全要求》。\n本标准与 GB 14747—1993 相比,主要变化如下:\n——新增了“3.7 辅助推杆”、“3.8 后踏板”两个定义;\n——根据 GB 6675—2003,对“4.1 材料”中的“4.1.1 特定可迁移元素最大限量”和“4.1.2 燃烧性能”的技术要求和测试方法进行了修改;\n——参照 GB 5296.5《消费品使用说明 玩具使用说明》,对“4.6 产品信息”进行了修改;\n——新增了“4.5.5 冲击强度”、“4.5.6 靠背结构牢固性”、“4.5.7 辅助推杆强度”和“4.5.8.2 脚蹬离地高度”共四项技术要求,并配套增加了相应测试方法;\n——修改了“5.10 向后倾斜的稳定性测试”测试方法;\n——新增了测试方法的“5.1 一般要求”,包括“5.1.1 测试样品”、“5.1.2 测试仪器精度”和“5.1.3 测试环境”的一般要求。\n本标准由中国轻工业联合会提出。\n本标准由全国玩具标准化技术委员会归口。\n本标准起草单位:北京中轻联认证中心、广东省产品质量监督检验中心、好孩子儿童用品有限公司。\n本标准主要起草人:刘唐书、胡官昌、高燕。\n本标准所代替标准的历次版本发布情况为:\n——GB 14747—1993。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-4", + "chunk_index": 4, + "semantic_id": "semantic-4", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "1 范围" + ], + "section_level": 3, + "section_title": "1 范围", + "source_ids": [ + "c977c65db379fdaa06a58f14da022dad", + "34dcd76905ea7e6c679f95771fd485a5" + ], + "text": "本标准规定了供一名儿童或多名儿童乘坐的儿童三轮车的安全技术要求和测试方法。\n本标准不适用于玩具三轮车或设计用于其他特殊目的的三轮车(如游乐三轮车)。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 1 范围\n\n本标准规定了供一名儿童或多名儿童乘坐的儿童三轮车的安全技术要求和测试方法。\n本标准不适用于玩具三轮车或设计用于其他特殊目的的三轮车(如游乐三轮车)。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-5", + "chunk_index": 5, + "semantic_id": "semantic-5", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "2 规范性引用文件" + ], + "section_level": 3, + "section_title": "2 规范性引用文件", + "source_ids": [ + "c1787321c37863f1c4b0d5aacd7af0ae", + "fde56576959ea41ae8776a3f610843c4" + ], + "text": "下列文件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本标准,然而,鼓励根据本标准达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本标准。\nGB 6675—2003 国家玩具安全技术规范", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 2 规范性引用文件\n\n下列文件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本标准,然而,鼓励根据本标准达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本标准。\nGB 6675—2003 国家玩具安全技术规范" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-6", + "chunk_index": 6, + "semantic_id": "semantic-6", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义" + ], + "section_level": 3, + "section_title": "3 术语和定义", + "source_ids": [ + "7802b558fd248b1608d3cd2ee2d4ceee" + ], + "text": "下列术语和定义适用于本标准。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义\n\n下列术语和定义适用于本标准。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-7", + "chunk_index": 7, + "semantic_id": "semantic-7", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.1", + "儿童三轮车 child tricycles" + ], + "section_level": 5, + "section_title": "儿童三轮车 child tricycles", + "source_ids": [ + "a3088d05d9047e03b8bd1a38b696a884" + ], + "text": "一种轮式车辆,各车轮与地面的接触点应能形成三角形或梯形,并仅借人力靠脚蹬驱动前轮而行驶的车辆。如果轮子与地面的接触点构成的形状为梯形,则窄轮距宽度应小于宽轮距的一半。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.1 > 儿童三轮车 child tricycles\n\n一种轮式车辆,各车轮与地面的接触点应能形成三角形或梯形,并仅借人力靠脚蹬驱动前轮而行驶的车辆。如果轮子与地面的接触点构成的形状为梯形,则窄轮距宽度应小于宽轮距的一半。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-8", + "chunk_index": 8, + "semantic_id": "semantic-8", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.2", + "轮距 track" + ], + "section_level": 5, + "section_title": "轮距 track", + "source_ids": [ + "a503cea57c1b094e81635583c8ba5ff6" + ], + "text": "有一根公共轮轴的两车轮之间的距离,即两车轮与地面接触的外端尺寸(见图1)。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.2 > 轮距 track\n\n有一根公共轮轴的两车轮之间的距离,即两车轮与地面接触的外端尺寸(见图1)。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-9", + "chunk_index": 9, + "semantic_id": "semantic-9", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.2", + "轮距 track" + ], + "section_level": 5, + "section_title": "轮距 track", + "source_ids": [ + "8fa690744d1ebd0921ef6a5200f3c5cd" + ], + "text": "$\\theta$\n车轮与地面接触点的外端尺寸", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.2 > 轮距 track\n\n$\\theta$\n车轮与地面接触点的外端尺寸" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-10", + "chunk_index": 10, + "semantic_id": "semantic-10", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 4, + "page_end": 4, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.2", + "轮距 track" + ], + "section_level": 5, + "section_title": "轮距 track", + "source_ids": [ + "abd6eafbc061d745eac477d42ff1385d" + ], + "text": "图 1 车轮行驶的稳定性测试", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.2 > 轮距 track\n\n图 1 车轮行驶的稳定性测试" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-11", + "chunk_index": 11, + "semantic_id": "semantic-11", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.3", + "断裂 fracture" + ], + "section_level": 5, + "section_title": "断裂 fracture", + "source_ids": [ + "ebf51f0e05b17b7e9f1bd298e9226254" + ], + "text": "材料的折断程度达到可使构件不能再支承在正常使用中可能产生的负荷。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.3 > 断裂 fracture\n\n材料的折断程度达到可使构件不能再支承在正常使用中可能产生的负荷。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-12", + "chunk_index": 12, + "semantic_id": "semantic-12", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.4", + "正常乘骑状态 normal ride gesture" + ], + "section_level": 5, + "section_title": "正常乘骑状态 normal ride gesture", + "source_ids": [ + "530f00c1b50f347440d61cdf3cd1dacf" + ], + "text": "骑车者坐在儿童三轮车的鞍座上,双脚放在脚蹬上,双手握住把横管或操纵机构的姿势。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.4 > 正常乘骑状态 normal ride gesture\n\n骑车者坐在儿童三轮车的鞍座上,双脚放在脚蹬上,双手握住把横管或操纵机构的姿势。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-13", + "chunk_index": 13, + "semantic_id": "semantic-13", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.5", + "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal" + ], + "section_level": 5, + "section_title": "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal", + "source_ids": [ + "e0c7ff15ea265a7f57753e22e95872c6" + ], + "text": "脚蹬转到离座位最远的位置,从鞍座面中心至脚蹬踩脚面中心的最大距离(见图2)。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.5 > 鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal\n\n脚蹬转到离座位最远的位置,从鞍座面中心至脚蹬踩脚面中心的最大距离(见图2)。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-14", + "chunk_index": 14, + "semantic_id": "semantic-14", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.5", + "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal" + ], + "section_level": 5, + "section_title": "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal", + "source_ids": [ + "62ce78e3eee1f75d4d125421b8d4c244" + ], + "text": "$\\text { 脚蹬 }$", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.5 > 鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal\n\n$\\text { 脚蹬 }$" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-15", + "chunk_index": 15, + "semantic_id": "semantic-15", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.5", + "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal" + ], + "section_level": 5, + "section_title": "鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal", + "source_ids": [ + "4ff504b691648aaef1e950e82d90ae4b" + ], + "text": "图 2 鞍座到脚蹬距离(\\(C'\\)尺寸)测量", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.5 > 鞍座到脚蹬距离(\\(C'\\)尺寸) distance from saddle to pedal\n\n图 2 鞍座到脚蹬距离(\\(C'\\)尺寸)测量" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-16", + "chunk_index": 16, + "semantic_id": "semantic-16", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.6", + "外露突出物 exposed protrusion" + ], + "section_level": 5, + "section_title": "外露突出物 exposed protrusion", + "source_ids": [ + "1ddd95aff7fad56781a5472b88ed2a22", + "8596b5858c1d5da889cb1e0468fd36b5", + "ef83b4e6f832cf32271c61f831d76fd3", + "ac4115d63e37fdd398fc953a8dfc5aef" + ], + "text": "凡符合以下情况者,均称为儿童三轮车的外露突出物:\na)除标准螺栓或螺钉头外,其他经组装后突出长度大于8 mm、且其末端倒圆半径小于6.3 mm的任何零部件;\nb)在螺母旋紧后,大于螺钉的外径尺寸的螺钉的外露突出部分;\nc) 在螺母旋紧后,突出部分大于 3.2 mm,正常骑行时与骑车者的任何部位可能接触的螺钉的外露突出部分。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.6 > 外露突出物 exposed protrusion\n\n凡符合以下情况者,均称为儿童三轮车的外露突出物:\na)除标准螺栓或螺钉头外,其他经组装后突出长度大于8 mm、且其末端倒圆半径小于6.3 mm的任何零部件;\nb)在螺母旋紧后,大于螺钉的外径尺寸的螺钉的外露突出部分;\nc) 在螺母旋紧后,突出部分大于 3.2 mm,正常骑行时与骑车者的任何部位可能接触的螺钉的外露突出部分。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-17", + "chunk_index": 17, + "semantic_id": "semantic-17", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.7", + "辅助推杆 assist-push-rod" + ], + "section_level": 5, + "section_title": "辅助推杆 assist-push-rod", + "source_ids": [ + "a99b14bbd52ee81f29f18268802239e8" + ], + "text": "用于监护人辅助儿童乘骑儿童三轮车时前进或转向等的装置。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.7 > 辅助推杆 assist-push-rod\n\n用于监护人辅助儿童乘骑儿童三轮车时前进或转向等的装置。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-18", + "chunk_index": 18, + "semantic_id": "semantic-18", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 5, + "page_end": 5, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "3 术语和定义", + "3.8", + "后踏板 back-treadle" + ], + "section_level": 5, + "section_title": "后踏板 back-treadle", + "source_ids": [ + "6d751c52b054f5604fa881ce01d9464f" + ], + "text": "儿童三轮车后部可供儿童站立的装置。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 3 术语和定义 > 3.8 > 后踏板 back-treadle\n\n儿童三轮车后部可供儿童站立的装置。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-19", + "chunk_index": 19, + "semantic_id": "semantic-19", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.1 具体要求" + ], + "section_level": 6, + "section_title": "4.1.1.1 具体要求", + "source_ids": [ + "989c1ad25a46e9f0ac97531f7be8a35c" + ], + "text": "儿童三轮车的可触及部件和材料,按5.2(特定可迁移元素的测试)测试,特定可迁移元素的测试结果的校正值应符合表1中的最大限量的规定。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.1 特定可迁移元素最大限量 > 4.1.1.1 具体要求\n\n儿童三轮车的可触及部件和材料,按5.2(特定可迁移元素的测试)测试,特定可迁移元素的测试结果的校正值应符合表1中的最大限量的规定。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-20", + "chunk_index": 20, + "semantic_id": "semantic-20", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.1 具体要求" + ], + "section_level": 6, + "section_title": "4.1.1.1 具体要求", + "source_ids": [ + "8782ee5d923b91ed8cefe0ad46a36c94" + ], + "text": "表 1 儿童三轮车材料中特定可迁移元素的最大限量", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.1 特定可迁移元素最大限量 > 4.1.1.1 具体要求\n\n表 1 儿童三轮车材料中特定可迁移元素的最大限量" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-21", + "chunk_index": 21, + "semantic_id": "semantic-21", + "chunk_type": "table", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.1 具体要求" + ], + "section_level": 6, + "section_title": "4.1.1.1 具体要求", + "source_ids": [ + "638307be07405ba5ebdb4c99a05a0e80" + ], + "text": "元素\n锑 Sb\n砷 As\n钡 Ba\n镉 Cd\n铬 Cr\n铅 Pb\n汞 Hg\n硒 Se\n最大限量/(mg/kg)\n60\n25\n1 000\n75\n60\n90\n60\n500", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.1 特定可迁移元素最大限量 > 4.1.1.1 具体要求\n\n元素\n锑 Sb\n砷 As\n钡 Ba\n镉 Cd\n铬 Cr\n铅 Pb\n汞 Hg\n硒 Se\n最大限量/(mg/kg)\n60\n25\n1 000\n75\n60\n90\n60\n500" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-22", + "chunk_index": 22, + "semantic_id": "semantic-22", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.1 具体要求" + ], + "section_level": 6, + "section_title": "4.1.1.1 具体要求", + "source_ids": [ + "d5d63e8d5a1f1d78d9f9c83b32240389" + ], + "text": "在考虑到儿童的正常和可预见的行为时,如果儿童三轮车某些部件或材料由于其可触及性、功能、质量、尺寸或其他特征可明显排除因吮吸、舔食或吞咽造成的危险,则这些部件或材料不适用本要求。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.1 特定可迁移元素最大限量 > 4.1.1.1 具体要求\n\n在考虑到儿童的正常和可预见的行为时,如果儿童三轮车某些部件或材料由于其可触及性、功能、质量、尺寸或其他特征可明显排除因吮吸、舔食或吞咽造成的危险,则这些部件或材料不适用本要求。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-23", + "chunk_index": 23, + "semantic_id": "semantic-23", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "ba83d6dd7439b29a0ceb91d3c968200b", + "5f552ef62ec8b17a2b4747d2780c96e7" + ], + "text": "由于 5.2(特定可迁移元素的测试)的精确度的原因,在考虑实验室之间测试结果时需要一个经校正的分析结果。5.2(特定可迁移元素的测试)的分析结果应减去表 2 中分析校正值,以得到校正后的分析结果。\n凡儿童三轮车材料的分析结果校正值低于或等于表1中最大限量,则被认为是符合本标准的要求。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.1 特定可迁移元素最大限量 > 4.1.1.2 测试结果校正\n\n由于 5.2(特定可迁移元素的测试)的精确度的原因,在考虑实验室之间测试结果时需要一个经校正的分析结果。5.2(特定可迁移元素的测试)的分析结果应减去表 2 中分析校正值,以得到校正后的分析结果。\n凡儿童三轮车材料的分析结果校正值低于或等于表1中最大限量,则被认为是符合本标准的要求。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-24", + "chunk_index": 24, + "semantic_id": "semantic-24", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "38331bff9d7d1108ce07797570ede0a6" + ], + "text": "表 2 各元素分析校正系数", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.1 特定可迁移元素最大限量 > 4.1.1.2 测试结果校正\n\n表 2 各元素分析校正系数" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-25", + "chunk_index": 25, + "semantic_id": "semantic-25", + "chunk_type": "table", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "a118d14010e3b6e95d93ef7cf9cd2462" + ], + "text": "元 素\n锑 Sb\n砷 As\n钡 Ba\n镉 Cd\n铬 Cr\n铅 Pb\n汞 Hg\n硒 Se\n分析校正系数/(%)\n60\n60\n30\n30\n30\n30\n50\n60", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.1 特定可迁移元素最大限量 > 4.1.1.2 测试结果校正\n\n元 素\n锑 Sb\n砷 As\n钡 Ba\n镉 Cd\n铬 Cr\n铅 Pb\n汞 Hg\n硒 Se\n分析校正系数/(%)\n60\n60\n30\n30\n30\n30\n50\n60" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-26", + "chunk_index": 26, + "semantic_id": "semantic-26", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "3a7dadd1194715edb601c0ad88063279" + ], + "text": "示例:", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.1 特定可迁移元素最大限量 > 4.1.1.2 测试结果校正\n\n示例:" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-27", + "chunk_index": 27, + "semantic_id": "semantic-27", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "46a077403d2c81738701287eb03443a1" + ], + "text": "铅的分析结果为 120 mg/kg,表 2 中的分析结果校正系数为 30%,则:", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.1 特定可迁移元素最大限量 > 4.1.1.2 测试结果校正\n\n铅的分析结果为 120 mg/kg,表 2 中的分析结果校正系数为 30%,则:" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-28", + "chunk_index": 28, + "semantic_id": "semantic-28", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "f1902b79143d828178145c005af6253f" + ], + "text": "分析结果校正值=120-120×30%=120-36=84(mg/kg)。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.1 特定可迁移元素最大限量 > 4.1.1.2 测试结果校正\n\n分析结果校正值=120-120×30%=120-36=84(mg/kg)。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-29", + "chunk_index": 29, + "semantic_id": "semantic-29", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.1 特定可迁移元素最大限量", + "4.1.1.2 测试结果校正" + ], + "section_level": 6, + "section_title": "4.1.1.2 测试结果校正", + "source_ids": [ + "c26dbeb2d2ba6c454cff1f55c359cf7c" + ], + "text": "这个数字被认为符合本标准的要求(表1中可迁移铅元素的最大限量为90 mg/kg)。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.1 特定可迁移元素最大限量 > 4.1.1.2 测试结果校正\n\n这个数字被认为符合本标准的要求(表1中可迁移铅元素的最大限量为90 mg/kg)。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-30", + "chunk_index": 30, + "semantic_id": "semantic-30", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.1 材料", + "4.1.2 燃烧性能" + ], + "section_level": 5, + "section_title": "4.1.2 燃烧性能", + "source_ids": [ + "b103a0fd0b8c851da4d4404e488465f7", + "bcf3b09ab8034b3b917cc3f0e7db1aa0" + ], + "text": "儿童三轮车的零部件禁止使用易燃材料。\n按 5.3(燃烧性能测试)测试,应符合 GB 6675—2003 附录 B(燃烧性能)的相关要求。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.1 材料 > 4.1.2 燃烧性能\n\n儿童三轮车的零部件禁止使用易燃材料。\n按 5.3(燃烧性能测试)测试,应符合 GB 6675—2003 附录 B(燃烧性能)的相关要求。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-31", + "chunk_index": 31, + "semantic_id": "semantic-31", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.2 机械强度" + ], + "section_level": 4, + "section_title": "4.2 机械强度", + "source_ids": [ + "ab9feaf09269cd18b42ebc2fde67e25b" + ], + "text": "儿童三轮车在正常使用和可预见的非正常使用的情况下,以及按5.4(跌落测试)进行测试后,其任何零部件均不应出现断裂或肉眼可见的裂纹。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.2 机械强度\n\n儿童三轮车在正常使用和可预见的非正常使用的情况下,以及按5.4(跌落测试)进行测试后,其任何零部件均不应出现断裂或肉眼可见的裂纹。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-32", + "chunk_index": 32, + "semantic_id": "semantic-32", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.1 锐利边缘" + ], + "section_level": 5, + "section_title": "4.3.1 锐利边缘", + "source_ids": [ + "7f06b3eb6b16100206f204a41fe8144a" + ], + "text": "按 5.5(锐利边缘测试)测试,儿童三轮车上不应存在任何可触及的危险锐利边缘。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件 > 4.3.1 锐利边缘\n\n按 5.5(锐利边缘测试)测试,儿童三轮车上不应存在任何可触及的危险锐利边缘。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-33", + "chunk_index": 33, + "semantic_id": "semantic-33", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.2 锐利尖端" + ], + "section_level": 5, + "section_title": "4.3.2 锐利尖端", + "source_ids": [ + "583655fcf511483b0589c8116c0eae4e" + ], + "text": "按 5.6(锐利尖端测试)测试,儿童三轮车上不应存在任何可触及的危险锐利尖端。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件 > 4.3.2 锐利尖端\n\n按 5.6(锐利尖端测试)测试,儿童三轮车上不应存在任何可触及的危险锐利尖端。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-34", + "chunk_index": 34, + "semantic_id": "semantic-34", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 6, + "page_end": 6, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.3 外露突出物" + ], + "section_level": 5, + "section_title": "4.3.3 外露突出物", + "source_ids": [ + "21e82e8e335b028fa8c7021d5bee4158" + ], + "text": "在图 3 所示的 A、B 区域内不应存在外露突出物。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件 > 4.3.3 外露突出物\n\n在图 3 所示的 A、B 区域内不应存在外露突出物。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-35", + "chunk_index": 35, + "semantic_id": "semantic-35", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.3 外露突出物" + ], + "section_level": 5, + "section_title": "4.3.3 外露突出物", + "source_ids": [ + "9a827c6dcf54d4f6d42cbf18faa12a33" + ], + "text": "A区域\nB区域", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件 > 4.3.3 外露突出物\n\nA区域\nB区域" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-36", + "chunk_index": 36, + "semantic_id": "semantic-36", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.3 外露突出物" + ], + "section_level": 5, + "section_title": "4.3.3 外露突出物", + "source_ids": [ + "b8f8020140364639673a4c97b3503c15" + ], + "text": "注:A 区域由通过鞍座表面中心、前轮轴以及车把旋转轴线至两把套连线之交点所连成的线为界。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件 > 4.3.3 外露突出物\n\n注:A 区域由通过鞍座表面中心、前轮轴以及车把旋转轴线至两把套连线之交点所连成的线为界。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-37", + "chunk_index": 37, + "semantic_id": "semantic-37", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.3 外露突出物" + ], + "section_level": 5, + "section_title": "4.3.3 外露突出物", + "source_ids": [ + "7742bfd192d96b95b39e27081a58d823" + ], + "text": "B 区域为鞍座表面中心、后轮轴以及车把旋转轴线至两把套连线之交点的后方和上方。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件 > 4.3.3 外露突出物\n\nB 区域为鞍座表面中心、后轮轴以及车把旋转轴线至两把套连线之交点的后方和上方。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-38", + "chunk_index": 38, + "semantic_id": "semantic-38", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.3 外露突出物" + ], + "section_level": 5, + "section_title": "4.3.3 外露突出物", + "source_ids": [ + "756a5c4f9c6ea6cd5ac70de848651f06" + ], + "text": "图 3 不允许存在外露突出物的区域", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件 > 4.3.3 外露突出物\n\n图 3 不允许存在外露突出物的区域" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-39", + "chunk_index": 39, + "semantic_id": "semantic-39", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.4 挤夹点" + ], + "section_level": 5, + "section_title": "4.3.4 挤夹点", + "source_ids": [ + "95527ec7a1edfb81291ca93c5e85ba93" + ], + "text": "儿童三轮车不应有任何可造成伤害的挤夹点,骑车者在任何骑行位置时,任何可能触及的活动部分(例如:轮子与泥板之间、实体结构的轮辐内的孔隙)均应小于5 mm或大于12 mm。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件 > 4.3.4 挤夹点\n\n儿童三轮车不应有任何可造成伤害的挤夹点,骑车者在任何骑行位置时,任何可能触及的活动部分(例如:轮子与泥板之间、实体结构的轮辐内的孔隙)均应小于5 mm或大于12 mm。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-40", + "chunk_index": 40, + "semantic_id": "semantic-40", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件", + "4.3.5 小零件" + ], + "section_level": 5, + "section_title": "4.3.5 小零件", + "source_ids": [ + "1cdf8c234ec35583f42b38e28a332891" + ], + "text": "供 36 个月及以下儿童使用的儿童三轮车,在测试前和测试后,其可拆卸或测试中脱落的部件,按 5.7(小零件测试)测试时均不应完全容入小零件试验器。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.3 锐利边缘、锐利尖端、外露突出物、挤夹点和小零件 > 4.3.5 小零件\n\n供 36 个月及以下儿童使用的儿童三轮车,在测试前和测试后,其可拆卸或测试中脱落的部件,按 5.7(小零件测试)测试时均不应完全容入小零件试验器。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-41", + "chunk_index": 41, + "semantic_id": "semantic-41", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.4 稳定性", + "4.4.1 行驶稳定性" + ], + "section_level": 5, + "section_title": "4.4.1 行驶稳定性", + "source_ids": [ + "88896bc39ec3f6e164c75cbc18988c45" + ], + "text": "儿童三轮车按 5.8(行驶稳定性测试) 进行测试时, 不应翻倒。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.4 稳定性 > 4.4.1 行驶稳定性\n\n儿童三轮车按 5.8(行驶稳定性测试) 进行测试时, 不应翻倒。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-42", + "chunk_index": 42, + "semantic_id": "semantic-42", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.4 稳定性", + "4.4.2 倾斜稳定性", + "4.4.2.1 向前倾斜的稳定性" + ], + "section_level": 6, + "section_title": "4.4.2.1 向前倾斜的稳定性", + "source_ids": [ + "d63cc8f9175f9eba6895055ac9821703" + ], + "text": "儿童三轮车按 5.9(向前倾斜的稳定性测试) 进行测试时, 不应向前翻倒。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.4 稳定性 > 4.4.2 倾斜稳定性 > 4.4.2.1 向前倾斜的稳定性\n\n儿童三轮车按 5.9(向前倾斜的稳定性测试) 进行测试时, 不应向前翻倒。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-43", + "chunk_index": 43, + "semantic_id": "semantic-43", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.4 稳定性", + "4.4.2 倾斜稳定性", + "4.4.2.2 向后倾斜的稳定性" + ], + "section_level": 6, + "section_title": "4.4.2.2 向后倾斜的稳定性", + "source_ids": [ + "7122861f73ae5c05e6f92746d6cde190" + ], + "text": "儿童三轮车按 5.10(向后倾斜的稳定性测试) 进行测试时, 不应向后翻倒。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.4 稳定性 > 4.4.2 倾斜稳定性 > 4.4.2.2 向后倾斜的稳定性\n\n儿童三轮车按 5.10(向后倾斜的稳定性测试) 进行测试时, 不应向后翻倒。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-44", + "chunk_index": 44, + "semantic_id": "semantic-44", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.1 连接紧固件" + ], + "section_level": 5, + "section_title": "4.5.1 连接紧固件", + "source_ids": [ + "4b8ce8f8255dde1cc291db2a80e0db2e" + ], + "text": "所有用来连接或紧固用的螺栓、螺钉、螺母等,在按本标准要求进行测试时,不应出现断裂、松脱、肉眼可见的裂纹或失去应有的功效。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.1 连接紧固件\n\n所有用来连接或紧固用的螺栓、螺钉、螺母等,在按本标准要求进行测试时,不应出现断裂、松脱、肉眼可见的裂纹或失去应有的功效。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-45", + "chunk_index": 45, + "semantic_id": "semantic-45", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.2 防护罩帽" + ], + "section_level": 5, + "section_title": "4.5.2 防护罩帽", + "source_ids": [ + "49eef7a85f8decd815aef62404901515" + ], + "text": "用于防护外露突出物的防护罩帽应能承受 70 N 拉力而不脱落。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.2 防护罩帽\n\n用于防护外露突出物的防护罩帽应能承受 70 N 拉力而不脱落。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-46", + "chunk_index": 46, + "semantic_id": "semantic-46", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 7, + "page_end": 7, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.3 操作系统", + "4.5.3.1 把立管插入深度标记" + ], + "section_level": 6, + "section_title": "4.5.3.1 把立管插入深度标记", + "source_ids": [ + "132085f833dc4ac74f3fc96a504a107f" + ], + "text": "如果把立管是一种可调节的结构时,把立管上应有一个永久性的标记或环圈,清楚地标明把立管插入前叉组件的最小插入深度。标记不应损伤把立管应有的强度,最小插入深度从把立管末端起不应小于把立管直径的2.5倍,且把立管最小插入深度标记以下应在至少有一个管子直径的长度内保持其应有的强度。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.3 操作系统 > 4.5.3.1 把立管插入深度标记\n\n如果把立管是一种可调节的结构时,把立管上应有一个永久性的标记或环圈,清楚地标明把立管插入前叉组件的最小插入深度。标记不应损伤把立管应有的强度,最小插入深度从把立管末端起不应小于把立管直径的2.5倍,且把立管最小插入深度标记以下应在至少有一个管子直径的长度内保持其应有的强度。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-47", + "chunk_index": 47, + "semantic_id": "semantic-47", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.3 操作系统", + "4.5.3.2 把立管的强度" + ], + "section_level": 6, + "section_title": "4.5.3.2 把立管的强度", + "source_ids": [ + "2409daa211616616486e03597148028d" + ], + "text": "把立管按 5.11(把立管强度测试) 进行测试, 不应断裂。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.3 操作系统 > 4.5.3.2 把立管的强度\n\n把立管按 5.11(把立管强度测试) 进行测试, 不应断裂。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-48", + "chunk_index": 48, + "semantic_id": "semantic-48", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.3 操作系统", + "4.5.3.3 把横管" + ], + "section_level": 6, + "section_title": "4.5.3.3 把横管", + "source_ids": [ + "1f66bf0f8d6662f8c4c19c5c84cb1b06" + ], + "text": "把横管应以儿童三轮车的纵向中心线中心保持其两端的对称,当把横管处于最高位置,鞍座处于最低位置时,它们之间的距离应不大于457 mm。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.3 操作系统 > 4.5.3.3 把横管\n\n把横管应以儿童三轮车的纵向中心线中心保持其两端的对称,当把横管处于最高位置,鞍座处于最低位置时,它们之间的距离应不大于457 mm。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-49", + "chunk_index": 49, + "semantic_id": "semantic-49", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.3 操作系统", + "4.5.3.4 把横管两端" + ], + "section_level": 6, + "section_title": "4.5.3.4 把横管两端", + "source_ids": [ + "89ff9b58c2d72ec207c31cde4ed45fdc" + ], + "text": "把横管两端应装有把套或其他保护装置,把套或其他保护装置应能承受 70 N 的拉力而不应脱落。塑料制成的把横管不受此条款的限制。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.3 操作系统 > 4.5.3.4 把横管两端\n\n把横管两端应装有把套或其他保护装置,把套或其他保护装置应能承受 70 N 的拉力而不应脱落。塑料制成的把横管不受此条款的限制。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-50", + "chunk_index": 50, + "semantic_id": "semantic-50", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.3 操作系统", + "4.5.3.5 把立管夹紧装置" + ], + "section_level": 6, + "section_title": "4.5.3.5 把立管夹紧装置", + "source_ids": [ + "7bfbf4097ac216c524e90e112646359b" + ], + "text": "按 5.12(把立管夹紧装置测试) 进行测试时, 把立管与前叉立管之间不应有相对位移。把立管/前叉组件及其他零件均不应损伤。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.3 操作系统 > 4.5.3.5 把立管夹紧装置\n\n按 5.12(把立管夹紧装置测试) 进行测试时, 把立管与前叉立管之间不应有相对位移。把立管/前叉组件及其他零件均不应损伤。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-51", + "chunk_index": 51, + "semantic_id": "semantic-51", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.4 鞍座", + "4.5.4.1 鞍管插入深度" + ], + "section_level": 6, + "section_title": "4.5.4.1 鞍管插入深度", + "source_ids": [ + "ac9632188558bd7c352dacf000299175" + ], + "text": "如果鞍管是一种可调节的结构时,鞍管上应有一个永久性的标记或环圈,清楚地标明鞍管插入车架的最小插入深度(即鞍座可调节到的最大高度)。标记不应损伤鞍管应有的强度,最小插入深度从鞍管底端起不应小于鞍管直径的2倍,且鞍管最小插入标记以下应在至少有一个管子直径的长度内保持其应有的强度。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.4 鞍座 > 4.5.4.1 鞍管插入深度\n\n如果鞍管是一种可调节的结构时,鞍管上应有一个永久性的标记或环圈,清楚地标明鞍管插入车架的最小插入深度(即鞍座可调节到的最大高度)。标记不应损伤鞍管应有的强度,最小插入深度从鞍管底端起不应小于鞍管直径的2倍,且鞍管最小插入标记以下应在至少有一个管子直径的长度内保持其应有的强度。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-52", + "chunk_index": 52, + "semantic_id": "semantic-52", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.4 鞍座", + "4.5.4.2 鞍座调节夹紧装置" + ], + "section_level": 6, + "section_title": "4.5.4.2 鞍座调节夹紧装置", + "source_ids": [ + "cfac30368cdedf31d48e399a9b80ce48" + ], + "text": "在正常使用的情况下,鞍座夹头应能牢固地夹紧鞍座,使其不应在任何方向上移动。儿童三轮车按5.4(跌落测试)进行测试后,再按5.13(鞍座调节夹紧装置测试)进行测试时,鞍座夹紧装置相对于鞍管在任何方向上都不应有移动,且鞍管对于车架不应有转动。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.4 鞍座 > 4.5.4.2 鞍座调节夹紧装置\n\n在正常使用的情况下,鞍座夹头应能牢固地夹紧鞍座,使其不应在任何方向上移动。儿童三轮车按5.4(跌落测试)进行测试后,再按5.13(鞍座调节夹紧装置测试)进行测试时,鞍座夹紧装置相对于鞍管在任何方向上都不应有移动,且鞍管对于车架不应有转动。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-53", + "chunk_index": 53, + "semantic_id": "semantic-53", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.5 冲击强度" + ], + "section_level": 5, + "section_title": "4.5.5 冲击强度", + "source_ids": [ + "19396b2939e8fb17b904381f1b2f2587" + ], + "text": "按 5.14(冲击测试) 进行测试后,儿童三轮车的各部位不应出现引起功能障碍的损坏或永久变形。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.5 冲击强度\n\n按 5.14(冲击测试) 进行测试后,儿童三轮车的各部位不应出现引起功能障碍的损坏或永久变形。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-54", + "chunk_index": 54, + "semantic_id": "semantic-54", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.6 靠背结构牢固性" + ], + "section_level": 5, + "section_title": "4.5.6 靠背结构牢固性", + "source_ids": [ + "150c2d43ca776fa0288ae97396849685" + ], + "text": "儿童三轮车如果装有靠背,则按 5.15(靠背结构牢固性测试)进行测试时,靠背及靠背和车体结合处不应断裂或丧失功能。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.6 靠背结构牢固性\n\n儿童三轮车如果装有靠背,则按 5.15(靠背结构牢固性测试)进行测试时,靠背及靠背和车体结合处不应断裂或丧失功能。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-55", + "chunk_index": 55, + "semantic_id": "semantic-55", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.7 辅助推杆强度" + ], + "section_level": 5, + "section_title": "4.5.7 辅助推杆强度", + "source_ids": [ + "626f24f13efd012b922fed2a86b6de19" + ], + "text": "儿童三轮车如果装有辅助推杆,则按 5.16(辅助推杆强度测试)进行测试时,辅助推杆及推杆与车体连接部位不应断裂或丧失功能。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.7 辅助推杆强度\n\n儿童三轮车如果装有辅助推杆,则按 5.16(辅助推杆强度测试)进行测试时,辅助推杆及推杆与车体连接部位不应断裂或丧失功能。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-56", + "chunk_index": 56, + "semantic_id": "semantic-56", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.8 脚蹬", + "4.5.8.1 脚蹬结构" + ], + "section_level": 6, + "section_title": "4.5.8.1 脚蹬结构", + "source_ids": [ + "0487dda3a84f7e5cae1b48d5c8b5b09c" + ], + "text": "儿童三轮车的脚蹬上、下都应有脚踩面,除非脚蹬有一个确定的优先脚踩面,能自动地为骑车者的脚底提供脚踩面。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.8 脚蹬 > 4.5.8.1 脚蹬结构\n\n儿童三轮车的脚蹬上、下都应有脚踩面,除非脚蹬有一个确定的优先脚踩面,能自动地为骑车者的脚底提供脚踩面。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-57", + "chunk_index": 57, + "semantic_id": "semantic-57", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 8, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.5 零件", + "4.5.8 脚蹬", + "4.5.8.2 脚蹬离地高度" + ], + "section_level": 6, + "section_title": "4.5.8.2 脚蹬离地高度", + "source_ids": [ + "c87b86d690ae96071af832c2911d4220" + ], + "text": "按 5.17(脚蹬离地高度测试) 进行测试, 脚蹬的最低处离地面不应小于 40 mm。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.5 零件 > 4.5.8 脚蹬 > 4.5.8.2 脚蹬离地高度\n\n按 5.17(脚蹬离地高度测试) 进行测试, 脚蹬的最低处离地面不应小于 40 mm。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-58", + "chunk_index": 58, + "semantic_id": "semantic-58", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 8, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.1 一般要求" + ], + "section_level": 5, + "section_title": "4.6.1 一般要求", + "source_ids": [ + "6f3f940e22f29d2639ba20e3651a0d97", + "cd5303b399cbecf8f03a92561535a178", + "f8998af7f9e011d45aa40be48502aa59", + "55470ee4d8678c13ff6345b2cec6f833" + ], + "text": "a)儿童三轮车产品的交付应包括产品标志和使用信息,且置于便于识别的部位,使消费者正确安全地使用儿童三轮车,将使用不当造成的伤害降到最低。\nb)当使用说明和安全警示同时采用多种形式时(如在儿童三轮车本体和/或其包装上标注和/或在其包装内另附),应保证其内容的一致性。\nc)在产品标志和使用说明上应使用规范汉字。“危险”、“警告”、“注意”等安全警示的字体应大于或等于四号黑体字,警示内容的字体应大于或等于小五号黑体字。\nd)安全警示(警示标志或警示说明)的标注应采用耐久性标签,并且应永久、醒目地附在产品和包装上。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.6 产品标志和使用说明 > 4.6.1 一般要求\n\na)儿童三轮车产品的交付应包括产品标志和使用信息,且置于便于识别的部位,使消费者正确安全地使用儿童三轮车,将使用不当造成的伤害降到最低。\nb)当使用说明和安全警示同时采用多种形式时(如在儿童三轮车本体和/或其包装上标注和/或在其包装内另附),应保证其内容的一致性。\nc)在产品标志和使用说明上应使用规范汉字。“危险”、“警告”、“注意”等安全警示的字体应大于或等于四号黑体字,警示内容的字体应大于或等于小五号黑体字。\nd)安全警示(警示标志或警示说明)的标注应采用耐久性标签,并且应永久、醒目地附在产品和包装上。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-59", + "chunk_index": 59, + "semantic_id": "semantic-59", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.1 产品名称" + ], + "section_level": 6, + "section_title": "4.6.2.1 产品名称", + "source_ids": [ + "d5b7adf331ec480aae63a000dbbf69d7" + ], + "text": "产品名称应符合国家、行业、企业标准的名称,且能表明产品真实属性的名称。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.6 产品标志和使用说明 > 4.6.2 标志和使用说明 > 4.6.2.1 产品名称\n\n产品名称应符合国家、行业、企业标准的名称,且能表明产品真实属性的名称。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-60", + "chunk_index": 60, + "semantic_id": "semantic-60", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.2 产品型号" + ], + "section_level": 6, + "section_title": "4.6.2.2 产品型号", + "source_ids": [ + "865b4846cb560a262804aada3ebbdc56" + ], + "text": "使用说明上需标注的型号、规格应与产品上型号相一致。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.6 产品标志和使用说明 > 4.6.2 标志和使用说明 > 4.6.2.2 产品型号\n\n使用说明上需标注的型号、规格应与产品上型号相一致。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-61", + "chunk_index": 61, + "semantic_id": "semantic-61", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.3 产品标准号" + ], + "section_level": 6, + "section_title": "4.6.2.3 产品标准号", + "source_ids": [ + "f2525934be9b7a6f711505a2106a4c32" + ], + "text": "在包装、使用说明书及标签上应标明产品所执行的国家标准、行业标准或企业标准编号。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.6 产品标志和使用说明 > 4.6.2 标志和使用说明 > 4.6.2.3 产品标准号\n\n在包装、使用说明书及标签上应标明产品所执行的国家标准、行业标准或企业标准编号。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-62", + "chunk_index": 62, + "semantic_id": "semantic-62", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.4 适用年龄和体重" + ], + "section_level": 6, + "section_title": "4.6.2.4 适用年龄和体重", + "source_ids": [ + "fb340521de452fcae291826ca43bac67" + ], + "text": "在产品包装、使用说明书及标签上应标明产品所适用的年龄范围和预定承载的体重。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.6 产品标志和使用说明 > 4.6.2 标志和使用说明 > 4.6.2.4 适用年龄和体重\n\n在产品包装、使用说明书及标签上应标明产品所适用的年龄范围和预定承载的体重。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-63", + "chunk_index": 63, + "semantic_id": "semantic-63", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.5 安全警示" + ], + "section_level": 6, + "section_title": "4.6.2.5 安全警示", + "source_ids": [ + "bc66f24a32812cdf4529c422ac62c9d8", + "6081f605bc354041cc5db64e78444178", + "8aeff2c8779ee65a9d2c7f239ee6296b", + "1c730494512fb5d0f062e909bc186712", + "701fdca8494972b69c0bf87e9e22819f" + ], + "text": "儿童三轮车应标明如下相关警示说明或警示标志。\na)在每辆儿童三轮车的产品、包装和/或使用说明书上应标注类似以下内容的提示:提醒使用者及监护人在使用前请仔细阅读本说明书并且请妥善保存供以后参照。如果不按照本说明书使用可能会影响儿童的安全。\nb)在每辆儿童三轮车车体和使用说明书上应设有类似以下内容的警示说明:\n“警告: 当儿童乘坐时, 看护人不应离开。”\nc)在每辆儿童三轮车的产品和/或包装和/或使用说明书上应标注骑行时的注意事项和安全要求。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.6 产品标志和使用说明 > 4.6.2 标志和使用说明 > 4.6.2.5 安全警示\n\n儿童三轮车应标明如下相关警示说明或警示标志。\na)在每辆儿童三轮车的产品、包装和/或使用说明书上应标注类似以下内容的提示:提醒使用者及监护人在使用前请仔细阅读本说明书并且请妥善保存供以后参照。如果不按照本说明书使用可能会影响儿童的安全。\nb)在每辆儿童三轮车车体和使用说明书上应设有类似以下内容的警示说明:\n“警告: 当儿童乘坐时, 看护人不应离开。”\nc)在每辆儿童三轮车的产品和/或包装和/或使用说明书上应标注骑行时的注意事项和安全要求。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-64", + "chunk_index": 64, + "semantic_id": "semantic-64", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.6 安全使用方法及组装装配说明" + ], + "section_level": 6, + "section_title": "4.6.2.6 安全使用方法及组装装配说明", + "source_ids": [ + "681199923767b187baf279c0a8897537", + "35b754ba2df1f352b32aae5f358d11ba", + "49d821c09578497ffeb0fc16f907bae1" + ], + "text": "a)应标明详细的使用方法;\nb)需要时,应提供零部件和成车组装装配说明/组装图;\nc)应标明紧固件推荐的扭紧力矩(如:把立管夹紧装置的扭紧力矩,鞍座调节夹紧装置的扭紧力矩等)。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.6 产品标志和使用说明 > 4.6.2 标志和使用说明 > 4.6.2.6 安全使用方法及组装装配说明\n\na)应标明详细的使用方法;\nb)需要时,应提供零部件和成车组装装配说明/组装图;\nc)应标明紧固件推荐的扭紧力矩(如:把立管夹紧装置的扭紧力矩,鞍座调节夹紧装置的扭紧力矩等)。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-65", + "chunk_index": 65, + "semantic_id": "semantic-65", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.7 维护和保养" + ], + "section_level": 6, + "section_title": "4.6.2.7 维护和保养", + "source_ids": [ + "1c225edd359469d45bcc69876fc2917e" + ], + "text": "应标明整车和相关零部件应定期检查、维护、保养及清洁的有关说明。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.6 产品标志和使用说明 > 4.6.2 标志和使用说明 > 4.6.2.7 维护和保养\n\n应标明整车和相关零部件应定期检查、维护、保养及清洁的有关说明。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-66", + "chunk_index": 66, + "semantic_id": "semantic-66", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "4 技术要求", + "4.6 产品标志和使用说明", + "4.6.2 标志和使用说明", + "4.6.2.8 生产者名称和地址" + ], + "section_level": 6, + "section_title": "4.6.2.8 生产者名称和地址", + "source_ids": [ + "9c4158dccc6ee47c35e80fe6c6f91959", + "f7b9b7a4a4bbd2e3492d1512d7652117" + ], + "text": "应标明产品生产者依法登记注册的名称和地址。\n进口产品应标明该产品的原产地(国家/地区)以及代理商或进口商或销售商在中国依法登记注册的名称和地址。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 4 技术要求 > 4.6 产品标志和使用说明 > 4.6.2 标志和使用说明 > 4.6.2.8 生产者名称和地址\n\n应标明产品生产者依法登记注册的名称和地址。\n进口产品应标明该产品的原产地(国家/地区)以及代理商或进口商或销售商在中国依法登记注册的名称和地址。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-67", + "chunk_index": 67, + "semantic_id": "semantic-67", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.1 一般要求", + "5.1.1 测试样品" + ], + "section_level": 5, + "section_title": "5.1.1 测试样品", + "source_ids": [ + "f92f4b0fdc3e15aaf063772a3d5aa8fa", + "1359acc8798a67643699122c99288a2f" + ], + "text": "原则上所有测试应在同一样品上进行。\n测试顺序应按照先进行对样品无损坏的项目,后进行对样品有损坏的项目。如果样品测试后的损坏程度导致以后的测试项目无法进行,则可在新的样品上进行剩余项目的测试。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.1 一般要求 > 5.1.1 测试样品\n\n原则上所有测试应在同一样品上进行。\n测试顺序应按照先进行对样品无损坏的项目,后进行对样品有损坏的项目。如果样品测试后的损坏程度导致以后的测试项目无法进行,则可在新的样品上进行剩余项目的测试。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-68", + "chunk_index": 68, + "semantic_id": "semantic-68", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.1 一般要求", + "5.1.2 测试仪器精度" + ], + "section_level": 5, + "section_title": "5.1.2 测试仪器精度", + "source_ids": [ + "f3732b248ec688065f2291532c0e5b64" + ], + "text": "除非特殊规定,本标准中力的测量精度为±5%;质量的测量精度为±1%;角度的测量精度为±1°;所有尺寸的测量精度为±0.5 mm。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.1 一般要求 > 5.1.2 测试仪器精度\n\n除非特殊规定,本标准中力的测量精度为±5%;质量的测量精度为±1%;角度的测量精度为±1°;所有尺寸的测量精度为±0.5 mm。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-69", + "chunk_index": 69, + "semantic_id": "semantic-69", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 9, + "page_end": 9, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.1 一般要求", + "5.1.3 测试环境" + ], + "section_level": 5, + "section_title": "5.1.3 测试环境", + "source_ids": [ + "2df998046ac4f6969d7223674eea6e83" + ], + "text": "除非特殊规定,测试前样品应在温度为 \\(23^{\\circ}C \\pm 5^{\\circ}C\\) 的环境中至少放置 2 h,并且在温度为 \\(23^{\\circ}C \\pm\\)10℃环境中进行测试。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.1 一般要求 > 5.1.3 测试环境\n\n除非特殊规定,测试前样品应在温度为 \\(23^{\\circ}C \\pm 5^{\\circ}C\\) 的环境中至少放置 2 h,并且在温度为 \\(23^{\\circ}C \\pm\\)10℃环境中进行测试。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-70", + "chunk_index": 70, + "semantic_id": "semantic-70", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.2 特定可迁移元素的测试(见 4.1.1)" + ], + "section_level": 4, + "section_title": "5.2 特定可迁移元素的测试(见 4.1.1)", + "source_ids": [ + "5de31e65aa25bec0d05bf2b8ecb4c7a6" + ], + "text": "三轮车上所使用的、符合 GB 6675—2003 中第 C.1 章范围所规定的材料和零、部件中特定可迁移元素的测试方法按 GB 6675—2003 附录 C 规定的测试方法进行测试。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.2 特定可迁移元素的测试(见 4.1.1)\n\n三轮车上所使用的、符合 GB 6675—2003 中第 C.1 章范围所规定的材料和零、部件中特定可迁移元素的测试方法按 GB 6675—2003 附录 C 规定的测试方法进行测试。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-71", + "chunk_index": 71, + "semantic_id": "semantic-71", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.3 燃烧性能测试(见 4.1.2)" + ], + "section_level": 4, + "section_title": "5.3 燃烧性能测试(见 4.1.2)", + "source_ids": [ + "8e2b5c7e95d6c14db62cd12d63255d5f" + ], + "text": "儿童三轮车的材料的燃烧性能的测试方法按 GB 6675—2003 附录 B 的有关规定进行。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.3 燃烧性能测试(见 4.1.2)\n\n儿童三轮车的材料的燃烧性能的测试方法按 GB 6675—2003 附录 B 的有关规定进行。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-72", + "chunk_index": 72, + "semantic_id": "semantic-72", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.3 燃烧性能测试(见 4.1.2)", + "5.4 跌落测试(见 4.2, 4.5.4.2)" + ], + "section_level": 5, + "section_title": "5.4 跌落测试(见 4.2, 4.5.4.2)", + "source_ids": [ + "a7264b18452459720db472cf1eec59f2" + ], + "text": "将表 3 中的规定负载缚在鞍座上;如有后踏板还应按 5.8(向后倾斜的稳定性测试)的要求将负载安装在后踏板上,或者鞍座最后面适当的部位上;并在每个把套上牢固固定 4.5 kg 负载。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.3 燃烧性能测试(见 4.1.2) > 5.4 跌落测试(见 4.2, 4.5.4.2)\n\n将表 3 中的规定负载缚在鞍座上;如有后踏板还应按 5.8(向后倾斜的稳定性测试)的要求将负载安装在后踏板上,或者鞍座最后面适当的部位上;并在每个把套上牢固固定 4.5 kg 负载。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-73", + "chunk_index": 73, + "semantic_id": "semantic-73", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.3 燃烧性能测试(见 4.1.2)", + "5.4 跌落测试(见 4.2, 4.5.4.2)" + ], + "section_level": 5, + "section_title": "5.4 跌落测试(见 4.2, 4.5.4.2)", + "source_ids": [ + "e45a6c6fed72d750e60c85b0e8a466ff" + ], + "text": "表 3 鞍座到脚蹬距离、负载质量和斜面倾斜角对照表", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.3 燃烧性能测试(见 4.1.2) > 5.4 跌落测试(见 4.2, 4.5.4.2)\n\n表 3 鞍座到脚蹬距离、负载质量和斜面倾斜角对照表" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-74", + "chunk_index": 74, + "semantic_id": "semantic-74", + "chunk_type": "table", + "piece_index": 1, + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.3 燃烧性能测试(见 4.1.2)", + "5.4 跌落测试(见 4.2, 4.5.4.2)" + ], + "section_level": 5, + "section_title": "5.4 跌落测试(见 4.2, 4.5.4.2)", + "source_ids": [ + "45f63fd4c7a2f44cfc95d7e3c3b5f0d4" + ], + "text": "序号\n鞍座到脚蹬距离/mm\n负载质量/kg\n斜面倾斜角度 θ\n1\n<355\n11\n7°\n2\n355~380\n11\n8°30'\n3\n381~420\n13.5\n9°\n4\n421~450\n15.8\n9°\n5\n451~480\n17\n9°30'\n6\n481~510\n18\n10°\n7\n511~550\n20\n11°30'\n8\n551~570\n20\n13°\n9\n571~600\n22.5\n15°\n10\n601~620\n22.5\n17°\n11\n621~660\n24.8\n17°\n12\n661~890\n27\n17°\n13\n891~710\n29.3\n17°", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.3 燃烧性能测试(见 4.1.2) > 5.4 跌落测试(见 4.2, 4.5.4.2)\n\n序号\n鞍座到脚蹬距离/mm\n负载质量/kg\n斜面倾斜角度 θ\n1\n<355\n11\n7°\n2\n355~380\n11\n8°30'\n3\n381~420\n13.5\n9°\n4\n421~450\n15.8\n9°\n5\n451~480\n17\n9°30'\n6\n481~510\n18\n10°\n7\n511~550\n20\n11°30'\n8\n551~570\n20\n13°\n9\n571~600\n22.5\n15°\n10\n601~620\n22.5\n17°\n11\n621~660\n24.8\n17°\n12\n661~890\n27\n17°\n13\n891~710\n29.3\n17°" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-75", + "chunk_index": 75, + "semantic_id": "semantic-75", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.3 燃烧性能测试(见 4.1.2)", + "5.4 跌落测试(见 4.2, 4.5.4.2)" + ], + "section_level": 5, + "section_title": "5.4 跌落测试(见 4.2, 4.5.4.2)", + "source_ids": [ + "62f0f0485bf5b5b74039595a9ad2753d" + ], + "text": "儿童三轮车按上述负载加载后,从 $ 0.3 \\, m $ 的高度处使其跌落在平坦的水泥地上,重复三次。跌落前儿童三轮车应处于正常骑行状态,并自由落下。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.3 燃烧性能测试(见 4.1.2) > 5.4 跌落测试(见 4.2, 4.5.4.2)\n\n儿童三轮车按上述负载加载后,从 $ 0.3 \\, m $ 的高度处使其跌落在平坦的水泥地上,重复三次。跌落前儿童三轮车应处于正常骑行状态,并自由落下。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-76", + "chunk_index": 76, + "semantic_id": "semantic-76", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.5 锐利边缘测试(见 4.3.1)" + ], + "section_level": 4, + "section_title": "5.5 锐利边缘测试(见 4.3.1)", + "source_ids": [ + "d79cfd9813dcfb50b2e0679e451f3e32" + ], + "text": "按 GB 6675—2003 中 A.5.8(锐利边缘测试) 进行测试。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.5 锐利边缘测试(见 4.3.1)\n\n按 GB 6675—2003 中 A.5.8(锐利边缘测试) 进行测试。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-77", + "chunk_index": 77, + "semantic_id": "semantic-77", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.6 锐利尖端测试(见 4.3.2)" + ], + "section_level": 4, + "section_title": "5.6 锐利尖端测试(见 4.3.2)", + "source_ids": [ + "91b66e5ef7edaa08b63a28de2c2270cb" + ], + "text": "按 GB 6675—2003 中 A.5.9(锐利尖端测试) 进行测试。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.6 锐利尖端测试(见 4.3.2)\n\n按 GB 6675—2003 中 A.5.9(锐利尖端测试) 进行测试。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-78", + "chunk_index": 78, + "semantic_id": "semantic-78", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.7 小零件测试(见 4.3.5)" + ], + "section_level": 4, + "section_title": "5.7 小零件测试(见 4.3.5)", + "source_ids": [ + "5ae436da2e10a691115eea8a39cfa88c" + ], + "text": "按 GB 6675—2003 中 A.5.2(小零件测试)进行测试。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.7 小零件测试(见 4.3.5)\n\n按 GB 6675—2003 中 A.5.2(小零件测试)进行测试。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-79", + "chunk_index": 79, + "semantic_id": "semantic-79", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 10, + "page_end": 10, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.8 行驶稳定性测试(见 4.4.1)" + ], + "section_level": 4, + "section_title": "5.8 行驶稳定性测试(见 4.4.1)", + "source_ids": [ + "f31e8cfa4acf63606df9f87f367b3738", + "5e3460e855c89fc065daf1a94c8fba82" + ], + "text": "测量儿童三轮车的鞍座到脚蹬距离 $ (C^{\\prime} $ 尺寸,见图2),将儿童三轮车按图1的方式放置在表3中的规定倾斜角度的测试斜面上,使儿童三轮车的后轮轴线与倾斜方向平行。\n按表 3 中的规定负载在鞍座上加载,其重心应位于鞍座面几何中心上方 150 mm 处,儿童三轮车的操纵机构应固定于某一位置,该位置当儿童三轮车沿斜面向上运动时,可使前轮产生约 1.8 m 转弯半径的运动轨迹。当进行测试时应用楔块将其轮子堵住,以防其转动但不应阻止其翻倒。在静态条件下儿童三轮车不应翻倒。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.8 行驶稳定性测试(见 4.4.1)\n\n测量儿童三轮车的鞍座到脚蹬距离 $ (C^{\\prime} $ 尺寸,见图2),将儿童三轮车按图1的方式放置在表3中的规定倾斜角度的测试斜面上,使儿童三轮车的后轮轴线与倾斜方向平行。\n按表 3 中的规定负载在鞍座上加载,其重心应位于鞍座面几何中心上方 150 mm 处,儿童三轮车的操纵机构应固定于某一位置,该位置当儿童三轮车沿斜面向上运动时,可使前轮产生约 1.8 m 转弯半径的运动轨迹。当进行测试时应用楔块将其轮子堵住,以防其转动但不应阻止其翻倒。在静态条件下儿童三轮车不应翻倒。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-80", + "chunk_index": 80, + "semantic_id": "semantic-80", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 10, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.9 向前倾斜的稳定性测试(见 4.4.2.1)" + ], + "section_level": 4, + "section_title": "5.9 向前倾斜的稳定性测试(见 4.4.2.1)", + "source_ids": [ + "56438323314fe8c8673a8691c5425671", + "767de9d5be8b9e506086d336067668d6" + ], + "text": "将前轮与车架之间用楔块堵住,并在儿童三轮车的鞍座上按表3中的规定负载进行加载,其重心应位于鞍座面几何中心上方 150 mm 处。将三轮车的两后车轮均垫高 100 mm(比前轮放置面高 100 mm,见图 4),儿童三轮车不应向前翻倒。\n单位为毫米", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.9 向前倾斜的稳定性测试(见 4.4.2.1)\n\n将前轮与车架之间用楔块堵住,并在儿童三轮车的鞍座上按表3中的规定负载进行加载,其重心应位于鞍座面几何中心上方 150 mm 处。将三轮车的两后车轮均垫高 100 mm(比前轮放置面高 100 mm,见图 4),儿童三轮车不应向前翻倒。\n单位为毫米" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-81", + "chunk_index": 81, + "semantic_id": "semantic-81", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 11, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.9 向前倾斜的稳定性测试(见 4.4.2.1)" + ], + "section_level": 4, + "section_title": "5.9 向前倾斜的稳定性测试(见 4.4.2.1)", + "source_ids": [ + "a5b322ebb12a830b08e6e66bf2a32e7d" + ], + "text": "100", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.9 向前倾斜的稳定性测试(见 4.4.2.1)\n\n100" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-82", + "chunk_index": 82, + "semantic_id": "semantic-82", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 11, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.9 向前倾斜的稳定性测试(见 4.4.2.1)" + ], + "section_level": 4, + "section_title": "5.9 向前倾斜的稳定性测试(见 4.4.2.1)", + "source_ids": [ + "fc6ff0391e4c0c765e8a310aa8be48a1" + ], + "text": "图 4 向前倾斜的稳定性测试", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.9 向前倾斜的稳定性测试(见 4.4.2.1)\n\n图 4 向前倾斜的稳定性测试" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-83", + "chunk_index": 83, + "semantic_id": "semantic-83", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 11, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.10 向后倾斜的稳定性测试(见 4.4.2.2)" + ], + "section_level": 4, + "section_title": "5.10 向后倾斜的稳定性测试(见 4.4.2.2)", + "source_ids": [ + "92010ebe02c7582aff25264b0da1e8f8", + "2e7e61b9b2fcd15f53dd427b44583543", + "393cc8440521029ffc0ae15851d9924d" + ], + "text": "按表 3 中的规定负载在儿童三轮车鞍座上进行加载,将前车轮垫高 100 mm(比后轮放置面高 100 mm,见图 5),此时儿童三轮车不应向后翻倒。\n如果儿童三轮车有一个后踏板或后座的类似装置,一名儿童可站/坐在上面与前面的骑行者一同乘骑,则应在从后踏板(或后座)中心沿与鞍座后部相切的轴线上按表3施加与骑行者相同质量的负载,该负载重心应位于该轴线上距离为图2所示的鞍座到脚蹬距离 $ (C^{\\prime} $ 尺寸 $ ) $ 加150 mm处。\n单位为毫米", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.10 向后倾斜的稳定性测试(见 4.4.2.2)\n\n按表 3 中的规定负载在儿童三轮车鞍座上进行加载,将前车轮垫高 100 mm(比后轮放置面高 100 mm,见图 5),此时儿童三轮车不应向后翻倒。\n如果儿童三轮车有一个后踏板或后座的类似装置,一名儿童可站/坐在上面与前面的骑行者一同乘骑,则应在从后踏板(或后座)中心沿与鞍座后部相切的轴线上按表3施加与骑行者相同质量的负载,该负载重心应位于该轴线上距离为图2所示的鞍座到脚蹬距离 $ (C^{\\prime} $ 尺寸 $ ) $ 加150 mm处。\n单位为毫米" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-84", + "chunk_index": 84, + "semantic_id": "semantic-84", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 11, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.10 向后倾斜的稳定性测试(见 4.4.2.2)" + ], + "section_level": 4, + "section_title": "5.10 向后倾斜的稳定性测试(见 4.4.2.2)", + "source_ids": [ + "9b8580ea3da296e33cbc3f574d262314" + ], + "text": "001", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.10 向后倾斜的稳定性测试(见 4.4.2.2)\n\n001" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-85", + "chunk_index": 85, + "semantic_id": "semantic-85", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 11, + "page_end": 11, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.10 向后倾斜的稳定性测试(见 4.4.2.2)" + ], + "section_level": 4, + "section_title": "5.10 向后倾斜的稳定性测试(见 4.4.2.2)", + "source_ids": [ + "cfe0a2b170947f06ccff72915ae5f039" + ], + "text": "图 5 向后倾斜的稳定性测试", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.10 向后倾斜的稳定性测试(见 4.4.2.2)\n\n图 5 向后倾斜的稳定性测试" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-86", + "chunk_index": 86, + "semantic_id": "semantic-86", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.10 向后倾斜的稳定性测试(见 4.4.2.2)" + ], + "section_level": 4, + "section_title": "5.10 向后倾斜的稳定性测试(见 4.4.2.2)", + "source_ids": [ + "e7595b98cf63d9dc3e3ca404a8a5d432" + ], + "text": "如果儿童三轮车有一个以上的后踏板或后座的类似装置,则其向后倾斜的稳定性测试应对后踏板分别进行。如果类似装置上的负载与鞍座上的负载相干涉,则鞍座上的负载应转过一角度或向前偏置以使负载保持在预定位置上。鞍座上的负载与类似装置上的负载不应相互触及。转过的角度或偏置距离在保证两负载不产生干涉的前提下应为最小。该转角或偏置是考虑到当儿童三轮车向后倾斜时,乘骑者会自然补偿给由第二乘骑者引起的空间区域占用。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.10 向后倾斜的稳定性测试(见 4.4.2.2)\n\n如果儿童三轮车有一个以上的后踏板或后座的类似装置,则其向后倾斜的稳定性测试应对后踏板分别进行。如果类似装置上的负载与鞍座上的负载相干涉,则鞍座上的负载应转过一角度或向前偏置以使负载保持在预定位置上。鞍座上的负载与类似装置上的负载不应相互触及。转过的角度或偏置距离在保证两负载不产生干涉的前提下应为最小。该转角或偏置是考虑到当儿童三轮车向后倾斜时,乘骑者会自然补偿给由第二乘骑者引起的空间区域占用。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-87", + "chunk_index": 87, + "semantic_id": "semantic-87", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.11 把立管强度测试(见 4.5.3.2)" + ], + "section_level": 4, + "section_title": "5.11 把立管强度测试(见 4.5.3.2)", + "source_ids": [ + "613424d081b07e6718465982917e23a6" + ], + "text": "用夹具将把立管夹紧在最小插入深度处。通过把横管的连接点施加 500 N 的力,其方向朝前并与把立管体的轴线成 $ 45^{\\circ} $ 角(见图 6)。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.11 把立管强度测试(见 4.5.3.2)\n\n用夹具将把立管夹紧在最小插入深度处。通过把横管的连接点施加 500 N 的力,其方向朝前并与把立管体的轴线成 $ 45^{\\circ} $ 角(见图 6)。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-88", + "chunk_index": 88, + "semantic_id": "semantic-88", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.11 把立管强度测试(见 4.5.3.2)" + ], + "section_level": 4, + "section_title": "5.11 把立管强度测试(见 4.5.3.2)", + "source_ids": [ + "f0ced9b7d11a88b2cee1a5bcd2888390" + ], + "text": "$\\begin{aligned}& \\text { 把横管 } \\\\& \\text { 所施负荷 } \\\\& \\text { 所施负荷 } \\\\& \\text { 夹具 } \\\\& \\text { 最少插入深度 } \\\\& 45^{\\circ} \\\\& \\text { 所施负荷 }\\end{aligned}$", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.11 把立管强度测试(见 4.5.3.2)\n\n$\\begin{aligned}& \\text { 把横管 } \\\\& \\text { 所施负荷 } \\\\& \\text { 所施负荷 } \\\\& \\text { 夹具 } \\\\& \\text { 最少插入深度 } \\\\& 45^{\\circ} \\\\& \\text { 所施负荷 }\\end{aligned}$" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-89", + "chunk_index": 89, + "semantic_id": "semantic-89", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.11 把立管强度测试(见 4.5.3.2)" + ], + "section_level": 4, + "section_title": "5.11 把立管强度测试(见 4.5.3.2)", + "source_ids": [ + "87dd09ec1df8a67099fc8d96d0467e9f" + ], + "text": "图 6 把立管强度测试", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.11 把立管强度测试(见 4.5.3.2)\n\n图 6 把立管强度测试" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-90", + "chunk_index": 90, + "semantic_id": "semantic-90", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.12 把立管夹紧装置测试(见 4.5.3.5)" + ], + "section_level": 4, + "section_title": "5.12 把立管夹紧装置测试(见 4.5.3.5)", + "source_ids": [ + "5534506706eb14cd547ed983a398767d" + ], + "text": "将把立管正确地装配在车架和前叉立管内,按生产者推荐的力矩旋紧夹紧装置,然后对把立管/前叉夹紧装置施加 $ 20 \\, N \\cdot m $ 的力矩(见图 7)。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.12 把立管夹紧装置测试(见 4.5.3.5)\n\n将把立管正确地装配在车架和前叉立管内,按生产者推荐的力矩旋紧夹紧装置,然后对把立管/前叉夹紧装置施加 $ 20 \\, N \\cdot m $ 的力矩(见图 7)。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-91", + "chunk_index": 91, + "semantic_id": "semantic-91", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.12 把立管夹紧装置测试(见 4.5.3.5)" + ], + "section_level": 4, + "section_title": "5.12 把立管夹紧装置测试(见 4.5.3.5)", + "source_ids": [ + "fdde53ce4df8e19e5b30953a71edf71d" + ], + "text": "$\\xrightarrow{\\text{所施负荷}}$", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.12 把立管夹紧装置测试(见 4.5.3.5)\n\n$\\xrightarrow{\\text{所施负荷}}$" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-92", + "chunk_index": 92, + "semantic_id": "semantic-92", + "chunk_type": "figure", + "piece_index": 1, + "page_start": 12, + "page_end": 12, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.12 把立管夹紧装置测试(见 4.5.3.5)" + ], + "section_level": 4, + "section_title": "5.12 把立管夹紧装置测试(见 4.5.3.5)", + "source_ids": [ + "92794fcd4088ce7ebade6748955fde90" + ], + "text": "图 7 把立管夹紧装置测试", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.12 把立管夹紧装置测试(见 4.5.3.5)\n\n图 7 把立管夹紧装置测试" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-93", + "chunk_index": 93, + "semantic_id": "semantic-93", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 13, + "page_end": 13, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.13 鞍座调节夹紧装置测试(见 4.5.4.2)" + ], + "section_level": 4, + "section_title": "5.13 鞍座调节夹紧装置测试(见 4.5.4.2)", + "source_ids": [ + "bf972ccf32661518519c5cc4f0b57e82" + ], + "text": "将鞍座和鞍管正确地装配在车架上,鞍座夹紧螺栓应按生产者推荐的力矩旋紧,在离鞍座前端或后端25 mm的范围内、能对鞍座夹产生较大力矩的一点,垂直向下施加至少为330 N的力。移去这个力后,应在离鞍座前端或后端25 mm的范围内、能对鞍座夹产生较大力矩的一点,水平施加110 N的力。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.13 鞍座调节夹紧装置测试(见 4.5.4.2)\n\n将鞍座和鞍管正确地装配在车架上,鞍座夹紧螺栓应按生产者推荐的力矩旋紧,在离鞍座前端或后端25 mm的范围内、能对鞍座夹产生较大力矩的一点,垂直向下施加至少为330 N的力。移去这个力后,应在离鞍座前端或后端25 mm的范围内、能对鞍座夹产生较大力矩的一点,水平施加110 N的力。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-94", + "chunk_index": 94, + "semantic_id": "semantic-94", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 13, + "page_end": 13, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.14 冲击测试(见 4.5.5)" + ], + "section_level": 4, + "section_title": "5.14 冲击测试(见 4.5.5)", + "source_ids": [ + "00ed47ecd79d24c42a9563421af8cae0" + ], + "text": "将儿童三轮车按正常骑行状态放置于平坦的水平地面上,将质量 20 kg、底部直径为 200 mm 的砂袋从位于鞍座中心点上方 200 mm 的高度向鞍座面自由落下,重复测试三次。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.14 冲击测试(见 4.5.5)\n\n将儿童三轮车按正常骑行状态放置于平坦的水平地面上,将质量 20 kg、底部直径为 200 mm 的砂袋从位于鞍座中心点上方 200 mm 的高度向鞍座面自由落下,重复测试三次。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-95", + "chunk_index": 95, + "semantic_id": "semantic-95", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 13, + "page_end": 13, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.14 冲击测试(见 4.5.5)", + "5.15 靠背结构牢固性测试(见 4.5.6)" + ], + "section_level": 5, + "section_title": "5.15 靠背结构牢固性测试(见 4.5.6)", + "source_ids": [ + "ba5aedbd4a47adb0611cc6dc268a2525" + ], + "text": "将儿童三轮车按正常骑行状态放置于平坦的水平地面上,同时固定前轮和后轮,以防止测试过程中车体移动。在靠背顶端的中心部位水平向后施加200 N的力,该力在5 s内逐步施加并保持10 s后卸载作为一个周期,每两周期的间隔不超过10 s,重复10个周期。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.14 冲击测试(见 4.5.5) > 5.15 靠背结构牢固性测试(见 4.5.6)\n\n将儿童三轮车按正常骑行状态放置于平坦的水平地面上,同时固定前轮和后轮,以防止测试过程中车体移动。在靠背顶端的中心部位水平向后施加200 N的力,该力在5 s内逐步施加并保持10 s后卸载作为一个周期,每两周期的间隔不超过10 s,重复10个周期。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-96", + "chunk_index": 96, + "semantic_id": "semantic-96", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 13, + "page_end": 13, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.14 冲击测试(见 4.5.5)", + "5.16 辅助推杆强度测试(见 4.5.7)" + ], + "section_level": 5, + "section_title": "5.16 辅助推杆强度测试(见 4.5.7)", + "source_ids": [ + "661d9c8369140240aee5947e9f382c13", + "37e6f293070fc85a1e2f42aaceea4a66", + "cc6e98f6675f0316fae796a69e0b06b2", + "28d47b8086ac5101dc8f8213604c58a6" + ], + "text": "将儿童三轮车按正常骑行状态放置于平坦的水平地面上,测量儿童三轮车的鞍座到脚蹬距离 $ (C^{\\prime} $ 尺寸,见图2),按表3中的规定负载在鞍座中心部位加载,其重心应位于鞍座面几何中心上方150 mm处。\n将后轮用挡块挡住以防止其在测试过程中移动。在生产商设定的使用位置,将辅助推杆无冲击地施力向后压使前轮离地 10 mm,并保持 3 min。\n再将前轮用挡块挡住以防止其在测试过程中移动或向车体两侧转向。在生产商设定的使用位置,将辅助推杆无冲击地施力向前拉使后轮离地 30 mm,并保持 3 min。\n重复上述过程 10 次后,检查辅助推杆及其与车体连接部位。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.14 冲击测试(见 4.5.5) > 5.16 辅助推杆强度测试(见 4.5.7)\n\n将儿童三轮车按正常骑行状态放置于平坦的水平地面上,测量儿童三轮车的鞍座到脚蹬距离 $ (C^{\\prime} $ 尺寸,见图2),按表3中的规定负载在鞍座中心部位加载,其重心应位于鞍座面几何中心上方150 mm处。\n将后轮用挡块挡住以防止其在测试过程中移动。在生产商设定的使用位置,将辅助推杆无冲击地施力向后压使前轮离地 10 mm,并保持 3 min。\n再将前轮用挡块挡住以防止其在测试过程中移动或向车体两侧转向。在生产商设定的使用位置,将辅助推杆无冲击地施力向前拉使后轮离地 30 mm,并保持 3 min。\n重复上述过程 10 次后,检查辅助推杆及其与车体连接部位。" + }, + { + "doc_id": "GB14747-2006", + "doc_title": "GB 14747—2006 儿童三轮车安全要求", + "chunk_id": "chunk-97", + "chunk_index": 97, + "semantic_id": "semantic-97", + "chunk_type": "section_text", + "piece_index": 1, + "page_start": 13, + "page_end": 13, + "section_path": [ + "中华人民共和国国家标准", + "儿童三轮车安全要求", + "5 测试方法", + "5.17 脚蹬离地高度测试(见 4.5.8.2)" + ], + "section_level": 4, + "section_title": "5.17 脚蹬离地高度测试(见 4.5.8.2)", + "source_ids": [ + "9fedb2339fa183c1ed157d35ded06295" + ], + "text": "将儿童三轮车放置于平坦的水平地面上,将一只脚蹬置于最低位置,脚蹬的平面与地面平行,测量脚蹬的下平面与地面间的间距;并以同样的方法测量另一脚蹬的离地高度。", + "embedding_text": "标准:GB 14747—2006 儿童三轮车安全要求\n章节:中华人民共和国国家标准 > 儿童三轮车安全要求 > 5 测试方法 > 5.17 脚蹬离地高度测试(见 4.5.8.2)\n\n将儿童三轮车放置于平坦的水平地面上,将一只脚蹬置于最低位置,脚蹬的平面与地面平行,测量脚蹬的下平面与地面间的间距;并以同样的方法测量另一脚蹬的离地高度。" + } + ] +} \ No newline at end of file diff --git a/backend/app/aliyun_parser/嵌入和召回.md b/backend/app/aliyun_parser/嵌入和召回.md new file mode 100644 index 0000000..a1c59fa --- /dev/null +++ b/backend/app/aliyun_parser/嵌入和召回.md @@ -0,0 +1,263 @@ +# 文档解析与向量检索说明 + +## 相关文件 + +- `aliyun_doc_parser.py`:调用阿里云文档智能解析 PDF,生成原始 `layouts.json` +- `layouts_to_vector_chunks.py`:把 `layouts.json` 转成适合向量数据库入库的三层结构 +- `layouts.json`:阿里云返回的原始布局结果 +- `vector_chunks.json`:转换后的结构化输出 + +## 一、`layouts.json` 的结构 + +`layouts.json` 顶层是一个数组,每个元素代表一个布局块(layout)。常见字段如下: + +- `type`:主类型,例如 `title`、`text`、`table`、`figure` +- `subType`:更细的语义类型,例如 `doc_title`、`para_title`、`para`、`picture`、`pic_title`、`pic_caption` +- `text`:当前布局块的纯文本 +- `markdownContent`:带 markdown 标记的文本 +- `pageNum`:页码 +- `index`:页内顺序 +- `level`:标题层级 +- `uniqueId`:布局块唯一标识 +- `blocks`:更细粒度的文本与样式信息 +- `cells`:表格单元格,仅 `table` 类型存在 + +这个结构不是简单 OCR 文本流,而是已经带有版面理解和语义分类的结构化数据。 + +## 二、推荐的三层转换结构 + +### 1. 结构层 `structure_nodes` + +结构层用于恢复文档标题树,不直接作为最终向量检索单元。 + +示例: + +- `1 范围` +- `2 规范性引用文件` +- `3 术语和定义` + - `3.1 儿童三轮车` + - `3.2 轮距` + +结构层主要用于给下游 chunk 绑定 `section_path`。 + +### 2. 语义层 `semantic_blocks` + +语义层是按文档意义聚合后的内容块,主要分为三类: + +- `section_text`:同一章节下连续正文聚合而成 +- `table`:表格内容单独成块 +- `figure`:图、图名、图注等单独成块 + +这一层比单 layout 更适合做语义理解,也适合后续做上下文扩展。 + +### 3. 检索层 `vector_chunks` + +检索层是最终写进向量数据库的 chunk。 + +处理方式: + +- 对 `semantic_blocks` 中较短的块直接入库 +- 对较长的块按 `max_chars` 再切分 +- 相邻切片保留 `overlap_chars` 重叠 +- 每个 chunk 都带完整 metadata,便于后续过滤、重排和邻域扩展 + +## 三、当前转换脚本做了什么 + +`layouts_to_vector_chunks.py` 当前已经实现: + +1. 过滤目录页噪声(如 `目次`) +2. 根据标题层级维护章节路径 +3. 将正文聚合成 `section_text` +4. 将表格单独转成 `table` +5. 将图相关内容单独转成 `figure` +6. 对长文本继续切分为最终 `vector_chunks` +7. 为每个检索 chunk 生成 `embedding_text` + +## 四、为什么不要直接按 layout 入库 + +如果把 `layouts.json` 的每条 layout 直接做向量: + +- 颗粒度太碎 +- 标题和正文容易分离 +- 表格会丢失结构上下文 +- 图示信息无法完整表达 +- 检索命中结果噪声较大 + +对于标准文档,最合适的单位通常不是“句子”,而是“条款语义块”。 + +## 五、建议的入库字段 + +建议向量数据库每条记录至少保存: + +- `embedding_text`:用于生成向量 +- `text`:原始 chunk 文本 +- `chunk_id` +- `semantic_id` +- `chunk_type`:`section_text` / `table` / `figure` +- `section_path` +- `section_title` +- `section_level` +- `page_start` +- `page_end` +- `doc_id` +- `doc_title` +- `source_ids` + +其中: + +- 向量化字段:`embedding_text` +- 展示字段:`text` +- 检索增强字段:其余 metadata + +## 六、推荐的检索方式 + +不要只做最简单的 top-k 向量搜索,建议采用: + +**向量召回 + metadata 重排 + 邻域扩展** + +### 1. 向量召回 + +使用 `vector_chunks[*].embedding_text` 做 embedding,并在向量数据库中检索 top 10 ~ 15 条。 + +查询时可以对用户问题做轻微改写,例如: + +原问题: + +`儿童三轮车的定义是什么?` + +可改写为: + +`请检索 GB 14747—2006 儿童三轮车安全要求 中关于“儿童三轮车定义”的条款、术语、表格或图示说明。` + +这样更适合标准文档检索。 + +### 2. metadata 重排 + +向量召回后,根据 metadata 做轻量规则重排。 + +常见规则: + +- `chunk_type == section_text`:对定义类、要求类问题优先级更高 +- `section_path` 命中查询关键词:例如查询“定义”时,`术语和定义` 章节优先 +- `chunk_type == table`:对“尺寸 / 参数 / 数值 / 对照 / 要求”类问题加权 +- `chunk_type == figure`:对“图 / 结构 / 状态 / 示意”类问题加权 + +### 3. 邻域扩展 + +检索命中的是最终切片,但回答往往需要更完整上下文。 + +建议命中某个 `vector_chunk` 后: + +1. 优先回捞同一个 `semantic_id` 下的所有 chunk +2. 如果还不够,再补充同 `section_path`、相邻页码或相邻 `chunk_index` 的内容 + +这样可以恢复完整条款,而不是只给模型一小段碎片。 + +## 七、不同问题的检索重点 + +### 1. 定义类问题 + +例如: + +- `儿童三轮车的定义是什么?` +- `轮距是什么意思?` + +优先检索: + +- `section_text` +- `section_path` 中包含 `术语和定义` 的内容 + +### 2. 要求类问题 + +例如: + +- `外露突出物有什么要求?` +- `辅助推杆有哪些安全要求?` + +优先检索: + +- `section_text` +- `table` + +### 3. 数值 / 尺寸 / 对照类问题 + +例如: + +- `鞍座到脚蹬距离要求是什么?` +- `哪些项目需要满足规定尺寸?` + +优先检索: + +- `table` +- `section_text` + +### 4. 图示说明类问题 + +例如: + +- `正常乘骑状态是什么意思?` +- `图1表示什么?` + +优先检索: + +- `figure` +- 同章节相邻 `section_text` + +## 八、推荐的最终检索流程 + +建议采用以下固定流程: + +1. 用 `vector_chunks.embedding_text` 做 embedding 检索 +2. 取 top 10 ~ 15 条候选 +3. 按 `chunk_type + section_path` 做规则重排 +4. 以 `semantic_id` 为中心回捞完整语义块 +5. 选 3 ~ 5 组上下文提供给大模型回答 + +## 九、给大模型的上下文组织方式 + +最终不要直接把原始 JSON 扔给模型,建议整理成如下格式: + +```text +[命中片段 1] +章节:3 术语和定义 > 3.1 儿童三轮车 +页码:1-2 +类型:section_text +内容: +...... + +[命中片段 2] +章节:4 要求 > 4.3 外露突出物 +页码:5 +类型:section_text +内容: +...... + +[命中片段 3] +章节:5 试验方法 +页码:8 +类型:table +内容: +...... +``` + +这种格式更利于模型稳定回答并引用出处。 + +## 十、转换命令 + +生成三层结构: + +```bash +python3 /home/huaci/dev/ai/SuperMew/tests/layouts_to_vector_chunks.py \ + --layouts /home/huaci/dev/ai/SuperMew/tests/layouts.json \ + --out /home/huaci/dev/ai/SuperMew/tests/vector_chunks.json +``` + +自定义切片大小: + +```bash +python3 /home/huaci/dev/ai/SuperMew/tests/layouts_to_vector_chunks.py \ + --layouts /home/huaci/dev/ai/SuperMew/tests/layouts.json \ + --out /home/huaci/dev/ai/SuperMew/tests/vector_chunks.json \ + --max-chars 500 \ + --overlap-chars 80 +``` diff --git a/dev.bat b/dev.bat index a06c27f..737bccf 100644 --- a/dev.bat +++ b/dev.bat @@ -92,7 +92,7 @@ echo. exit /b 0 :setup -call :ensure_log_dir +if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" echo. echo ======================================== echo AI+合规智能中枢 - 环境初始化 @@ -303,7 +303,7 @@ echo Unknown argument: %~1 exit /b 1 :status -call :ensure_log_dir +if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" echo. echo ======================================== echo AI+合规智能中枢 - 服务状态 @@ -313,39 +313,47 @@ echo. echo API service: set "API_PID=" set "API_RUNNING=0" +set "API_LISTENER=" +set "API_DISPLAY_PID=" if exist "%API_PID_FILE%" set /p API_PID=<"%API_PID_FILE%" if defined API_PID ( - call :pid_exists %API_PID% - if not errorlevel 1 ( - set "API_RUNNING=1" - echo Status: running - echo PID: %API_PID% - goto api_health - ) else ( + call :pid_exists !API_PID! + if errorlevel 1 ( del /q "%API_PID_FILE%" >nul 2>nul set "API_PID=" - ) -) - -call :get_listener_pid %API_PORT% API_LISTENER -if defined API_LISTENER ( - set "API_RUNNING=1" - echo Status: running (no PID file) - echo PID: %API_LISTENER% -) else ( - echo Status: stopped - goto api_done -) - -:api_health -if "%API_RUNNING%"=="1" ( - call :check_api_health - if not errorlevel 1 ( - echo Health: ok ) else ( - echo Health: failed + set "API_RUNNING=1" + set "API_DISPLAY_PID=!API_PID!" ) ) + +if "%API_RUNNING%"=="1" goto api_running +call :get_listener_pid %API_PORT% API_LISTENER +if defined API_LISTENER goto api_listener +echo Status: stopped +goto api_done + +:api_running +echo Status: running +if defined API_DISPLAY_PID echo PID: !API_DISPLAY_PID! +call :check_api_health +if errorlevel 1 ( + echo Health: failed +) else ( + echo Health: ok +) +goto api_done + +:api_listener +echo Status: running (no PID file) +echo PID: !API_LISTENER! +call :check_api_health +if errorlevel 1 ( + echo Health: failed +) else ( + echo Health: ok +) + :api_done echo URL: http://localhost:%API_PORT% echo Docs: http://localhost:%API_PORT%/docs @@ -353,26 +361,35 @@ echo. echo Frontend service: set "FRONTEND_PID=" +set "FRONTEND_RUNNING=0" +set "FRONTEND_LISTENER=" +set "FRONTEND_DISPLAY_PID=" if exist "%FRONTEND_PID_FILE%" set /p FRONTEND_PID=<"%FRONTEND_PID_FILE%" if defined FRONTEND_PID ( - call :pid_exists %FRONTEND_PID% - if not errorlevel 1 ( - echo Status: running - echo PID: %FRONTEND_PID% - goto frontend_done - ) else ( + call :pid_exists !FRONTEND_PID! + if errorlevel 1 ( del /q "%FRONTEND_PID_FILE%" >nul 2>nul set "FRONTEND_PID=" + ) else ( + set "FRONTEND_RUNNING=1" + set "FRONTEND_DISPLAY_PID=!FRONTEND_PID!" ) ) +if "%FRONTEND_RUNNING%"=="1" goto frontend_running call :get_listener_pid %FRONTEND_PORT% FRONTEND_LISTENER -if defined FRONTEND_LISTENER ( - echo Status: running (no PID file) - echo PID: %FRONTEND_LISTENER% -) else ( - echo Status: stopped -) +if defined FRONTEND_LISTENER goto frontend_listener +echo Status: stopped +goto frontend_done + +:frontend_running +echo Status: running +if defined FRONTEND_DISPLAY_PID echo PID: !FRONTEND_DISPLAY_PID! +goto frontend_done + +:frontend_listener +echo Status: running (no PID file) +echo PID: !FRONTEND_LISTENER! :frontend_done echo Mode: %FRONTEND_MODE% @@ -417,7 +434,7 @@ if /I "%~3"=="--follow" ( exit /b %errorlevel% :start_api_background -call :ensure_log_dir +if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" if not exist "%VENV_PYTHON%" ( echo Virtual environment not found. Run dev.bat setup first. exit /b 1 @@ -471,7 +488,7 @@ exit /b %errorlevel% :start_frontend set "MODE=%~1" if "%MODE%"=="" set "MODE=%FRONTEND_MODE%" -call :ensure_log_dir +if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" where npm >nul 2>nul || ( echo npm was not found. Install Node.js 20+ first. @@ -569,10 +586,6 @@ if defined FRONTEND_PORT_PID ( echo Frontend is not running. exit /b 0 -:ensure_log_dir -if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" -exit /b 0 - :validate_mode if /I "%~1"=="dev" exit /b 0 if /I "%~1"=="static" exit /b 0 diff --git a/docs/architecture/backend-project-architecture.md b/docs/architecture/backend-project-architecture.md new file mode 100644 index 0000000..0b5d8e0 --- /dev/null +++ b/docs/architecture/backend-project-architecture.md @@ -0,0 +1,717 @@ +# Backend Project Architecture + +## 1. Purpose + +本文档定义当前 backend 的目标态架构,用于在保持单服务部署的前提下,将系统整理为职责清晰、边界稳定、可替换实现的模块化结构。本文档的重点不是描述理想化分层,而是基于当前真实代码形态,明确后续重构时必须遵守的模块职责、依赖方向、内部稳定接口和替换边界。 + +本文档与 `docs/rfc/backend-api-parsing-embedding-migration-requirements.md` 的关系如下: + +- RFC 负责冻结本轮迁移需求、范围、风险和约束。 +- 本文档负责冻结目标模块边界、依赖规则和实现组织方式。 +- 后续任何代码重构、能力替换或底座升级,都应同时满足 RFC 与本文档。 + +## 2. Current-State Problems + +基于当前代码,后端已经具备以下能力: + +- 文档上传、下载、列表 +- 文档解析与切片 +- 向量化与 Milvus 入库 +- 检索 +- 基于 RAG 的 Agent 问答 workflow + +但这些能力当前主要是“可运行”,还不是“结构清晰、便于替换、便于演进”的状态。核心问题如下。 + +### 2.1 `DocumentProcessor` 责任过载 + +`backend/app/services/document_processor.py` 当前同时承担: + +- 文档解析 +- 摘要生成 +- 分块 +- 向量化 +- Milvus 入库 +- 检索入口 + +这使上传处理链路、检索链路与基础设施初始化逻辑耦合在一个大类中。流程编排与具体实现没有边界,后续无论替换 parser、embedding、vector store 还是增加文档状态管理,都会直接影响同一个类。 + +### 2.2 检索逻辑缺少稳定边界 + +`backend/app/services/rag/retriever.py` 当前同时管理: + +- embedder 初始化 +- Milvus 连接与 collection lifecycle +- 检索执行 +- 结果映射 + +这意味着“检索能力”不是一个稳定的业务能力接口,而是一个直接依赖具体 embedding 和 Milvus 实现的复合服务。后续如果从 `BGE-M3 + hybrid search` 切到 `1536 dense-only` 或替换向量索引实现,会直接影响检索服务本身。 + +### 2.3 `QAAgent` 责任过载 + +`backend/app/services/agent/qa_agent.py` 当前同时承担: + +- 检索调用 +- 上下文构建 +- Prompt 选择 +- LLM 调用 +- SSE 流式问答流程 +- 会话 workflow 编排 + +这导致 Agent workflow 与检索底座、LLM provider、上下文构造逻辑紧耦合。后续切换 LLM provider、替换 session store、复用 retrieval 能力时,影响面会扩散到整个 Agent 实现。 + +### 2.4 API 层直接编排具体服务 + +当前 API 路由主要在: + +- `backend/app/api/routes/documents.py` +- `backend/app/api/routes/knowledge.py` +- `backend/app/api/routes/agent.py` + +这些路由直接实例化具体服务类,例如 `DocumentProcessor`、`QAAgent`、`MinIOClient`。这意味着: + +- API 层不仅处理 transport concerns,也在做业务编排 +- 路由层知道过多内部实现细节 +- 后续如果内部模块调整,路由层也要跟着改 + +### 2.5 文档元数据与对象存储组织方式耦合 + +当前文档列表与下载逻辑高度依赖 MinIO 对象命名方式和对象遍历结果。对象存储目前承担了部分“业务真相”的角色,但对象存储只适合作为文件二进制载体,不适合作为完整文档元数据和状态管理的唯一来源。 + +### 2.6 `knowledge` 与 `agent` 共享检索底座的边界不清晰 + +当前 `/knowledge/*` 与 `/agent/*` 都依赖检索能力,但共享方式不够清晰: + +- `knowledge` 通过 `DocumentProcessor.search()` 访问检索 +- `agent` 通过 `Retriever` 访问检索 + +这会导致同一检索能力未来演进成两条链路,难以统一检索策略、元数据模型和可替换边界。 + +## 3. Architecture Goals + +本项目后端的目标态架构必须满足以下目标。 + +### 3.1 单服务部署 + +系统继续保持单服务部署,不拆分为多个微服务。架构治理发生在单服务内部,通过清晰模块边界实现高内聚低耦合,而不是通过进程级拆分回避设计问题。 + +### 3.2 高内聚、低耦合优先级最高 + +后续模块设计以“一个模块只承载一类稳定职责”为原则。跨能力流程统一在编排层组织,不允许继续把 parser、embedding、storage、retrieval、LLM workflow 堆进同一个服务类。 + +### 3.3 外部 API 尽量保持兼容 + +现有前端与外部调用方依赖的主接口保持不变优先,包括但不限于: + +- `/api/v1/documents/*` +- `/api/v1/knowledge/*` +- `/api/v1/agent/*` + +内部可以重组,但外部接口不应因为内部重构而被迫大改。 + +### 3.4 关键能力必须可替换 + +以下能力必须通过稳定端口隔离实现细节: + +- 文档解析 +- 分块构建 +- 向量化 +- 向量索引 +- 检索 +- LLM 回答生成 +- 会话存储 +- 原始文件存储 + +后续替换方案时,只允许替换实现,不允许穿透影响其他模块。 + +### 3.5 `knowledge` 与 `agent` 共用同一检索底座 + +检索必须被视为独立的业务能力,由统一的 retrieval application service 对外暴露。`knowledge` 与 `agent` 必须复用同一个 retrieval 底座,避免两套召回策略、两套元数据模型、两套 adapter。 + +### 3.6 依赖必须单向流动 + +系统必须形成稳定的单向依赖关系: + +- `api -> application -> domain` +- `application -> infrastructure` 通过端口/实现绑定 +- `infrastructure -> external systems` + +不允许出现基础设施实现反向驱动业务编排,也不允许 domain 依赖 Web 或第三方 SDK。 + +## 4. Target Module Layout + +目标目录结构如下: + +```text +backend/app/ + api/ + application/ + documents/ + knowledge/ + agent/ + domain/ + documents/ + retrieval/ + conversation/ + infrastructure/ + storage/ + vectorstore/ + parser/ + embedding/ + llm/ + session/ + shared/ +``` + +该结构是本项目 backend 的目标态模块布局。后续实现可以渐进迁移,但职责边界不能偏离。 + +### 4.1 `api` + +职责: + +- HTTP 路由注册 +- 请求参数校验 +- 响应模型映射 +- 异常转换 +- SSE 事件格式输出 + +非职责: + +- 不直接组织完整业务流程 +- 不直接访问 MinIO、Milvus、Parser SDK、LLM SDK +- 不直接 new 具体基础设施客户端 + +### 4.2 `application` + +职责: + +- 用例编排 +- 跨领域能力协作 +- 业务流程统一入口 +- workflow 级别的状态推进 + +非职责: + +- 不直接依赖第三方 SDK +- 不承担具体存储、向量库、解析器实现细节 + +### 4.3 `domain` + +职责: + +- 核心业务对象 +- 领域术语 +- 稳定端口接口 +- 统一元数据模型 +- 检索结果模型 +- 会话消息模型 + +非职责: + +- 不依赖 FastAPI +- 不依赖 MinIO、Milvus、LLM SDK +- 不依赖路由请求响应模型 + +### 4.4 `infrastructure` + +职责: + +- 外部系统适配器实现 +- 第三方 SDK 封装 +- provider-specific 配置适配 +- 数据格式转换 + +包含但不限于: + +- MinIO binary store +- Milvus vector index +- Aliyun / local parser adapter +- OpenAI-compatible embedding adapter +- DeepSeek / Qwen LLM adapter +- in-memory / Redis session store + +### 4.5 `shared` + +职责: + +- 配置 +- 日志 +- 通用异常 +- 通用工具 +- 公共基础设施无关组件 + +非职责: + +- 不承载业务编排 +- 不变成新的 `services` 大杂烩目录 + +## 5. Module Responsibilities + +### 5.1 `api` + +`api` 是 transport 层,只关心请求进来和响应出去的表达方式。它应该把请求转换为 application service 的输入,把 application service 的结果转换为 HTTP 响应。 + +`api` 不应该知道: + +- MinIO bucket 怎么组织 +- Milvus collection 怎么建 +- parser 是本地还是阿里云 +- embedding 是本地模型还是 API +- session 是内存还是 Redis + +### 5.2 `application` + +`application` 是业务编排层,是系统内唯一允许跨模块组织完整流程的层。它应该定义稳定的用例服务,而不是把流程散落在路由或基础设施实现中。 + +本项目至少固定以下 4 类 application service: + +- `DocumentCommandService` +- `DocumentQueryService` +- `KnowledgeRetrievalService` +- `AgentConversationService` + +### 5.3 `domain` + +`domain` 层定义系统内部真正稳定的概念,例如: + +- `Document` +- `DocumentStatus` +- `ParsedDocument` +- `Chunk` +- `RetrievalQuery` +- `RetrievedChunk` +- `ConversationSession` +- `ConversationMessage` +- `AnswerSource` + +这些对象必须脱离具体技术实现,成为 parser、embedding、vector index、agent workflow 之间的公共契约。 + +### 5.4 `infrastructure` + +`infrastructure` 只负责“怎么接某个外部系统”,不负责“业务上应该先做什么后做什么”。例如: + +- MinIO adapter 负责上传和下载文件 +- Milvus adapter 负责 upsert/search/delete +- Qwen / DeepSeek adapter 负责生成回答 +- Aliyun parser adapter 负责把解析结果映射成统一 `ParsedDocument` + +### 5.5 `shared` + +`shared` 只放横切能力。任何和文档 ingest、检索、问答编排直接相关的业务逻辑,都不应该放进 `shared`。 + +## 6. Stable Internal Ports + +以下端口是系统内部稳定契约。后续方案替换时,只能替换实现,不允许改动上层 application service 的调用方式,也不允许影响 sibling 模块。 + +### 6.1 `DocumentRepository` + +职责: + +- 管理文档元数据 +- 管理文档状态 +- 管理统计字段,例如 chunk 数、索引状态、摘要状态 + +说明: + +- 列表和状态查询应以 `DocumentRepository` 为主,而不是直接遍历对象存储。 + +### 6.2 `DocumentBinaryStore` + +职责: + +- 保存原始文件 +- 下载原始文件 +- 删除原始文件 +- 处理对象存储相关细节 + +说明: + +- 替换 MinIO 或对象存储方案时,只替换该实现。 + +### 6.3 `DocumentParser` + +职责: + +- 输入原始文件 +- 输出统一结构化解析结果 + +说明: + +- 本地 PDF/MinerU 或阿里云解析只能作为实现差异,不能外溢到业务流程层。 + +### 6.4 `ChunkBuilder` + +职责: + +- 输入统一解析结果 +- 输出统一 chunk 模型 + +说明: + +- chunk 规则变化只能影响该端口实现,不应影响 retrieval、agent 或 API。 + +### 6.5 `EmbeddingProvider` + +职责: + +- 输入文本列表 +- 输出 embedding 向量结果 + +说明: + +- 从本地模型切到 OpenAI-compatible embedding,只替换该实现。 + +### 6.6 `VectorIndex` + +职责: + +- upsert chunks +- delete by document +- search by query vector +- 管理索引内部 schema + +说明: + +- Milvus schema 或向量库替换,只能影响该层。 + +### 6.7 `Retriever` + +职责: + +- 基于 query、filter、top_k 返回统一检索结果 + +说明: + +- `Retriever` 是业务侧的检索端口,不应再直接持有 embedder、Milvus lifecycle 和 provider-specific 逻辑。 + +### 6.8 `AnswerGenerator` + +职责: + +- 基于 query 与 context 生成最终回答 +- 屏蔽具体 LLM provider 差异 + +说明: + +- DeepSeek、Qwen 或其他模型切换时,只替换该实现。 + +### 6.9 `ConversationStore` + +职责: + +- 创建和读取 session +- 持久化消息历史 +- 管理会话生命周期 + +说明: + +- 从内存实现切到 Redis 或数据库实现时,只替换该实现。 + +## 7. Application Services + +### 7.1 `DocumentCommandService` + +职责: + +- 接收文档上传命令 +- 生成 `doc_id` +- 保存原始文件 +- 触发解析、分块、向量化、入库 +- 更新文档状态和统计信息 +- 返回最终处理结果 + +说明: + +- 当前 `DocumentProcessor` 的“流程编排”职责在目标态应迁移到这里。 +- parser、chunker、embedder、vector index 的具体实现不应继续塞进一个大类里统一管理。 + +### 7.2 `DocumentQueryService` + +职责: + +- 文档列表 +- 文档下载 +- 文档状态查询 +- 文档管理视图查询 + +说明: + +- 列表和状态查询应基于 `DocumentRepository` +- 下载应通过 `DocumentBinaryStore` +- 不再依赖 MinIO 对象结构作为业务视图主来源 + +### 7.3 `KnowledgeRetrievalService` + +职责: + +- 对外提供统一检索能力 +- 管理 retrieval query 到 retrieval result 的业务转换 +- 被 `/knowledge/*` 和 Agent workflow 共用 + +说明: + +- 当前 `knowledge` 与 `agent` 必须统一依赖这一层,不允许各自再维护一套检索流程。 + +### 7.4 `AgentConversationService` + +职责: + +- 统一管理问答 workflow +- 读取或创建会话 +- 调用 `KnowledgeRetrievalService` +- 构建问答上下文 +- 调用 `AnswerGenerator` +- 保存回答和引用来源 + +说明: + +- 当前 `QAAgent` 的 workflow 编排职责在目标态应迁移到这里,或被其吸收后只保留 façade 角色。 +- SSE 与普通问答必须共用这一层,不允许复制业务编排逻辑。 + +## 8. Core Workflows + +### 8.1 文档上传入库链路 + +目标流程如下: + +1. `api/documents` 接收上传请求并完成输入校验。 +2. `DocumentCommandService` 生成 `doc_id`,初始化文档记录和状态。 +3. `DocumentBinaryStore` 保存原始文件。 +4. `DocumentParser` 对原始文件执行解析,输出统一结构化结果。 +5. `ChunkBuilder` 将解析结果转换为统一 chunk 集合。 +6. `EmbeddingProvider` 为 chunks 生成向量。 +7. `VectorIndex` 将 chunks 与 vectors 写入索引。 +8. `DocumentRepository` 更新文档状态、chunk 数量、索引状态、元数据。 +9. API 返回处理结果。 + +约束: + +- 上传处理链路的主编排必须只存在于 `DocumentCommandService` +- 不允许再由 route 或基础设施类直接组织全流程 + +### 8.2 文档查询链路 + +目标流程如下: + +1. `api/documents` 调用 `DocumentQueryService` +2. 文档列表与状态查询通过 `DocumentRepository` +3. 文档下载通过 `DocumentBinaryStore` +4. 对象存储命名规则只作为实现细节,不作为最终业务真相 + +约束: + +- 文档“存在、状态、统计信息”必须有稳定元数据模型 +- 不允许继续通过对象存储遍历结果拼出全部业务语义 + +### 8.3 Agent 问答链路 + +目标流程如下: + +1. `api/agent` 接收问答请求 +2. `AgentConversationService` 读取或创建 session +3. `KnowledgeRetrievalService` 统一执行检索 +4. `AnswerGenerator` 基于 query 和 retrieval context 生成回答 +5. `ConversationStore` 保存消息历史和引用来源 +6. API 将结果以普通 JSON 或 SSE 格式输出 + +约束: + +- 普通问答和 SSE 问答只允许输出形式不同 +- 业务编排链必须完全复用 +- 检索能力必须来自同一 `KnowledgeRetrievalService` + +## 9. Dependency Rules + +系统内部依赖方向固定如下: + +```text +api -> application -> domain +application -> infrastructure (through ports) +infrastructure -> external systems +``` + +具体规则如下: + +- `api` 可以依赖 `application` 和 API 自己的 request/response models +- `application` 可以依赖 `domain` 和端口绑定后的 infrastructure 实现 +- `domain` 不能依赖 `api` 或 `infrastructure` +- `infrastructure` 可以依赖 `domain` 定义的端口和数据模型,但不能反向驱动 application 逻辑 + +## 10. Migration Mapping From Current Code + +当前关键代码到目标模块的映射如下。 + +### 10.1 文档处理 + +当前: + +- `backend/app/services/document_processor.py` + +目标: + +- 其流程编排职责迁移到 `application/documents/DocumentCommandService` +- 解析、分块、向量、入库分别通过端口接入 +- 检索入口从该类中剥离,不再由 ingest orchestration 承担 search 职责 + +### 10.2 检索 + +当前: + +- `backend/app/services/rag/retriever.py` + +目标: + +- `domain/retrieval` 中定义 `Retriever` 端口和统一检索结果模型 +- `infrastructure/vectorstore` 中承载具体检索实现 +- `application/knowledge/KnowledgeRetrievalService` 作为统一检索用例入口 + +### 10.3 Agent Workflow + +当前: + +- `backend/app/services/agent/qa_agent.py` + +目标: + +- workflow 编排职责迁移到 `application/agent/AgentConversationService` +- 具体 LLM 调用走 `AnswerGenerator` +- 具体 session 读写走 `ConversationStore` +- 检索统一走 `KnowledgeRetrievalService` + +### 10.4 存储 + +当前: + +- `backend/app/services/storage/minio_client.py` +- `backend/app/services/storage/milvus_client.py` + +目标: + +- MinIO 迁移到 `infrastructure/storage` +- Milvus 迁移到 `infrastructure/vectorstore` + +### 10.5 解析 + +当前: + +- `backend/app/services/parser/*` +- `backend/app/services/parser/mineru_parser.py` + +目标: + +- 全部迁移到 `infrastructure/parser` +- 对外只暴露统一 `DocumentParser` 端口实现 + +### 10.6 向量化 + +当前: + +- `backend/app/services/embedding/*` + +目标: + +- 迁移到 `infrastructure/embedding` +- 对外只暴露统一 `EmbeddingProvider` + +### 10.7 LLM + +当前: + +- `backend/app/services/llm/*` + +目标: + +- 迁移到 `infrastructure/llm` +- 由 `AnswerGenerator` 屏蔽 provider 差异 + +### 10.8 会话 + +当前: + +- `backend/app/services/agent/session_manager.py` + +目标: + +- 迁移到 `infrastructure/session` +- 对外通过 `ConversationStore` 暴露 + +### 10.9 API 模型与内部模型 + +当前: + +- `backend/app/api/models/*` +- `backend/app/schemas/*` + +目标: + +- 对外 request/response model 保留在 `api` +- 内部 DTO / VO / domain object 收敛到 `application` 或 `domain` +- 不允许 API model 直接渗透到 domain + +## 11. Technology Replacement Boundaries + +### 11.1 本地解析 / MinerU -> 阿里云文档解析 + +替换原则: + +- 只替换 `DocumentParser` adapter +- `DocumentCommandService` 不应感知解析提供商差异 +- `ChunkBuilder` 只接收统一解析结果模型 + +### 11.2 BGE-M3 -> OpenAI-compatible embedding + +替换原则: + +- 只替换 `EmbeddingProvider` +- `KnowledgeRetrievalService` 与 `DocumentCommandService` 不应感知 embedding 来源变化 + +### 11.3 Milvus `1024 + sparse` -> `1536 dense-only` + +替换原则: + +- 只替换 `VectorIndex` 实现 +- collection schema、index 参数、dense-only search 属于 index 内部实现细节 +- 上层 retrieval 和 agent workflow 不应因为 schema 变化而改业务接口 + +### 11.4 DeepSeek / Qwen 切换 + +替换原则: + +- 只替换 `AnswerGenerator` 背后的 provider adapter +- 上层 conversation workflow 不应直接依赖具体模型 SDK + +### 11.5 内存 session -> Redis / DB session + +替换原则: + +- 只替换 `ConversationStore` +- API 和 application service 不应感知 session 持久化细节 + +## 12. Guardrails + +后续所有 backend 重构和新增功能必须遵守以下规则: + +- 禁止 `api/routes` 直接实例化 parser、embedder、Milvus、MinIO、LLM client +- 禁止 `application` 层直接 import 第三方 SDK +- 禁止 `domain` 层依赖 FastAPI、Pydantic route model、MinIO SDK、Milvus SDK、LLM SDK +- 禁止 SSE 和普通问答各自维护独立 workflow +- 禁止把对象存储命名规则作为唯一业务元数据来源 +- 禁止新建第二个“大一统流程类”替代 `DocumentProcessor` +- 禁止 `knowledge` 和 `agent` 各自维护独立检索实现 +- 禁止 parser、embedding、vector index、llm provider 的替换穿透到 API 层 + +## 13. Architecture Review Checklist + +后续评审和重构验收时,至少核对以下问题: + +1. 上传、下载、列表、解析、切片、向量、入库、检索、Agent Workflow 是否都映射到了明确模块。 +2. 系统是否仍保持单服务,而不是被动演化成伪微服务结构。 +3. 是否存在唯一、清晰的目标目录结构。 +4. 是否定义了稳定端口列表。 +5. 是否定义了文档上传入库、文档查询、Agent 问答三条核心 workflow。 +6. 是否定义了单向依赖方向。 +7. 是否明确列出了架构禁令。 +8. 是否定义了当前关键代码到目标模块的映射。 +9. 是否明确定义了 parser、embedding、vector index、LLM、session store 的替换边界。 +10. 是否明确 `knowledge` 与 `agent` 共用同一 retrieval 底座。 +11. 是否明确 API 层只负责 transport concerns,不再直接承担业务编排。 +12. 是否保证后续替换方案时,上层 application service 与外部 API 契约不被迫变化。 diff --git a/docs/rfc/backend-api-parsing-embedding-migration-requirements.md b/docs/rfc/backend-api-parsing-embedding-migration-requirements.md new file mode 100644 index 0000000..d2bf3a2 --- /dev/null +++ b/docs/rfc/backend-api-parsing-embedding-migration-requirements.md @@ -0,0 +1,170 @@ +# BGE-M3 下线与阿里云/API 解析迁移需求说明 + +## 1. 当前状态 + +当前后端文档上传与处理主链路已经存在,且真实入口与核心依赖如下: + +- 现有真实上传入口是 `backend/app/api/routes/documents.py` 的 `/api/v1/documents/upload` +- 当前主链路依赖 `backend/app/services/document_processor.py` +- 当前解析链路是本地 PDF/DOCX/MinerU +- 当前嵌入链路依赖 `backend/app/services/embedding/bge_m3_embedder.py` +- 当前检索链路依赖 `backend/app/services/storage/milvus_client.py` 和 `backend/app/services/rag/retriever.py` + +本文件用于冻结本轮迁移需求、影响面和约束条件,作为后续 backend architecture 梳理、实施拆解和验收对齐的输入基线。 + +## 2. 背景与动机 + +当前系统的文档处理能力建立在本地解析与本地向量模型基础之上,但该路径已经不再满足后续演进要求。为支持统一的解析质量、降低本地模型依赖、并为后续后端架构调整预留空间,本期需要先冻结迁移需求。 + +本期背景和动机明确如下: + +- 不再使用本地 `models--BAAI--bge-m3` +- 解析和 embedding 主链路准备切换到 API 方式 +- 后续还会整体调整 backend 架构,因此本文件只冻结需求,不提前固化最终模块设计 + +## 3. 目标需求 + +本期目标是完成文档解析、分块、向量化和检索底座的迁移需求定义,明确后续架构和实施阶段必须满足的结果边界。 + +已确认的目标需求如下: + +- 文档解析统一改为阿里云文档智能能力 +- 当前阿里云接入基础来自 `backend/app/aliyun_parser/parse_pdf.py` +- 解析结果以 `structure_nodes`、`semantic_blocks`、`vector_chunks` 三层结构为基础 +- 分块以阿里云 `vector_chunks` 为准,不再走当前本地 `RegulationChunker` +- embedding 改为 OpenAI 兼容 API 调用,模型使用 `text-embedding-v3` +- 检索能力本期降级为 `dense-only` +- Milvus 继续保留,但 schema 需要围绕 `1536` 维 dense 向量重建 + +以上内容属于本期已经确认的迁移方向,不再作为待讨论事项。 + +## 4. 范围 + +本期需求范围覆盖以下内容: + +- 上传处理链路 +- 阿里云解析适配 +- embedding API 适配 +- Milvus 入库与检索 +- RAG/Agent 检索依赖的元数据适配 +- 配置、依赖、README 和部署说明同步清理 + +本期范围的核心目标是让现有上传后处理主链路可以在新的 API 化解析和 embedding 方式下继续工作,并保持主要外部接口不变。 + +## 5. 非目标 + +以下事项不属于本期需求目标,不应在本文件内被提前设计或默认纳入实施: + +- 本文件不定义最终 backend 分层、目录结构和 service boundary +- 本文件不引入异步任务系统 +- 本文件不把 PostgreSQL 三层结构表接入主链路 +- 本文件不处理前端大规模交互改版 + +如果后续实施阶段需要触及上述内容,应另行在架构方案或单独 RFC 中说明,而不是在本需求说明中默认展开。 + +## 6. 影响面清单 + +本期迁移将影响现有后端多个子系统。以下清单用于冻结影响面,方便后续做架构设计、任务拆分和回归验证。 + +### 6.1 入口与流程 + +受影响的入口与主流程文件包括: + +- `backend/app/api/routes/documents.py` +- `backend/app/services/document_processor.py` + +该部分需要承接上传接口保持不变的前提下,对解析、分块、向量化和入库主流程进行迁移。 + +### 6.2 解析能力 + +受影响的解析能力范围包括: + +- 当前本地 parser 目录 +- `backend/app/aliyun_parser` + +迁移后阿里云文档智能能力将成为主解析来源,本地 PDF/DOCX/MinerU 解析链路需要重新界定保留、下线或回退策略,但具体模块组织方式不在本文件内定义。 + +### 6.3 向量能力 + +受影响的向量能力范围包括: + +- `backend/app/services/embedding/bge_m3_embedder.py` +- embedding 配置 +- embedding 相关依赖包 + +该部分需要移除对本地 BGE-M3 模型的运行时依赖,并改为 OpenAI 兼容 API 方式调用 `text-embedding-v3`。 + +### 6.4 存储检索 + +受影响的存储与检索能力包括: + +- `backend/app/services/storage/milvus_client.py` +- `backend/app/services/rag/retriever.py` +- `backend/app/api/routes/knowledge.py` +- `backend/app/services/agent/qa_agent.py` + +该部分需要围绕 `1536` 维 dense 向量重建 Milvus schema,并确保知识检索与 Agent 检索链路继续可用。 + +### 6.5 配置与状态 + +受影响的配置与状态相关文件包括: + +- `backend/app/config/settings.py` +- `backend/app/core/config.py` +- `backend/app/api/routes/status.py` +- `backend/app/services/mock_data.py` + +该部分需要清理与旧本地模型和旧处理链路耦合的配置项、状态展示和 mock 数据假设。 + +### 6.6 文档与部署 + +受影响的文档与部署项包括: + +- `README.md` +- `QUICK_DEPLOY.md` +- `.env.example` +- `requirements` 相关文件 +- `pyproject.toml` + +该部分需要同步反映新的 API 化解析与 embedding 依赖,去除或更新本地模型准备、运行说明和环境配置描述。 + +## 7. 风险与约束 + +以下风险和约束在本期已经明确,需要在后续架构和实施阶段优先处理: + +- 旧 Milvus collection 与新 `1536` 维 schema 不兼容,需要新 collection 和重建索引 +- `backend/app/aliyun_parser` 现有脚本含硬编码密钥,后续必须全部移到环境变量 +- RAG 下游当前对 `clause_number` 有依赖,迁移后需要优先适配 `section_title` 和 Aliyun chunk metadata +- 如果阿里云返回字段与当前样例不同,需要在架构阶段补充 adapter 层 + +上述条目属于实施约束和迁移风险,不代表当前已经确定最终解决方案,只代表这些问题必须被显式处理。 + +## 8. 待架构阶段决策 + +以下事项属于后续 backend architecture 阶段需要单独拍板的决策项,不属于本文件已确认的需求结论: + +- 阿里云能力封装为内部模块还是独立 adapter package +- 同步阻塞上传还是改为异步 job +- `DocumentProcessor` 是否拆为 ingest orchestrator +- 检索元数据模型是否统一重命名 +- status/config 是否改为真实运行态而不是 mock + +后续如输出架构方案,应围绕这些待决策项给出明确取舍和原因,但不应回退本文件已经确认的迁移目标。 + +## 9. 验收基线 + +本期需求的验收基线固定如下: + +- 上传接口外部契约保持不变 +- PDF/DOC/DOCX 上传后能完成解析、向量化、入库 +- 新索引可支持 `/knowledge/retrieval` 和 `/agent/ask` +- 系统中不再依赖本地 `bge-m3` 模型文件 +- 所有敏感凭据从代码移出 + +以上验收基线用于后续架构方案评审和实施完成后的回归核对。 + +## 10. 说明 + +本文件是需求说明,不是最终技术设计文档。文中只冻结目标、范围、影响面、风险和约束,不定义最终 backend 分层、类图、目录结构、模块边界或详细实现步骤。 + +后续待新的 backend architecture 整理完成后,应基于本文件再补充对应的架构方案文档,或直接拆解为实施计划。 diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 05ae1c1..188ea13 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -8,8 +8,8 @@ export default defineConfig({ host: '0.0.0.0', port: 5173, proxy: { - '/api': { - target: 'http://localhost:8000', + '^/api/.*': { + target: 'http://6.86.80.8:8000', changeOrigin: true, }, }, diff --git a/logs/api.log b/logs/api.log deleted file mode 100644 index 33d9819..0000000 --- a/logs/api.log +++ /dev/null @@ -1,1487 +0,0 @@ -INFO: Will watch for changes in these directories: ['C:\\Projects\\AIProjects\\AIRegulations\\Demo-glm'] -INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) -INFO: Started reloader process [108380] using WatchFiles -Process SpawnProcess-1: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\config\settings.py'. Reloading... - Process SpawnProcess-2: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\api\routes\documents.py'. Reloading... - WARNING: WatchFiles detected changes in 'src\api\routes\documents.py'. Reloading... - Process SpawnProcess-3: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -Process SpawnProcess-4: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\api\routes\documents.py'. Reloading... - Process SpawnProcess-5: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\api\routes\documents.py'. Reloading... - Process SpawnProcess-6: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\services\rag\retriever.py'. Reloading... - WARNING: WatchFiles detected changes in 'src\services\rag\retriever.py'. Reloading... - Process SpawnProcess-7: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -Process SpawnProcess-8: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\services\rag\retriever.py'. Reloading... - Process SpawnProcess-9: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\services\rag\retriever.py'. Reloading... - Process SpawnProcess-10: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\services\rag\context_builder.py'. Reloading... - Process SpawnProcess-11: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\config\settings.py'. Reloading... - Process SpawnProcess-12: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\config\settings.py'. Reloading... - WARNING: WatchFiles detected changes in 'src\config\settings.py'. Reloading... - Process SpawnProcess-13: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\config\settings.py'. Reloading... - Process SpawnProcess-14: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -Process SpawnProcess-15: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\api\routes\documents.py'. Reloading... - Process SpawnProcess-16: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\api\routes\documents.py'. Reloading... - Process SpawnProcess-17: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\services\storage\minio_client.py'. Reloading... - Process SpawnProcess-18: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\api\routes\documents.py'. Reloading... - Process SpawnProcess-19: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\api\routes\documents.py'. Reloading... - Process SpawnProcess-20: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\config\settings.py'. Reloading... - Process SpawnProcess-21: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\api\routes\documents.py'. Reloading... - Process SpawnProcess-22: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\services\storage\__init__.py'. Reloading... - WARNING: WatchFiles detected changes in 'src\services\storage\__init__.py'. Reloading... - Process SpawnProcess-23: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -Process SpawnProcess-24: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\services\storage\minio_client.py'. Reloading... - Process SpawnProcess-25: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\api\routes\documents.py'. Reloading... - Process SpawnProcess-26: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\services\document_processor.py'. Reloading... - WARNING: WatchFiles detected changes in 'src\services\document_processor.py'. Reloading... - Process SpawnProcess-27: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -Process SpawnProcess-28: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\api\routes\documents.py', 'src\services\rag\prompt_templates.py', 'src\api\models\document.py', 'src\services\llm\__init__.py'. Reloading... - WARNING: WatchFiles detected changes in 'src\api\models\document.py', 'src\services\llm\__init__.py', 'src\services\rag\prompt_templates.py'. Reloading... - Process SpawnProcess-29: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -Process SpawnProcess-30: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\services\rag\prompt_templates.py', 'src\config\settings.py'. Reloading... - WARNING: WatchFiles detected changes in 'src\config\settings.py'. Reloading... - Process SpawnProcess-31: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -Process SpawnProcess-32: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' -WARNING: WatchFiles detected changes in 'src\services\llm\document_skills_generator.py'. Reloading... - Process SpawnProcess-33: -Traceback (most recent call last): - File "C:\software\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap - self.run() - File "C:\software\Python312\Lib\multiprocessing\process.py", line 108, in run - self._target(*self._args, **self._kwargs) - File "C:\software\Python312\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 67, in run - return asyncio.run(self.serve(sockets=sockets)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 194, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 71, in serve - await self._serve(sockets) - File "C:\software\Python312\Lib\site-packages\uvicorn\server.py", line 78, in _serve - config.load() - File "C:\software\Python312\Lib\site-packages\uvicorn\config.py", line 436, in load - self.loaded_app = import_from_string(self.app) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string - raise exc from None - File "C:\software\Python312\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\software\Python312\Lib\importlib\__init__.py", line 90, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1381, in _gcd_import - File "", line 1354, in _find_and_load - File "", line 1325, in _find_and_load_unlocked - File "", line 929, in _load_unlocked - File "", line 994, in exec_module - File "", line 488, in _call_with_frames_removed - File "C:\Projects\AIProjects\AIRegulations\Demo-glm\src\api\main.py", line 8, in - from loguru import logger -ModuleNotFoundError: No module named 'loguru' diff --git a/logs/app_2026-05-14.log b/logs/app_2026-05-14.log deleted file mode 100644 index 702cba1..0000000 --- a/logs/app_2026-05-14.log +++ /dev/null @@ -1,119 +0,0 @@ -2026-05-14 16:41:52 | INFO | src.api.main:lifespan:27 - 启动 AI+合规智能中枢 v0.1.0 -2026-05-14 16:41:52 | INFO | src.api.main:lifespan:28 - 调试模式: False -2026-05-14 16:41:52 | INFO | src.api.main:lifespan:31 - 预加载LLM客户端... -2026-05-14 16:41:54 | INFO | src.services.llm.qwen_client:_init_client:59 - Qwen客户端初始化完成: http://6.86.80.4:30080/v1 - qwen3.5-flash -2026-05-14 16:41:54 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: qwen - qwen3.5-flash -2026-05-14 16:41:54 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: qwen -2026-05-14 16:41:55 | INFO | src.services.llm.deepseek_client:_init_client:50 - DeepSeek客户端初始化完成: http://6.86.80.4:30080/v1 - deepseek-v4-flash -2026-05-14 16:41:55 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: deepseek - deepseek-v4-flash -2026-05-14 16:41:55 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: deepseek -2026-05-14 16:42:22 | INFO | src.api.main:lifespan:37 - 应用关闭,执行清理... -2026-05-14 16:42:22 | INFO | src.services.llm.llm_factory:cleanup:226 - 所有LLM客户端已清理 -2026-05-14 16:42:28 | INFO | src.api.main:lifespan:27 - 启动 AI+合规智能中枢 v0.1.0 -2026-05-14 16:42:28 | INFO | src.api.main:lifespan:28 - 调试模式: False -2026-05-14 16:42:28 | INFO | src.api.main:lifespan:31 - 预加载LLM客户端... -2026-05-14 16:42:28 | INFO | src.services.llm.qwen_client:_init_client:59 - Qwen客户端初始化完成: http://6.86.80.4:30080/v1 - qwen3.5-flash -2026-05-14 16:42:28 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: qwen - qwen3.5-flash -2026-05-14 16:42:28 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: qwen -2026-05-14 16:42:29 | INFO | src.services.llm.deepseek_client:_init_client:50 - DeepSeek客户端初始化完成: http://6.86.80.4:30080/v1 - deepseek-v4-flash -2026-05-14 16:42:29 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: deepseek - deepseek-v4-flash -2026-05-14 16:42:29 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: deepseek -2026-05-14 16:42:31 | INFO | src.api.main:lifespan:37 - 应用关闭,执行清理... -2026-05-14 16:42:31 | INFO | src.services.llm.llm_factory:cleanup:226 - 所有LLM客户端已清理 -2026-05-14 16:42:37 | INFO | src.api.main:lifespan:27 - 启动 AI+合规智能中枢 v0.1.0 -2026-05-14 16:42:37 | INFO | src.api.main:lifespan:28 - 调试模式: False -2026-05-14 16:42:37 | INFO | src.api.main:lifespan:31 - 预加载LLM客户端... -2026-05-14 16:42:37 | INFO | src.services.llm.qwen_client:_init_client:59 - Qwen客户端初始化完成: http://6.86.80.4:30080/v1 - qwen3.5-flash -2026-05-14 16:42:37 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: qwen - qwen3.5-flash -2026-05-14 16:42:37 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: qwen -2026-05-14 16:42:38 | INFO | src.services.llm.deepseek_client:_init_client:50 - DeepSeek客户端初始化完成: http://6.86.80.4:30080/v1 - deepseek-v4-flash -2026-05-14 16:42:38 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: deepseek - deepseek-v4-flash -2026-05-14 16:42:38 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: deepseek -2026-05-14 16:43:28 | INFO | src.api.main:lifespan:37 - 应用关闭,执行清理... -2026-05-14 16:43:28 | INFO | src.services.llm.llm_factory:cleanup:226 - 所有LLM客户端已清理 -2026-05-14 16:43:34 | INFO | src.api.main:lifespan:27 - 启动 AI+合规智能中枢 v0.1.0 -2026-05-14 16:43:34 | INFO | src.api.main:lifespan:28 - 调试模式: False -2026-05-14 16:43:34 | INFO | src.api.main:lifespan:31 - 预加载LLM客户端... -2026-05-14 16:43:34 | INFO | src.services.llm.qwen_client:_init_client:59 - Qwen客户端初始化完成: http://6.86.80.4:30080/v1 - qwen3.5-flash -2026-05-14 16:43:34 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: qwen - qwen3.5-flash -2026-05-14 16:43:34 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: qwen -2026-05-14 16:43:34 | INFO | src.services.llm.deepseek_client:_init_client:50 - DeepSeek客户端初始化完成: http://6.86.80.4:30080/v1 - deepseek-v4-flash -2026-05-14 16:43:34 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: deepseek - deepseek-v4-flash -2026-05-14 16:43:34 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: deepseek -2026-05-14 16:43:35 | INFO | src.api.main:lifespan:37 - 应用关闭,执行清理... -2026-05-14 16:43:35 | INFO | src.services.llm.llm_factory:cleanup:226 - 所有LLM客户端已清理 -2026-05-14 16:46:25 | INFO | src.api.main:lifespan:27 - 启动 AI+合规智能中枢 v0.1.0 -2026-05-14 16:46:25 | INFO | src.api.main:lifespan:28 - 调试模式: False -2026-05-14 16:46:25 | INFO | src.api.main:lifespan:31 - 预加载LLM客户端... -2026-05-14 16:46:26 | INFO | src.services.llm.qwen_client:_init_client:59 - Qwen客户端初始化完成: http://6.86.80.4:30080/v1 - qwen3.5-flash -2026-05-14 16:46:26 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: qwen - qwen3.5-flash -2026-05-14 16:46:26 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: qwen -2026-05-14 16:46:27 | INFO | src.services.llm.deepseek_client:_init_client:50 - DeepSeek客户端初始化完成: http://6.86.80.4:30080/v1 - deepseek-v4-flash -2026-05-14 16:46:27 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: deepseek - deepseek-v4-flash -2026-05-14 16:46:27 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: deepseek -2026-05-14 16:46:40 | INFO | src.api.main:lifespan:37 - 应用关闭,执行清理... -2026-05-14 16:46:40 | INFO | src.services.llm.llm_factory:cleanup:226 - 所有LLM客户端已清理 -2026-05-14 16:47:08 | INFO | src.api.main:lifespan:27 - 启动 AI+合规智能中枢 v0.1.0 -2026-05-14 16:47:08 | INFO | src.api.main:lifespan:28 - 调试模式: False -2026-05-14 16:47:08 | INFO | src.api.main:lifespan:31 - 预加载LLM客户端... -2026-05-14 16:47:08 | INFO | src.services.llm.qwen_client:_init_client:59 - Qwen客户端初始化完成: http://6.86.80.4:30080/v1 - qwen3.5-flash -2026-05-14 16:47:08 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: qwen - qwen3.5-flash -2026-05-14 16:47:08 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: qwen -2026-05-14 16:47:08 | INFO | src.services.llm.deepseek_client:_init_client:50 - DeepSeek客户端初始化完成: http://6.86.80.4:30080/v1 - deepseek-v4-flash -2026-05-14 16:47:08 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: deepseek - deepseek-v4-flash -2026-05-14 16:47:08 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: deepseek -2026-05-14 16:57:16 | INFO | src.api.main:lifespan:37 - 应用关闭,执行清理... -2026-05-14 16:57:16 | INFO | src.services.llm.llm_factory:cleanup:226 - 所有LLM客户端已清理 -2026-05-14 16:57:36 | INFO | src.api.main:lifespan:27 - 启动 AI+合规智能中枢 v0.1.0 -2026-05-14 16:57:36 | INFO | src.api.main:lifespan:28 - 调试模式: False -2026-05-14 16:57:36 | INFO | src.api.main:lifespan:31 - 预加载LLM客户端... -2026-05-14 16:57:36 | INFO | src.api.main:lifespan:27 - 启动 AI+合规智能中枢 v0.1.0 -2026-05-14 16:57:36 | INFO | src.api.main:lifespan:28 - 调试模式: False -2026-05-14 16:57:36 | INFO | src.api.main:lifespan:31 - 预加载LLM客户端... -2026-05-14 16:57:36 | INFO | src.services.llm.qwen_client:_init_client:59 - Qwen客户端初始化完成: http://6.86.80.4:30080/v1 - qwen3.5-flash -2026-05-14 16:57:36 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: qwen - qwen3.5-flash -2026-05-14 16:57:36 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: qwen -2026-05-14 16:57:36 | INFO | src.services.llm.qwen_client:_init_client:59 - Qwen客户端初始化完成: http://6.86.80.4:30080/v1 - qwen3.5-flash -2026-05-14 16:57:36 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: qwen - qwen3.5-flash -2026-05-14 16:57:36 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: qwen -2026-05-14 16:57:37 | INFO | src.services.llm.deepseek_client:_init_client:50 - DeepSeek客户端初始化完成: http://6.86.80.4:30080/v1 - deepseek-v4-flash -2026-05-14 16:57:37 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: deepseek - deepseek-v4-flash -2026-05-14 16:57:37 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: deepseek -2026-05-14 16:57:37 | INFO | src.services.llm.deepseek_client:_init_client:50 - DeepSeek客户端初始化完成: http://6.86.80.4:30080/v1 - deepseek-v4-flash -2026-05-14 16:57:37 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: deepseek - deepseek-v4-flash -2026-05-14 16:57:37 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: deepseek -2026-05-14 17:14:37 | INFO | src.api.main:lifespan:37 - 应用关闭,执行清理... -2026-05-14 17:14:37 | INFO | src.services.llm.llm_factory:cleanup:226 - 所有LLM客户端已清理 -2026-05-14 17:14:37 | INFO | src.api.main:lifespan:37 - 应用关闭,执行清理... -2026-05-14 17:14:37 | INFO | src.services.llm.llm_factory:cleanup:226 - 所有LLM客户端已清理 -2026-05-14 17:14:53 | INFO | src.api.main:lifespan:27 - 启动 AI+合规智能中枢 v0.1.0 -2026-05-14 17:14:53 | INFO | src.api.main:lifespan:28 - 调试模式: False -2026-05-14 17:14:53 | INFO | src.api.main:lifespan:31 - 预加载LLM客户端... -2026-05-14 17:14:54 | INFO | src.services.llm.qwen_client:_init_client:59 - Qwen客户端初始化完成: http://6.86.80.4:30080/v1 - qwen3.5-flash -2026-05-14 17:14:54 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: qwen - qwen3.5-flash -2026-05-14 17:14:54 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: qwen -2026-05-14 17:14:54 | INFO | src.services.llm.deepseek_client:_init_client:50 - DeepSeek客户端初始化完成: http://6.86.80.4:30080/v1 - deepseek-v4-flash -2026-05-14 17:14:54 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: deepseek - deepseek-v4-flash -2026-05-14 17:14:54 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: deepseek -2026-05-14 17:16:10 | INFO | src.api.main:lifespan:37 - 应用关闭,执行清理... -2026-05-14 17:16:10 | INFO | src.services.llm.llm_factory:cleanup:226 - 所有LLM客户端已清理 -2026-05-14 17:16:21 | INFO | src.api.main:lifespan:27 - 启动 AI+合规智能中枢 v0.1.0 -2026-05-14 17:16:21 | INFO | src.api.main:lifespan:28 - 调试模式: False -2026-05-14 17:16:21 | INFO | src.api.main:lifespan:31 - 预加载LLM客户端... -2026-05-14 17:16:22 | INFO | src.services.llm.qwen_client:_init_client:59 - Qwen客户端初始化完成: http://6.86.80.4:30080/v1 - qwen3.5-flash -2026-05-14 17:16:22 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: qwen - qwen3.5-flash -2026-05-14 17:16:22 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: qwen -2026-05-14 17:16:22 | INFO | src.services.llm.deepseek_client:_init_client:50 - DeepSeek客户端初始化完成: http://6.86.80.4:30080/v1 - deepseek-v4-flash -2026-05-14 17:16:22 | INFO | src.services.llm.llm_factory:create:113 - LLM客户端创建成功并缓存: deepseek - deepseek-v4-flash -2026-05-14 17:16:22 | SUCCESS | src.services.llm.llm_factory:preload_clients:201 - 预加载LLM客户端成功: deepseek -2026-05-14 17:17:07 | INFO | src.api.main:lifespan:37 - 应用关闭,执行清理... -2026-05-14 17:17:07 | INFO | src.services.llm.llm_factory:cleanup:226 - 所有LLM客户端已清理 -2026-05-14 17:19:47 | INFO | app.api.main:lifespan:22 - 启动 AI+合规智能中枢 v0.1.0 -2026-05-14 17:19:47 | INFO | app.api.main:lifespan:23 - 调试模式: False -2026-05-14 17:19:47 | INFO | app.api.main:lifespan:24 - 预加载LLM客户端... -2026-05-14 17:19:48 | INFO | app.services.llm.qwen_client:_init_client:58 - Qwen客户端初始化完成: http://6.86.80.4:30080/v1 - qwen3.5-flash -2026-05-14 17:19:48 | INFO | app.services.llm.llm_factory:create:112 - LLM客户端创建成功并缓存: qwen - qwen3.5-flash -2026-05-14 17:19:48 | SUCCESS | app.services.llm.llm_factory:preload_clients:200 - 预加载LLM客户端成功: qwen -2026-05-14 17:19:49 | INFO | app.services.llm.deepseek_client:_init_client:49 - DeepSeek客户端初始化完成: http://6.86.80.4:30080/v1 - deepseek-v4-flash -2026-05-14 17:19:49 | INFO | app.services.llm.llm_factory:create:112 - LLM客户端创建成功并缓存: deepseek - deepseek-v4-flash -2026-05-14 17:19:49 | SUCCESS | app.services.llm.llm_factory:preload_clients:200 - 预加载LLM客户端成功: deepseek