================================================================================================
nbrag MCP 检索函数返回证据报告（HTTP 端口 9101）
================================================================================================
说明: 本脚本只如实记录每个 MCP 工具的调用入参和返回结果，不做任何质量判定。
质量判断完全交给读取本 txt 的 AI。
输出文件: D:\codes\nbrag\tests\retrieval_quality_check\retrieval_report.txt

------------------------------------------------------------------------------------------------
调用函数: 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 diagnostic isolation: use nbrag_search / nbrag_search_only_bm25 / nbrag_search_only_vector.
- Need exact wording / article number / API name / constant: use nbrag_grep.
- Need Python .py symbol body: use nbrag_find_definition.
- Need exact full file_path first: use nbrag_find_files.
- Stop once current evidence is enough to answer; do not call extra tools just to complete a workflow.

Key follow-up handles reused across tools:
- file_path → nbrag_get_raw_file / nbrag_get_file_chunks / filter_file_path
- doc_id + chunk_index → nbrag_get_adjacent_chunks
- doc_id + line:N-M → nbrag_get_chunks_by_lines

Behavior notes:
- search/search_and_fetch keep query as the main semantic question; use bm25_query only for better exact lexical anchors.
- If filter_file_path is set in hybrid retrieval, current behavior narrows vector search to that file and skips cross-file BM25 fusion.

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.

Embedded nbrag workflow guide:
- The bundled guide is included below because some hosts do not load local Skills automatically.
# nbrag 知识库检索工作流

nbrag 提供一组面向 AI 的知识库 MCP 工具。核心目标不是“把所有工具都调用一遍”，而是：**用最少的调用拿到足够可靠的证据，然后回答。**

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

如果没有加载本 Skill 或不确定下一步，先调用 `nbrag_help` 获取 MCP 内置的决策指南与 follow-up 句柄说明。某些 host 不会自动加载本地 Skill，因此 `nbrag_help` 可能内嵌完整工作流文本。

## 先记住 4 个核心原则

1. **不知道 `collection_name` 时先 `nbrag_stats`。**
2. **大多数知识 / 用法 / 证据问题，默认先 `nbrag_search_and_fetch`。**
3. **只有在确实需要 exact wording 时，才切到 `nbrag_grep`。**
4. **当前返回已经足够回答时就停止，不要为了走流程继续调工具。**

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

| 场景 | 首选工具 | 什么时候切换 |
|---|---|---|
| 不知道有哪些知识库 / 不确定 `collection_name` | `nbrag_stats` | 确认知识库后进入检索 |
| 知识、用法、示例、条文解释、手册问答、源码怎么用 | `nbrag_search_and_fetch` | 默认保留自然语言 `query`；如果 BM25 需要匹配不同的精确术语，再额外传 `bm25_query`。传入 `bm25_query` 不会关闭向量检索或 rerank，它只影响 BM25 的词法匹配。 |
| 需要关闭 rerank / BM25、只看 metadata、隔离召回策略 | `nbrag_search` | 若想单独看 BM25 或向量效果，再用单策略工具；只有在词法措辞确实不同于语义问法时才考虑传 `bm25_query`。传入 `bm25_query` 不会关闭向量检索或 rerank。 |
| 想判断“这次命中是不是 BM25 的功劳” | `nbrag_search_only_bm25` | 诊断完回到正常检索 |
| 想判断“embedding 语义到底抓到什么” | `nbrag_search_only_vector` | 诊断完回到正常检索 |
| 精确术语、条文号、标题、类名、函数名、常量、错误字符串 | `nbrag_grep` | 如果其实不是 exact wording 问题，而是概念问题，回到 `nbrag_search_and_fetch` |
| 已知道 Python 符号名，想看完整定义 | `nbrag_find_definition` | 若不是 Python `.py`，改用 `nbrag_grep` / `nbrag_search_and_fetch` |
| 只知道文件名或路径片段 | `nbrag_find_files` | 拿到完整 `file_path` 后再读原文或缩小搜索范围 |

## 默认入口：`nbrag_search_and_fetch`

对大多数问题，先用：

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

如果语义问法和 BM25 需要匹配的精确词法措辞不同，可以额外传：

```python
nbrag_search_and_fetch(query="...", bm25_query="...", collection_name="...")
```

这里的 `query` 仍然是主语义问题，继续用于向量检索和 rerank；`bm25_query` 只影响 BM25 的词法匹配，不会关闭向量检索。如果 `bm25_query` 留空，BM25 默认回退使用 `query`。

为什么它通常是默认入口：
- 一次调用同时给你**排名结果**和**自动抓取的原文上下文**
- 比只看 chunk 更不容易误解片段
- 返回里已经包含后续调用常用句柄：`file_path`、`doc_id`、`chunk_index`、`line:N-M`
- `fetch_context_chars=4000` 默认表示**每条 ranked hit 总上下文约 4000 字符，前后大约各 2000**，不是所有结果总共 4000 字符；`top_k` 很大时不要随意把它设成 10000 这类大值

什么时候不必继续调其他工具：
- 自动抓到的原文已经足够回答
- 排名结果和原文证据一致，结论明确
- 用户只需要结论或简短说明，而不是完整源码漫游

什么时候继续：
- 需要**精确 wording** 证据 → `nbrag_grep`
- 需要**更大原文上下文** → `nbrag_get_raw_file`
- 需要**围绕某个 chunk 扩展** → `nbrag_get_adjacent_chunks`
- 需要**按行号反查 chunk/scope** → `nbrag_get_chunks_by_lines`
- 需要**完整文件路径** → `nbrag_find_files`

## exact vs semantic：什么时候用 `nbrag_grep`

`nbrag_grep` 是**字面文本 / 正则匹配**，不是语义检索。

适合：
- 法律条文号：`第四十二条`
- 标题 / 专业术语 / 缩写 / 编号
- Python class/function 名
- import / decorator / constant / error string

上下文大小：`match_context_chars=2000` 默认表示**每个 grep match 总上下文约 2000 字符，前后大约各 1000**，不是所有匹配结果总共 2000 字符；如果 `max_results=10` 且设成 10000，可能产生非常大的返回。

不适合：
- 概念问法
- 同义改写
- 摘要式表达
- 原文未出现的概括词

一个简单判断：
- 你要找的是“这句话 / 这个词 / 这个编号有没有**原样出现**” → `nbrag_grep`
- 你要找的是“这个意思 / 这个主题 / 这个问题相关内容在哪” → `nbrag_search_and_fetch`

## Python source workflow / Python 源码场景

Python `.py` 是 nbrag 的强场景之一，但也不要迷信单工具。

推荐决策：
1. `nbrag_search_and_fetch`：先发现概念、调用关系、使用示例
2. `nbrag_grep`：再确认精确符号名 / import / 常量 / 错误字符串
3. `nbrag_find_definition`：拿完整 class/function/method 定义
4. `nbrag_get_raw_file`：需要更大源码上下文时读取原文

如果内容不是 Python `.py`，不要优先用 `nbrag_find_definition`。

