RAG流程的五个主要步骤是什么？	文本分块 (Chunking)、生成嵌入 (Embedding)、创建向量存储、生成查询嵌入、搜索相关文档。
在RAG流程的第1步，文本是如何处理的？	使用函数（如`chunk_by_section`）将原始文本分割成块（Chunks）。
在RAG流程的第2步，对每个文本块执行的操作是什么？	调用`generate_embedding`函数为每个文本块生成嵌入向量。
在RAG流程的第3步中，将哪些数据对插入到向量存储中？	文本块（Chunk）和对应的嵌入向量（Embedding）的配对。
为什么在存储向量时，需要同时包含原始文本内容或ID？	因为检索到的向量本身没有意义，需要原始文本才能让开发者理解和使用结果。
当用户提出问题时（RAG流程的第4步），需要对什么进行嵌入生成？	用户提出的问题（Query）。
在RAG流程的第5步中，如何找到相关的文档？	使用用户问题的嵌入向量，在向量存储中执行搜索（`results_store.search`）。
在搜索结果中，除了文档内容，还会返回什么信息？	相关文档的距离（Distance），例如余弦距离（Cosine Distance）。
在实际操作中，如何指定检索多少个最相关的文档？	在搜索函数中传入相应的参数（例如，指定返回2个最相关的块）。
