nbrag retrieval single-script run 2026-06-20T15:01:41
script_count: 14

====================================================================================================
SCRIPT: 01_nbrag_help.py
====================================================================================================
调用函数: nbrag_help
----------------------------------------------------------------------
nbrag help: Agentic RAG knowledge-base MCP workflow

Common guidance:
- Unknown collection_name? call nbrag_stats.
- Most knowledge / usage / evidence questions: usually start with nbrag_search_and_fetch.
- Need retrieval controls or strategy isolation: use nbrag_search / nbrag_search_only_bm25 / nbrag_search_only_vector.
- Exact wording / article number / API name / constant: use nbrag_grep.
- Python .py exact symbol body: use nbrag_find_definition.
- Need exact full file_path first: use nbrag_find_files.

Path rules:
- file_path and filter_file_path must be full absolute paths returned by nbrag tools.
- Use the actual exposed tool name from the host; other frameworks may add prefixes.

See the embedded workflow guide below for detailed strategy selection, multi-round retrieval, and follow-up patterns.

Embedded nbrag workflow guide:
﻿---
name: nbrag-workflow
version: "1.2.0"
description: >-
  用于回答基于已准备好的 nbrag 知识库的问题，尤其是在用户提到知识库检索、搜索已导入内容、查询某个项目/框架/文档怎么用、查源码定义、查条文、查手册、查资料时。
  适用于代码、文档、说明书、业务资料、规范、教程以及其他任意已入库文本，不要把它局限为某几个固定领域。
---

# nbrag 知识库检索工作流

nbrag 提供 10+ 个 MCP 检索工具 + `nbrag_help` 导航工具，核心分三类：**发现 → 检索 → 深入**。

> **注意**：本文档中的函数名是 nbrag MCP 自身的函数名。当 nbrag 被接入其他 Agent 框架时，
> 实际暴露的 function 名称可能带前缀（例如 `xxx_nbrag_search` 或 `mcp__xxx__nbrag_search`），AI 应以实际接收到的 function 名称为准。

## 快速决策：用哪个工具？

**核心原则：多数知识/用法/证据类问题可以先用 `nbrag_search_and_fetch`，但不要机械套流程；根据用户目标和返回内容决定是否继续调用其他工具。**

如果没有加载本 Skill 或不确定下一步，先调用 `nbrag_help` 获取 MCP 内置的简短组合拳指南。

| 用户问的是什么 | 工具 | 备注 |
|---|---|---|
| 不确定该用哪个 nbrag 工具 | `nbrag_help` | 无参数，返回简短 workflow |
| 知识/用法/示例问题（"试用期合法吗" / "设备报警码E42" / "create_agent怎么用"） | **`nbrag_search_and_fetch`** | 默认首选，一步到位 |
| 需要精细控制（禁用 BM25/rerank、只要 metadata、调整召回数量） | `nbrag_search` | 仅高级场景 |
| 想单独观察词法召回是否有效（术语、条文号、缩写、关键词组合） | `nbrag_search_only_bm25` | 纯 BM25，无向量、无 rerank |
| 想单独观察语义召回是否有效（自然语言意图、概念问法） | `nbrag_search_only_vector` | 纯向量，无 BM25、无 rerank |
| 精确字符串/术语/条文编号（"第一千零七十七条" / "ThreadPool"） | `nbrag_grep` | 逐行字面文本 / 正则匹配，返回上下文。⚠️ 只匹配原文中实际出现的 wording，不支持概念理解（'空城计'搜不到原文中的'焚香操琴'） |
| Python 精确符号名（"UserService 在哪定义"） | `nbrag_find_definition` | Python .py 专用增强；非 Python 内容用 `nbrag_grep` |
| 已知文件名或路径片段，需要完整路径 | `nbrag_find_files` | 返回可用于 `file_path` / `filter_file_path` 的完整绝对路径 |

**搜索上限**：10 轮不同策略和关键词都没找到 → 告知用户"知识库中可能没有相关内容"，不要无限重试。

## 文件类型与功能支持

| 内容类型 | `nbrag_search` | `nbrag_grep` | `nbrag_find_definition` | AST scope |
|---|---|---|---|---|
| `.md` / `.txt` / `.html` 等文档 | ✅ | ✅ | 不适合，改用 `nbrag_grep` | ❌ |
| `.py` 源码 | ✅ | ✅ | ✅ AST 精确解析 | ✅ |

## Python source workflow / Python 源码检索

Python 源码检索是 nbrag 的首要场景之一，但不应只依赖单一工具。对 `.py` 文件，chunk 会包含文件路径、行号范围、AST scope 和 signature metadata，方便 AI 先发现方向，再精确读取定义和源码上下文。

推荐组合：

1. `nbrag_search_and_fetch` — 找概念、示例、调用关系方向，并自动读取命中文件原文。
2. `nbrag_grep` — 查精确 class/function 名、import、常量、decorator、错误字符串、配置 key。
3. `nbrag_find_definition` — 仅对 Python `.py` 文件，读取完整 class/function/method 定义。
4. `nbrag_get_raw_file` — 用完整绝对 `file_path` 读取更大的源码上下文。

非 Python 文档、法律、手册不要套用符号定义工具；查条文、标题、术语、编号时继续优先 `nbrag_search_and_fetch` + `nbrag_grep`。

## 检索策略

### 策略 A（默认首选）：一站式检索

```
nbrag_search_and_fetch(query="...", collection_name="xxx")
```

- 语义搜索 + 自动抓取匹配文件的原文，**一次调用获得完整上下文，避免碎片化 chunk**
- 小文件抓全文，大文件抓匹配位置附近 N 行（默认 ±100 行）
- `fetch_top_n_raw=3` 控制抓几个文件原文（设 0 跳过抓取）
- 同一文件多次命中只抓一次（合并行范围）
- 结果包含 `Ranked search results` 和 `Auto-fetched original content` 两段，分别展示搜索排名和自动抓取原文
- 支持 `filter_file_path` 用搜索结果里的完整绝对 `file_path` 精确限定文件

### 策略 B：精细搜索

```
nbrag_search(query="...", collection_name="xxx", top_k=5)
```

- Vector + BM25 → RRF 融合 → Rerank 精排
- 可选：`use_bm25=False`、`use_rerank=False`、`include_content=False`、`preview_chars=1200`、`filter_file_path="D:/docs/labor_law/劳动合同法.md"`（必须是完整绝对路径）
- 返回 chunk preview，可能被截断（加 `...`）
- 关键字段：`chunk:X/Y`、`chunk_index:X`、`total_chunks:Y`、`line:N-M`、`scope`（仅 Python）、`doc_id`、`file_path`、`dist`
- **大多数场景用策略 A 就够了，策略 B 仅用于需要精细控制的场景**

### 策略 C：单策略诊断（隔离某一层召回）

```python
nbrag_search_only_bm25(query="违法约定试用期赔偿金", collection_name="xxx")
nbrag_search_only_vector(query="试用期被辞退有赔偿吗", collection_name="xxx")
```

- `nbrag_search_only_bm25`：固定 BM25-only，无向量、无 rerank
- `nbrag_search_only_vector`：固定 vector-only，无 BM25、无 rerank
- 适合回答“这次命中是不是 BM25 的功劳”或“embedding 语义召回到底抓到了什么”
- 不建议把这两个工具当默认入口；默认入口仍然通常是 `nbrag_search_and_fetch`
- 如果只需要正常混合检索但又要关某个开关，优先用 `nbrag_search`

### 策略 D：精确匹配（仅限逐字字符串，不支持概念）

```
nbrag_grep(keyword="第十九条", collection_name="xxx")
```

- 在已存储的原始文本中进行逐行字面文本 / 正则匹配（re.search），不是语义搜索
- ⚠️ 只匹配原文中实际出现的 wording；如果传的是合法 regex，则按 regex 规则匹配
- 概念性提问（如"空城计"）很可能搜不到，尤其当原文只写了具体描写而没写这个概括词；这种情况改用 `nbrag_search_and_fetch`
- 匹配是按行进行的，跨行短语可能无法按预期命中
- `context_lines=10` 控制上下文（默认 10，匹配行前后各 N 行）
- 可选 `case_sensitive=True`、`filter_file_path="D:/docs/labor_law/劳动合同法.md"`（必须是完整绝对路径）
- `>>>` 标记匹配行

### 策略 E：Python 符号定义（源码专用增强）

```
nbrag_find_definition(symbol="get_by_id", collection_name="xxx")
```

- Python：AST 精确解析，返回 class/function 完整定义 + 方法签名列表
- 非 Python 内容不要优先用它；查条文、标题、术语、错误码请用 `nbrag_grep`
- `max_results=3`（默认）。公共符号可先设 `max_results=1`，需要候选对比时再加大

## 深入：获取更多上下文

| 工具 | 场景 | 关键参数 |
|------|------|---------|
| `nbrag_find_files` | 根据文件名/路径片段找到完整路径 | `pattern`, `case_sensitive=False` |
| `nbrag_get_raw_file` | 看完整文件（无 overlap） | 完整绝对 `file_path`, `line_start`, `line_end` |
| `nbrag_get_adjacent_chunks` | 扩展搜索结果的上下文 | `doc_id`, `chunk_index`, `window=3` |
| `nbrag_get_chunks_by_lines` | 按行号取 chunk | `doc_id`, `line_start`, `line_end` |
| `nbrag_get_file_chunks` | 分页浏览（有 scope） | 完整绝对 `file_path`, `start_chunk=0`, `max_chunks=10` |

**路径规则**：所有需要 `file_path` / `filter_file_path` 的工具，都必须传搜索结果、`nbrag_find_files` 或 `nbrag_list` 返回的完整绝对路径。不要传 `劳动合同法.md`、`core.py`、`src/core.py` 这类短路径或相对路径。

## 常见调用路径（不是固定流程）

```
不知道 collection_name → nbrag_stats()
知识/用法/证据问题 → 通常先 nbrag_search_and_fetch()
需要精细控制/只要 metadata → nbrag_search()
需要精确词、条文号、标题、错误码 → nbrag_grep()
只有文件名/路径片段 → nbrag_find_files() 换成完整 file_path
需要引用原文或扩大上下文 → nbrag_get_raw_file() / nbrag_get_adjacent_chunks()
Python .py 精确符号定义 → nbrag_find_definition()
```

不要为了走完流程而调用工具；如果当前返回已经足够回答，就停止检索并作答。

## 多轮检索策略

**核心原则**：可以改写，但应改写成更聚焦、更可检索的自然语言短查询；不要机械改写成大量空格分隔的关键词串。

优先保留用户问题中的核心对象、约束、条件和专业术语。只有在查条文号、标题、错误码、类名、函数名等精确目标时，才适合使用更短的关键词查询，或改用 `nbrag_grep`。

**示例**：用户问 "公司让我试用期干了5个月不转正，签的1年合同，合法吗？"
- 第1轮: `nbrag_search_and_fetch("1年劳动合同试用期期限上限")` → 找到试用期上限
- 第2轮: `nbrag_search_and_fetch("违法约定试用期赔偿金")` → 找到赔偿标准
- 如需精确原文，可分别尝试 `nbrag_grep("第十九条")`、`nbrag_grep("第八十三条")`；是否继续取决于前两轮证据是否已经足够

搜索不理想时的策略：缩短问题 → 更换术语 → 提取少量关键约束 → 换工具（语义→grep）→ 用 `nbrag_find_files` 找完整路径后缩小文件范围 → 跨 collection

## 常见问题速查