## follow-up 句柄怎么接下一跳

### 1. `file_path`
可用于：
- `nbrag_get_raw_file(file_path, collection_name)`
- `nbrag_get_file_chunks(file_path, collection_name)`
- `filter_file_path=...` 缩小 `search` / `search_and_fetch` / `grep` 范围

注意：当前实现里，如果在 `nbrag_search` / `nbrag_search_and_fetch` 中设置 `filter_file_path`，会把向量检索限制到该文件，并跳过跨文件 BM25 融合。它适合做“已知文件内继续深挖”，不适合当作“仍保持全局混合检索，只是稍微偏向这个文件”的语义理解。

### 2. `doc_id + chunk_index`
可用于：
- `nbrag_get_adjacent_chunks(doc_id, chunk_index, collection_name)`

注意：`chunk_index` 应来自 `nbrag_search` / `nbrag_search_and_fetch` 的 `chunk:X/Y` 或 `chunk_index:X` 字段，不要只拿 grep 的 `doc_id` 就直接调这个工具。

### 3. `doc_id + line:N-M`
可用于：
- `nbrag_get_chunks_by_lines(doc_id, line_start, line_end, collection_name)`

### 4. `file_path + line range`
可用于：
- `nbrag_get_raw_file(file_path, collection_name, line_start, line_end)`

## 路径规则

所有要求 `file_path` / `filter_file_path` 的工具，都应传 **nbrag 返回的完整绝对路径**。

不要传：
- `劳动合同法.md`
- `core.py`
- `src/core.py`

优先来源：
- `nbrag_search` / `nbrag_search_and_fetch`
- `nbrag_find_files`
- `nbrag_list`

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

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

这只是决策地图，不是必须走完的流程。当前返回已经足够回答时就停止。

## 多轮检索策略

可以多轮，但每一轮都应更聚焦，而不是更机械。

推荐做法：
- 缩短问题，保留核心对象、约束和术语
- 默认把 `query` 保持为自然语言问题
- `query` 仍然用于向量检索和 rerank；如果 `bm25_query` 留空，BM25 默认回退使用 `query`
- 只有当 BM25 需要匹配不同的精确术语、条文号、缩写或代码时，才额外传 `bm25_query`
- 先语义发现，再 exact 验证
- 必要时缩小到单个 `file_path`
- 当前证据足够时立即停止

不推荐：
- 为了照顾 BM25，把主 `query` 机械拆成一长串空格关键词
- 反复调用同一工具却不改变问题表述
- 明明证据已经够了，还继续“补流程”

## 常见停止条件

以下情况通常可以停止检索并开始回答：
- 已拿到直接回答问题的原文证据
- 多个命中相互印证，没有明显冲突
- 继续调用只会重复现有信息

以下情况说明应继续或换工具：
- 返回内容相关但不够精确
- 需要 literal wording 证据
- 需要更大上下文确认含义
- 文件或知识库范围过大，需要缩小范围

## 常见问题

| 症状 | 常见原因 | 建议 |
|---|---|---|
| collection 不存在 | 名称写错或知识库未准备 | `nbrag_stats()` |
| 搜索为空 | query 太散 / 术语不对 / collection 不对 | 改写 query，必要时改用 `nbrag_grep` |
| grep 无结果 | 原文没有 exact wording，或 regex/大小写不对 | 检查 wording；如果其实是概念问题，回到 `nbrag_search_and_fetch` |
| basename 被当成 `file_path` | 路径不是完整绝对路径 | 先 `nbrag_find_files` 或 `nbrag_list` |
| 想看 clean 原文却还在看 chunk | chunk 会 overlap | 改用 `nbrag_get_raw_file` |

## 一句话总结

**默认先 `nbrag_search_and_fetch`；只有在需要 exact wording、路径发现、chunk 扩展、源码定义时再切专用工具；证据够了就回答。**

[耗时统计] nbrag_help: 0.854 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_stats()
入参: {}
------------------------------------------------------------------------------------------------
collections:
Use collection_name(知识库名字) exactly as shown below when calling retrieval tools.

- langchain_ai_codes_and_docs: docs=4818 chunks=57191
  collection_name(知识库名字): langchain_ai_codes_and_docs
  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, 源码, 文档

- marriage_law: docs=5 chunks=39
  collection_name(知识库名字): marriage_law
  display_name: 婚姻家庭法知识库
  description: 包含婚姻家庭相关法律和司法解释文本，适合查询离婚、夫妻共同财产、子女抚养、婚姻家庭编解释等问题。
  aliases: 婚姻法, 婚姻家庭法, 民法典婚姻家庭编, 夫妻共同财产, 离婚, 抚养
  tags: 法律, 婚姻家庭, 司法解释
  chunk_size: 1000
  chunk_overlap: 150
  last_ingested_at: 2026-06-20 22:14:19

- finance_reports: docs=2 chunks=225
  collection_name(知识库名字): finance_reports
  display_name: 金融报告知识库
  description: 包含金融、理财或投资报告类文本，适合查询报告观点、投资主题、资产配置、市场分析等内容。
  aliases: 金融报告, 理财, 财报, 投资, 资产配置
  tags: 金融, 投资, 报告
  chunk_size: 1000
  chunk_overlap: 150
  last_ingested_at: 2026-06-20 22:14:48

- sanguo: docs=120 chunks=575
  collection_name(知识库名字): sanguo
  display_name: 三国演义知识库
  description: 包含《三国演义》章节正文，适合查询刘备、关羽、张飞、曹操、诸葛亮、孙权等人物与经典情节。
  aliases: 三国, 三国演义, 罗贯中, 刘备, 关羽, 张飞, 曹操, 诸葛亮, 孙权
  tags: 古典小说, 文学, 人物关系

- civil_code: docs=8 chunks=273
  collection_name(知识库名字): civil_code
  display_name: 民法典知识库
  description: 包含《中华人民共和国民法典》全文及各分编章节，适合查询民事法律条文、合同、物权、人格权、婚姻家庭、继承、侵权责任等问题。
  aliases: 民法典, 中华人民共和国民法典, 合同编, 物权编, 人格权编, 婚姻家庭编, 继承编, 侵权责任编
  tags: 法律, 民法, 法规
  chunk_size: 1000
  chunk_overlap: 150
  last_ingested_at: 2026-06-20 22:14:14

- funboost: docs=960 chunks=6548
  collection_name(知识库名字): funboost
  display_name: funboost 源码与文档知识库
  description: 包含 funboost 项目源码和文档，适合查询函数调度、消息队列、broker、BoosterParams、发布消费、重试等实现细节。
  aliases: funboost, 分布式函数调度, Python 队列, BrokerEnum, BoosterParams
  tags: Python, 源码, 消息队列
  chunk_size: 1000
  chunk_overlap: 150
  last_ingested_at: 2026-06-20 22:21:53

