微信扫码
与创始人交个朋友
我要投稿
在知识图谱上的问答(KGQA)是各种现实应用中高效自主语言代理的关键。为了提高基于大型语言模型(LLMs)的语言代理在KGQA中的神经符号推理能力,我们提出了分解-对齐-推理代理(DARA)框架。DARA通过高层次的迭代任务分解和低层次的任务基础机制有效地将问题解析为正式查询。重要的是,DARA可以通过少量高质量的推理轨迹进行高效训练。我们的实验结果表明,DARA在LLMs(例如Llama-2-7B、Mistral)上进行微调后,在零-shot评估的不同基准上优于基于GPT-4的上下文学习代理和其他微调代理。这使得这些模型在现实应用中更具可及性。我们还展示了DARA在KGQA的性能与最先进的枚举和排名方法相当。
基于大型语言模型(LLMs)的语言代理已经成为在各种环境中执行复杂任务的新型人工智能(AI)系统。这些代理主要依赖LLMs作为中央控制器来感知环境,自主规划和推理以完成用户任务。然而,在知识图谱(KGs)等结构化数据丰富的环境中操作对代理提出了独特的挑战。例如,在知识图谱上执行问答(KGQA)需要语言代理具备多种能力。代理需要将用户的问题分解为子任务(规划),与KG交互以获取模式(工具使用),选择与子任务对齐的适当模式项(模式对齐),并构建可执行的逻辑形式以推导答案(逻辑推理)。
以往的研究,例如基于基础模型的工具学习和AgentBench,已经为现成的LLMs配备了多种功能,以在上下文学习(ICL)设置中进行KGQA。尽管基于ICL的代理易于使用且无需微调,但开源ICL代理的性能与经典的枚举和排名方法相比显著不足。在这些方法中,从问题中的锚实体开始枚举和排名所有可能的推理路径。尽管如此,基于LLMs的代理仍在不断进步,随着LLMs的规模不断扩大,每年迅速提升。
虽然基于ICL的语言代理(如GPT-4)在此任务中表现出强大的能力,但使用商业LLMs引发了与隐私、成本和模型灵活性相关的实际问题。例如,仅在约4,500个测试示例上运行AgentBench与GPT-4的费用高达1,300美元,而在开源LLMs上训练的提议模型的费用仅为约30美元,这对多种应用提出了关键问题。
为了增强LLMs的代理能力并规避基于ICL的LLM代理的挑战,AgentTuning微调了基于Llama-2的AgentLMs,使用AgentBench框架针对包括知识图谱在内的六种不同环境。然而,微调的AgentLMs在处理结构化数据任务(包括知识图谱、数据库和操作系统)时仍落后于GPT-4代理。
在本文中,我们提出了用于KGQA任务的分解-对齐-推理代理(DARA)框架。DARA是一个分层框架,由两个相连的模块组成:高层次的任务分解和低层次的任务基础模块。前者负责将给定问题分解为较小的任务,而后者则为分解的任务推导可执行的逻辑形式。在任务基础模块中,两个重要组件共同贡献于整体功能。模式项选择组件识别与任务相关的适当模式项(关系、类),而逻辑形式构建组件则基于所选模式以及先前的逻辑形式组装逻辑形式。为了增强关系选择,我们提出了一种称为“先浏览后深读”的关系选择方法,其中DARA扫描当前实体的关系并选择n个有前景的关系以深入阅读其描述。任务分解和任务基础模块协同工作,直到构建出完整的逻辑形式。
为了生成用于微调的推理轨迹,我们最初使用GPT-4将线性化的逻辑形式转换为自然语言。与之前的研究不同,我们发现转换质量未达到预期,并且可以通过人工验证进一步提高。为了评估DARA的有效性,我们在三个流行的基准数据集上进行了全面实验,即WebQSP、GraphQ和GrailQA。我们的发现确认DARA在微调后显著优于基于ICL的代理和其他微调的LLM代理。总之,我们的贡献包括:
我们提出了一种用于KGQA的新型语言代理框架,分解-对齐-推理代理(DARA)。它通过明确区分高层次的任务分解和低层次的任务基础(模式项选择和逻辑形式构建)超越了AgentBench中提出的框架。
实验表明,微调后的DARA在零-shot评估的三个重要基准上相比于基于ICL的代理和其他微调代理(AgentLMs和微调的AgentBench)实现了最先进的性能。此外,通过768个推理轨迹的训练,我们展示了DARA可以实现与在更大数据上训练的枚举和排名模型相当的高度竞争性能。
我们的实验揭示了使用GPT-4为KGQA中的语言代理生成高质量推理轨迹的持续挑战。这与之前的研究表明ChatGPT或GPT-4在注释方面的成功形成对比。这一观察表明未来研究的潜在方向:如何自动生成高质量数据以供语言代理使用的案例,其中最先进的LLMs(例如GPT-4)面临其局限性。
KG增强的LLM推理是一种流行的范式,用于减少LLMs的幻觉和不可靠推理链。在这种方法中,从KG中检索的三元组和LLMs中的参数知识(即存储在其参数中的知识)共同作用,以推导出给定问题的最终答案。知识驱动的思维链框架通过基于KG的外部QA模型来优化LLM推理。Think-on-Graph和StructGPT利用现成的LLMs遍历图形以找到最相关的知识,并将其与LLMs的参数知识结合以生成最终答案。尽管这些方法具有潜力,但当LLMs中的参数知识不正确或过时时,它们面临挑战。此外,在参数知识与外部非参数知识之间发生冲突的情况下,研究表明LLMs容易受到外部知识的干扰,当后者无关时,导致性能下降。
与KG增强的LLM推理专注于使用KG优化推理链不同,LLM代理能够通过利用一系列更强大的类人能力(如问题分解和逻辑推理)执行更复杂的任务。基于基础模型的工具学习、AgentBench和AgentTuning是三个代表性工作。前者要求LLM代理直接编写SPARQL(标准协议和RDF查询语言)程序。相比之下,AgentBench采用中间表示,即s表达式,逐步构建SPARQL并构造s表达式程序。AgentTuning通过推理轨迹微调LLMs。然而,由于基于ICL的代理和框架设计的局限性,它们的性能都很差。
是一种流行的KGQA范式。为了缩小KG的大搜索空间,它首先从主题实体的邻域枚举所有可能的候选逻辑形式,或从训练示例中检索相似的逻辑形式。随后,应用排名器选择最佳的一个。然而,这种暴力方法可能导致候选数量呈指数级增长,从而遭遇可扩展性和覆盖性问题。为了解决这些问题,生成增强方法生成基于检索候选的多样化逻辑形式。此外,动态自下而上的语义解析方法逐步构建最终逻辑形式,并实时修剪搜索空间。尽管这些方法可以实现高性能,但它们耗时且需要专家设计的规则来构建逻辑形式。相比之下,基于LLM的代理利用LLMs进行规划、基础和推理,提供了更好的可解释性、效率和灵活性。此外,LLM代理自动化了从任务分解到关系选择,再到逻辑形式构建的整个过程,消除了基于专家设计规则的广泛枚举的需要。
DARA的概述在算法1中描述。形式上,给定一个知识图谱、一个问题和一组动作,目标是构建一个逻辑形式,例如s表达式,能够为问题提供最终答案。为了实现这一目标,DARA迭代执行任务分解和任务基础,直到逻辑形式最终确定。在迭代过程中,DARA将分解的任务与知识图谱进行基础。它采取动作以从知识图谱中获取模式项,并选择合适的项构建步骤级逻辑形式。这个过程多次迭代,直到逻辑形式能够满足任务。随后,逻辑形式将被分配给任务级ID。DARA通过组装任务级逻辑形式逐步构建完整的逻辑形式。退出循环的基本条件由DARA自主确定。图2展示了这一过程的具体示例。
迭代任务分解作为我们框架中的高层次规划者。将问题分解为可执行任务是人类认知中的基本能力。通过将复杂问题分解为更小、更易管理的任务,代理可以更好地理解潜在意图,并制定可执行的计划以找到答案。正如我们将在5.2节中展示的,最初一次性生成所有子任务往往会导致冗余或无关的任务。DARA采用并倡导迭代任务分解,逐步生成一个任务,基于前一个任务的结果。在此过程中,代理将根据当前的s表达式是否能够得到问题的答案来决定是否需要更多任务。这种自适应方法使DARA能够动态地调整其关注点并定制后续子任务,从而有助于更有效的推理过程。
为了将分解的任务与KG基础,之前的努力在KG增强数据上预训练模型。然而,这些方法在可扩展性和覆盖性方面存在局限性。它们可能难以充分捕捉大规模KG中存在的广泛和多样的主题、实体和关系。
为了解决这个问题,DARA引入了一种基于最近出现的强大自然语言理解能力的两阶段关系选择方法。DARA首先调用或以获取关系,并在其中选择n个最可能的候选(图2中的步骤1.1:浏览关系)。随后,使用函数获取这些选定候选的描述(图2中的步骤1.1:深读描述)。通过阅读这些描述,选择最合适的一个(图2中的步骤1.1:模式选择)。需要注意的是,这种方法消除了LLM代理需要提前广泛学习环境的需求,使其在不同场景中更具适应性和可转移性。
如图2所示,DARA根据所选模式项和先前的逻辑形式自动构建当前步骤的逻辑形式。与基于ICL的代理必须通过提示中的解释获取不同,构建逻辑形式的语法是在微调过程中学习的。有关逻辑形式(s表达式)的语法和复杂用法,请参见附录A.3。
DARA的动作空间由一组与KG交互的函数组成。对于Freebase,动作空间如下:
:此函数返回给定实体的前k个1-hop的入边和出边关系。
:当问题中未提及实体时,此函数根据分解的任务检索前k个相关关系。
:此函数返回给定实体的前k个类。
:此函数根据分解的任务检索前k个相关类。
:此函数检索输入模式的描述。
这些动作在任务基础期间被执行,以从KG中获取必要的模式项。上述函数中的输入参数实体可以是问题中出现的实体或推理过程中的中间结果(s表达式)。函数和利用一个双编码器检索器,特别是all-mpnet-base-v2,经过微调以在训练数据中获取相关关系或类。对于函数和,我们利用相同的检索器在从KG获取模式项后筛选前k个候选。选择这种方式的原因有两个:1)减轻DARA的选择负担;2)为多轮推理保留上下文长度。上述函数的输入s表达式被映射到SPARQL以使用API查询KG。
我们使用GraphQ、WebQSP和GrailQA为DARA创建推理轨迹。这些数据集中<问题,s表达式>的对被根据标准进行过滤,包括关系多样性、去重和包含至少两个子任务的复杂问题。随后,我们线性化s表达式并指示GPT-4将其翻译为自然语言。总共获得768个具有推理轨迹的实例。构建细节和推理轨迹示例见附录A。
与KG交互的初步挑战之一是训练期间大量未见关系、类和实体。为了模拟现实世界中的未见场景并进行公平比较,我们进行零-shot评估,参考测试数据中未出现在训练数据中的模式。对于GrailQA,评估在开发数据上进行,因为隐藏测试数据中的黄金实体链接结果不可用。过滤后的测试数据的统计结果见表1。
GrailQA | GraphQ | WebQSP | |
---|---|---|---|
数据大小 | 3,274 | 1,229 | 56 |
表1:每个数据集的未见模式的测试数据
我们使用两个评估指标:精确匹配,评估预测和黄金逻辑形式是否语义等价,以及基于预测和黄金答案的F1分数。
我们将DARA与三种不同的基线进行比较:基于ICL的代理、微调代理和自下而上的语义解析器。由于DARA是一个语义解析LLM代理,我们不将检索增强生成方法(如Think-on-Graph、StructGPT)纳入我们的基线,这些方法仅测量答案的top-1准确率(Hits@1)。
我们使用AgentBench中的基于ICL的LLM代理作为基线,提供七个与KG交互并执行逻辑推理的功能。GPT-4和Llama-2-chat(70B)作为基础LLM。
为了评估DARA与其他微调LLM代理的有效性,我们包括AgentTuning中的模型,即AgentLM-7B、AgentLM-13B作为基线。AgentLM 7B/13B在AgentBench框架中对Llama-2-7B和13B进行了324个推理轨迹的微调。由于AgentLMs在与DARA不同的示例上训练,为了进行直接比较,我们还将DARA的训练数据转换为AgentBench框架,并对Llama-2-7B进行微调,称为AgentBench-7B。AgentBench-7B与DARA(Llama-2-7B)之间的唯一差异在于所使用的推理框架,所有其他因素保持一致。AgentBench框架中推理轨迹的一个示例见附录表12。
尽管与自下而上的语义解析器的比较并不是完全对等的比较,但我们仍然包括两个最先进的模型ArcaneQA和Pangu。这一比较允许全面评估DARA在语义解析领域的性能,揭示语言代理的有效性和潜在的进展。
ArcaneQA采用约束解码方法在每一步生成可执行的子程序。Pangu遵循枚举-然后排名的范式。在每一步,它枚举所有可能的子程序,并应用判别器选择得分最高的前k个候选。
我们在Llama 2 7B/13B、CodeLlama 7B、Mistral-7B上全面微调DARA,使用2-4个80GiB H100,并使用一个40GiB A100 GPU进行推理。实现细节见附录C。
模型 | GraphQ | GrailQA | WebQSP |
---|---|---|---|
EM | F1 | EM | F1 |
现成的LLM代理(上下文学习) | |||
AgentBench(Llama-2-chat-70B) | 25.63 | 30.33 | 33.20 |
AgentBench(GPT-4) | 53.86 | 64.48 | 63.56 |
微调LLM代理 | |||
AgentLM-7B | 36.21 | 43.92 | 14.45 |
AgentLM-13B | 44.34 | 54.35 | 52.72 |
AgentBench-7B | 42.72 | 53.37 | 56.96 |
DARA(本工作) | |||
w/Llama-2-7B | 51.51 | 62.74 | 75.05 |
w/CodeLlama-7B | 51.83 | 63.15 | 75.26 |
w/Mistral-7B | 56.96 | 69.47 | 76.88 |
w/Llama-2-13B | 55.57 | 67.34 | 77.03 |
自下而上的解析器(全训练数据) | |||
ArcaneQA | 37.00 | 47.50 | 78.52 |
Pangu(T5-base) | 56.06 | 66.70 | 88.30 |
Pangu(T5-Large) | 55.57 | 67.21 |
表2:在三个不同数据集上的整体零-shot评估结果。*表示在GrailQA上训练的T5-large未在Pangu的GitHub库中提供。所有模型使用黄金实体链接器。每个数据集的全训练数据大小见附录6。
如表2所示,DARA在三个数据集上始终优于基于ICL的代理和微调的代理。值得强调的是,其他微调代理(如AgentLM-7B、AgentLM-13B和AgentBench-7B)在性能上低于GPT-4代理。例如,在GrailQA上,AgentLM-13B落后于GPT-4 10.88%,而DARA(Llama-2-7B)和DARA(Llama-2-13B)分别超越GPT-4 11.82%和14.46%(F1)。尽管AgentBench-7B使用与DARA相同的数据进行训练,但它落后于DARA(Llama-2-7B)18.57%。这些结果强有力地证明了DARA在处理KGQA任务中的有效性和优越性。DARA在不同后端LLM上表现出灵活性,并展现出与所选模型能力相称的性能提升——选择更强大的LLM会导致性能增强。Llama-2-13B的结果优于Llama-2-7B。值得注意的是,DARA(Mistral-7B)在GraphQ和GrailQA数据集上要么超越,要么与DARA(Llama-2-13B)表现相当。DARA还可以使用提示以ICL方式进行使用。当将GPT-4与DARA结合时,如表3所示,我们显示DARA(GPT-4)在GrailQA和GraphQA中400个最难问题的最长推理路径上取得了最佳性能。
模型 | GraphQ-hard | GrailQA-hard | WebQSP |
---|---|---|---|
EM | F1 | EM | F1 |
基于ICL的代理 | |||
AgentBench(GPT-4) | 41.5 | 41.6 | 36.0 |
DARA(GPT-4) | 48.0 | 52.0 | 51.5 |
微调代理 | |||
DARA(Llama-2-7B) | 46.0 | 48.8 | 41.0 |
表3:DARA在困难问题上的上下文学习方式的性能。
与自下而上的解析器相比,DARA展示了其优势。DARA(Mistral-7B和Llama-2-13B)在GraphQ和WebQSP上超越了ArcaneQA和Pangu(T5-large)。值得注意的是,DARA(Mistral-7B)在GraphQ上超越了ArcaneQA 21.97%。在GrailQA上,尽管DARA落后于Pangu(T5-large)11.41%(F1分数),但需要注意的是,Pangu在训练中使用的数据量超过57倍(44,337个示例),强调了DARA在有限数据集(768个示例)中学习的显著效率。在WebQSP上,DARA(Llama-2-7B)实现了最佳性能,超越了Pangu(T5-large)5.95%。然而,有趣的是,所有模型的性能远低于在其他两个数据集上训练的模型。Pangu(T5-large)在WebQSP的整个测试数据上可以达到78.9%的F1分数,而在零-shot评估中仅达到36.72%的F1分数。Shu和Yu的研究也观察到了类似的现象。主要原因在于不同的数据构建方法和当前s表达式的有限表达能力。我们在附录E中提供了详细分析。
GraphQ | GrailQA | WebQSP | |
---|---|---|---|
DARA | 62.74 | 77.71 | 42.67 |
w/ PD | 56.50(6.24) | 71.22(6.49) | 28.28(14.39) |
w/o SDR | 56.79(5.95) | 75.12(2.59) | 40.77(1.90) |
w/o FT Rtr. | 61.29(1.45) | 75.76(1.95) | 36.18(6.49) |
表4:DARA(Llama-2-7B)不同组件的消融研究(F1分数)。
如表4所示,当配备单次预分解(PD)时,性能在GraphQ、GrailQA上下降超过6%,在WebQSP上下降14.39%。在检查PD所犯的错误后,我们发现模型无法在单次中生成完美的分解任务。生成的任务往往是冗余或不正确的。例如,对于问题:“哪个会议赞助商也赞助了与GridRepublic相关的会议系列?”在预分解方法中,分解的任务如下:任务1 - 找到与GridRepublic相关的会议系列,任务2 - 找到与GridRepublic相关的会议系列的赞助商,任务3 - 找到同一赞助商赞助的会议,其中任务3对于回答问题是多余的。另一方面,ITD方法将在任务2时停止迭代并返回答案。这些结果强调了ITD对DARA的重要性,因为它允许动态任务分解,从而在各种数据集上提高性能。
表4中呈现的结果表明,先浏览后深读关系(SDR)选择策略的重要性。当不采用此策略时,性能下降,尤其是在GraphQ上(下降5.95%)。为了说明影响,对于问题:“帕瓦罗蒂的音域是什么?”在没有先浏览后深读选择策略的情况下,DARA选择了错误的关系music.artist.track。然而,采用选择策略后,选择了正确的关系music.opera_singer.voice_type,其描述包含有关音域的信息。这些结果突显了先浏览后深读关系选择策略在增强DARA性能方面的关键作用,尤其是在关系的字面意义无法表达所需信息时。
为了更好地选择关系或类,我们利用微调的检索器过滤DARA的前五个候选(第3.3节)。如表4所示,微调检索器(FT Rtr.)有助于提高模型性能。在WebQSP上,未使用训练检索器时,性能下降6.49%。
为了具体了解DARA的效用,我们将其推理轨迹与基于ICL的代理(GPT-4、Llama-2-70B chat)和微调的AgentBench-7B进行比较。在基础阶段识别了这些代理的共同错误。AgentBench-7B在模式理解方面存在不足,选择错误的关系。相比之下,GPT-4展示了对模式理解的优越把握。然而,当到达具有n元关系的CVT节点时,这两个代理往往过早终止任务。另一方面,DARA通过其先浏览后深读关系选择组件有效识别CVT节点。此外,AgentBench框架中设计不周的动作空间不仅限制了代理处理涉及类信息的问题的能力,还妨碍了它们处理缺乏明确实体的查询的性能。此外,对于基于ICL的LLM代理,遵循指令的挑战依然存在。例如,Llama-2-chat(70B)在遵循演示中提供的推理流程时遇到挑战,导致功能调用失败。对于微调的AgentBench-7B,缺乏像DARA这样的明确任务分解模块,使其在某些复杂问题上难以获得有效的高层次指导。附录F中提供了这些代理之间的比较示例。
GPT系列在数据生成和注释方面表现出色。我们调查了GPT-4转换的推理轨迹是否足以用于KGQA中的语言代理微调。我们在Llama-2-7B和Mistral-7B上微调了DARA,使用GPT-4转换的轨迹。如图3所示,DARA在不同后端LLM上表现出相似的模式。尽管数据量从1k增加到3k,但在三个数据集上的性能始终落后于768个经过人工验证的示例。仔细检查生成的数据后,我们发现以下问题。GPT-4难以遵循结构化输出格式,即混淆“步骤”和“任务”,并误解给定逻辑形式的意图,从而生成错误的任务。此外,Freebase的模式设计(例如CVT)增加了理解的难度。AgentTuning的研究证实了我们的发现,报告在六种不同环境中利用GPT-4生成推理轨迹的成功率较低,范围从Mind2Web的0.52%到AlfWorld的35.2%。这些综合观察突显了未来在各种环境中自动生成高质量中间轨迹的潜在方向,特别是在GPT-4的性能受到限制时。
(a) Llama-2-7B
(b) Mistral-7B
在表5.5中,我们分析了在4,559个测试示例上各种模型的运行费用。微调代理(如DARA)在成本和速度上均优于基于ICL的LLM代理(如GPT-4和Llama-2-Chat(70B))。GPT-4的费用最高,成本比DARA(Llama-2-7B)高出60倍,速度慢4倍。GPT-4实验的定价信息可在Azure网页上找到。为了评估用于Llama-2的GPU价格,我们参考了Replicate.com。尽管成本可能受到不同因素(例如GPU服务提供商、优化推理方法)的影响,但微调代理的经济性和效率仍然显而易见。
模型 | 成本 |
---|---|
金钱 | 时间(小时) |
AgentBench(Llama-2-chat(70B)) | $1,208 |
AgentBench(GPT-4) | $1,276 |
DARA(Llama-2-7B) | $20.51 |
DARA(Llama-2-13B) | $31.90 |
表5:在推理期间不同模型在4,559个示例上的总成本。
在本文中,我们提出了DARA,一个用于KGQA的微调LLM代理。实验结果突显了DARA在各种后端LLM上的优越性能,相比于基于ICL的LLM代理以及其他微调的语言代理。此外,DARA在成本和时间效率上也优于基于ICL的代理。此外,我们的发现揭示了GPT-4在将结构化逻辑形式转换为自然语言以构建推理轨迹时面临的挑战。未来,我们将专注于开发方法,以在KG和其他符号环境中生成高质量的推理轨迹,以便对LLM代理进行微调,尤其是在GPT-4面临困难的情况下。
尽管DARA在基于ICL和其他微调LLM代理中表现出色,但仍存在一些限制,呼吁进一步改进。首先,DARA缺乏错误修正能力,这意味着它无法在错误分解问题或选择错误关系时自我纠正。人类在根据当前观察和最终目标修复错误方面表现出色。探索诸如反思的方法可能增强错误修正能力,尽管需要注意的是,这些方法目前仅在非常强大的LLM(如GPT-4)上有效。其次,由于商业LLM的高成本,我们在零-shot设置中进行了评估。为了创建微调数据,我们使用GPT-4将768个黄金逻辑形式翻译为自然语言,这增加了方法的复杂性。第三,遵循以往研究,我们仅在使用Freebase作为后端的流行数据集上进行评估。对于其他知识图谱(如Wikidata),当前的中间表示s表达式无法直接转移。将DARA推广到其他知识图谱将是我们未来的工作。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-22
技术动态 | 如何使用知识图谱改进RAG?
2024-11-22
RAG前沿之RAG–知识图谱构建框架Graphusion:兼看LongRAG双视角检索增强生成范式
2024-11-21
OpenSPG/KAG 新版发布:聚焦用户反馈,大幅优化用户体验!
2024-11-15
大语言模型与图结构的融合:推荐系统中的新兴范式
2024-11-15
利用LLM构建非结构化文本的知识图谱
2024-11-13
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
2024-11-13
利用LLM Graph Transformer实现知识图谱的高效构建
2024-11-12
什么是知识图谱和AI多模态推理
2024-07-17
2024-07-11
2024-07-13
2024-08-13
2024-07-08
2024-07-12
2024-07-26
2024-06-10
2024-07-04
2024-06-24
2024-11-22
2024-11-04
2024-10-10
2024-10-03
2024-09-27
2024-09-08
2024-09-05
2024-08-27