| 症状 | 原因 | 解决 |
|------|------|------|
| collection 不存在 | 知识库未准备好或名称错误 | `nbrag_stats()` 确认名称 |
| 搜索返回空 | 无匹配、关键词不合适、或 collection 名称不对 | 换关键词 / 用 `nbrag_stats` 确认知识库名 |
| `nbrag_grep` / `nbrag_find_definition` 无结果 | 没有精确匹配（grep 只搜字面串），或该内容不适合该工具 | 换关键词 / 如果是概念性提问改用 `nbrag_search_and_fetch` / 确认原文确实使用了该词汇 |
| 想查 .md/.txt 条文、标题、术语却用了 `nbrag_find_definition` | 该工具是 Python 源码专用增强 | 改用 `nbrag_grep` |

**详细错误信息**：各工具的报错信息在 MCP 工具描述中已注明，AI 应根据返回的错误信息判断原因。

## 可选只读管理工具

- `nbrag_list` — 除非用户明确要求列出文档

[exit_code] 0

====================================================================================================
SCRIPT: 02_nbrag_stats.py
====================================================================================================
调用函数: nbrag_stats
----------------------------------------------------------------------
collections:

- finance_reports: docs=2 chunks=145
  display_name: 金融报告知识库
  description: 包含金融、理财或投资报告类文本，适合查询报告观点、投资主题、资产配置、市场分析等内容。
  aliases: 金融报告, 理财, 财报, 投资, 资产配置
  tags: 金融, 投资, 报告
- civil_code: docs=8 chunks=181
  display_name: 民法典知识库
  description: 包含《中华人民共和国民法典》全文及各分编章节，适合查询民事法律条文、合同、物权、人格权、婚姻家庭、继承、侵权责任等问题。
  aliases: 民法典, 中华人民共和国民法典, 合同编, 物权编, 人格权编, 婚姻家庭编, 继承编, 侵权责任编
  tags: 法律, 民法, 法规
- langchain_ai_codes_and_docs: docs=4818 chunks=38123
  display_name: LangChain 源码与文档知识库
  description: 包含 LangChain / LangGraph / langchain-ai 相关源码与文档，适合查询 agent、runnable、工具调用、记忆、图工作流和 API 用法。
  aliases: LangChain, LangGraph, langchain-ai, AI agent, Runnable, create_react_agent, create_deep_agent
  tags: Python, AI, 源码, 文档
- sanguo: docs=120 chunks=575
  display_name: 三国演义知识库
  description: 包含《三国演义》章节正文，适合查询刘备、关羽、张飞、曹操、诸葛亮、孙权等人物与经典情节。
  aliases: 三国, 三国演义, 罗贯中, 刘备, 关羽, 张飞, 曹操, 诸葛亮, 孙权
  tags: 古典小说, 文学, 人物关系
- worker_rights: docs=18 chunks=111
  display_name: 劳动者权益知识库
  description: 包含劳动者权益、劳动合同、试用期、工资、社保、工伤、加班等劳动法律和政策资料，适合查询劳动争议和员工权益问题。
  aliases: 劳动法, 劳动合同法, 劳动者权益, 试用期, 工资, 社保, 工伤, 加班
  tags: 法律, 劳动, 权益
- marriage_law: docs=5 chunks=27
  display_name: 婚姻家庭法知识库
  description: 包含婚姻家庭相关法律和司法解释文本，适合查询离婚、夫妻共同财产、子女抚养、婚姻家庭编解释等问题。
  aliases: 婚姻法, 婚姻家庭法, 民法典婚姻家庭编, 夫妻共同财产, 离婚, 抚养
  tags: 法律, 婚姻家庭, 司法解释
- funboost: docs=960 chunks=4424
  display_name: funboost 源码与文档知识库
  description: 包含 funboost 项目源码和文档，适合查询函数调度、消息队列、broker、BoosterParams、发布消费、重试等实现细节。
  aliases: funboost, 分布式函数调度, Python 队列, BrokerEnum, BoosterParams
  tags: Python, 源码, 消息队列

[exit_code] 0

====================================================================================================
SCRIPT: 03_nbrag_list.py
====================================================================================================
调用函数: nbrag_list
入参: {'collection_name': 'worker_rights', 'limit': 5, 'offset': 0}
----------------------------------------------------------------------
documents returned: 5 | offset: 0 | limit: 5

doc_id: 08a28ebff4a8 | filename: 工资支付暂行规定.md | chunk_count: 2 | total_chunks: 2
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/工资支付暂行规定.md

doc_id: 0ea13b81685c | filename: 劳动保障监察条例.md | chunk_count: 6 | total_chunks: 6
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动保障监察条例.md

doc_id: 10417f5e9bff | filename: 专项附加扣除暂行办法.md | chunk_count: 3 | total_chunks: 3
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/专项附加扣除暂行办法.md

doc_id: 25f819da00a1 | filename: 带薪年休假条例.md | chunk_count: 1 | total_chunks: 1
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/带薪年休假条例.md

doc_id: 27643403b0c5 | filename: 带薪年休假实施办法.md | chunk_count: 2 | total_chunks: 2
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/带薪年休假实施办法.md


[exit_code] 0

====================================================================================================
SCRIPT: 04_nbrag_search.py
====================================================================================================
调用函数: nbrag_search
入参: {'query': '1年劳动合同试用期期限上限', 'collection_name': 'worker_rights', 'top_k': 3, 'use_rerank': True, 'use_bm25': True, 'filter_file_path': '', 'include_content': True, 'preview_chars': 700}
----------------------------------------------------------------------
[worker_rights] 111 chunks | bm25: on | rerank: BAAI/bge-reranker-v2-m3

[1/3] 劳动合同法.md chunk:2/13 chunk_index:2 total_chunks:13 line:45-65 doc_id:81ec846f7c63 dist:0.2864 score:0.8902
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 45-65]
第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。

第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。

第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。

第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。

第二十二条 用人单位为劳动者提供专项培训费用，对其进行专业技术培训的，可以与该劳动者订立协议，约定服务期。劳动者违反服务期约定的，应当按照约定向用人单位支付违约金。违约金的数额不得超过用人单位提供的培训费用。用人单位要求劳动者支付的违约金不得超过服务期尚未履行部分所应分摊的...

[2/3] 劳动法.md chunk:1/8 chunk_index:1 total_chunks:8 line:42-74 doc_id:2db295f90839 dist:0.4005 score:0.8400
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动法.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动法.md] [Lines: 42-74]
## 第三章 劳动合同和集体合同

第十六条 劳动合同是劳动者与用人单位确立劳动关系、明确双方权利和义务的协议。建立劳动关系应当订立劳动合同。

第十七条 订立和变更劳动合同，应当遵循平等自愿、协商一致的原则，不得违反法律、行政法规的规定。劳动合同依法订立即具有法律约束力，当事人必须履行劳动合同规定的义务。

第十八条 下列劳动合同无效：（一）违反法律、行政法规的劳动合同；（二）采取欺诈、威胁等手段订立的劳动合同。无效的劳动合同，从订立的时候起，就没有法律约束力。确认劳动合同部分无效的，如果不影响其余部分的效力，其余部分仍然有效。劳动合同的无效，由劳动争议仲裁委员会或者人民法院确认。

第十九条 劳动合同应当以书面形式订立，并具备以下条款：（一）劳动合同期限；（二）工作内容；（三）劳动保护和劳动条件；（四）劳动报酬；（五）劳动纪律；（六）劳动合同终止的条件；（七）违反劳动合同的责任。劳动合同除前款规定的必备条款外，当事人可以协商约定其他内容。

第二十条 劳动合同的期限分为有固定期限、无固定期限和以完成一定的工作为期限。劳动者在同一用人单位连续工作满十年以上，当事人双方同意续延劳动合同的，如果劳动者提出订立无固定期限的劳动合同，应当订立无固定期限的劳动合同。

第二十一条 劳动合同可以约定试用期。试用期最长不得超过六个月。

第二十二条 劳动合同当事人可以在劳动合同中约定保守用人单位商业秘密的有关事项。

第二十三条 劳...

[3/3] 劳动合同法实施条例.md chunk:2/6 chunk_index:2 total_chunks:6 line:43-47 doc_id:fa8c6ff3a095 dist:0.2952 score:0.5633
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法实施条例.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法实施条例.md] [Lines: 43-47]
第十五条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资的80%或者不得低于劳动合同约定工资的80%，并不得低于用人单位所在地的最低工资标准。

第十六条 劳动合同法第二十二条第二款规定的培训费用，包括用人单位为了对劳动者进行专业技术培训而支付的有凭证的培训费用、培训期间的差旅费用以及因培训产生的用于该劳动者的其他直接费用。

第十七条 劳动合同期满，但是用人单位与劳动者依照劳动合同法第二十二条的规定约定的服务期尚未到期的，劳动合同应当续延至服务期满；双方另有约定的，从其约定。


[exit_code] 0

====================================================================================================
SCRIPT: 05_nbrag_search_only_bm25.py
====================================================================================================
调用函数: nbrag_search_only_bm25
入参: {'query': '试用期', 'collection_name': 'worker_rights', 'top_k': 3, 'filter_file_path': '', 'include_content': True, 'preview_chars': 500}
----------------------------------------------------------------------
[worker_rights] 111 chunks | bm25: on | rerank: off

[1/3] 劳动合同法实施条例.md chunk:2/6 chunk_index:2 total_chunks:6 line:43-47 doc_id:fa8c6ff3a095 dist:0.3555
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法实施条例.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法实施条例.md] [Lines: 43-47]
第十五条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资的80%或者不得低于劳动合同约定工资的80%，并不得低于用人单位所在地的最低工资标准。

第十六条 劳动合同法第二十二条第二款规定的培训费用，包括用人单位为了对劳动者进行专业技术培训而支付的有凭证的培训费用、培训期间的差旅费用以及因培训产生的用于该劳动者的其他直接费用。

第十七条 劳动合同期满，但是用人单位与劳动者依照劳动合同法第二十二条的规定约定的服务期尚未到期的，劳动合同应当续延至服务期满；双方另有约定的，从其约定。

[2/3] 劳动合同法.md chunk:2/13 chunk_index:2 total_chunks:13 line:45-65 doc_id:81ec846f7c63 dist:0.3669
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 45-65]
第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。

第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。

第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。

第二十一条 在试用期中，除劳动者有本法第三十...

[3/3] 劳动合同法.md chunk:10/13 chunk_index:10 total_chunks:13 line:191-215 doc_id:81ec846f7c63 dist:0.4793
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 191-215]
## 第七章 法律责任

第八十条 用人单位直接涉及劳动者切身利益的规章制度违反法律、法规规定的，由劳动行政部门责令改正，给予警告；给劳动者造成损害的，应当承担赔偿责任。

第八十一条 用人单位提供的劳动合同文本未载明本法规定的劳动合同必备条款或者用人单位未将劳动合同文本交付劳动者的，由劳动行政部门责令改正；给劳动者造成损害的，应当承担赔偿责任。

第八十二条 用人单位自用工之日起超过一个月不满一年未与劳动者订立书面劳动合同的，应当向劳动者每月支付二倍的工资。用人单位违反本法规定不与劳动者订立无固定期限劳动合同的，自应当订立无固定期限劳动合同之日起向劳动者每月支付二倍的工资。

第八十三条 用人单位违反本法规定与劳动者约定试用期的，由劳动行政部门责令改正；违法约定的试用期已经履行的，由用人单位以劳动者试用期满月工资为标准，按已经履行的超过法定试用期的期间向劳动者支付赔偿金。

第八十四条 用人单位违反本法规定，扣押劳动者...


[exit_code] 0

====================================================================================================
SCRIPT: 06_nbrag_search_only_vector.py
====================================================================================================
调用函数: nbrag_search_only_vector
入参: {'query': '1年劳动合同试用期最长能约定几个月', 'collection_name': 'worker_rights', 'top_k': 3, 'filter_file_path': '', 'include_content': True, 'preview_chars': 500}
----------------------------------------------------------------------
[worker_rights] 111 chunks | bm25: off | rerank: off