- worker_rights: docs=18 chunks=157
  collection_name(知识库名字): worker_rights
  display_name: 劳动者权益知识库
  description: 包含劳动者权益、劳动合同、试用期、工资、社保、工伤、加班等劳动法律和政策资料，适合查询劳动争议和员工权益问题。
  aliases: 劳动法, 劳动合同法, 劳动者权益, 试用期, 工资, 社保, 工伤, 加班
  tags: 法律, 劳动, 权益
  chunk_size: 1000
  chunk_overlap: 150
  last_ingested_at: 2026-06-20 22:14:32


[耗时统计] nbrag_stats: 14.890 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_list(limit=2, offset=0)
入参: {'collection_name': 'worker_rights', 'limit': 2, 'offset': 0}
------------------------------------------------------------------------------------------------
documents returned: 2 | offset: 0 | limit: 2
Returned handle fields for follow-up: doc_id, file_path.

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

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


[耗时统计] nbrag_list: 0.747 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_search(query, bm25_query, top_k=3, include_content=True)
入参: {'query': '1年劳动合同试用期期限上限', 'bm25_query': '试用期 一年劳动合同', 'collection_name': 'worker_rights', 'top_k': 3, 'include_content': True}
------------------------------------------------------------------------------------------------
[worker_rights] 157 chunks | bm25: on | rerank: BAAI/bge-reranker-v2-m3

Returned handle fields for follow-up: file_path, doc_id, chunk_index, line range.
query remains the semantic question for vector retrieval/rerank; bm25_query only changes BM25 wording when BM25 is active.

[1/3] 劳动合同法.md chunk:2/17 chunk_index:2 total_chunks:17 line:39-51 doc_id:81ec846f7c63 dist:0.3179 score:0.9368
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 39-51]
第十五条 以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[3/3] 劳动合同法.md chunk:3/17 chunk_index:3 total_chunks:17 line:51-65 doc_id:81ec846f7c63 dist:0.3246 score:0.6114
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 51-65]
第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。

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

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

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

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

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

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

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


[耗时统计] nbrag_search: 3.987 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_search(metadata-only: include_content=False)
入参: {'query': '1年劳动合同试用期期限上限', 'bm25_query': '试用期 一年劳动合同', 'collection_name': 'worker_rights', 'top_k': 2, 'include_content': False}
------------------------------------------------------------------------------------------------
[worker_rights] 157 chunks | bm25: on | rerank: BAAI/bge-reranker-v2-m3

Returned handle fields for follow-up: file_path, doc_id, chunk_index, line range.
query remains the semantic question for vector retrieval/rerank; bm25_query only changes BM25 wording when BM25 is active.

[1/2] 劳动合同法.md chunk:2/17 chunk_index:2 total_chunks:17 line:39-51 doc_id:81ec846f7c63 dist:0.3179 score:0.9358
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
content omitted

[2/2] 劳动法.md chunk:2/13 chunk_index:2 total_chunks:13 line:42-64 doc_id:2db295f90839 dist:0.3989 score:0.8441
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动法.md
content omitted


[耗时统计] nbrag_search: 1.231 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_search_only_bm25(query='试用期', include_content=False)
入参: {'query': '试用期', 'collection_name': 'worker_rights', 'top_k': 2, 'include_content': False}
------------------------------------------------------------------------------------------------
[worker_rights] 157 chunks | bm25: on | rerank: off

Returned handle fields for follow-up: file_path, doc_id, chunk_index, line range.
query remains the semantic question for vector retrieval/rerank; bm25_query only changes BM25 wording when BM25 is active.

[1/2] 劳动合同法.md chunk:11/17 chunk_index:11 total_chunks:17 line:161-171 doc_id:81ec846f7c63 dist:0.0000
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
content omitted

[2/2] 劳动合同法.md chunk:13/17 chunk_index:13 total_chunks:17 line:191-207 doc_id:81ec846f7c63 dist:0.0000
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
content omitted


[耗时统计] nbrag_search_only_bm25: 0.716 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_search_only_vector(query, include_content=False)
入参: {'query': '1年劳动合同试用期期限上限', 'collection_name': 'worker_rights', 'top_k': 2, 'include_content': False}
------------------------------------------------------------------------------------------------
[worker_rights] 157 chunks | bm25: off | rerank: off

Returned handle fields for follow-up: file_path, doc_id, chunk_index, line range.
query remains the semantic question for vector retrieval/rerank; bm25_query only changes BM25 wording when BM25 is active.

[1/2] 劳动合同法.md chunk:2/17 chunk_index:2 total_chunks:17 line:39-51 doc_id:81ec846f7c63 dist:0.3179
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
content omitted

[2/2] 劳动合同法.md chunk:3/17 chunk_index:3 total_chunks:17 line:51-65 doc_id:81ec846f7c63 dist:0.3246
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
content omitted


[耗时统计] nbrag_search_only_vector: 1.164 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_search_and_fetch(query, bm25_query, top_k=3, fetch_top_n_raw=1, fetch_context_chars=4000)
入参: {'query': '1年劳动合同试用期期限上限', 'bm25_query': '试用期 一年劳动合同', 'collection_name': 'worker_rights', 'top_k': 3, 'fetch_top_n_raw': 1, 'fetch_context_chars': 4000}
------------------------------------------------------------------------------------------------
[worker_rights] 157 chunks | bm25: on | rerank: BAAI/bge-reranker-v2-m3

This tool returns both ranked hits and auto-fetched stored original content.
query remains the semantic question for vector retrieval/rerank; bm25_query only changes BM25 wording when BM25 is active.
fetch_context_chars is per ranked hit: roughly N total context chars split half before and half after, not a total response cap.
Reused follow-up handles in ranked hits: file_path, doc_id, chunk_index, line:N-M.

Ranked search results:

[1/3] 劳动合同法.md chunk:2/17 chunk_index:2 total_chunks:17 line:39-51 doc_id:81ec846f7c63 dist:0.3179 score:0.9368
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 39-51]
第十五条 以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[3/3] 劳动合同法.md chunk:3/17 chunk_index:3 total_chunks:17 line:51-65 doc_id:81ec846f7c63 dist:0.3246 score:0.6114
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 51-65]
第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。

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

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

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

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

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

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

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

Auto-fetched original content (1 file(s)):
Returned raw snippets come from the stored original-file snapshot captured at ingestion time.

original_file: 劳动合同法.md | file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md | doc_id: 81ec846f7c63 | range: line:1-95
# 中华人民共和国劳动合同法

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


## 第一章 总则

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

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

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

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

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

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


## 第二章 劳动合同的订立

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

第三十六条 用人单位与劳动者协商一致，可以解除劳动合同。

第三十七条 劳动者提前三十日以书面形式通知用人单位，可以解除劳动合同。劳动者在试用期内提前三日通知用人单位，可以解除劳动合同。

