结合检索增强生成(RAG)的代码序列化以实现上下文感知的代码合成
Augmenting Code Sequencing with RetrievalAugmented Generation (RAG) for Context-Aware Code Synthesis
![![[Pasted image 20250324150749.png]]](https://i-blog.csdnimg.cn/direct/c6ba081b24ac475582e4788f18439523.png)
摘要
高效代码生成需求的增长推动了对大型语言模型(LLMs)改进的研究。
本项目提出了一种新颖的系统,旨在通过利用检索增强生成(RAG)、关联技术以及提示参数来提升代码生成能力。RAG通过整合外部知识来丰富代码输出,而关联方法则增强了模型将语言与现实世界上下文结合进行解释的能力。提示参数提供了灵活性,使基于用户偏好的定制化输出成为可能。这些方法在各种代码生成任务中得以实施和测试,最终实现了具有上下文相关性且准确的输出。所提出的系统简化了软件开发工作流程,减少了错误,并促进了开发者与机器辅助编码工具之间的更好协作。最终,这种方法标志着从自然语言描述自动生成代码的重大进步。
关键词—自然语言处理,语言模型,关联,检索增强生成,提示参数,代码生成。
1 引言
自然语言处理(NLP)是人工智能的一个关键子领域,它使计算机能够理解、解释和生成人类语言。这项技术支撑了各种应用,从聊天机器人和数字助手到翻译服务和情感分析工具,所有这些都旨在从文本数据中提取有意义的信息 [4], [5]。NLP 的核心目标是通过语言处理促进自然且直观的人机交互。NLP 的最新进展主要得益于大型语言模型(LLMs),特别是基于生成式预训练 Transformer(GPT)架构的模型 [3]。这些模型在庞大的数据集上进行训练,展现出在生成连贯且上下文适当响应方面的卓越能力。然而,将 LLMs 应用于实际场景时揭示了一些持续存在的挑战。一个主要问题是训练数据中的潜在偏见,这可能导致输出结果出现偏差或不恰当,尤其是在敏感应用中 [2], [4]。此外,训练和微调这些模型所需的计算资源可能非常昂贵,限制了小型组织和个人开发者的可及性 [6]。尽管取得了显著进步,但真正理解上下文和语义仍然是一个难以实现的目标,导致对用户意图的不准确性和误解 [7]。
受这些挑战的推动,本文探讨了如何增强 LLM 在代码生成任务中的性能。我们的目标包括开发一种创新框架,整合关联技术、检索增强生成(RAG)以及提示参数,以提升 LLM 的上下文理解和适用性。我们旨在证明这种综合方法可以显著提高生成代码的准确性和相关性,从而解决现有方法的局限性,并满足软件开发中更高效工作流程的需求。本研究的贡献有两方面:首先,我们引入了一种结合这些技术的新方法,以改进基于 LLM 的代码生成;其次,我们通过严格的测试和分析提供了实证证据,证明了我们方法的有效性。这项工作旨在为未来代码自动生成的进步铺平道路,促进开发者与机器之间的更好沟通。
本文结构如下:第二部分回顾相关工作并识别当前研究中的空白;第三部分概述了我们研究中采用的方法论;第四部分详细介绍了所提出的方法;第五部分展示了系统的运行流程;第六部分讨论实验结果与分析;第七部分对研究发现进行了讨论;第八部分总结了研究的意义并提出了未来的研究方向。
2 相关工作
2.1 NLP 的数据声明:迈向更具信息量的记录
Bender 和 Friedman [1] 提出了针对 NLP 数据集的数据声明概念,以提高透明度。他们的研究结果表明,这些数据声明能够增强对数据集来源和局限性的理解,从而促进 NLP 研究中的问责制。通过使用数据声明,可以识别数据集中的偏见。然而,一个显著的局限性是,数据声明在 NLP 出版物中的实施并不一致。
2.2 从语言语料库中自动推导的语义必然包含人类偏见
Caliskan 等人 [2] 分析了从大规模语料库中推导出的语义表征中的偏见。他们的研究结果证实了自动语言模型中存在人类偏见,引发了人们对 AI 和 NLP 系统伦理问题的关注。尽管这种分析对于理解偏见的影响至关重要,但其局限性在于主要聚焦于识别这些偏见,而未提出全面的解决方案来应对这些问题。
2.3 针对零样本槽填充的鲁棒检索增强生成
Glass 等人 [4] 将检索技术与生成模型结合,专门用于槽填充任务。他们的研究结果表明,与基线模型相比,准确性显著提高,增强了 NLP 任务的零样本学习能力。然而,其性能高度依赖于所使用的检索机制的质量。
2.4 面向知识驱动对话的检索增强响应生成
Ahn [5] 在对话代理中实现了检索增强生成(RAG),以有效整合外部知识。他们的研究结果表明,对话系统中的响应相关性和准确性有所提高,提供了更加上下文感知的对话体验。然而,确保检索信息准确性的局限性仍然存在。
2.5 自我记忆提升:基于检索增强生成的文本生成
Cheng 等人 [6] 在检索增强生成的基础上引入了一种自我记忆机制。他们的研究结果表明,生成文本在连贯性和上下文保留方面有所改进,增强了模型记住过去交互的能力。然而,由于需要额外的记忆管理,这种方法可能会增加计算开销。
2.6 SRAG:面向口语理解的语音检索增强生成
Yang 等人 [7] 开发了一种结合检索技术的语音识别模型。他们的研究结果表明,在理解口语输入方面具有更高的准确性,有效地弥合了基于文本和口语模型之间的差距。然而,背景噪声和语音变异性可能对性能产生不利影响。
2.7 通过模型与检索增强生成优化科学问题排序
Zhang 等人 [8] 将基于模型的排序与检索增强生成相结合,用于科学问题排序。他们的研究结果表明,问题排序得到了改善,通过提供更好的问题相关性增强了教育工具的效果。然而,该方法专注于特定领域,限制了其在其他领域的通用性。
2.8 改进开放域问答中检索增强生成模型的领域适应性
Weeraseker [9] 专注于改进检索增强生成(RAG)模型在问答任务中的领域适应性。他们的研究结果表明,在不同领域中的性能有所提高,使模型在实际问答场景中更加有效。然而,要达到最佳效果可能需要大量的微调。
2.9 后缀检索增强语言建模
Wang [11] 引入了后缀检索以增强语言建模。他们的研究结果表明,生成文本的上下文理解能力有所提高,增强了模型的连贯性。然而,实现复杂性可能阻碍该技术的广泛采用。
2.10 改进开放域问答中检索增强生成模型的领域适应性
Siriwardhana 等人 [12] 分析并改进了检索增强生成(RAG)模型中的领域适应技术。他们的研究结果表明,在不同领域中的性能有所提高,增强了模型的多功能性。然而,要达到预期效果需要大量的训练数据。
2.11 基于无分块上下文检索的语言模型关联
Qian [13] 提出了一种无分块检索方法,用于关联语言模型。他们的研究结果表明,在语言生成任务中,上下文相关性有所提高,使输出更贴近用户意图。该方法的优势在于其复杂性低于传统检索技术,但仍需进一步验证。
2.12 检索增强端到端口语对话模型
Wang 等人 [14] 在口语对话系统中集成了检索增强技术。他们的研究结果表明,对话连贯性和上下文性得到增强,使得语音系统中的交互更加自然。然而,超出领域范围的查询可能降低系统的有效性。
2.13 检索增强生成的 Web 应用程序:实现与测试
Radeva 等人 [15] 开发了一个 Web 应用程序以实现和测试检索增强生成。他们的研究结果为系统在实际环境中的可用性提供了见解,促进了用户交互和反馈。然而,该应用程序在应用上下文和用户多样性方面的有限范围构成了限制。
3 方法论
在当前自然语言处理(NLP)的背景下,从自然语言描述生成可执行代码是一项重大挑战。现有方法通常难以维持人类语言的复杂性和细微差别,导致生成的代码可能无法完全捕捉预期的功能或上下文。为了解决这一问题,已经探索了多种方法,从基于规则的系统到基于机器学习的模型不等。
3.1 提示参数
在自然语言处理(NLP)任务中,提示参数(prompt parameter)扮演着关键角色,作为检索增强生成(RAG)等模型的主要输入,用于指导其在文本生成过程中的行为。它为模型提供上下文和约束条件,影响生成文本的内容、格式和相关性。提示参数的形式因任务需求和所涉及的 NLP 模型能力而异。无论是作为查询、关键词还是已有文本,提示参数都能有效地传达用户的意图,同时引导模型输出。 在设计提示参数时,必须考虑用户目标、目标受众和模型能力,以确保最佳性能。对提示参数进行迭代调整可以提高生成输出的质量和可用性,从而提升整体流程的性能。最终,提示参数是 NLP 任务中的一个重要控制特性,对最终输出的质量和清晰度具有显著影响,因此在 NLP 模型设计和使用中至关重要。
3.2 关联技术
关联(grounding)在自然语言处理(NLP)中是指将语言表达与现实世界中的实体、动作或情境连接起来,以提供上下文和意义的过程。它通过弥合抽象语言与具体现实之间的差距,促进了人机之间的有效沟通和理解。在诸如对话系统、问答系统和信息检索等 NLP 任务中,关联对于准确处理情境上下文至关重要。
关联通过多种技术实现,例如语义分析,它将单词、短语或句子映射到其现实世界的语义表示,帮助机器识别概念和关系。情境分析则考虑更广泛的情境因素,如情境背景和背景知识,从而增强语言解释能力。多模态整合将语言与其他模态(如图像或音频)结合,以提供对交流情境的全面理解。此外,互动关联涉及与用户或环境的交互,以澄清模糊的语言或收集额外的上下文信息,从而改进机器的理解并提高沟通质量。总体而言,关联在增强 NLP 应用中的语言理解和沟通方面发挥了至关重要的作用。
3.3 检索增强生成
检索增强生成(Retrieval-Augmented Generation, RAG)是一种旨在超越传统生成模型局限性的新技术,通过整合检索机制来实现。RAG 结合了生成式和检索式方法的特点,包含一个检索器(retriever)和一个生成器(generator)。检索器根据输入提示从外部知识源中检索上下文相关的信息。采用的检索策略包括基于关键词的匹配和语义相似性等。检索到的信息随后被生成器用来生成基于检索上下文的语法正确且连贯的输出,从而确保内容的相关性和一致性。
RAG 在问答、摘要生成、对话和代码生成等多个 NLP 任务中表现出色。通过整合外部知识源,RAG 缓解了与传统生成模型相关的问题,例如事实不准确和缺乏上下文等问题。此外,RAG 具有领域无关性和利用多样化知识源的灵活性。总体而言,RAG 标志着自动语言生成系统的一项重大进步,并具有进一步改进以应对未来更复杂的语言理解任务的潜力。
4 提出的方法
现有的大型语言模型(LLMs)由于依赖静态数据集、适应性有限以及在动态或特定上下文任务中准确性降低,面临诸多挑战。本项目提出了一种创新方法,利用 Code Bison 模型、检索增强生成(RAG)技术以及动态提示创建来生成高度优化的代码。该系统的每个组件都旨在增强 LLM 生成准确、实时且上下文相关的代码的能力。
4.1 代码生成
代码生成模块围绕 Code Bison 模型构建,这是一种专门为编程任务量身定制的最先进的语言模型。该模型经过广泛的微调,涵盖了各种编程语言、框架和库的数据集。它擅长基于输入提示生成特定上下文的代码片段,即使没有针对特定任务进行过专门训练。这种特性被称为零样本学习能力,即模型能够在没有明确示例的情况下生成输出。 从数学上讲,Code Bison 可以表示为一个概率模型,其目标是最大化生成标记序列y1,y2,...,yny_1, y_2, ..., y_ny1,y2,...,yn的可能性,给定输入提示XXX。这可以形式化为:
P(T∣X)=∏i=1nP(yi∣X,y1,y2,...,yi−1)(1)
P(T|X) = \prod_{i=1}^{n} P(y_i | X, y_1, y_2, ..., y_{i-1}) \tag{1}
P(T∣X)=i=1∏nP(yi∣X,y1,y2,...,yi−1)(1)
其中,P(yi∣X,y1,y2,...,yi−1)P(y_i | X, y_1, y_2, ..., y_{i-1})P(yi∣X,y1,y2,...,yi−1)表示在给定输入XXX和所有先前生成的标记的情况下生成第iii个标记的概率。通过利用预训练权重并基于特定编码数据进行微调,Code Bison 模型提高了生成代码的效率和相关性。
4.2 语义关联过程
语义关联过程模块对于将 LLM 的输出与实时外部数据源连接起来至关重要,确保生成的代码具有上下文关联性且保持最新。此过程涉及整合来自外部来源的动态信息,例如 API、数据库和实时数据流。关联过程还结合了 GitHub 上 Generative AI 仓库中的资源,这些资源提供了各种代码示例、最佳实践和方法论。这种动态关联通过使模型能够有效响应编程环境的变化,丰富了模型的输出,确保代码与现实场景保持相关性。模型实时访问这些资源,使其对当前趋势具有响应性和适应性。
4.3 提示创建
提示创建模块专注于优化输入提示并微调模型参数,以实现更好的代码生成结果。这些参数包括上下文长度、温度(temperature)和回显(echo)等。每个参数都会影响生成输出的结构、风格和上下文。例如,温度参数控制输出的随机性,较低值会导致更加确定性的输出,而较高值则会产生更多样化的结果。下一个标记的概率分布计算如下:
P(yi∣X,y1,y2,...,yi−1)=exp(1T⋅logP(yi))∑jexp(1T⋅logP(yi))(2)
P(y_i | X, y_1, y_2, ..., y_{i-1}) = \frac{\exp(\frac{1}{T}\cdot log P(y_{i}))}{\sum_{j} \exp(\frac{1}{T}\cdot log P(y_{i}))} \tag{2}
P(yi∣X,y1,y2,...,yi−1)=∑jexp(T1⋅logP(yi))exp(T1⋅logP(yi))(2)
4.4 RAG 实现
检索增强生成(RAG)实现模块是一个关键组件,它将基于检索的方法与 Code Bison 模型集成,以提高生成代码的质量。RAG 使系统能够检索相关的外部信息并将其纳入生成过程,从而实现更准确且上下文感知的输出。RAG 可以用数学描述为一个过程,其中外部知识源SSS被查询以提供相关文档DDD,生成模型将这些外部信息整合到输出中:
P(Y∣X,D)=∑iP(di∣X)⋅P(Y∣X,di)(3)
P(Y | X, D) = \sum_{i} P(d_i | X) \cdot P(Y| X, d_i) \tag{3}
P(Y∣X,D)=i∑P(di∣X)⋅P(Y∣X,di)(3)
这一过程使 Code Bison 模型能够迭代优化其响应,整合来自外部来源的知识并适应最新的编码实践。反馈循环允许模型不断更新其知识库,确保生成的代码符合当代编程标准。
在接收到输入后,模型会启动一个检索步骤,根据关联查询从外部知识源中检索相关的上下文或段落。此检索旨在为模型提供补充信息,使其能够生成更有见地的响应。最后,结合输入查询和检索到的上下文,模型生成对用户查询的响应或答案。因此,虽然普通流程仅依赖 LLM 的内部知识,但 RAG 流程通过整合外部知识源增强了模型的理解能力,并提高了生成响应的质量。
4.5 用户界面开发
用户界面(UI)旨在为与代码生成系统交互提供直观的界面。UI 允许用户输入提示、可视化生成的代码并比较不同的输出结果。UI 还允许用户尝试不同的提示设置,从而更深入地了解系统的能力。用户可以通过可视化的方式观察 RAG 增强输出如何优于基本 LLM 输出,从而深入了解外部数据整合的优势。
5 工作流程
![![[Pasted image 20250324152026.png]]](https://i-blog.csdnimg.cn/direct/3b6cf4c4de914fb681ed8f6ee697efe2.png)
如图 1 所示,流程图展示了两个不同的过程:大型语言模型(LLMs)的普通流程和检索增强生成(RAG)。在普通流程中,用户通过用户界面(UI)提交查询或提示。这些查询直接由 LLM 处理,该模型经过大量文本和代码数据集的训练,能够仅基于输入查询及其内部知识生成响应或答案。
同时,在 RAG 流程中,引入了额外的步骤以增强响应生成的效果。与普通流程类似,用户通过 UI 提交查询。然而,在将查询传递给 LLM 之前,系统会整合与查询相关的外部知识源,例如数据库或知识图谱。这一整合过程通过提供额外的上下文或信息来增强模型的理解能力。随后,经过外部知识增强的查询被转发到模型进行处理。
6 结果
我们的结果展示了大型语言模型(LLMs)普通流程与检索增强生成(RAG)流程之间的对比。普通流程允许 LLM 仅基于内部知识生成响应,这种方法虽然有效,但在处理需要实时或领域特定信息的查询时存在局限性。相比之下,RAG 流程通过整合外部知识源(如数据库)显著提高了响应的准确性和相关性。这种增强的查询生成提升了模型的理解能力,特别是在专业领域中,并生成更具上下文感知的响应。
![![[Pasted image 20250324152143.png]]](https://i-blog.csdnimg.cn/direct/e0d02095620e45ebb87734ba52b502a4.png)
实验结果显示了显著的改进,尤其是在动态信息检索方面,这与 Glass 等人 [4] 和 Ahn [5] 的研究结果一致,他们都强调了基于检索技术在零样本学习和知识驱动对话中的优势。此外,与 Cheng 等人 [6] 和 Weerasekera [9] 的研究一致,我们的结果证实,相较于标准 LLM 工作流,基于检索增强的方法在领域适应性和上下文理解方面表现更优。然而,RAG 方法的成功高度依赖于外部知识源的质量和相关性,这一点与现有研究对基于检索模型的发现相吻合。这一对比突显了 RAG 在提升响应准确性方面的优势,同时强调了可靠知识整合对于保持一致性能的重要性。
6.1 系统要求
所提出的系统的实现是在 Linux 操作系统上进行的,该系统为开发和测试提供了强大的环境。实验期间使用的硬件规格包括:
- 处理器:第 12 代 Intel® Core™ i7-1265U × 12
- 内存:16.0 GiB
- 存储:512.1 GB
6.2 软件要求
以下软件工具和框架被用于系统的开发与评估:
- 操作系统:Linux OS
- 集成开发环境:Visual Studio Code (VS Code)
- 编程语言:
- Python 3:用于实现后端算法和数据处理。
- JavaScript (React.js):用于前端开发,创建交互式用户界面。
- Node.js:用于服务器端编程和处理异步事件。
- 机器学习模型:Code Bison 模型:集成用于代码生成任务。
- 静态代码分析工具:Pylint:用于检查 Python 代码的质量。
- 外部数据集来源:GitHub 仓库:提供训练和评估数据集。
7 讨论
在表 I 中,我们比较了零样本和检索增强生成(RAG)方法生成的代码。在我们的系统中,普通响应利用 SentenceTransformer 通过 model.encode() 方法获取句子嵌入,为语义相似性搜索提供了一种简单而有效的方法。另一方面,RAG(检索增强生成)方法使用 AutoTokenizer 和 AutoModelForSequenceClassification 来实现自定义嵌入函数(get_sentence_embedding),尽管增加了复杂性,但也提供了更大的灵活性和细微差别。
在处理需要特定领域知识或详细上下文的查询时,RAG 方法通过从外部来源检索相关信息,优于标准零样本模型,从而增强了响应的准确性和相关性。这种检索过程使系统能够生成更丰富、更具上下文感知的输出,而零样本模型可能依赖泛化,常常遗漏关键细节。因此,RAG 在知识密集型应用中具有显著优势,例如个性化客户支持或需要精确且上下文相关的领域。
![![[Pasted image 20250324152207.png]]](https://i-blog.csdnimg.cn/direct/635f75273abf4fc78318bd6523527457.png)
为了性能评估和质量控制,我们使用 Pylint 进行结果分析,以确保整个系统中使用的 Python 代码的准确性和可维护性。对 rag.py 和 zeroshot.py 模块的 Pylint 分析揭示了代码质量和功能方面的几个改进点。正如表 II 所示,在 rag.py 中,主要问题之一是代码行超过了推荐的 100 字符限制(C0301),这影响了可读性。此外,rag.py 和 zeroshot.py 都缺少最终的换行符(C0304),这是一个较小但重要的格式问题。
RAG 模块存在一个关键问题,即未定义的变量“torch”(E0602),如果该变量未正确导入或定义,可能会导致程序失败。这显著影响了模块的性能。RAG 输出中的另一个问题是,cosine_similarity 从 sklearn.metrics.pairwise 的导入语句未放在模块顶部(C0413),违反了 Python 的最佳实践。在零样本响应中,Pylint 分析标记了无法导入 sentence_transformers 的问题(E0401),表明该模块可能未正确安装或配置,从而影响其功能。此外,文件中包含一个变量 query_text,不符合 Python 对常量的命名约定(C0103),降低了代码的一致性。
![![[Pasted image 20250324152241.png]]](https://i-blog.csdnimg.cn/direct/734c37a66d6f4c93a8fb92c5d90891cb.png)
通过使用 Pylint 评估大型语言模型(LLM)和检索增强生成(RAG)模型生成的响应(如图 2 所示),发现 RAG 模型的得分高于 LLM 的得分。这表明 RAG 模型生成的响应更符合编码标准和实践,得到了 Pylint 的认可。RAG 模型获得的更高 Pylint 分数表明,在响应生成过程中整合外部知识源可能有助于生成更符合编码标准的代码片段。通过从外部来源检索相关上下文,RAG 模型可以利用额外信息生成确保适当代码结构的内容。两个模块还缺乏必要的文档,缺少模块级(C0114)和函数级文档字符串(C0116),这妨碍了对代码目的和逻辑的理解。生成的响应不仅满足语法正确性,还遵循了编码的最佳实践和规范。
8 结论
该项目在优化大型语言模型(LLMs)以用于代码生成方面迈出了重要一步。通过整合关联技术、检索增强生成(RAG)和提示参数,有效解决了此前限制 LLM 性能的许多问题。在上下文理解、知识检索和定制选项方面的改进增强了模型将自然语言描述转换为代码的准确性和效率。然而,本研究也存在局限性,包括训练数据中潜在的偏见、可扩展性挑战以及对大量计算资源的需求,这些可能限制小型团队或个人开发者的访问能力。此外,尽管模型表现出性能提升,但在高度专业化或小众编程任务中仍面临困难,尤其是在缺乏领域特定知识的情况下。
9 最终结果
![![[Pasted image 20250324152257.png]]](https://i-blog.csdnimg.cn/direct/c0a24cf2bd314358960dba43804028a2.png)
用户界面(UI)促进了查询提交,如图 3 所示。用户可以在指定字段中输入查询,并选择零样本或检索增强生成(RAG)选项。零样本响应的结果如图 4 所示,而图 5 显示了 RAG 响应。最后,图 6 对比了两种响应,使用户能够评估生成代码之间的差异。
![![[Pasted image 20250324152305.png]]](https://i-blog.csdnimg.cn/direct/eccb28e1b9b14803bfd454e2e0d6ead5.png)
![![[Pasted image 20250324152314.png]]](https://i-blog.csdnimg.cn/direct/d23d93c2f2c045089c356e9c03314174.png)
![![[Pasted image 20250324152321.png]]](https://i-blog.csdnimg.cn/direct/0e3fa3d551544476bc25a9be72862cc1.png)
10 未来工作方向
该项目可以从多个维度进行改进,例如优化和微调代码生成算法,整合多样化数据源。实施用户反馈路径可以迭代完善这一过程。利用 GitHub 仓库可以丰富提示理解的上下文和范围。此外,扩展对多种编程语言的支持并加强与行业的合作,可以提高系统在现实场景中的有效性。未来的工作还可以专注于解决已识别的局限性,例如减少模型中的偏见并增强其应对小众编程挑战的能力,从而拓宽其在各种环境中的适用性和可用性。集成用户特定的定制选项可以进一步提高生成代码的相关性和有效性。
参考文献
在本项目中,我们通过检索增强生成(RAG)和关联技术来提升代码生成能力,并借鉴了多种关键参考文献以构建我们的系统。我们遵循 Bender 和 Friedman 关于记录和透明使用数据集的指导,在训练 Code Bison 等模型时确保数据使用的规范性 [1]。我们认识到 Caliskan、Bryson 和 Narayanan 所强调的偏见问题的重要性,以确保生成代码的公平性 [2]。利用 Vaswani 等人提出的 Transformer 架构,我们改进了模型的注意力机制,从而在代码检索和生成过程中增强上下文感知能力 [3]。我们还实施了 Glass、Rossiello、Chowdhury 和 Gliozzo 提出的技术,以优化检索增强学习和关联方法 [4]。此外,我们借鉴了 Ahn 关于实时上下文适应的见解,以及 Cheng 等人的研究,改进自记忆机制,使我们的模型能够根据用户输入生成准确且定制化的代码 [5],[6]。

563

被折叠的 条评论
为什么被折叠?