[1/3] 劳动合同法.md chunk:2/13 chunk_index:2 total_chunks:13 line:45-65 doc_id:81ec846f7c63 dist:0.2704
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 45-65]
第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。

第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。

第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。

第二十一条 在试用期中，除劳动者有本法第三十...

[2/3] 劳动合同法实施条例.md chunk:2/6 chunk_index:2 total_chunks:6 line:43-47 doc_id:fa8c6ff3a095 dist:0.3103
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法实施条例.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法实施条例.md] [Lines: 43-47]
第十五条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资的80%或者不得低于劳动合同约定工资的80%，并不得低于用人单位所在地的最低工资标准。

第十六条 劳动合同法第二十二条第二款规定的培训费用，包括用人单位为了对劳动者进行专业技术培训而支付的有凭证的培训费用、培训期间的差旅费用以及因培训产生的用于该劳动者的其他直接费用。

第十七条 劳动合同期满，但是用人单位与劳动者依照劳动合同法第二十二条的规定约定的服务期尚未到期的，劳动合同应当续延至服务期满；双方另有约定的，从其约定。

[3/3] 劳动合同法实施条例.md chunk:1/6 chunk_index:1 total_chunks:6 line:19-45 doc_id:fa8c6ff3a095 dist:0.3601
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法实施条例.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法实施条例.md] [Lines: 19-45]
## 第二章 劳动合同的订立

第四条 劳动合同法规定的用人单位设立的分支机构，依法取得营业执照或者登记证书的，可以作为用人单位与劳动者订立劳动合同；未依法取得营业执照或者登记证书的，受用人单位委托可以与劳动者订立劳动合同。

第五条 自用工之日起一个月内，经用人单位书面通知后，劳动者不与用人单位订立书面劳动合同的，用人单位应当书面通知劳动者终止劳动关系，无需向劳动者支付经济补偿，但是应当依法向劳动者支付其实际工作时间的劳动报酬。

第六条 用人单位自用工之日起超过一个月不满一年未与劳动者订立书面劳动合同的，应当依照劳动合同法第八十二条的规定向劳动者每月支付两倍的工资，并与劳动者补订书面劳动合同；劳动者不与用人单位订立书面劳动合同的，用人单位应当书面通知劳动者终止劳动关系，并依照劳动合同法第四十七条的规定支付经济补偿。前款规定的用人单位向劳动者每月支付两倍工资的起算时间为用工之日起满一个月的次日，截止时间为补订书面劳...


[exit_code] 0

====================================================================================================
SCRIPT: 07_nbrag_search_and_fetch.py
====================================================================================================
调用函数: nbrag_search_and_fetch
入参: {'query': '1年劳动合同试用期期限上限', 'collection_name': 'worker_rights', 'top_k': 3, 'fetch_top_n_raw': 1, 'context_lines': 20, 'filter_file_path': ''}
----------------------------------------------------------------------
[worker_rights] 111 chunks | bm25: on | rerank: BAAI/bge-reranker-v2-m3

Ranked search results:

[1/3] 劳动合同法.md chunk:2/13 chunk_index:2 total_chunks:13 line:45-65 doc_id:81ec846f7c63 dist:0.2864 score:0.8902
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 45-65]
第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。

第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。

第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。

第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。

第二十二条 用人单位为劳动者提供专项培训费用，对其进行专业技术培训的，可以与该劳动者订立协议，约定服务期。劳动者违反服务期约定的，应当按照约定向用人单位支付违约金。违约金的数额不得超过用人单位提供的培训费用。用人单位要求劳动者支付的违约金不得超过服务期尚未履行部分所应分摊的培训费用。用人单位与劳动者约定服务期的，不影响按照正常的工资调整机制提高劳动者在服务期期间的劳动报酬。

第二十三条 用人单位与劳动者可以在劳动合同中约定保守用人单位的商业秘密和与知识产权相关的保密事项。对负有保密义务的劳动者，用人单位可以在劳动合同或者保密协议中与劳动者约定竞业限制条款，并约定在解除或者终止劳动合同后，在竞业限制期限内按月给予劳动者经济补偿。劳动者违反竞业限制约定的，应当按照约定向用人单位支付违约金。

第二十四条 竞业限制的人员限于用人单位的高级管理人员、高级技术人员和其他负有保密义务的人员。竞业限制的范围、地域、期限由用人单位与劳动者约定，竞业限制的约定不得违反法律、法规的规定。在解除或者终止劳动合同后，前款规定的人员到与本单位生产或者经营同类产品、从事同类业务的有竞争关系的其他用人单位，或者自己开业生产或者经营同类产品、从事同类业务的竞业限制期限，不得超过二年。

第二十五条 除本法第二十二条和第二十三条规定的情形外，用人单位不得与劳动者约定由劳动者承担违约金。

第二十六条 下列劳动合同无效或者部分无效:（一）以欺诈、胁迫的手段或者乘人之危，使对方在违背真实意思的情况下订立或者变更劳动合同的；（二）用人单位免除自己的法定责任、排除劳动者权利的；（三）违反法律、行政法规强制性规定的。对劳动合同的无效或者部分无效有争议的，由劳动争议仲裁机构或者人民法院确认。

第二十七条 劳动合同部分无效，不影响其他部分效力的，其他部分仍然有效。

第二十八条 劳动合同被确认无效，劳动者已付出劳动的，用人单位应当向劳动者支付劳动报酬。劳动报酬的数额，参照本单位相同或者相近岗位劳动者的劳动报酬确定。

[2/3] 劳动法.md chunk:1/8 chunk_index:1 total_chunks:8 line:42-74 doc_id:2db295f90839 dist:0.4005 score:0.8400
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动法.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动法.md] [Lines: 42-74]
## 第三章 劳动合同和集体合同

第十六条 劳动合同是劳动者与用人单位确立劳动关系、明确双方权利和义务的协议。建立劳动关系应当订立劳动合同。

第十七条 订立和变更劳动合同，应当遵循平等自愿、协商一致的原则，不得违反法律、行政法规的规定。劳动合同依法订立即具有法律约束力，当事人必须履行劳动合同规定的义务。

第十八条 下列劳动合同无效：（一）违反法律、行政法规的劳动合同；（二）采取欺诈、威胁等手段订立的劳动合同。无效的劳动合同，从订立的时候起，就没有法律约束力。确认劳动合同部分无效的，如果不影响其余部分的效力，其余部分仍然有效。劳动合同的无效，由劳动争议仲裁委员会或者人民法院确认。

第十九条 劳动合同应当以书面形式订立，并具备以下条款：（一）劳动合同期限；（二）工作内容；（三）劳动保护和劳动条件；（四）劳动报酬；（五）劳动纪律；（六）劳动合同终止的条件；（七）违反劳动合同的责任。劳动合同除前款规定的必备条款外，当事人可以协商约定其他内容。

第二十条 劳动合同的期限分为有固定期限、无固定期限和以完成一定的工作为期限。劳动者在同一用人单位连续工作满十年以上，当事人双方同意续延劳动合同的，如果劳动者提出订立无固定期限的劳动合同，应当订立无固定期限的劳动合同。

第二十一条 劳动合同可以约定试用期。试用期最长不得超过六个月。

第二十二条 劳动合同当事人可以在劳动合同中约定保守用人单位商业秘密的有关事项。

第二十三条 劳动合同期满或者当事人约定的劳动合同终止条件出现，劳动合同即行终止。

第二十四条 经劳动合同当事人协商一致，劳动合同可以解除。

第二十五条 劳动者有下列情形之一的，用人单位可以解除劳动合同：（一）在试用期间被证明不符合录用条件的；（二）严重违反劳动纪律或者用人单位规章制度的；（三）严重失职，营私舞弊，对用人单位利益造成重大损害的；（四）被依法追究刑事责任的。

第二十六条 有下列情形之一的，用人单位可以解除劳动合同，但是应当提前三十日以书面形式通知劳动者本人：（一）劳动者患病或者非因工负伤，医疗期满后，不能从事原工作也不能从事由用人单位另行安排的工作的；（二）劳动者不能胜任工作，经过培训或者调整工作岗位，仍不能胜任工作的；（三）劳动合同订立时所依据的客观情况发生重大变化，致使原劳动合同无法履行，经当事人协商不能就变更劳动合同达成协议的。

第二十七条 用人单位濒临破产进行法定整顿期间或者生产经营状况发生严重困难，确需裁减人员的，应当提前三十日向工会或者全体职工说明情况，听取工会或者职工的意见，经向劳动行政部门报告后，可以裁减人员。用人单位依据本条规定裁减人员，在六个月内录用人员的，应当优先录用被裁减的人员。

第二十八条 用人单位依据本法第二十四条、第二十六条、第二十七条的规定解除劳动合同的，应当依照国家有关规定给予经济补偿。

第二十九条 劳动者有下列情形之一的，用人单位不得依据本法第二十六条、第二十七条的规定解除劳动合同：（一）患职业病或者因工负伤并被确认丧失或者部分丧失劳动能力的；（二）患病或者负伤，在规定的医疗期内的；（三）女职工在孕期、产期、哺乳期内的；（四）法律、行政法规规定的其他情形。

第三十条 用人单位解除劳动合同，工会认为不适当的，有权提出意见。如果用人单位违反法律、法规或者劳动合同，工会有权要求重新处理；劳动者申请仲裁或者提起诉讼的，工会应当依法给予支持和帮助。

第三十一条 劳动者解除劳动合同，应当提前三十日以书面形式通知用人单位。

[3/3] 劳动合同法实施条例.md chunk:2/6 chunk_index:2 total_chunks:6 line:43-47 doc_id:fa8c6ff3a095 dist:0.2952 score:0.5633
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法实施条例.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法实施条例.md] [Lines: 43-47]
第十五条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资的80%或者不得低于劳动合同约定工资的80%，并不得低于用人单位所在地的最低工资标准。

第十六条 劳动合同法第二十二条第二款规定的培训费用，包括用人单位为了对劳动者进行专业技术培训而支付的有凭证的培训费用、培训期间的差旅费用以及因培训产生的用于该劳动者的其他直接费用。

第十七条 劳动合同期满，但是用人单位与劳动者依照劳动合同法第二十二条的规定约定的服务期尚未到期的，劳动合同应当续延至服务期满；双方另有约定的，从其约定。

Auto-fetched original content (1 file(s)):

original_file: 劳动合同法.md | file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md | doc_id: 81ec846f7c63 | range: line:25-85
第八条 用人单位招用劳动者时，应当如实告知劳动者工作内容、工作条件、工作地点、职业危害、安全生产状况、劳动报酬，以及劳动者要求了解的其他情况；用人单位有权了解劳动者与劳动合同直接相关的基本情况，劳动者应当如实说明。

第九条 用人单位招用劳动者，不得扣押劳动者的居民身份证和其他证件，不得要求劳动者提供担保或者以其他名义向劳动者收取财物。

第十条 建立劳动关系，应当订立书面劳动合同。已建立劳动关系，未同时订立书面劳动合同的，应当自用工之日起一个月内订立书面劳动合同。用人单位与劳动者在用工前订立劳动合同的，劳动关系自用工之日起建立。

第十一条 用人单位未在用工的同时订立书面劳动合同，与劳动者约定的劳动报酬不明确的，新招用的劳动者的劳动报酬按照集体合同规定的标准执行；没有集体合同或者集体合同未规定的，实行同工同酬。

第十二条 劳动合同分为固定期限劳动合同、无固定期限劳动合同和以完成一定工作任务为期限的劳动合同。

第十三条 固定期限劳动合同，是指用人单位与劳动者约定合同终止时间的劳动合同。用人单位与劳动者协商一致，可以订立固定期限劳动合同。