第三十八条 用人单位有下列情形之一的，劳动者可以解除劳动合同:（一）未按照劳动合同约定提供劳动保护或者劳动条件的；（二）未及时足额支付劳动报酬的；（三）未依法为劳动者缴纳社会保险费的；（四）用人单位的规章制度违反法律、法规的规定，损害劳动者权益的；（五）因本法第二十六条第一款规定的情形致使劳动合同无效的；（六）法律、行政法规规定劳动者可以解除劳动合同的其他情形。用人单位以暴力、威胁或者非法限制人身自由的手段强迫劳动者劳动的，或者用人单位违章指挥、强令冒险作业危及劳动者人身安全的，劳动者可以立即解除劳动合同，不需事先告知用人单位。

第三十九条 劳动者有下列情形之一的，用人单位可以解除劳动合同:（一）在试用期间被证明不符合录用条件的；（二）严重违反用人单位的规章制度的；（三）严重失职，营私舞弊，给用人单位造成重大损害的；（四）劳动者同时与其他用人单位建立劳动关系，对完成本单位的工作任务造成严重影响，或者经用人单位提出，拒不改正的；（五）因本法第二十六条第一款第一项规定的情形致使劳动合同无效的；（六）被依法追究刑事责任的。

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



[耗时统计] nbrag_search_and_fetch: 13.879 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_grep(keyword='试用期', max_results=5)
入参: {'keyword': '试用期', 'collection_name': 'worker_rights', 'max_results': 5, 'match_context_chars': 2000}
------------------------------------------------------------------------------------------------
grep matches: 5

match_context_chars is per grep match: roughly N total context chars split half before and half after, not a total response cap.
Returned handle fields for follow-up: file_path, doc_id, matched_line, line_range.

劳动法.md | matched_line: 54 | line_range: line:54-54 | doc_id: 2db295f90839
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动法.md
       22| 第八条 劳动者依照法律规定，通过职工大会、职工代表大会或者其他形式，参与民主管理或者就保护劳动者合法权益与用人单位进行平等协商。
       23| 
       24| 第九条 国务院劳动行政部门主管全国劳动工作。县级以上地方人民政府劳动行政部门主管本行政区域内的劳动工作。
       25| 
       26| 
       27| ## 第二章 促进就业
       28| 
       29| 第十条 国家通过促进经济和社会发展，创造就业条件，扩大就业机会。国家鼓励企业、事业组织、社会团体在法律、行政法规规定的范围内兴办产业或者拓展经营，增加就业。国家支持劳动者自愿组织起来就业和从事个体经营实现就业。
       30| 
       31| 第十一条 地方各级人民政府应当采取措施，发展多种类型的职业介绍机构，提供就业服务。
       32| 
       33| 第十二条 劳动者就业，不因民族、种族、性别、宗教信仰不同而受歧视。
       34| 
       35| 第十三条 妇女享有与男子平等的就业权利。在录用职工时，除国家规定的不适合妇女的工种或者岗位外，不得以性别为由拒绝录用妇女或者提高对妇女的录用标准。
       36| 
       37| 第十四条 残疾人、少数民族人员、退出现役的军人的就业，法律、法规有特别规定的，从其规定。
       38| 
       39| 第十五条 禁止用人单位招用未满十六周岁的未成年人。文艺、体育和特种工艺单位招用未满十六周岁的未成年人，必须遵守国家有关规定，并保障其接受义务教育的权利。
       40| 
       41| 
       42| ## 第三章 劳动合同和集体合同
       43| 
       44| 第十六条 劳动合同是劳动者与用人单位确立劳动关系、明确双方权利和义务的协议。建立劳动关系应当订立劳动合同。
       45| 
       46| 第十七条 订立和变更劳动合同，应当遵循平等自愿、协商一致的原则，不得违反法律、行政法规的规定。劳动合同依法订立即具有法律约束力，当事人必须履行劳动合同规定的义务。
       47| 
       48| 第十八条 下列劳动合同无效：（一）违反法律、行政法规的劳动合同；（二）采取欺诈、威胁等手段订立的劳动合同。无效的劳动合同，从订立的时候起，就没有法律约束力。确认劳动合同部分无效的，如果不影响其余部分的效力，其余部分仍然有效。劳动合同的无效，由劳动争议仲裁委员会或者人民法院确认。
       49| 
       50| 第十九条 劳动合同应当以书面形式订立，并具备以下条款：（一）劳动合同期限；（二）工作内容；（三）劳动保护和劳动条件；（四）劳动报酬；（五）劳动纪律；（六）劳动合同终止的条件；（七）违反劳动合同的责任。劳动合同除前款规定的必备条款外，当事人可以协商约定其他内容。
       51| 
       52| 第二十条 劳动合同的期限分为有固定期限、无固定期限和以完成一定的工作为期限。劳动者在同一用人单位连续工作满十年以上，当事人双方同意续延劳动合同的，如果劳动者提出订立无固定期限的劳动合同，应当订立无固定期限的劳动合同。
       53| 
>>>    54| 第二十一条 劳动合同可以约定试用期。试用期最长不得超过六个月。
       55| 
       56| 第二十二条 劳动合同当事人可以在劳动合同中约定保守用人单位商业秘密的有关事项。
       57| 
       58| 第二十三条 劳动合同期满或者当事人约定的劳动合同终止条件出现，劳动合同即行终止。
       59| 
       60| 第二十四条 经劳动合同当事人协商一致，劳动合同可以解除。
       61| 
       62| 第二十五条 劳动者有下列情形之一的，用人单位可以解除劳动合同：（一）在试用期间被证明不符合录用条件的；（二）严重违反劳动纪律或者用人单位规章制度的；（三）严重失职，营私舞弊，对用人单位利益造成重大损害的；（四）被依法追究刑事责任的。
       63| 
       64| 第二十六条 有下列情形之一的，用人单位可以解除劳动合同，但是应当提前三十日以书面形式通知劳动者本人：（一）劳动者患病或者非因工负伤，医疗期满后，不能从事原工作也不能从事由用人单位另行安排的工作的；（二）劳动者不能胜任工作，经过培训或者调整工作岗位，仍不能胜任工作的；（三）劳动合同订立时所依据的客观情况发生重大变化，致使原劳动合同无法履行，经当事人协商不能就变更劳动合同达成协议的。
       65| 
       66| 第二十七条 用人单位濒临破产进行法定整顿期间或者生产经营状况发生严重困难，确需裁减人员的，应当提前三十日向工会或者全体职工说明情况，听取工会或者职工的意见，经向劳动行政部门报告后，可以裁减人员。用人单位依据本条规定裁减人员，在六个月内录用人员的，应当优先录用被裁减的人员。
       67| 
       68| 第二十八条 用人单位依据本法第二十四条、第二十六条、第二十七条的规定解除劳动合同的，应当依照国家有关规定给予经济补偿。
       69| 
       70| 第二十九条 劳动者有下列情形之一的，用人单位不得依据本法第二十六条、第二十七条的规定解除劳动合同：（一）患职业病或者因工负伤并被确认丧失或者部分丧失劳动能力的；（二）患病或者负伤，在规定的医疗期内的；（三）女职工在孕期、产期、哺乳期内的；（四）法律、行政法规规定的其他情形。
       71| 
       72| 第三十条 用人单位解除劳动合同，工会认为不适当的，有权提出意见。如果用人单位违反法律、法规或者劳动合同，工会有权要求重新处理；劳动者申请仲裁或者提起诉讼的，工会应当依法给予支持和帮助。
       73| 
       74| 第三十一条 劳动者解除劳动合同，应当提前三十日以书面形式通知用人单位。
       75| 
       76| 第三十二条 有下列情形之一的，劳动者可以随时通知用人单位解除劳动合同：（一）在试用期内的；（二）用人单位以暴力、威胁或者非法限制人身自由的手段强迫劳动的；（三）用人单位未按照劳动合同约定支付劳动报酬或者提供劳动条件的。

