人工智能咨询培训老师叶梓 转载标明出处
软件开发者在寻找问题答案时常常面临耗时且繁琐的搜索工作。Stack Overflow作为领先的技术问答社区,一直是开发者寻找解决方案的重要资源。然而,随着大模型(LLMs)如ChatGPT的兴起,虽然提供了一种新的解决方案,但单独使用搜索或LLMs都存在局限性。搜索可能效率低下,而LLMs可能产生不相关或不可靠的答案。为了解决这些问题,本文介绍了StackRAG,一个基于LLMs的检索增强型多智能体生成工具,它结合了Stack Overflow的知识和GPT的语言能力,以提供更可靠、准确、相关且有用的答案。
StackRAG由加拿大不列颠哥伦比亚大学基洛纳分校的计算机科学系的研究人员提出。该工具旨在通过聚合Stack Overflow上的知识点来增强生成答案的可靠性。初步评估显示,StackRAG生成的答案在正确性、准确性、相关性和实用性方面均优于基础的LLM模型。
StackRAG架构
架构图1提供了StackRAG的整体架构概览。该工具配备了四个组件,每个组件都专门提供特定的功能。这些组件包括关键词提取器、搜索与存储组件、证据收集器和答案生成器。除了搜索与存储组件外,其他组件都包含处理特定目标的智能体。用户可以向StackRAG提出问题Q,中央协调智能体负责决定使用哪个组件。StackRAG的证据收集过程是全面且细致的,它使用从问题中提取的关键词来定位Stack Overflow上相关的问答对。经过一系列的过滤和处理步骤后,最相关的问答对被收集作为证据。如果收集到的证据被认为足够,智能体将回答问题;如果不够,该过程将重新开始,直到收集到足够的证据,确保提供全面和准确的回答。GPT是所有组件中作为智能体使用的基础语言模型。
关键词提取器是StackRAG的首要环节,它负责从用户的查询中提取出关键词。这些关键词是后续检索工作的基础,用于在Stack Overflow中定位相关的问题和答案。如果用户的查询过于复杂或冗长,系统会先通过问题复杂性检查智能体评估是否需要将查询分解为子问题,以确保不遗漏任何重要概念。这一过程通过特定的提示完成,确保了关键词提取的准确性和效率。
搜索与存储组件根据提取的关键词在Stack Overflow上执行搜索任务,寻找与用户查询相关的问答对。由于StackExchange API对高频调用有限制,系统设计为顺序检索结果,以避免超出API调用限制。检索到的问题和答案信息,包括问题ID、链接、标题、正文、创建日期以及是否有接受答案等,都被存储起来。为了提高检索的相关性,系统采用BM-25算法对检索结果进行重新排名,筛选出最相关的50个问题。这些问题被分为两类:有接受答案的问题和没有接受答案的问题。有接受答案的问题将用于生成答案的证据,而没有接受答案的问题则存储起来,以便在最终答案中提供链接。
证据收集器从Pinecone向量数据库中收集与用户查询最相关的信息。它首先计算与用户查询相似的问答对,然后评估这些问答对与用户查询的相关性,最终选择出最相关的n个问答对作为证据。这一过程通过余弦相似性度量和最大边际相关性(MMR)算法实现,确保了证据的多样性和相关性。证据评分智能体对每个证据的相关性进行评分,而证据检查智能体则确定收集到的证据是否足以回答问题。
答案生成器是StackRAG的最后一个组件,它根据收集到的证据和用户的查询生成最终答案。该组件的智能体会提供用于生成答案的Stack Overflow问题链接,以及虽然没有接受答案但与问题相关的其他问题链接。这样的设计使用户能够访问所有相关的Stack Overflow讨论,增加了答案的透明度和可用性。
整个StackRAG架构通过这些组件的紧密协作,实现了从问题接收到答案生成的自动化流程。
评估
研究者选择了三个不同职位的软件开发人员进行手动评估:机器学习工程师、自然语言处理工程师和全栈开发者。这些开发者拥有超过五年的行业经验,并且经常使用ChatGPT来寻找解决开发相关问题的答案。评估过程中,研究者选择了三个开发者在其职业生涯中普遍感到困难的问题,并使用GPT-3.5、GPT-4和StackRAG生成了答案。开发者需要根据以下指标对生成的答案进行评估:
- 正确性 (C):提供的回答是否正确?
- 准确性 (A):回答是否准确解释了问题的解决方案?
- 相关性 (R):生成的文本是否与所提问题的主题相关?
- 实用性 (U):回答是否提供了解决问题的有用信息?
评估结果显示,StackRAG在正确性、准确性、相关性和实用性方面均优于GPT-3.5和GPT-4模型。表1中的数据表明,即使StackRAG基于GPT-4模型,其在所有评估指标上的表现都更加出色,显示出开发者认为StackRAG生成的答案更加相关且实用。特别是,开发者对StackRAG生成答案中提供的链接给予了高度评价,这些链接能够直接导向Stack Overflow上的相关问题和讨论,极大地增强了答案的实用性和可信度。
尽管StackRAG在评估中表现出色,但仍存在一些局限性。其中最主要的是响应时间比直接使用GPT模型要长,这是因为StackRAG需要通过多个智能体和对基础大模型的多次调用来完成任务。此外,Stack Overflow API的每日调用限制也增加了响应时间,因为短时间内的多次API调用会受到限制,进而减少了每天的总调用次数。为了解决这一问题,正在考虑引入更多的异步处理来搜索答案,同时研究减少对大模型调用的技术,以期减少响应时间。
尽管如此,与手动搜索和验证答案相比,StackRAG提供了一种更高效的方式来获得全面和可靠的答案,一次性提供了所有必要的信息和链接。
GitHub页面:StackRAG GitHub