第十四条 无固定期限劳动合同，是指用人单位与劳动者约定无确定终止时间的劳动合同。用人单位与劳动者协商一致，可以订立无固定期限劳动合同。有下列情形之一，劳动者提出或者同意续订、订立劳动合同的，除劳动者提出订立固定期限劳动合同外，应当订立无固定期限劳动合同:（一）劳动者在该用人单位连续工作满十年的；（二）用人单位初次实行劳动合同制度或者国有企业改制重新订立劳动合同时，劳动者在该用人单位连续工作满十年且距法定退休年龄不足十年的；（三）连续订立二次固定期限劳动合同，且劳动者没有本法第三十九条和第四十条第一项、第二项规定的情形，续订劳动合同的。用人单位自用工之日起满一年不与劳动者订立书面劳动合同的，视为用人单位与劳动者已订立无固定期限劳动合同。

第十五条 以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。

第十六条 劳动合同由用人单位与劳动者协商一致，并经用人单位与劳动者在劳动合同文本上签字或者盖章生效。劳动合同文本由用人单位和劳动者各执一份。

第十七条 劳动合同应当具备以下条款:（一）用人单位的名称、住所和法定代表人或者主要负责人；（二）劳动者的姓名、住址和居民身份证或者其他有效身份证件号码；（三）劳动合同期限；（四）工作内容和工作地点；（五）工作时间和休息休假；（六）劳动报酬；（七）社会保险；（八）劳动保护、劳动条件和职业危害防护；（九）法律、法规规定应当纳入劳动合同的其他事项。劳动合同除前款规定的必备条款外，用人单位与劳动者可以约定试用期、培训、保守秘密、补充保险和福利待遇等其他事项。

第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。

第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。

第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。

第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。

第二十二条 用人单位为劳动者提供专项培训费用，对其进行专业技术培训的，可以与该劳动者订立协议，约定服务期。劳动者违反服务期约定的，应当按照约定向用人单位支付违约金。违约金的数额不得超过用人单位提供的培训费用。用人单位要求劳动者支付的违约金不得超过服务期尚未履行部分所应分摊的培训费用。用人单位与劳动者约定服务期的，不影响按照正常的工资调整机制提高劳动者在服务期期间的劳动报酬。

第二十三条 用人单位与劳动者可以在劳动合同中约定保守用人单位的商业秘密和与知识产权相关的保密事项。对负有保密义务的劳动者，用人单位可以在劳动合同或者保密协议中与劳动者约定竞业限制条款，并约定在解除或者终止劳动合同后，在竞业限制期限内按月给予劳动者经济补偿。劳动者违反竞业限制约定的，应当按照约定向用人单位支付违约金。

第二十四条 竞业限制的人员限于用人单位的高级管理人员、高级技术人员和其他负有保密义务的人员。竞业限制的范围、地域、期限由用人单位与劳动者约定，竞业限制的约定不得违反法律、法规的规定。在解除或者终止劳动合同后，前款规定的人员到与本单位生产或者经营同类产品、从事同类业务的有竞争关系的其他用人单位，或者自己开业生产或者经营同类产品、从事同类业务的竞业限制期限，不得超过二年。

第二十五条 除本法第二十二条和第二十三条规定的情形外，用人单位不得与劳动者约定由劳动者承担违约金。

第二十六条 下列劳动合同无效或者部分无效:（一）以欺诈、胁迫的手段或者乘人之危，使对方在违背真实意思的情况下订立或者变更劳动合同的；（二）用人单位免除自己的法定责任、排除劳动者权利的；（三）违反法律、行政法规强制性规定的。对劳动合同的无效或者部分无效有争议的，由劳动争议仲裁机构或者人民法院确认。

第二十七条 劳动合同部分无效，不影响其他部分效力的，其他部分仍然有效。

第二十八条 劳动合同被确认无效，劳动者已付出劳动的，用人单位应当向劳动者支付劳动报酬。劳动报酬的数额，参照本单位相同或者相近岗位劳动者的劳动报酬确定。


## 第三章 劳动合同的履行和变更

第二十九条 用人单位与劳动者应当按照劳动合同的约定，全面履行各自的义务。

第三十条 用人单位应当按照劳动合同约定和国家规定，向劳动者及时足额支付劳动报酬。用人单位拖欠或者未足额支付劳动报酬的，劳动者可以依法向当地人民法院申请支付令，人民法院应当依法发出支付令。

第三十一条 用人单位应当严格执行劳动定额标准，不得强迫或者变相强迫劳动者加班。用人单位安排加班的，应当按照国家有关规定向劳动者支付加班费。

第三十二条 劳动者拒绝用人单位管理人员违章指挥、强令冒险作业的，不视为违反劳动合同。劳动者对危害生命安全和身体健康的劳动条件，有权对用人单位提出批评、检举和控告。

第三十三条 用人单位变更名称、法定代表人、主要负责人或者投资人等事项，不影响劳动合同的履行。

第三十四条 用人单位发生合并或者分立等情况，原劳动合同继续有效，劳动合同由承继其权利和义务的用人单位继续履行。

第三十五条 用人单位与劳动者协商一致，可以变更劳动合同约定的内容。变更劳动合同，应当采用书面形式。变更后的劳动合同文本由用人单位和劳动者各执一份。


## 第四章 劳动合同的解除和终止



[exit_code] 0

====================================================================================================
SCRIPT: 08_nbrag_grep.py
====================================================================================================
调用函数: nbrag_grep
入参: {'keyword': '试用期', 'collection_name': 'worker_rights', 'max_results': 5, 'case_sensitive': False, 'filter_file_path': '', 'context_lines': 6}
----------------------------------------------------------------------
grep matches: 5

劳动法.md | matched_line: 54 | line_range: line:54-54 | doc_id: 2db295f90839
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动法.md
       48| 第十八条 下列劳动合同无效：（一）违反法律、行政法规的劳动合同；（二）采取欺诈、威胁等手段订立的劳动合同。无效的劳动合同，从订立的时候起，就没有法律约束力。确认劳动合同部分无效的，如果不影响其余部分的效力，其余部分仍然有效。劳动合同的无效，由劳动争议仲裁委员会或者人民法院确认。
       49| 
       50| 第十九条 劳动合同应当以书面形式订立，并具备以下条款：（一）劳动合同期限；（二）工作内容；（三）劳动保护和劳动条件；（四）劳动报酬；（五）劳动纪律；（六）劳动合同终止的条件；（七）违反劳动合同的责任。劳动合同除前款规定的必备条款外，当事人可以协商约定其他内容。
       51| 
       52| 第二十条 劳动合同的期限分为有固定期限、无固定期限和以完成一定的工作为期限。劳动者在同一用人单位连续工作满十年以上，当事人双方同意续延劳动合同的，如果劳动者提出订立无固定期限的劳动合同，应当订立无固定期限的劳动合同。
       53| 
>>>    54| 第二十一条 劳动合同可以约定试用期。试用期最长不得超过六个月。
       55| 
       56| 第二十二条 劳动合同当事人可以在劳动合同中约定保守用人单位商业秘密的有关事项。
       57| 
       58| 第二十三条 劳动合同期满或者当事人约定的劳动合同终止条件出现，劳动合同即行终止。
       59| 
       60| 第二十四条 经劳动合同当事人协商一致，劳动合同可以解除。

劳动法.md | matched_line: 62 | line_range: line:62-62 | doc_id: 2db295f90839
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动法.md
       56| 第二十二条 劳动合同当事人可以在劳动合同中约定保守用人单位商业秘密的有关事项。
       57| 
       58| 第二十三条 劳动合同期满或者当事人约定的劳动合同终止条件出现，劳动合同即行终止。
       59| 
       60| 第二十四条 经劳动合同当事人协商一致，劳动合同可以解除。
       61| 
>>>    62| 第二十五条 劳动者有下列情形之一的，用人单位可以解除劳动合同：（一）在试用期间被证明不符合录用条件的；（二）严重违反劳动纪律或者用人单位规章制度的；（三）严重失职，营私舞弊，对用人单位利益造成重大损害的；（四）被依法追究刑事责任的。
       63| 
       64| 第二十六条 有下列情形之一的，用人单位可以解除劳动合同，但是应当提前三十日以书面形式通知劳动者本人：（一）劳动者患病或者非因工负伤，医疗期满后，不能从事原工作也不能从事由用人单位另行安排的工作的；（二）劳动者不能胜任工作，经过培训或者调整工作岗位，仍不能胜任工作的；（三）劳动合同订立时所依据的客观情况发生重大变化，致使原劳动合同无法履行，经当事人协商不能就变更劳动合同达成协议的。
       65| 
       66| 第二十七条 用人单位濒临破产进行法定整顿期间或者生产经营状况发生严重困难，确需裁减人员的，应当提前三十日向工会或者全体职工说明情况，听取工会或者职工的意见，经向劳动行政部门报告后，可以裁减人员。用人单位依据本条规定裁减人员，在六个月内录用人员的，应当优先录用被裁减的人员。
       67| 
       68| 第二十八条 用人单位依据本法第二十四条、第二十六条、第二十七条的规定解除劳动合同的，应当依照国家有关规定给予经济补偿。

劳动法.md | matched_line: 76 | line_range: line:76-76 | doc_id: 2db295f90839
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动法.md
       70| 第二十九条 劳动者有下列情形之一的，用人单位不得依据本法第二十六条、第二十七条的规定解除劳动合同：（一）患职业病或者因工负伤并被确认丧失或者部分丧失劳动能力的；（二）患病或者负伤，在规定的医疗期内的；（三）女职工在孕期、产期、哺乳期内的；（四）法律、行政法规规定的其他情形。
       71| 
       72| 第三十条 用人单位解除劳动合同，工会认为不适当的，有权提出意见。如果用人单位违反法律、法规或者劳动合同，工会有权要求重新处理；劳动者申请仲裁或者提起诉讼的，工会应当依法给予支持和帮助。
       73| 
       74| 第三十一条 劳动者解除劳动合同，应当提前三十日以书面形式通知用人单位。
       75| 
>>>    76| 第三十二条 有下列情形之一的，劳动者可以随时通知用人单位解除劳动合同：（一）在试用期内的；（二）用人单位以暴力、威胁或者非法限制人身自由的手段强迫劳动的；（三）用人单位未按照劳动合同约定支付劳动报酬或者提供劳动条件的。
       77| 
       78| 第三十三条 企业职工一方与企业可以就劳动报酬、工作时间、休息休假、劳动安全卫生、保险福利等事项，签订集体合同。集体合同草案应当提交职工代表大会或者全体职工讨论通过。集体合同由工会代表职工与企业签订；没有建立工会的企业，由职工推举的代表与企业签订。
       79| 
       80| 第三十四条 集体合同签订后应当报送劳动行政部门；劳动行政部门自收到集体合同文本之日起十五日内未提出异议的，集体合同即行生效。
       81| 
       82| 第三十五条 依法签订的集体合同对企业和企业全体职工具有约束力。职工个人与企业订立的劳动合同中劳动条件和劳动报酬等标准不得低于集体合同的规定。

劳动合同法.md | matched_line: 43 | line_range: line:43-43 | doc_id: 81ec846f7c63
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
       37| 第十四条 无固定期限劳动合同，是指用人单位与劳动者约定无确定终止时间的劳动合同。用人单位与劳动者协商一致，可以订立无固定期限劳动合同。有下列情形之一，劳动者提出或者同意续订、订立劳动合同的，除劳动者提出订立固定期限劳动合同外，应当订立无固定期限劳动合同:（一）劳动者在该用人单位连续工作满十年的；（二）用人单位初次实行劳动合同制度或者国有企业改制重新订立劳动合同时，劳动者在该用人单位连续工作满十年且距法定退休年龄不足十年的；（三）连续订立二次固定期限劳动合同，且劳动者没有本法第三十九条和第四十条第一项、第二项规定的情形，续订劳动合同的。用人单位自用工之日起满一年不与劳动者订立书面劳动合同的，视为用人单位与劳动者已订立无固定期限劳动合同。
       38| 
       39| 第十五条 以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。
       40| 
       41| 第十六条 劳动合同由用人单位与劳动者协商一致，并经用人单位与劳动者在劳动合同文本上签字或者盖章生效。劳动合同文本由用人单位和劳动者各执一份。
       42| 