劳动法.md | matched_line: 62 | line_range: line:62-62 | doc_id: 2db295f90839
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动法.md
       29| 第十条 国家通过促进经济和社会发展，创造就业条件，扩大就业机会。国家鼓励企业、事业组织、社会团体在法律、行政法规规定的范围内兴办产业或者拓展经营，增加就业。国家支持劳动者自愿组织起来就业和从事个体经营实现就业。
       30| 
       31| 第十一条 地方各级人民政府应当采取措施，发展多种类型的职业介绍机构，提供就业服务。
       32| 
       33| 第十二条 劳动者就业，不因民族、种族、性别、宗教信仰不同而受歧视。
       34| 
       35| 第十三条 妇女享有与男子平等的就业权利。在录用职工时，除国家规定的不适合妇女的工种或者岗位外，不得以性别为由拒绝录用妇女或者提高对妇女的录用标准。
       36| 
       37| 第十四条 残疾人、少数民族人员、退出现役的军人的就业，法律、法规有特别规定的，从其规定。
       38| 
       39| 第十五条 禁止用人单位招用未满十六周岁的未成年人。文艺、体育和特种工艺单位招用未满十六周岁的未成年人，必须遵守国家有关规定，并保障其接受义务教育的权利。
       40| 
       41| 
       42| ## 第三章 劳动合同和集体合同
       43| 
       44| 第十六条 劳动合同是劳动者与用人单位确立劳动关系、明确双方权利和义务的协议。建立劳动关系应当订立劳动合同。
       45| 
       46| 第十七条 订立和变更劳动合同，应当遵循平等自愿、协商一致的原则，不得违反法律、行政法规的规定。劳动合同依法订立即具有法律约束力，当事人必须履行劳动合同规定的义务。
       47| 
       48| 第十八条 下列劳动合同无效：（一）违反法律、行政法规的劳动合同；（二）采取欺诈、威胁等手段订立的劳动合同。无效的劳动合同，从订立的时候起，就没有法律约束力。确认劳动合同部分无效的，如果不影响其余部分的效力，其余部分仍然有效。劳动合同的无效，由劳动争议仲裁委员会或者人民法院确认。
       49| 
       50| 第十九条 劳动合同应当以书面形式订立，并具备以下条款：（一）劳动合同期限；（二）工作内容；（三）劳动保护和劳动条件；（四）劳动报酬；（五）劳动纪律；（六）劳动合同终止的条件；（七）违反劳动合同的责任。劳动合同除前款规定的必备条款外，当事人可以协商约定其他内容。
       51| 
       52| 第二十条 劳动合同的期限分为有固定期限、无固定期限和以完成一定的工作为期限。劳动者在同一用人单位连续工作满十年以上，当事人双方同意续延劳动合同的，如果劳动者提出订立无固定期限的劳动合同，应当订立无固定期限的劳动合同。
       53| 
       54| 第二十一条 劳动合同可以约定试用期。试用期最长不得超过六个月。
       55| 
       56| 第二十二条 劳动合同当事人可以在劳动合同中约定保守用人单位商业秘密的有关事项。
       57| 
       58| 第二十三条 劳动合同期满或者当事人约定的劳动合同终止条件出现，劳动合同即行终止。
       59| 
       60| 第二十四条 经劳动合同当事人协商一致，劳动合同可以解除。
       61| 
>>>    62| 第二十五条 劳动者有下列情形之一的，用人单位可以解除劳动合同：（一）在试用期间被证明不符合录用条件的；（二）严重违反劳动纪律或者用人单位规章制度的；（三）严重失职，营私舞弊，对用人单位利益造成重大损害的；（四）被依法追究刑事责任的。
       63| 
       64| 第二十六条 有下列情形之一的，用人单位可以解除劳动合同，但是应当提前三十日以书面形式通知劳动者本人：（一）劳动者患病或者非因工负伤，医疗期满后，不能从事原工作也不能从事由用人单位另行安排的工作的；（二）劳动者不能胜任工作，经过培训或者调整工作岗位，仍不能胜任工作的；（三）劳动合同订立时所依据的客观情况发生重大变化，致使原劳动合同无法履行，经当事人协商不能就变更劳动合同达成协议的。
       65| 
       66| 第二十七条 用人单位濒临破产进行法定整顿期间或者生产经营状况发生严重困难，确需裁减人员的，应当提前三十日向工会或者全体职工说明情况，听取工会或者职工的意见，经向劳动行政部门报告后，可以裁减人员。用人单位依据本条规定裁减人员，在六个月内录用人员的，应当优先录用被裁减的人员。
       67| 
       68| 第二十八条 用人单位依据本法第二十四条、第二十六条、第二十七条的规定解除劳动合同的，应当依照国家有关规定给予经济补偿。
       69| 
       70| 第二十九条 劳动者有下列情形之一的，用人单位不得依据本法第二十六条、第二十七条的规定解除劳动合同：（一）患职业病或者因工负伤并被确认丧失或者部分丧失劳动能力的；（二）患病或者负伤，在规定的医疗期内的；（三）女职工在孕期、产期、哺乳期内的；（四）法律、行政法规规定的其他情形。
       71| 
       72| 第三十条 用人单位解除劳动合同，工会认为不适当的，有权提出意见。如果用人单位违反法律、法规或者劳动合同，工会有权要求重新处理；劳动者申请仲裁或者提起诉讼的，工会应当依法给予支持和帮助。
       73| 
       74| 第三十一条 劳动者解除劳动合同，应当提前三十日以书面形式通知用人单位。
       75| 
       76| 第三十二条 有下列情形之一的，劳动者可以随时通知用人单位解除劳动合同：（一）在试用期内的；（二）用人单位以暴力、威胁或者非法限制人身自由的手段强迫劳动的；（三）用人单位未按照劳动合同约定支付劳动报酬或者提供劳动条件的。
       77| 
       78| 第三十三条 企业职工一方与企业可以就劳动报酬、工作时间、休息休假、劳动安全卫生、保险福利等事项，签订集体合同。集体合同草案应当提交职工代表大会或者全体职工讨论通过。集体合同由工会代表职工与企业签订；没有建立工会的企业，由职工推举的代表与企业签订。
       79| 
       80| 第三十四条 集体合同签订后应当报送劳动行政部门；劳动行政部门自收到集体合同文本之日起十五日内未提出异议的，集体合同即行生效。
       81| 
       82| 第三十五条 依法签订的集体合同对企业和企业全体职工具有约束力。职工个人与企业订立的劳动合同中劳动条件和劳动报酬等标准不得低于集体合同的规定。

