Compare commits
5 Commits
41c1a2fce4
...
8edae2b862
Author | SHA1 | Date | |
---|---|---|---|
![]() |
8edae2b862 | ||
![]() |
e7af584e9a | ||
![]() |
7d6444c6c8 | ||
![]() |
c273bb3399 | ||
![]() |
c3a04c4958 |
@ -4,11 +4,17 @@
|
||||
\addcontentsline{toc}{section}{致谢\tiny{\quad.}}
|
||||
|
||||
当笔下最后一个句点落下时,忽然惊觉这段与文字相伴的时光已近尾声。在这场充满探索与成长的旅程中,无数温暖的力量始终环绕左右,虽难以尽述细节,却值得用最真挚的文字向所有给予我支持的人道一声感谢。
|
||||
|
||||
首先要感恩学术道路上的引路人。正是老师们以渊博的学识搭建起知识的阶梯,以严谨的治学态度传递为学之道,让我在迷茫时得以窥见真理的微光,在徘徊时能坚定前行的方向。每一次课堂上的启发、每一次交流中的点拨,都如同一束束光,照亮了我从懵懂到逐渐明晰的成长之路。
|
||||
|
||||
其次要感谢校园里的人文滋养。这方充满活力的天地,不仅用丰富的资源培育着求知的心灵,更以包容的氛围接纳着每一个跃动的梦想。无论是漫步于绿荫环绕的小径时迸发的灵感,还是坐在安静的图书馆里与文字对话的时光,都成为了我青春记忆中不可替代的注脚。
|
||||
|
||||
还要深深致谢生命里的温暖陪伴。家人始终是我最坚实的港湾,他们用无条件的爱构筑起勇气的壁垒,让我能心无旁骛地奔赴理想;朋友的笑容与鼓励如同一曲曲轻快的旋律,在压力袭来时吹散阴霾,让枯燥的学术时光也充满了欢声笑语。那些并肩走过的日子,早已成为岁月馈赠的珍贵礼物。
|
||||
|
||||
最后,要向这段全力以赴的时光致敬。论文写作的过程或许充满艰辛,但每一次与思维的博弈、每一次对完美的追求,都让我更深刻地理解了坚持的意义。此刻的终点亦是新的起点,未来的日子里,我将带着这份感恩与热忱,在更广阔的天地中继续书写属于自己的篇章。
|
||||
|
||||
致谢是终点亦是起点,愿所有给予我温暖的人,都能在各自的星辰大海中闪闪发光。
|
||||
|
||||
如果需要调整情感基调或补充特定场景的表达,欢迎随时告诉我,我可以进一步优化内容。
|
||||
|
||||
\par
|
||||
|
@ -3,39 +3,41 @@
|
||||
\section{关键技术实现}
|
||||
|
||||
\subsection{系统架构设计}
|
||||
\subsubsection{整体架构设计}
|
||||
本系统采用经典的三层架构设计,分为表现层、业务逻辑层和数据访问层。在表现层中,基于Gradio框架构建了一个用户友好的Web界面,包含7个功能模块:模型管理、模型推理、模型微调、数据集生成、数据集管理、提示词模板管理和系统设置。该界面采用响应式设计,支持流式输出和灵活的参数配置,以满足不同用户的交互需求。
|
||||
业务逻辑层是系统的核心部分,负责处理具体的业务逻辑。其中,模型训练模块基于Unsloth和TRL库实现了高效的LoRA微调功能;模型推理模块支持流式生成,并允许用户配置多种采样参数;数据处理模块则涵盖了数据集的转换、验证和预处理等任务,确保数据的质量和一致性。
|
||||
数据访问层主要负责数据的存储与管理。系统使用SQLite存储系统配置和元数据,同时采用TinyDB内存数据库管理数据集,支持JSON格式的数据导入和导出。通过这种分层设计,各层之间通过明确定义的接口进行交互,不仅提升了系统的可扩展性和可维护性,还为后续的功能扩展奠定了基础。
|
||||
本系统采用经典的三层架构设计,分为表现层、业务逻辑层和数据访问层。
|
||||
|
||||
在表现层中,基于Gradio框架构建了一个用户友好的Web界面,包含7个功能模块:模型管理、模型推理、模型微调、数据集生成、数据集管理、提示词模板管理和系统设置。该界面采用响应式设计,支持流式输出和灵活的参数配置,以满足不同用户的交互需求。
|
||||
|
||||
业务逻辑层是系统的核心部分,负责处理具体的业务逻辑。其中,模型训练模块基于Unsloth和TRL库实现了高效的LoRA微调功能;模型推理模块支持流式生成,并允许用户配置多种采样参数;数据集生成模块则基于LangChain PromptTemplate处理模板,支持Markdown文档解析和结构化数据生成,采用异步调用提高生成效率。
|
||||
|
||||
数据访问层主要负责数据的存储与管理。系统使用SQLite存储系统配置,同时采用TinyDB内存数据库管理数据集,支持JSON格式的数据导入和导出。通过这种分层设计,各层之间明确分工,不仅提升了系统的可扩展性和可维护性,还为后续的功能扩展奠定了基础。
|
||||
|
||||
\input{figures/system_architecture.tex}
|
||||
|
||||
\subsubsection{模块划分与交互流程}
|
||||
系统根据功能需求划分为多个模块,各模块之间通过清晰的交互流程协同工作,确保系统的高效运行。
|
||||
模型管理模块 是系统的核心之一,负责加载、卸载和配置大语言模型。用户可以通过该模块选择并管理不同的模型,而模型推理模块则负责处理用户输入并生成模型响应。此外,模型训练模块支持执行LoRA微调训练流程,帮助用户优化模型性能。
|
||||
数据集生成模块 的设计重点在于灵活性和效率。它支持多种文档格式输入(优先支持Markdown),提供可视化模板编辑和变量配置功能,同时支持多轮次并发生成。为了保证生成结果的可靠性,模块还内置了自动验证和转换机制。在技术实现上,使用LangChain PromptTemplate处理模板,采用异步调用提高生成效率,并通过原子操作保证数据一致性。此外,模块还提供了进度反馈和错误处理机制,进一步提升用户体验。
|
||||
数据管理模块 涵盖了数据集生成、存储以及提示词模板管理等功能。数据集生成功能用于创建和预处理训练数据,数据集存储则通过TinyDB实现内存数据库管理,确保数据的高效存取。提示词模板管理模块负责维护对话模板和系统提示,为模型推理提供必要的上下文支持。
|
||||
系统交互流程 从用户发起请求开始,用户通过Gradio界面与系统交互。前端模块接收用户请求后,调用对应的业务逻辑模块进行处理。业务逻辑模块根据需要访问数据存储层获取或保存数据,并将处理结果返回给前端展示。整个流程清晰且高效,确保用户能够快速获得所需的结果。
|
||||
|
||||
关键数据流包括以下几个方面:
|
||||
|
||||
\subsection{数据库设计与实现}
|
||||
|
||||
\subsubsection{双数据库架构设计(SQLite + TinyDB)}
|
||||
本系统创新性地采用SQLite与TinyDB相结合的双数据库架构,以应对不同类型数据的管理需求。对于API提供者信息等结构化数据,系统选用SQLite作为核心数据库,并通过SQLModel这一ORM工具实现面向对象的数据操作,其内置的线程锁机制有效保障了多线程环境下的数据并发安全。SQLite数据库的实体文件持久化存储于\texttt{workdir/db/db.sqlite}路径,确保数据的可追溯性。
|
||||
|
||||
针对数据集信息(包含文档元数据及问答对集合)和提示词模板等半结构化数据的管理,系统则采用轻量级文档数据库TinyDB。数据集采用内存存储与JSON文件持久化相结合的混合模式,而提示词模板则直接通过JSON文件进行存储。TinyDB的无模式(Schema-free)特性为数据模型的灵活扩展提供了便利,其对原生JSON格式的处理能力显著提升了数据序列化与反序列化的效率。这种双数据库协同架构在保障事务完整性的同时,充分兼顾了半结构化数据处理的敏捷性需求,实现了数据存储方案的最优化配置。
|
||||
|
||||
\subsubsection{据模型定义与存储方案}
|
||||
本系统遵循领域驱动设计原则,并借助Pydantic框架构建了层次化的数据模型体系,以确保业务数据的完整性和一致性。在数据集建模方面,设计了四级递进模型结构:Doc模型用于描述文档的基础元数据(如名称、存储路径、版本号等);Q\_A模型封装了单个问答对的核心要素;DatasetItem模型聚合多个问答对,形成逻辑上的数据单元;最终,Dataset模型整合元数据与数据项集合,构成完整的数据集结构。
|
||||
|
||||
提示词模板模型则通过promptTemplate实体进行抽象,包含模板ID、名称、描述、内容体及创建时间等关键字段。系统预置了验证规则,强制要求模板内容必须包含document\_slice变量占位符,以确保模板在实际应用中具备上下文填充能力。
|
||||
|
||||
在存储实现层面,数据集采用了内存数据库与文件系统持久化相结合的双重保障机制,并利用TinyDB的临时文件特性实现原子写入操作。提示词模板则直接采用JSON文件存储方案,其良好的可读性便于人工维护。这种差异化的存储策略旨在保证数据完整性的同时,提升数据访问和管理的效率。
|
||||
|
||||
\subsubsection{数据库初始化与管理实现}
|
||||
本系统实施了分层且智能化的数据库初始化与管理策略。针对SQLite数据库,初始化阶段将自动检测并创建数据库文件,并通过SQLModel的元数据创建功能动态构建表结构,同时支持从环境变量注入初始数据集,从而实现部署环境的快速配置。对于TinyDB子系统,初始化时将执行自动化目录扫描,对workdir/dataset路径下的JSON文件进行格式校验和数据加载,建立内存与文件系统之间的双向同步机制。
|
||||
|
||||
为保障数据可靠性,系统采用了多维度管理策略:在访问控制层面,SQLite数据库利用线程级锁机制实现并发安全,TinyDB则通过文件锁保证写入操作的互斥性;在数据操作层面,系统集成了Pydantic模型验证框架,在数据持久化之前执行严格的类型校验;在容错机制方面,系统采用预写式日志(WAL)记录关键操作,并结合异常捕获机制实现故障的可追溯性。特别设计的原子写入模块通过临时文件交换技术,确保在任何异常情况下存储文件的完整性,从而有效防范数据损坏的风险。
|
||||
|
||||
\subsection{语料生成与处理技术}
|
||||
|
||||
\subsubsection{Markdown文档解析}
|
||||
该解析器采用树形结构组织Markdown文档内容,核心是通过栈结构维护标题层级关系。当遇到\#号开头的标题行时,解析器会根据\#号数量确定当前标题的层级,并通过栈结构维护父子关系。如果遇到比栈顶元素层级低的标题,会不断弹出栈顶元素直到找到合适的父节点。对于代码块内容,解析器会特殊处理以```或\textasciitilde{}\textasciitilde{}\textasciitilde{}开头的行,将其间的所有内容视为原始文本直接附加到当前节点,不进行任何解析。这种处理方式保证了代码块内的特殊字符不会被误解析为Markdown语法。文档内容的组织采用递归遍历方式。\texttt{process\_markdown\_fil}函数会先构建完整的文档树,然后通过\texttt{traverse}函数递归遍历所有节点。对于叶子节点(没有子节点的节点),会将从根节点到该节点的所有标题用``-\textgreater{}''连接,并与节点内容组合输出,形成完整的上下文信息。解析器还提供了\texttt{print\_tree}函数用于可视化文档结构,可以清晰展示各层级标题的嵌套关系和内容分布。这种树形结构表示法特别适合处理具有复杂层级关系的长文档,能够准确反映文档的原始组织结构。
|
||||
该解析器采用树形结构组织Markdown文档内容,核心是通过栈结构维护标题层级关系。当遇到\#号开头的标题行时,解析器会根据\#号数量确定当前标题的层级,并通过栈结构维护父子关系。如果遇到比栈顶元素层级低的标题,会不断弹出栈顶元素直到找到合适的父节点。对于代码块内容,解析器会特殊处理以```或\textasciitilde{}\textasciitilde{}\textasciitilde{}开头的行,将其间的所有内容视为原始文本直接附加到当前节点,不进行任何解析。这种处理方式保证了代码块内的特殊字符不会被误解析为Markdown语法。文档内容的组织采用递归遍历方式。\texttt{process\_markdown\_file}函数会先构建完整的文档树,然后通过\texttt{traverse}函数递归遍历所有节点。对于叶子节点(没有子节点的节点),会将从根节点到该节点的所有标题用``-\textgreater{}''连接,并与节点内容组合输出,形成完整的上下文信息。解析器还提供了\texttt{print\_tree}函数用于可视化文档结构,可以清晰展示各层级标题的嵌套关系和内容分布。这种树形结构表示法特别适合处理具有复杂层级关系的长文档,能够准确反映文档的原始组织结构。
|
||||
|
||||
\subsubsection{prompt模板套用和提示词格式引导}
|
||||
通过PromptTemplate类构建动态提示词模板,前端界面支持选择预存模板并自动提取变量生成可编辑表格,实现提示词参数化;采用提示词追加JSON格式要求和API强制返回结构的双重保障机制确保输出结构化;支持多轮生成并记录详细耗时和token使用情况,同时具备异常处理能力;通过严格的数据验证流程将响应解析映射到数据模型,确保数据质量;特别实现了文档切片与模板变量的智能组合,有效支持从长文档生成结构化QA数据集,形成了一套完整的提示词模板应用与数据集生成解决方案。
|
||||
|
@ -5,7 +5,9 @@
|
||||
\subsection{研究背景与意义}
|
||||
|
||||
在现代软件开发领域,程序员的编码工作日益依赖于先进的大语言模型支持,这些模型凭借其强大的能力,显著自动化了代码生成流程,有效减轻了开发者的工作负担,并大幅度提升了开发效率。然而,尽管这些模型在公开数据集与广泛使用的开源项目中展现出非凡的性能,但在处理企业内部高度专业化的私有库时,其局限性便显露无遗。核心原因在于,大语言模型往往基于广泛的通用数据集进行训练,缺乏对特定企业或项目中私有库内专有函数、类及其交互细节的深度理解和应用适应性。
|
||||
|
||||
相较于广泛采用的公开编码模型,针对私有库设计的专有模型显得尤为必要。公开模型虽强大,但在面对包含企业核心业务逻辑、技术秘密及高度定制化功能的私有库时,往往捉襟见肘。由于缺乏对私有库具体实现细节的认知,生成的代码往往无法精准引用库中的类、方法或属性,这不仅增加了后续人工调整的工作量,还可能引入潜在的安全风险。此外,企业间的私有库差异巨大,从架构设计到API接口各不相同,要求任何自动化工具都必须具备高度的灵活性和可定制性,以适应这些多样化的环境。
|
||||
|
||||
鉴于上述现状,本项目通过深度解析私有库的文档资源,精准提取关键信息,并以此为基础对大语言模型进行针对性的微调与优化。这一过程不仅增强了模型对私有库特定功能和用法的理解能力,还极大地提升了生成代码的准确性和实用性。通过本项目,我们期望能够让生成的代码片段无缝集成于企业的私有库生态中,真正实现企业级软件开发的智能化与高效化,满足企业对高质量、高安全性代码的迫切需求。
|
||||
|
||||
\subsection{国内外研究现状}
|
||||
|
56
paper/latex/figures/system_architecture.tex
Normal file
56
paper/latex/figures/system_architecture.tex
Normal file
@ -0,0 +1,56 @@
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\begin{tikzpicture}[node distance=1.5cm, auto,
|
||||
block/.style={rectangle, draw, fill=white, text width=12cm, text centered, rounded corners, minimum height=1.2cm, font=\small},
|
||||
layer/.style={rectangle, draw, fill=white, text width=12cm, text centered, rounded corners, minimum height=4cm, font=\small},
|
||||
module/.style={rectangle, draw, fill=white, text width=3cm, text centered, rounded corners, minimum height=1cm, font=\small},
|
||||
arrow/.style={thick,->,>=stealth},
|
||||
title/.style={font=\bfseries\small}
|
||||
]
|
||||
|
||||
% 定义三层架构
|
||||
\node[layer, fill=blue!10, text height=5cm] (presentation) at (0,0) {};
|
||||
\node[title, above=0.1cm of presentation.north west, anchor=west] {表现层};
|
||||
|
||||
\node[layer, fill=green!10, below=0.5cm of presentation] (business) {};
|
||||
\node[title, above=0.1cm of business.north west, anchor=west] {业务逻辑层};
|
||||
|
||||
\node[layer, fill=orange!10, below=0.5cm of business] (data) {};
|
||||
\node[title, above=0.1cm of data.north west, anchor=west] {数据访问层模块};
|
||||
|
||||
% 表现层模块
|
||||
\node[module, fill=blue!20] (ui1) at (-3.5, 1.5) {模型管理};
|
||||
\node[module, fill=blue!20] (ui2) at (0, 1.5) {模型推理};
|
||||
\node[module, fill=blue!20] (ui3) at (3.5, 1.5) {模型微调};
|
||||
\node[module, fill=blue!20] (ui4) at (-3.5, 0) {数据集生成};
|
||||
\node[module, fill=blue!20] (ui5) at (0, 0) {数据集管理};
|
||||
\node[module, fill=blue!20] (ui6) at (3.5, 0) {提示词模板管理};
|
||||
\node[module, fill=blue!20] (ui7) at (0, -1.5) {系统设置};
|
||||
|
||||
% 业务逻辑层模块
|
||||
\node[module, fill=green!20] (bl1) at (-3.5, -4.5) {模型训练模块\\(Unsloth/TRL)};
|
||||
\node[module, fill=green!20] (bl2) at (0, -4.5) {模型推理模块\\(流式生成)};
|
||||
\node[module, fill=green!20] (bl3) at (3.5, -4.5) {数据集生成模块\\(LangChain)};
|
||||
\node[module, fill=green!20] (bl4) at (-2, -6) {数据处理模块};
|
||||
\node[module, fill=green!20] (bl5) at (2, -6) {配置管理模块};
|
||||
|
||||
% 数据访问层模块
|
||||
\node[module, fill=orange!20] (dl1) at (-3.5, -10) {SQLite\\(系统配置)};
|
||||
\node[module, fill=orange!20] (dl2) at (0, -10) {TinyDB\\(数据集管理)};
|
||||
\node[module, fill=orange!20] (dl3) at (3.5, -10) {JSON文件\\(导入/导出)};
|
||||
|
||||
% 层间连接
|
||||
\draw[arrow] (presentation.south) -- (business.north) node[midway, right] {函数调用};
|
||||
\draw[arrow] (business.south) -- (data.north) node[midway, right] {数据操作};
|
||||
|
||||
% 添加Gradio框架标注
|
||||
\node[above=0.1cm of presentation.north east, anchor=east, font=\small\itshape] {基于Gradio框架};
|
||||
|
||||
% 添加说明
|
||||
\node[below=0.2cm of data.south, text width=12cm, text centered, font=\footnotesize]
|
||||
{系统采用三层架构设计,实现了功能模块间的解耦与分层,提高了系统的可扩展性和可维护性};
|
||||
|
||||
\end{tikzpicture}
|
||||
\caption{系统三层架构设计图}
|
||||
\label{fig:system-architecture}
|
||||
\end{figure}
|
@ -48,6 +48,9 @@
|
||||
|
||||
\usepackage{makecell}%表格竖线连续
|
||||
|
||||
\usepackage{tikz}%绘制架构图
|
||||
\usetikzlibrary{arrows.meta,positioning,shapes,fit,backgrounds,calc}
|
||||
|
||||
\def\I{\vrule width1.2pt}
|
||||
%!\I 就可以代替| 来画表格了
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user