>>>    43| 第十七条 劳动合同应当具备以下条款:（一）用人单位的名称、住所和法定代表人或者主要负责人；（二）劳动者的姓名、住址和居民身份证或者其他有效身份证件号码；（三）劳动合同期限；（四）工作内容和工作地点；（五）工作时间和休息休假；（六）劳动报酬；（七）社会保险；（八）劳动保护、劳动条件和职业危害防护；（九）法律、法规规定应当纳入劳动合同的其他事项。劳动合同除前款规定的必备条款外，用人单位与劳动者可以约定试用期、培训、保守秘密、补充保险和福利待遇等其他事项。
       44| 
       45| 第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。
       46| 
       47| 第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。
       48| 
       49| 第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。

劳动合同法.md | matched_line: 47 | line_range: line:47-47 | doc_id: 81ec846f7c63
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
       41| 第十六条 劳动合同由用人单位与劳动者协商一致，并经用人单位与劳动者在劳动合同文本上签字或者盖章生效。劳动合同文本由用人单位和劳动者各执一份。
       42| 
       43| 第十七条 劳动合同应当具备以下条款:（一）用人单位的名称、住所和法定代表人或者主要负责人；（二）劳动者的姓名、住址和居民身份证或者其他有效身份证件号码；（三）劳动合同期限；（四）工作内容和工作地点；（五）工作时间和休息休假；（六）劳动报酬；（七）社会保险；（八）劳动保护、劳动条件和职业危害防护；（九）法律、法规规定应当纳入劳动合同的其他事项。劳动合同除前款规定的必备条款外，用人单位与劳动者可以约定试用期、培训、保守秘密、补充保险和福利待遇等其他事项。
       44| 
       45| 第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。
       46| 
>>>    47| 第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。
       48| 
       49| 第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。
       50| 
       51| 第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。
       52| 
       53| 第二十二条 用人单位为劳动者提供专项培训费用，对其进行专业技术培训的，可以与该劳动者订立协议，约定服务期。劳动者违反服务期约定的，应当按照约定向用人单位支付违约金。违约金的数额不得超过用人单位提供的培训费用。用人单位要求劳动者支付的违约金不得超过服务期尚未履行部分所应分摊的培训费用。用人单位与劳动者约定服务期的，不影响按照正常的工资调整机制提高劳动者在服务期期间的劳动报酬。


[exit_code] 0

====================================================================================================
SCRIPT: 09_nbrag_find_files.py
====================================================================================================
调用函数: nbrag_find_files
入参: {'pattern': '劳动合同法.md', 'collection_name': 'worker_rights', 'max_results': 5, 'case_sensitive': False}
----------------------------------------------------------------------
matched files: 1

filename: 劳动合同法.md | doc_id: 81ec846f7c63 | chunk_count: 13 | total_chunks: 13 | match: filename
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md


[exit_code] 0

====================================================================================================
SCRIPT: 10_nbrag_find_definition.py
====================================================================================================
调用函数: nbrag_find_definition
入参: {'symbol': 'BoosterParams', 'collection_name': 'funboost', 'max_results': 2}
----------------------------------------------------------------------
definitions: 2

[1/2] class BoosterParams | line:61-330 | doc_id:9efa589345b6
file_path: D:/codes/funboost/funboost/core/func_params_model.py
  def __init__(self, **data)
  def check_values(self)
  def __call__(self, func)