劳动法.md | matched_line: 76 | line_range: line:76-76 | doc_id: 2db295f90839
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动法.md
       52| 第二十条 劳动合同的期限分为有固定期限、无固定期限和以完成一定的工作为期限。劳动者在同一用人单位连续工作满十年以上，当事人双方同意续延劳动合同的，如果劳动者提出订立无固定期限的劳动合同，应当订立无固定期限的劳动合同。
       53| 
       54| 第二十一条 劳动合同可以约定试用期。试用期最长不得超过六个月。
       55| 
       56| 第二十二条 劳动合同当事人可以在劳动合同中约定保守用人单位商业秘密的有关事项。
       57| 
       58| 第二十三条 劳动合同期满或者当事人约定的劳动合同终止条件出现，劳动合同即行终止。
       59| 
       60| 第二十四条 经劳动合同当事人协商一致，劳动合同可以解除。
       61| 
       62| 第二十五条 劳动者有下列情形之一的，用人单位可以解除劳动合同：（一）在试用期间被证明不符合录用条件的；（二）严重违反劳动纪律或者用人单位规章制度的；（三）严重失职，营私舞弊，对用人单位利益造成重大损害的；（四）被依法追究刑事责任的。
       63| 
       64| 第二十六条 有下列情形之一的，用人单位可以解除劳动合同，但是应当提前三十日以书面形式通知劳动者本人：（一）劳动者患病或者非因工负伤，医疗期满后，不能从事原工作也不能从事由用人单位另行安排的工作的；（二）劳动者不能胜任工作，经过培训或者调整工作岗位，仍不能胜任工作的；（三）劳动合同订立时所依据的客观情况发生重大变化，致使原劳动合同无法履行，经当事人协商不能就变更劳动合同达成协议的。
       65| 
       66| 第二十七条 用人单位濒临破产进行法定整顿期间或者生产经营状况发生严重困难，确需裁减人员的，应当提前三十日向工会或者全体职工说明情况，听取工会或者职工的意见，经向劳动行政部门报告后，可以裁减人员。用人单位依据本条规定裁减人员，在六个月内录用人员的，应当优先录用被裁减的人员。
       67| 
       68| 第二十八条 用人单位依据本法第二十四条、第二十六条、第二十七条的规定解除劳动合同的，应当依照国家有关规定给予经济补偿。
       69| 
       70| 第二十九条 劳动者有下列情形之一的，用人单位不得依据本法第二十六条、第二十七条的规定解除劳动合同：（一）患职业病或者因工负伤并被确认丧失或者部分丧失劳动能力的；（二）患病或者负伤，在规定的医疗期内的；（三）女职工在孕期、产期、哺乳期内的；（四）法律、行政法规规定的其他情形。
       71| 
       72| 第三十条 用人单位解除劳动合同，工会认为不适当的，有权提出意见。如果用人单位违反法律、法规或者劳动合同，工会有权要求重新处理；劳动者申请仲裁或者提起诉讼的，工会应当依法给予支持和帮助。
       73| 
       74| 第三十一条 劳动者解除劳动合同，应当提前三十日以书面形式通知用人单位。
       75| 
>>>    76| 第三十二条 有下列情形之一的，劳动者可以随时通知用人单位解除劳动合同：（一）在试用期内的；（二）用人单位以暴力、威胁或者非法限制人身自由的手段强迫劳动的；（三）用人单位未按照劳动合同约定支付劳动报酬或者提供劳动条件的。
       77| 
       78| 第三十三条 企业职工一方与企业可以就劳动报酬、工作时间、休息休假、劳动安全卫生、保险福利等事项，签订集体合同。集体合同草案应当提交职工代表大会或者全体职工讨论通过。集体合同由工会代表职工与企业签订；没有建立工会的企业，由职工推举的代表与企业签订。
       79| 
       80| 第三十四条 集体合同签订后应当报送劳动行政部门；劳动行政部门自收到集体合同文本之日起十五日内未提出异议的，集体合同即行生效。
       81| 
       82| 第三十五条 依法签订的集体合同对企业和企业全体职工具有约束力。职工个人与企业订立的劳动合同中劳动条件和劳动报酬等标准不得低于集体合同的规定。
       83| 
       84| 
       85| ## 第四章 工作时间和休息休假
       86| 
       87| 第三十六条 国家实行劳动者每日工作时间不超过八小时、平均每周工作时间不超过四十四小时的工时制度。
       88| 
       89| 第三十七条 对实行计件工作的劳动者，用人单位应当根据本法第三十六条规定的工时制度合理确定其劳动定额和计件报酬标准。
       90| 
       91| 第三十八条 用人单位应当保证劳动者每周至少休息一日。
       92| 
       93| 第三十九条 企业因生产特点不能实行本法第三十六条、第三十八条规定的，经劳动行政部门批准，可以实行其他工作和休息办法。
       94| 
       95| 第四十条 用人单位在下列节日期间应当依法安排劳动者休假：（一）元旦；（二）春节；（三）国际劳动节；（四）国庆节；（五）法律、法规规定的其他休假节日。
       96| 
       97| 第四十一条 用人单位由于生产经营需要，经与工会和劳动者协商后可以延长工作时间，一般每日不得超过一小时；因特殊原因需要延长工作时间的，在保障劳动者身体健康的条件下延长工作时间每日不得超过三小时，但是每月不得超过三十六小时。
       98| 
       99| 第四十二条 有下列情形之一的，延长工作时间不受本法第四十一条规定的限制：（一）发生自然灾害、事故或者因其他原因，威胁劳动者生命健康和财产安全，需要紧急处理的；（二）生产设备、交通运输线路、公共设施发生故障，影响生产和公众利益，必须及时抢修的；（三）法律、行政法规规定的其他情形。
      100| 
      101| 第四十三条 用人单位不得违反本法规定延长劳动者的工作时间。
      102| 
      103| 第四十四条 有下列情形之一的，用人单位应当按照下列标准支付高于劳动者正常工作时间工资的工资报酬：（一）安排劳动者延长工作时间的，支付不低于工资的百分之一百五十的工资报酬；（二）休息日安排劳动者工作又不能安排补休的，支付不低于工资的百分之二百的工资报酬；（三）法定休假日安排劳动者工作的，支付不低于工资的百分之三百的工资报酬。