class BoosterParams(BaseJsonAbleModel):
    """
    掌握funboost 的精华就是知道 BoosterParams 的入参有哪些，如果知道有哪些入参字段，就掌握了funboost的 90% 用法。

    pydatinc pycharm编程代码补全,请安装 pydantic插件, 在pycharm的  file -> settings -> Plugins -> 输入 pydantic 搜索,点击安装 pydantic 插件.

    @boost的传参必须是此类或者继承此类,如果你不想每个装饰器入参都很多,你可以写一个子类继承BoosterParams, 传参这个子类,例如下面的 BoosterParamsComplete
    """

    
    queue_name: str  # 队列名字,必传项,每个函数要使用不同的队列名字.
    broker_kind: str = BrokerEnum.SQLITE_QUEUE  # 中间件选型见3.1章节 https://funboost.readthedocs.io/zh-cn/latest/articles/c3.html

    """ project_name是项目名，属于管理层面的标签, 默认为None, 给booster设置所属项目名, 用于对于在redis保存的funboost信息中，根据项目名字查看相关队列。
    # 如果不设置很难从redis保存的funboost信息中，区分哪些队列名属于哪个项目。 主要是给web接口查看用。
    # 一个项目的队列名字有哪些，是保存在redis的set中，key为 f'funboost.project_name:{project_name}'
    # 通常配合 CareProjectNameEnv.set($project_name) 使用 ，它可以让你在监控和管理时“只看自己的一亩三分地“，避免被其他人的队列刷屏干扰。"""
    project_name: typing.Optional[str] = None

    """如果设置了qps，并且cocurrent_num是默认的50，会自动开了500并发，由于是采用的智能线程池任务少时候不会真开那么多线程而且会自动缩小线程数量。
    具体看ThreadPoolExecutorShrinkAble的说明
    由于有很好用的qps控制运行频率和智能扩大缩小的线程池，此框架建议不需要理会和设置并发数量只需要关心qps就行了，框架的并发是自适应并发数量，这一点很强很好用。"""
    concurrent_mode: str = ConcurrentModeEnum.THREADING  # 并发模式,支持THREADING,GEVENT,EVENTLET,ASYNC,SINGLE_THREAD并发,multi_process_consume 支持协程/线程 叠加多进程并发,性能炸裂.
    concurrent_num: int = 50  # 并发数量，并发种类由concurrent_mode决定
    specify_concurrent_pool: typing.Optional[FunboostBaseConcurrentPool] = None  # 使用指定的线程池/携程池，可以多个消费者共使用一个线程池,节约线程.不为None时候。threads_num失效
    
    # specify_async_loop 是为了避免 asyncio 经典报错 `attached to a different loop` 和 `context manager should be used inside a task`
    specify_async_loop: typing.Optional[asyncio.AbstractEventLoop] = None  # 指定的async的loop循环，threading和async并发模式都能使用。 有些包例如aiohttp,发送请求和httpclient的实例化不能处在两个不同的loop中,需要用户手动传过来. 
    is_auto_start_specify_async_loop_in_child_thread: bool = True  # 是否自动在funboost asyncio并发池的子线程中自动启动指定的async的loop循环。如果是False,用户自己在自己的代码中去手动启动自己的loop.run_forever() 
    
    """qps:
    强悍的控制功能,指定1秒内的函数执行次数，例如可以是小数0.01代表每100秒执行一次，也可以是50代表1秒执行50次.为None则不控频。 
    设置qps时候,不需要指定并发数量,funboost的能够自适应智能动态调节并发池大小."""
    qps: typing.Union[float, int, None] = None
    """is_using_distributed_frequency_control:
    是否使用分布式空频（依赖redis统计消费者数量，然后频率平分），默认只对当前实例化的消费者空频有效。
    假如实例化了2个qps为10的使用同一队列名的消费者，并且都启动，则每秒运行次数会达到20。
    如果使用分布式空频则所有消费者加起来的总运行次数是10。"""
    is_using_distributed_frequency_control: bool = False

    is_send_consumer_heartbeat_to_redis: bool = False  # 是否将发布者的心跳发送到redis，有些功能的实现需要统计活跃消费者。因为有的中间件不是真mq。这个功能,需要安装redis.
    
    # --------------- 重试配置 开始
    """max_retry_times:
    最大自动重试次数，当函数发生错误，立即自动重试运行n次，对一些特殊不稳定情况会有效果。
    可以在函数中主动抛出重试的异常ExceptionForRetry，框架也会立即自动重试。
    主动抛出ExceptionForRequeue异常，则当前 消息会重返中间件，
    主动抛出 ExceptionForPushToDlxqueue  异常，可以使消息发送到单独的死信队列中，死信队列的名字是 队列名字 + _dlx。"""
    max_retry_times: int = 3
    
    """
    is_using_advanced_retry:
    是否使用高级重试，高级重试支持指数退避重试。is_using_advanced_retry=True 时候，is_using_advanced_retry参数才能生效。


    重试间隔有2种模式，requeue 模式 和 sleep 模式。
    requeue模式: 将消息发回队列带延迟重试，立即释放线程,适合重试间隔大，防止长时间sleep占用线程导致降低了系统吞吐量。
    sleep模式: 在当前线程/协程 sleep 重试，适合重试间隔小，并且消息数量少执行不频繁。此模式的sleep时候会占用工作线程/协程
    
    如果retry_base_interval= 1.0,retry_multiplier=2.0,retry_max_interval=60.0,则重试间隔为：
    1s,2s,4s,8s,16s,32s,60s,60s,60s...
    """
    is_using_advanced_retry: bool = False  
    advanced_retry_config :dict =  { 
        'retry_mode': 'sleep', # 可以是 'sleep' 或 'requeue'，如果重试间隔大并且指数退避倍数大，那么应该使用requeue模式，因为sleep原地占用线程/协程降低服务吞吐量。
        'retry_base_interval': 1.0, # 基础重试间隔（秒）  1s,2s,4s,8s,16s,30s,30s,30s...
        'retry_multiplier': 2.0, # 指数退避倍数 ，如果你想固定重试间隔，则设置为1.0
        'retry_max_interval': 60.0, # 最大重试间隔上限（秒）
        'retry_jitter': False, # 是否添加随机抖动
    }
    
    is_push_to_dlx_queue_when_retry_max_times: bool = False  # 函数达到最大重试次数仍然没成功，是否发送到死信队列,死信队列的名字是 队列名字 + _dlx。
    # --------------- 重试配置 结束

    consuming_function_decorator: typing.Optional[typing.Callable[..., typing.Any]] = None  # 函数的装饰器。因为此框架做参数自动转指点，需要获取精准的入参名称，不支持在消费函数上叠加 @ *args  **kwargs的装饰器，如果想用装饰器可以这里指定。
    
    
    """
    function_timeout: 
    超时秒数，函数运行超过这个时间，则自动杀死函数。为0是不限制。 
    用户应该尽量使用各种三方包例如 aiohttp pymysql 自己的 socket timeout 设置来控制超时，而不是无脑使用funboost的function_timeout参数。
    谨慎使用,非必要别去设置超时时间,设置后性能会降低(因为需要把用户函数包装到另一个线单独的程中去运行),而且突然强制超时杀死运行中函数,可能会造成死锁.
    (例如用户函数在获得线程锁后突然杀死函数,别的线程再也无法获得锁了)
    """
    function_timeout: typing.Union[int, float,None] = None 
    """
    is_support_remote_kill_task:
    是否支持远程任务杀死功能，如果任务数量少，单个任务耗时长，确实需要远程发送命令来杀死正在运行的函数，才设置为true，否则不建议开启此功能。
    (是把函数放在单独的线程中实现的,随时准备线程被远程命令杀死,所以性能会降低)
    """
    is_support_remote_kill_task: bool = False  
    
    """
    log_level:
        logger_name 对应的 日志级别
        消费者和发布者的日志级别,建议设置DEBUG级别,不然无法知道正在运行什么消息.
        这个是funboost每个队列的单独命名空间的日志级别,丝毫不会影响改变用户其他日志以及root命名空间的日志级别,所以DEBUG级别就好,
        用户不要压根不懂什么是python logger 的name,还去手痒调高级别. 
        不懂python日志命名空间的小白去看nb_log文档,或者直接问 ai大模型 python logger name的作用是什么.
    """
    log_level: int = logging.DEBUG # 不需要改这个级别,请看上面原因
    logger_prefix: str = ''  # 日志名字前缀,可以设置前缀
    create_logger_file: bool = True  # 发布者和消费者是否创建文件文件日志,为False则只打印控制台不写文件.
    logger_name: typing.Union[str, None] = ''  # 队列消费者发布者的日志命名空间.
    log_filename: typing.Union[str, None] = None  # 消费者发布者的文件日志名字.如果为None,则自动使用 funboost.队列 名字作为文件日志名字.  日志文件夹是在nb_log_config.py的 LOG_PATH中决定的.
    is_show_message_get_from_broker: bool = False  # 运行时候,是否记录从消息队列获取出来的消息内容
    is_print_detail_exception: bool = True  # 消费函数出错时候,是否打印详细的报错堆栈,为False则只打印简略的报错信息不包含堆栈.
    publish_msg_log_use_full_msg: bool = False # 发布到消息队列的消息内容的日志，是否显示消息的完整体，还是只显示函数入参。

    msg_expire_seconds: typing.Union[float, int,None] = None  # 消息过期时间,可以设置消息是多久之前发布的就丢弃这条消息,不运行. 为None则永不丢弃

    do_task_filtering: bool = False  # 是否对函数入参进行过滤去重.
    task_filtering_expire_seconds: int = 0  # 任务过滤的失效期，为0则永久性过滤任务。例如设置过滤过期时间是1800秒 ， 30分钟前发布过1 + 2 的任务，现在仍然执行，如果是30分钟以内执行过这个任务，则不执行1 + 2

    function_result_status_persistance_conf: FunctionResultStatusPersistanceConfig = FunctionResultStatusPersistanceConfig(
        is_save_result=False, is_save_status=False, expire_seconds=7 * 24 * 3600, is_use_bulk_insert=False)  # 是否保存函数的入参，运行结果和运行状态到mongodb。这一步用于后续的参数追溯，任务统计和web展示，需要安装mongo。
    
    """
    user_custom_record_process_info_func:
    此函数仅仅接受一个入参，入参类型是 FunctionResultStatus，用户可以打印或者保存结果到任意地方。以及用于其他功能，例如判断报错时候发邮件
    建议用户通过 mixin类写user_custom_record_process_info_func方法 ，使用 consumer_override_cls 方式来自定义保存函数运行状态和结果。

    框架之后不再额外在BoosterParams中增加更多其他钩子字段，以减少字段数量；用户需要学习教程的4.21b章节的 consumer_override_cls，
    consumer_override_cls 自定义灵活性无敌，用户自由发挥余地很大。
    """
    user_custom_record_process_info_func: typing.Optional[typing.Callable[..., typing.Any]] = None  

    is_using_rpc_mode: bool = False  # 是否使用rpc模式，可以在发布端获取消费端的结果回调，但消耗一定性能，使用async_result.result时候会等待阻塞住当前线程。
    rpc_result_expire_seconds: int = 1800  # redis保存rpc结果的过期时间.
    rpc_timeout:int = 1800 # rpc模式下，等待rpc结果返回的超时时间

    delay_task_apscheduler_jobstores_kind :str = 'redis'  # 延时任务的aspcheduler对象使用哪种jobstores ，可以为 redis memory 两种作为jobstore

    
    """
    allow_run_time_cron:
    只允许在规定的crontab表达式时间内运行。
    例如 '* 23,0-2 * * *' 表示只在23点到2点运行。
    allow_run_time_cron='* 9-17 * * 1-5', 表示只在周一到周五的9点到17:59:59运行。
    为None则不限制运行时间。
    语法是知名 croniter 包的语法，不是funboost创造的特殊语法，用户自己去google或者ai学习语法。
    """
    allow_run_time_cron: typing.Optional[str] = None

    schedule_tasks_on_main_thread: bool = False  # 直接在主线程调度任务，意味着不能直接在当前主线程同时开启两个消费者。

    is_auto_start_consuming_message: bool = False  # 是否在定义后就自动启动消费，无需用户手动写 .consume() 来启动消息消费。
    
    # booster_group :消费分组名字， BoostersManager.consume_group 时候根据 booster_group 启动多个消费函数,减少需要写 f1.consume() f2.consume() ...这种。
    # 不像BoostersManager.consume_all() 会启动所有不相关消费函数,也不像  f1.consume() f2.consume() 这样需要逐个启动消费函数。
    # 可以根据业务逻辑创建不同的分组，实现灵活的消费启动策略。
    # 用法见文档 4.2d.3 章节.   使用 BoostersManager ,通过 consume_group 启动一组消费函数
    booster_group:typing.Union[str, None] = None

    consuming_function: typing.Optional[typing.Callable[..., typing.Any]] = None  # 消费函数,在@boost时候不用指定,因为装饰器知道下面的函数.
    consuming_function_raw: typing.Optional[typing.Callable[..., typing.Any]] = None  # 不需要传递，自动生成
    consuming_function_name: str = '' # 不需要传递，自动生成

    
    """
    # 加上一个不同种类中间件非通用的配置,不同中间件自身独有的配置，不是所有中间件都兼容的配置，因为框架支持30种消息队列，消息队列不仅仅是一般的先进先出queue这么简单的概念，
    # 例如kafka支持消费者组，rabbitmq也支持各种独特概念例如各种ack机制 复杂路由机制，有的中间件原生能支持消息优先级有的中间件不支持,
    # 每一种消息队列都有独特的配置参数意义，可以通过这里传递。
    # 每种中间件能传递的键值对可以看 funboost/core/broker_kind__exclusive_config_default.py 的 BROKER_EXCLUSIVE_CONFIG_DEFAULT 属性。
    """
    broker_exclusive_config: dict = {} 
    


    should_check_publish_func_params: bool = True  # 消息发布时候是否校验消息发布内容,比如有的人发布消息,函数只接受a,b两个入参,他去传2个入参,或者传参不存在的参数名字; 如果消费函数加了装饰器 ，你非要写*args,**kwargs,那就需要关掉发布消息时候的函数入参检查
    manual_func_input_params :dict= {'is_manual_func_input_params': False,'must_arg_name_list':[],'optional_arg_name_list':[]} # 也可以手动指定函数入参字段，默认是根据消费函数def定义的入参来生成这个。


    consumer_override_cls: typing.Optional[typing.Type] = None  # 使用 consumer_override_cls 和 publisher_override_cls 来自定义重写或新增消费者 发布者,见文档4.21b介绍，
    publisher_override_cls: typing.Optional[typing.Type] = None

    # func_params_is_pydantic_model: bool = False  # funboost 兼容支持 函数娼还是 pydantic model类型，funboost在发布之前和取出来时候自己转化。

    consuming_function_kind: typing.Optional[str] = None  # 自动生成的信息,不需要用户主动传参,如果自动判断失误就传递。是判断消费函数是函数还是实例方法还是类方法。如果传递了，就不自动获取函数类型。
    """ consuming_function_kind 可以为以下类型，
    class FunctionKind:
        CLASS_METHOD = 'CLASS_METHOD'
        INSTANCE_METHOD = 'INSTANCE_METHOD'
        STATIC_METHOD = 'STATIC_METHOD'
        COMMON_FUNCTION = 'COMMON_FUNCTION'
    """

    """
    user_options:
    用户额外自定义的配置,高级用户或者奇葩需求可以用得到,用户可以自由发挥,存放任何设置.
    user_options 提供了一个统一的、用户自定义的命名空间，让用户可以为自己的“奇葩需求”或“高级定制”传递配置，而无需等待框架开发者添加官方支持。
    funboost 是自由框架不是奴役框架,不仅消费函数逻辑自由,目录层级结构自由,自定义奇葩扩展也要追求自由,用户不用改funboost BoosterParams 源码来加装饰器参数
    
    使用场景见文档 4b.6 章节.
    """
    user_options: dict = {} # 用户自定义的配置,高级用户或者奇葩需求可以用得到,用户可以自由发挥,存放任何设置,例如配合 consumer_override_cls中读取 或 register_custom_broker 使用
    
    
    auto_generate_info: dict = {}  # 自动生成的信息,不需要用户主动传参.例如包含 final_func_input_params_info 和 where_to_instantiate 等。
    
    """# is_fake_booster：是否是伪造的booster,
    # 用于faas模式下，因为跨项目的faas管理只拿到了redis的一些基本元数据，没有booster的函数逻辑，
    # 例如ApsJobAdder管理定时任务，需要booster，但没有真实的函数逻辑，
    # 你可以看 SingleQueueConusmerParamsGetter.gen_booster_for_faas 的用法，目前主要是控制不要执行 BoostersManager.regist_booster
    # 普通用户完全不用改这个参数。
    """
    is_fake_booster: bool = False

    # 普通用户不用管不用改，用于隔离boosters注册。例如faas的是虚假的跨服务跨项目的booster，没有具体函数逻辑，不可污染真正的注册。
    # 如果你是想分组启动部分booster，那你应该用的是 booster_group 参数。
    booster_registry_name: str = StrConst.BOOSTER_REGISTRY_NAME_DEFAULT  


    def __init__(self, **data):
        # 在 Pydantic 校验之前先剔除已废弃的旧字段，防止 extra="forbid" 在 __init__ 阶段就抛出 ValidationError。
        # 主要场景：从 Redis 元信息恢复 BoosterParams 时，元信息里可能含有旧版本已删除的字段。
        for old_field in BoosterParamsFieldsAssit.has_been_deleted_fields:
            data.pop(old_field, None)
        for old_field, new_field in BoosterParamsFieldsAssit.rename_fields.items():
            if old_field in data:
                data[new_field] = data.pop(old_field)
        super().__init__(**data)

    @compatible_root_validator(skip_on_failure=True, )
    def check_values(self):

        # 如果设置了qps，并且cocurrent_num是默认的50，会自动开了500并发，由于是采用的智能线程池任务少时候不会真开那么多线程而且会自动缩小线程数量。具体看ThreadPoolExecutorShrinkAble的说明
        # 由于有很好用的qps控制运行频率和智能扩大缩小的线程池，此框架建议不需要理会和设置并发数量只需要关心qps就行了，框架的并发是自适应并发数量，这一点很强很好用。
        if self.qps and self.concurrent_num == 50:
            self.concurrent_num = 500
        if self.concurrent_mode == ConcurrentModeEnum.SINGLE_THREAD:
            self.concurrent_num = 1

        self.is_send_consumer_heartbeat_to_redis = self.is_send_consumer_heartbeat_to_redis or self.is_using_distributed_frequency_control

        if self.concurrent_mode not in ConcurrentModeEnum.__dict__.values():
            raise ValueError('设置的并发模式不正确')
        if self.broker_kind in [BrokerEnum.REDIS_ACK_ABLE, BrokerEnum.REDIS_STREAM,
                                 BrokerEnum.REDIS_PRIORITY, 
                                     BrokerEnum.REDIS_BRPOP_LPUSH,BrokerEnum.REDIS,
                                     BrokerEnum.REDIS_PUBSUB] or 'REDIS' in self.broker_kind:
            self.is_send_consumer_heartbeat_to_redis = True  # 需要心跳进程来辅助判断消息是否属于掉线或关闭的进程，需要重回队列
       
        if self.function_result_status_persistance_conf.table_name is None:
            self.function_result_status_persistance_conf.table_name = self.queue_name
        
        # 禁止子类添加 BoosterParams 中不存在的字段，主要是担心用户继承的子类中拼写错误，本以为自己是覆盖父类字段默认值，实际却变成了新增了字段。
        # 兼容 Pydantic v1 和 v2 获取所有字段
        self_fields = self.model_fields.keys() if hasattr(self, 'model_fields') else self.__fields__.keys()
        parent_fields = BoosterParams.model_fields.keys() if hasattr(BoosterParams, 'model_fields') else BoosterParams.__fields__.keys()
        for k in self_fields:
            if k not in parent_fields:
                raise ValueError(f'{self.__class__.__name__} 的字段新增了父类 BoosterParams 不存在的字段 "{k}"')  # 使 BoosterParams的子类,不能增加字段,只能覆盖字段.
        
        return self

    def __call__(self, func):
        """
        新增加一种语法,
        一般是使用@boost(BoosterParams(queue_name='q1',qps=2))，你如果图方便可以使用 @BoosterParams(queue_name='q1',qps=2)这样的写法。

        @BoosterParams(queue_name='q1',qps=2) 这个和 @boost(BoosterParams(queue_name='q1',qps=2)) 写法等效,

        @BoosterParams(queue_name='q1',qps=2)
        def f(a,b):
            print(a,b)
        :param func:
        :return:
        """
        return funboost_lazy_impoter.boost(self)(func)