劳动合同法.md | matched_line: 43 | line_range: line:43-43 | doc_id: 81ec846f7c63
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
       23| 第七条 用人单位自用工之日起即与劳动者建立劳动关系。用人单位应当建立职工名册备查。
       24| 
       25| 第八条 用人单位招用劳动者时，应当如实告知劳动者工作内容、工作条件、工作地点、职业危害、安全生产状况、劳动报酬，以及劳动者要求了解的其他情况；用人单位有权了解劳动者与劳动合同直接相关的基本情况，劳动者应当如实说明。
       26| 
       27| 第九条 用人单位招用劳动者，不得扣押劳动者的居民身份证和其他证件，不得要求劳动者提供担保或者以其他名义向劳动者收取财物。
       28| 
       29| 第十条 建立劳动关系，应当订立书面劳动合同。已建立劳动关系，未同时订立书面劳动合同的，应当自用工之日起一个月内订立书面劳动合同。用人单位与劳动者在用工前订立劳动合同的，劳动关系自用工之日起建立。
       30| 
       31| 第十一条 用人单位未在用工的同时订立书面劳动合同，与劳动者约定的劳动报酬不明确的，新招用的劳动者的劳动报酬按照集体合同规定的标准执行；没有集体合同或者集体合同未规定的，实行同工同酬。
       32| 
       33| 第十二条 劳动合同分为固定期限劳动合同、无固定期限劳动合同和以完成一定工作任务为期限的劳动合同。
       34| 
       35| 第十三条 固定期限劳动合同，是指用人单位与劳动者约定合同终止时间的劳动合同。用人单位与劳动者协商一致，可以订立固定期限劳动合同。
       36| 
       37| 第十四条 无固定期限劳动合同，是指用人单位与劳动者约定无确定终止时间的劳动合同。用人单位与劳动者协商一致，可以订立无固定期限劳动合同。有下列情形之一，劳动者提出或者同意续订、订立劳动合同的，除劳动者提出订立固定期限劳动合同外，应当订立无固定期限劳动合同:（一）劳动者在该用人单位连续工作满十年的；（二）用人单位初次实行劳动合同制度或者国有企业改制重新订立劳动合同时，劳动者在该用人单位连续工作满十年且距法定退休年龄不足十年的；（三）连续订立二次固定期限劳动合同，且劳动者没有本法第三十九条和第四十条第一项、第二项规定的情形，续订劳动合同的。用人单位自用工之日起满一年不与劳动者订立书面劳动合同的，视为用人单位与劳动者已订立无固定期限劳动合同。
       38| 
       39| 第十五条 以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。
       40| 
       41| 第十六条 劳动合同由用人单位与劳动者协商一致，并经用人单位与劳动者在劳动合同文本上签字或者盖章生效。劳动合同文本由用人单位和劳动者各执一份。
       42| 
>>>    43| 第十七条 劳动合同应当具备以下条款:（一）用人单位的名称、住所和法定代表人或者主要负责人；（二）劳动者的姓名、住址和居民身份证或者其他有效身份证件号码；（三）劳动合同期限；（四）工作内容和工作地点；（五）工作时间和休息休假；（六）劳动报酬；（七）社会保险；（八）劳动保护、劳动条件和职业危害防护；（九）法律、法规规定应当纳入劳动合同的其他事项。劳动合同除前款规定的必备条款外，用人单位与劳动者可以约定试用期、培训、保守秘密、补充保险和福利待遇等其他事项。
       44| 
       45| 第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。
       46| 
       47| 第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。
       48| 
       49| 第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。
       50| 
       51| 第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。
       52| 
       53| 第二十二条 用人单位为劳动者提供专项培训费用，对其进行专业技术培训的，可以与该劳动者订立协议，约定服务期。劳动者违反服务期约定的，应当按照约定向用人单位支付违约金。违约金的数额不得超过用人单位提供的培训费用。用人单位要求劳动者支付的违约金不得超过服务期尚未履行部分所应分摊的培训费用。用人单位与劳动者约定服务期的，不影响按照正常的工资调整机制提高劳动者在服务期期间的劳动报酬。
       54| 
       55| 第二十三条 用人单位与劳动者可以在劳动合同中约定保守用人单位的商业秘密和与知识产权相关的保密事项。对负有保密义务的劳动者，用人单位可以在劳动合同或者保密协议中与劳动者约定竞业限制条款，并约定在解除或者终止劳动合同后，在竞业限制期限内按月给予劳动者经济补偿。劳动者违反竞业限制约定的，应当按照约定向用人单位支付违约金。
       56| 
       57| 第二十四条 竞业限制的人员限于用人单位的高级管理人员、高级技术人员和其他负有保密义务的人员。竞业限制的范围、地域、期限由用人单位与劳动者约定，竞业限制的约定不得违反法律、法规的规定。在解除或者终止劳动合同后，前款规定的人员到与本单位生产或者经营同类产品、从事同类业务的有竞争关系的其他用人单位，或者自己开业生产或者经营同类产品、从事同类业务的竞业限制期限，不得超过二年。

劳动合同法.md | matched_line: 47 | line_range: line:47-47 | doc_id: 81ec846f7c63
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md
       31| 第十一条 用人单位未在用工的同时订立书面劳动合同，与劳动者约定的劳动报酬不明确的，新招用的劳动者的劳动报酬按照集体合同规定的标准执行；没有集体合同或者集体合同未规定的，实行同工同酬。
       32| 
       33| 第十二条 劳动合同分为固定期限劳动合同、无固定期限劳动合同和以完成一定工作任务为期限的劳动合同。
       34| 
       35| 第十三条 固定期限劳动合同，是指用人单位与劳动者约定合同终止时间的劳动合同。用人单位与劳动者协商一致，可以订立固定期限劳动合同。
       36| 
       37| 第十四条 无固定期限劳动合同，是指用人单位与劳动者约定无确定终止时间的劳动合同。用人单位与劳动者协商一致，可以订立无固定期限劳动合同。有下列情形之一，劳动者提出或者同意续订、订立劳动合同的，除劳动者提出订立固定期限劳动合同外，应当订立无固定期限劳动合同:（一）劳动者在该用人单位连续工作满十年的；（二）用人单位初次实行劳动合同制度或者国有企业改制重新订立劳动合同时，劳动者在该用人单位连续工作满十年且距法定退休年龄不足十年的；（三）连续订立二次固定期限劳动合同，且劳动者没有本法第三十九条和第四十条第一项、第二项规定的情形，续订劳动合同的。用人单位自用工之日起满一年不与劳动者订立书面劳动合同的，视为用人单位与劳动者已订立无固定期限劳动合同。
       38| 
       39| 第十五条 以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。
       40| 
       41| 第十六条 劳动合同由用人单位与劳动者协商一致，并经用人单位与劳动者在劳动合同文本上签字或者盖章生效。劳动合同文本由用人单位和劳动者各执一份。
       42| 
       43| 第十七条 劳动合同应当具备以下条款:（一）用人单位的名称、住所和法定代表人或者主要负责人；（二）劳动者的姓名、住址和居民身份证或者其他有效身份证件号码；（三）劳动合同期限；（四）工作内容和工作地点；（五）工作时间和休息休假；（六）劳动报酬；（七）社会保险；（八）劳动保护、劳动条件和职业危害防护；（九）法律、法规规定应当纳入劳动合同的其他事项。劳动合同除前款规定的必备条款外，用人单位与劳动者可以约定试用期、培训、保守秘密、补充保险和福利待遇等其他事项。
       44| 
       45| 第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。
       46| 
>>>    47| 第十九条 劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。同一用人单位与同一劳动者只能约定一次试用期。以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。
       48| 
       49| 第二十条 劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。
       50| 
       51| 第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。
       52| 
       53| 第二十二条 用人单位为劳动者提供专项培训费用，对其进行专业技术培训的，可以与该劳动者订立协议，约定服务期。劳动者违反服务期约定的，应当按照约定向用人单位支付违约金。违约金的数额不得超过用人单位提供的培训费用。用人单位要求劳动者支付的违约金不得超过服务期尚未履行部分所应分摊的培训费用。用人单位与劳动者约定服务期的，不影响按照正常的工资调整机制提高劳动者在服务期期间的劳动报酬。
       54| 
       55| 第二十三条 用人单位与劳动者可以在劳动合同中约定保守用人单位的商业秘密和与知识产权相关的保密事项。对负有保密义务的劳动者，用人单位可以在劳动合同或者保密协议中与劳动者约定竞业限制条款，并约定在解除或者终止劳动合同后，在竞业限制期限内按月给予劳动者经济补偿。劳动者违反竞业限制约定的，应当按照约定向用人单位支付违约金。
       56| 
       57| 第二十四条 竞业限制的人员限于用人单位的高级管理人员、高级技术人员和其他负有保密义务的人员。竞业限制的范围、地域、期限由用人单位与劳动者约定，竞业限制的约定不得违反法律、法规的规定。在解除或者终止劳动合同后，前款规定的人员到与本单位生产或者经营同类产品、从事同类业务的有竞争关系的其他用人单位，或者自己开业生产或者经营同类产品、从事同类业务的竞业限制期限，不得超过二年。
       58| 
       59| 第二十五条 除本法第二十二条和第二十三条规定的情形外，用人单位不得与劳动者约定由劳动者承担违约金。
       60| 
       61| 第二十六条 下列劳动合同无效或者部分无效:（一）以欺诈、胁迫的手段或者乘人之危，使对方在违背真实意思的情况下订立或者变更劳动合同的；（二）用人单位免除自己的法定责任、排除劳动者权利的；（三）违反法律、行政法规强制性规定的。对劳动合同的无效或者部分无效有争议的，由劳动争议仲裁机构或者人民法院确认。
       62| 
       63| 第二十七条 劳动合同部分无效，不影响其他部分效力的，其他部分仍然有效。
       64| 
       65| 第二十八条 劳动合同被确认无效，劳动者已付出劳动的，用人单位应当向劳动者支付劳动报酬。劳动报酬的数额，参照本单位相同或者相近岗位劳动者的劳动报酬确定。


[耗时统计] nbrag_grep: 1.057 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_grep(无结果路径)
入参: {'keyword': '__THIS_SHOULD_NOT_EXIST_NBRAG_REPORT__', 'collection_name': 'worker_rights', 'max_results': 3}
------------------------------------------------------------------------------------------------
No grep matches. Possible adjustments: check exact wording/case, escape regex metacharacters if you intended literal matching, try regex if appropriate, or switch to nbrag_search_and_fetch for semantic discovery when this is a concept, alias, or paraphrase rather than exact source wording.

[耗时统计] nbrag_grep: 1.838 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_find_files(pattern='劳动合同法.md')
入参: {'pattern': '劳动合同法.md', 'collection_name': 'worker_rights', 'max_results': 5}
------------------------------------------------------------------------------------------------
matched files: 1

Returned handle field for follow-up: file_path.

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


[耗时统计] nbrag_find_files: 0.759 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_find_definition(symbol='BoosterParams')
入参: {'symbol': 'BoosterParams', 'collection_name': 'funboost', 'max_results': 2}
------------------------------------------------------------------------------------------------
definitions: 2

Returned handle fields for follow-up: file_path, doc_id, line range.

[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)


[耗时统计] nbrag_find_definition: 1.248 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_get_raw_file(line_start=45, line_end=52)
入参: {'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
Content source: stored original-file snapshot captured at ingestion time.
第十八条 劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。

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

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

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



[耗时统计] nbrag_get_raw_file: 0.717 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_get_raw_file(basename误传=错误路径)
入参: {'file_path': '劳动合同法.md', 'collection_name': 'worker_rights'}
------------------------------------------------------------------------------------------------
Error: file_path must be a full absolute file_path returned by nbrag_search/nbrag_search_and_fetch/nbrag_find_files/nbrag_list. Next steps: use nbrag_find_files(pattern, collection_name) when you only know a filename, or nbrag_list(collection_name) to browse available file_path values.

[耗时统计] nbrag_get_raw_file: 0.732 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_get_file_chunks(start_chunk=0, max_chunks=2)
入参: {'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: 17 | total_lines: 232
range: chunk:0-1
This view keeps chunk/scope structure and may contain overlap. Use nbrag_get_raw_file for overlap-free source text.

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-39
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 21-39]
## 第二章 劳动合同的订立

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

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

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

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

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

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

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

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

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


[耗时统计] nbrag_get_file_chunks: 0.805 秒

[前置] 通过 nbrag_search 获取真实 doc_id
解析到 worker_doc_id = '81ec846f7c63'

------------------------------------------------------------------------------------------------
调用函数: nbrag_get_adjacent_chunks(doc_id=<前置>, chunk_index=1, window=1)
入参: {'doc_id': '81ec846f7c63', 'chunk_index': 1, 'collection_name': 'worker_rights', 'window': 1}
------------------------------------------------------------------------------------------------
adjacent chunks: 3 | file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md | doc_id: 81ec846f7c63 | total_chunks: 17

Returned context is chunk-level and may overlap. Use file_path with nbrag_get_raw_file for overlap-free source text.

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-39
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 21-39]
## 第二章 劳动合同的订立

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

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

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

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

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

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

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

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

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

chunk:2 | line:39-51
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 39-51]
第十五条 以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。

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

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

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

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

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

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


[耗时统计] nbrag_get_adjacent_chunks: 0.753 秒

------------------------------------------------------------------------------------------------
调用函数: nbrag_get_chunks_by_lines(doc_id=<前置>, line_start=45, line_end=52)
入参: {'doc_id': '81ec846f7c63', 'line_start': 45, 'line_end': 52, 'collection_name': 'worker_rights'}
------------------------------------------------------------------------------------------------
chunks by lines: 2 | doc_id: 81ec846f7c63 | total_chunks: 17
file_path: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md | line_range: line:45-52
This view preserves chunk/scope structure and may overlap with neighboring chunks.

chunk:2 | line:39-51
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 39-51]
第十五条 以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。

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

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

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

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

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

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

chunk:3 | line:51-65
# [File: D:/codes/nbrag/scripts/ingest_ex3_worker_rights/劳动合同法.md] [Lines: 51-65]
第二十一条 在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。

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

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

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

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

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

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

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


[耗时统计] nbrag_get_chunks_by_lines: 0.716 秒

================================================================================================
报告结束
================================================================================================
以上是每个 MCP 函数在 HTTP 端口 9101 下的真实返回证据。