[2/2] regex_fallback BoosterParams | line:34-53 | doc_id:0008d23ad22e
file_path: D:/codes/funboost_docs/source/articles/c8.md
Regex fallback in non-Python file

#### funboost框架是自由框架的证据:                   
```python
@boost(BoosterParams(queue_name='flexible_queue'))
def my_task(url):
    """
    在这个函数里，你可以：
    - 使用任何HTTP库 (requests, httpx, aiohttp...)
    - 访问任何数据库 (MySQL, MongoDB, Redis...)
    - 调用任何API (REST, GraphQL, gRPC...)
    - 使用任何框架 (Django ORM, SQLAlchemy...)
    - 执行任何逻辑 (AI推理, 图像处理, 数据分析...)
    
    没有任何限制，没有任何束缚！
    """
    # 完全自由选择HTTP库
    if need_js:
        from playwright import sync_api
        response = get_with_playwright(url)
    elif need_async:
        response = await aiohttp.get(url)
    else:
        response = requests.get(url)


[exit_code] 0

====================================================================================================
SCRIPT: 11_nbrag_get_raw_file.py
====================================================================================================
调用函数: nbrag_get_raw_file
入参: {'file_path': 'D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md', 'collection_name': 'worker_rights', 'line_start': 45, 'line_end': 52}
----------------------------------------------------------------------
original_file: 劳动合同法.md | file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md | doc_id: 81ec846f7c63
total_lines: 232 | range: line:45-52
第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。

第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。

第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。

第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。



[exit_code] 0

====================================================================================================
SCRIPT: 12_nbrag_get_file_chunks.py
====================================================================================================
调用函数: nbrag_get_file_chunks
入参: {'file_path': 'D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md', 'collection_name': 'worker_rights', 'start_chunk': 0, 'max_chunks': 2}
----------------------------------------------------------------------
file chunks: 2 | filename: 劳动合同法.md | doc_id: 81ec846f7c63
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md | total_chunks: 13 | total_lines: 232
range: chunk:0-1

chunk:0 | line:1-18
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 1-18]
# 中华人民共和国劳动合同法

（2007年6月29日第十届全国人民代表大会常务委员会第二十八次会议通过 根据2012年12月28日第十一届全国人民代表大会常务委员会第三十次会议《关于修改<中华人民共和国劳动合同法>的决定》修正）


## 第一章 总则

第一条 为了完善劳动合同制度，明确劳动合同双方当事人的权利和义务，保护劳动者的合法权益，构建和发展和谐稳定的劳动关系，制定本法。

第二条 中华人民共和国境内的企业、个体经济组织、民办非企业单位等组织（以下称用人单位）与劳动者建立劳动关系，订立、履行、变更、解除或者终止劳动合同，适用本法。国家机关、事业单位、社会团体和与其建立劳动关系的劳动者，订立、履行、变更、解除或者终止劳动合同，依照本法执行。

第三条 订立劳动合同，应当遵循合法、公平、平等自愿、协商一致、诚实信用的原则。依法订立的劳动合同具有约束力，用人单位与劳动者应当履行劳动合同约定的义务。

第四条 用人单位应当依法建立和完善劳动规章制度，保障劳动者享有劳动权利、履行劳动义务。用人单位在制定、修改或者决定有关劳动报酬、工作时间、休息休假、劳动安全卫生、保险福利、职工培训、劳动纪律以及劳动定额管理等直接涉及劳动者切身利益的规章制度或者重大事项时，应当经职工代表大会或者全体职工讨论，提出方案和意见，与工会或者职工代表平等协商确定。在规章制度和重大事项决定实施过程中，工会或者职工认为不适当的，有权向用人单位提出，通过协商予以修改完善。用人单位应当将直接涉及劳动者切身利益的规章制度和重大事项决定公示，或者告知劳动者。

第五条 县级以上人民政府劳动行政部门会同工会和企业方面代表，建立健全协调劳动关系三方机制，共同研究解决有关劳动关系的重大问题。

第六条 工会应当帮助、指导劳动者与用人单位依法订立和履行劳动合同，并与用人单位建立集体协商机制，维护劳动者的合法权益。

chunk:1 | line:21-45
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 21-45]
## 第二章 劳动合同的订立

第七条 用人单位自用工之日起即与劳动者建立劳动关系。用人单位应当建立职工名册备查。

第八条 用人单位招用劳动者时，应当如实告知劳动者工作内容、工作条件、工作地点、职业危害、安全生产状况、劳动报酬，以及劳动者要求了解的其他情况；用人单位有权了解劳动者与劳动合同直接相关的基本情况，劳动者应当如实说明。

第九条 用人单位招用劳动者，不得扣押劳动者的居民身份证和其他证件，不得要求劳动者提供担保或者以其他名义向劳动者收取财物。

第十条 建立劳动关系，应当订立书面劳动合同。已建立劳动关系，未同时订立书面劳动合同的，应当自用工之日起一个月内订立书面劳动合同。用人单位与劳动者在用工前订立劳动合同的，劳动关系自用工之日起建立。

第十一条 用人单位未在用工的同时订立书面劳动合同，与劳动者约定的劳动报酬不明确的，新招用的劳动者的劳动报酬按照集体合同规定的标准执行；没有集体合同或者集体合同未规定的，实行同工同酬。

第十二条 劳动合同分为固定期限劳动合同、无固定期限劳动合同和以完成一定工作任务为期限的劳动合同。

第十三条 固定期限劳动合同，是指用人单位与劳动者约定合同终止时间的劳动合同。用人单位与劳动者协商一致，可以订立固定期限劳动合同。

第十四条 无固定期限劳动合同，是指用人单位与劳动者约定无确定终止时间的劳动合同。用人单位与劳动者协商一致，可以订立无固定期限劳动合同。有下列情形之一，劳动者提出或者同意续订、订立劳动合同的，除劳动者提出订立固定期限劳动合同外，应当订立无固定期限劳动合同:（一）劳动者在该用人单位连续工作满十年的；（二）用人单位初次实行劳动合同制度或者国有企业改制重新订立劳动合同时，劳动者在该用人单位连续工作满十年且距法定退休年龄不足十年的；（三）连续订立二次固定期限劳动合同，且劳动者没有本法第三十九条和第四十条第一项、第二项规定的情形，续订劳动合同的。用人单位自用工之日起满一年不与劳动者订立书面劳动合同的，视为用人单位与劳动者已订立无固定期限劳动合同。

第十五条 以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。

第十六条 劳动合同由用人单位与劳动者协商一致，并经用人单位与劳动者在劳动合同文本上签字或者盖章生效。劳动合同文本由用人单位和劳动者各执一份。

第十七条 劳动合同应当具备以下条款:（一）用人单位的名称、住所和法定代表人或者主要负责人；（二）劳动者的姓名、住址和居民身份证或者其他有效身份证件号码；（三）劳动合同期限；（四）工作内容和工作地点；（五）工作时间和休息休假；（六）劳动报酬；（七）社会保险；（八）劳动保护、劳动条件和职业危害防护；（九）法律、法规规定应当纳入劳动合同的其他事项。劳动合同除前款规定的必备条款外，用人单位与劳动者可以约定试用期、培训、保守秘密、补充保险和福利待遇等其他事项。

第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。


[exit_code] 0

====================================================================================================
SCRIPT: 13_nbrag_get_adjacent_chunks.py
====================================================================================================
调用函数: nbrag_get_adjacent_chunks
入参: {'doc_id': '81ec846f7c63', 'chunk_index': 1, 'collection_name': 'worker_rights', 'window': 2}
----------------------------------------------------------------------
adjacent chunks: 4 | file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md | doc_id: 81ec846f7c63 | total_chunks: 13

chunk:0 | line:1-18
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 1-18]
# 中华人民共和国劳动合同法

（2007年6月29日第十届全国人民代表大会常务委员会第二十八次会议通过 根据2012年12月28日第十一届全国人民代表大会常务委员会第三十次会议《关于修改<中华人民共和国劳动合同法>的决定》修正）


## 第一章 总则

第一条 为了完善劳动合同制度，明确劳动合同双方当事人的权利和义务，保护劳动者的合法权益，构建和发展和谐稳定的劳动关系，制定本法。

第二条 中华人民共和国境内的企业、个体经济组织、民办非企业单位等组织（以下称用人单位）与劳动者建立劳动关系，订立、履行、变更、解除或者终止劳动合同，适用本法。国家机关、事业单位、社会团体和与其建立劳动关系的劳动者，订立、履行、变更、解除或者终止劳动合同，依照本法执行。

第三条 订立劳动合同，应当遵循合法、公平、平等自愿、协商一致、诚实信用的原则。依法订立的劳动合同具有约束力，用人单位与劳动者应当履行劳动合同约定的义务。

第四条 用人单位应当依法建立和完善劳动规章制度，保障劳动者享有劳动权利、履行劳动义务。用人单位在制定、修改或者决定有关劳动报酬、工作时间、休息休假、劳动安全卫生、保险福利、职工培训、劳动纪律以及劳动定额管理等直接涉及劳动者切身利益的规章制度或者重大事项时，应当经职工代表大会或者全体职工讨论，提出方案和意见，与工会或者职工代表平等协商确定。在规章制度和重大事项决定实施过程中，工会或者职工认为不适当的，有权向用人单位提出，通过协商予以修改完善。用人单位应当将直接涉及劳动者切身利益的规章制度和重大事项决定公示，或者告知劳动者。

第五条 县级以上人民政府劳动行政部门会同工会和企业方面代表，建立健全协调劳动关系三方机制，共同研究解决有关劳动关系的重大问题。

第六条 工会应当帮助、指导劳动者与用人单位依法订立和履行劳动合同，并与用人单位建立集体协商机制，维护劳动者的合法权益。

chunk:1 | line:21-45
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 21-45]
## 第二章 劳动合同的订立

第七条 用人单位自用工之日起即与劳动者建立劳动关系。用人单位应当建立职工名册备查。

第八条 用人单位招用劳动者时，应当如实告知劳动者工作内容、工作条件、工作地点、职业危害、安全生产状况、劳动报酬，以及劳动者要求了解的其他情况；用人单位有权了解劳动者与劳动合同直接相关的基本情况，劳动者应当如实说明。

第九条 用人单位招用劳动者，不得扣押劳动者的居民身份证和其他证件，不得要求劳动者提供担保或者以其他名义向劳动者收取财物。

第十条 建立劳动关系，应当订立书面劳动合同。已建立劳动关系，未同时订立书面劳动合同的，应当自用工之日起一个月内订立书面劳动合同。用人单位与劳动者在用工前订立劳动合同的，劳动关系自用工之日起建立。

第十一条 用人单位未在用工的同时订立书面劳动合同，与劳动者约定的劳动报酬不明确的，新招用的劳动者的劳动报酬按照集体合同规定的标准执行；没有集体合同或者集体合同未规定的，实行同工同酬。

第十二条 劳动合同分为固定期限劳动合同、无固定期限劳动合同和以完成一定工作任务为期限的劳动合同。

第十三条 固定期限劳动合同，是指用人单位与劳动者约定合同终止时间的劳动合同。用人单位与劳动者协商一致，可以订立固定期限劳动合同。

第十四条 无固定期限劳动合同，是指用人单位与劳动者约定无确定终止时间的劳动合同。用人单位与劳动者协商一致，可以订立无固定期限劳动合同。有下列情形之一，劳动者提出或者同意续订、订立劳动合同的，除劳动者提出订立固定期限劳动合同外，应当订立无固定期限劳动合同:（一）劳动者在该用人单位连续工作满十年的；（二）用人单位初次实行劳动合同制度或者国有企业改制重新订立劳动合同时，劳动者在该用人单位连续工作满十年且距法定退休年龄不足十年的；（三）连续订立二次固定期限劳动合同，且劳动者没有本法第三十九条和第四十条第一项、第二项规定的情形，续订劳动合同的。用人单位自用工之日起满一年不与劳动者订立书面劳动合同的，视为用人单位与劳动者已订立无固定期限劳动合同。

第十五条 以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。

第十六条 劳动合同由用人单位与劳动者协商一致，并经用人单位与劳动者在劳动合同文本上签字或者盖章生效。劳动合同文本由用人单位和劳动者各执一份。

第十七条 劳动合同应当具备以下条款:（一）用人单位的名称、住所和法定代表人或者主要负责人；（二）劳动者的姓名、住址和居民身份证或者其他有效身份证件号码；（三）劳动合同期限；（四）工作内容和工作地点；（五）工作时间和休息休假；（六）劳动报酬；（七）社会保险；（八）劳动保护、劳动条件和职业危害防护；（九）法律、法规规定应当纳入劳动合同的其他事项。劳动合同除前款规定的必备条款外，用人单位与劳动者可以约定试用期、培训、保守秘密、补充保险和福利待遇等其他事项。

第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。

chunk:2 | line:45-65
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 45-65]
第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。

第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。

第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。

第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。

第二十二条 用人单位为劳动者提供专项培训费用，对其进行专业技术培训的，可以与该劳动者订立协议，约定服务期。劳动者违反服务期约定的，应当按照约定向用人单位支付违约金。违约金的数额不得超过用人单位提供的培训费用。用人单位要求劳动者支付的违约金不得超过服务期尚未履行部分所应分摊的培训费用。用人单位与劳动者约定服务期的，不影响按照正常的工资调整机制提高劳动者在服务期期间的劳动报酬。

第二十三条 用人单位与劳动者可以在劳动合同中约定保守用人单位的商业秘密和与知识产权相关的保密事项。对负有保密义务的劳动者，用人单位可以在劳动合同或者保密协议中与劳动者约定竞业限制条款，并约定在解除或者终止劳动合同后，在竞业限制期限内按月给予劳动者经济补偿。劳动者违反竞业限制约定的，应当按照约定向用人单位支付违约金。

第二十四条 竞业限制的人员限于用人单位的高级管理人员、高级技术人员和其他负有保密义务的人员。竞业限制的范围、地域、期限由用人单位与劳动者约定，竞业限制的约定不得违反法律、法规的规定。在解除或者终止劳动合同后，前款规定的人员到与本单位生产或者经营同类产品、从事同类业务的有竞争关系的其他用人单位，或者自己开业生产或者经营同类产品、从事同类业务的竞业限制期限，不得超过二年。

第二十五条 除本法第二十二条和第二十三条规定的情形外，用人单位不得与劳动者约定由劳动者承担违约金。

第二十六条 下列劳动合同无效或者部分无效:（一）以欺诈、胁迫的手段或者乘人之危，使对方在违背真实意思的情况下订立或者变更劳动合同的；（二）用人单位免除自己的法定责任、排除劳动者权利的；（三）违反法律、行政法规强制性规定的。对劳动合同的无效或者部分无效有争议的，由劳动争议仲裁机构或者人民法院确认。

第二十七条 劳动合同部分无效，不影响其他部分效力的，其他部分仍然有效。

第二十八条 劳动合同被确认无效，劳动者已付出劳动的，用人单位应当向劳动者支付劳动报酬。劳动报酬的数额，参照本单位相同或者相近岗位劳动者的劳动报酬确定。

chunk:3 | line:68-82
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 68-82]
## 第三章 劳动合同的履行和变更

第二十九条 用人单位与劳动者应当按照劳动合同的约定，全面履行各自的义务。

第三十条 用人单位应当按照劳动合同约定和国家规定，向劳动者及时足额支付劳动报酬。用人单位拖欠或者未足额支付劳动报酬的，劳动者可以依法向当地人民法院申请支付令，人民法院应当依法发出支付令。

第三十一条 用人单位应当严格执行劳动定额标准，不得强迫或者变相强迫劳动者加班。用人单位安排加班的，应当按照国家有关规定向劳动者支付加班费。

第三十二条 劳动者拒绝用人单位管理人员违章指挥、强令冒险作业的，不视为违反劳动合同。劳动者对危害生命安全和身体健康的劳动条件，有权对用人单位提出批评、检举和控告。

第三十三条 用人单位变更名称、法定代表人、主要负责人或者投资人等事项，不影响劳动合同的履行。

第三十四条 用人单位发生合并或者分立等情况，原劳动合同继续有效，劳动合同由承继其权利和义务的用人单位继续履行。

第三十五条 用人单位与劳动者协商一致，可以变更劳动合同约定的内容。变更劳动合同，应当采用书面形式。变更后的劳动合同文本由用人单位和劳动者各执一份。


[exit_code] 0

====================================================================================================
SCRIPT: 14_nbrag_get_chunks_by_lines.py
====================================================================================================
调用函数: nbrag_get_chunks_by_lines
入参: {'doc_id': '81ec846f7c63', 'line_start': 45, 'line_end': 52, 'collection_name': 'worker_rights'}
----------------------------------------------------------------------
chunks by lines: 2 | doc_id: 81ec846f7c63 | total_chunks: 13
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md | line_range: line:45-52

chunk:1 | line:21-45
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 21-45]
## 第二章 劳动合同的订立

第七条 用人单位自用工之日起即与劳动者建立劳动关系。用人单位应当建立职工名册备查。

第八条 用人单位招用劳动者时，应当如实告知劳动者工作内容、工作条件、工作地点、职业危害、安全生产状况、劳动报酬，以及劳动者要求了解的其他情况；用人单位有权了解劳动者与劳动合同直接相关的基本情况，劳动者应当如实说明。

第九条 用人单位招用劳动者，不得扣押劳动者的居民身份证和其他证件，不得要求劳动者提供担保或者以其他名义向劳动者收取财物。

第十条 建立劳动关系，应当订立书面劳动合同。已建立劳动关系，未同时订立书面劳动合同的，应当自用工之日起一个月内订立书面劳动合同。用人单位与劳动者在用工前订立劳动合同的，劳动关系自用工之日起建立。

第十一条 用人单位未在用工的同时订立书面劳动合同，与劳动者约定的劳动报酬不明确的，新招用的劳动者的劳动报酬按照集体合同规定的标准执行；没有集体合同或者集体合同未规定的，实行同工同酬。

第十二条 劳动合同分为固定期限劳动合同、无固定期限劳动合同和以完成一定工作任务为期限的劳动合同。

第十三条 固定期限劳动合同，是指用人单位与劳动者约定合同终止时间的劳动合同。用人单位与劳动者协商一致，可以订立固定期限劳动合同。

第十四条 无固定期限劳动合同，是指用人单位与劳动者约定无确定终止时间的劳动合同。用人单位与劳动者协商一致，可以订立无固定期限劳动合同。有下列情形之一，劳动者提出或者同意续订、订立劳动合同的，除劳动者提出订立固定期限劳动合同外，应当订立无固定期限劳动合同:（一）劳动者在该用人单位连续工作满十年的；（二）用人单位初次实行劳动合同制度或者国有企业改制重新订立劳动合同时，劳动者在该用人单位连续工作满十年且距法定退休年龄不足十年的；（三）连续订立二次固定期限劳动合同，且劳动者没有本法第三十九条和第四十条第一项、第二项规定的情形，续订劳动合同的。用人单位自用工之日起满一年不与劳动者订立书面劳动合同的，视为用人单位与劳动者已订立无固定期限劳动合同。

第十五条 以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。

第十六条 劳动合同由用人单位与劳动者协商一致，并经用人单位与劳动者在劳动合同文本上签字或者盖章生效。劳动合同文本由用人单位和劳动者各执一份。

第十七条 劳动合同应当具备以下条款:（一）用人单位的名称、住所和法定代表人或者主要负责人；（二）劳动者的姓名、住址和居民身份证或者其他有效身份证件号码；（三）劳动合同期限；（四）工作内容和工作地点；（五）工作时间和休息休假；（六）劳动报酬；（七）社会保险；（八）劳动保护、劳动条件和职业危害防护；（九）法律、法规规定应当纳入劳动合同的其他事项。劳动合同除前款规定的必备条款外，用人单位与劳动者可以约定试用期、培训、保守秘密、补充保险和福利待遇等其他事项。

第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。

chunk:2 | line:45-65
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 45-65]
第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。

第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。

第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。

第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。

第二十二条 用人单位为劳动者提供专项培训费用，对其进行专业技术培训的，可以与该劳动者订立协议，约定服务期。劳动者违反服务期约定的，应当按照约定向用人单位支付违约金。违约金的数额不得超过用人单位提供的培训费用。用人单位要求劳动者支付的违约金不得超过服务期尚未履行部分所应分摊的培训费用。用人单位与劳动者约定服务期的，不影响按照正常的工资调整机制提高劳动者在服务期期间的劳动报酬。

第二十三条 用人单位与劳动者可以在劳动合同中约定保守用人单位的商业秘密和与知识产权相关的保密事项。对负有保密义务的劳动者，用人单位可以在劳动合同或者保密协议中与劳动者约定竞业限制条款，并约定在解除或者终止劳动合同后，在竞业限制期限内按月给予劳动者经济补偿。劳动者违反竞业限制约定的，应当按照约定向用人单位支付违约金。

第二十四条 竞业限制的人员限于用人单位的高级管理人员、高级技术人员和其他负有保密义务的人员。竞业限制的范围、地域、期限由用人单位与劳动者约定，竞业限制的约定不得违反法律、法规的规定。在解除或者终止劳动合同后，前款规定的人员到与本单位生产或者经营同类产品、从事同类业务的有竞争关系的其他用人单位，或者自己开业生产或者经营同类产品、从事同类业务的竞业限制期限，不得超过二年。

第二十五条 除本法第二十二条和第二十三条规定的情形外，用人单位不得与劳动者约定由劳动者承担违约金。

第二十六条 下列劳动合同无效或者部分无效:（一）以欺诈、胁迫的手段或者乘人之危，使对方在违背真实意思的情况下订立或者变更劳动合同的；（二）用人单位免除自己的法定责任、排除劳动者权利的；（三）违反法律、行政法规强制性规定的。对劳动合同的无效或者部分无效有争议的，由劳动争议仲裁机构或者人民法院确认。

第二十七条 劳动合同部分无效，不影响其他部分效力的，其他部分仍然有效。

第二十八条 劳动合同被确认无效，劳动者已付出劳动的，用人单位应当向劳动者支付劳动报酬。劳动报酬的数额，参照本单位相同或者相近岗位劳动者的劳动报酬确定。


[exit_code] 0

====================================================================================================
ALL 14 scripts completed successfully.
finished_at: 2026-06-20T15:02:26
