在本文中,我们将探讨在开发早期阶段使用快速压缩技术,这有助于降低基于 GenAI 的应用程序的持续运营成本。
通常,生成式人工智能应用程序利用检索增强生成框架以及即时工程,从底层大语言模型中提取最佳输出。然而,从长远来看,这种方法可能不具有成本效益,因为当您的应用程序在生产中扩展并依赖于 OpenAI 或 Google Gemini 等模型提供商时,运营成本可能会显着增加。
我们将在下面探讨的即时压缩技术可以显着降低运营成本。
构建基于 RAG 的 GenAI 应用程序时面临的挑战
RAG(或检索增强生成)是一种流行的框架,用于构建由矢量数据库支持的基于 GenAI 的应用程序,其中语义相关的数据被增强到大语言模型上下文窗口的输入以生成内容。
在构建我们的 GenAI 应用程序时,当我们将该应用程序投入生产并且所有最终用户开始使用它时,我们遇到了成本上升的一个意外问题。
经过彻底检查后,我们发现这主要是由于每次用户交互需要发送到 OpenAI 的数据量所致。我们提供的信息或上下文越多,以便大型语言模型能够理解对话,费用就越高。
我们在与 OpenAI 集成的问答聊天功能中特别发现了这个问题。为了保持对话自然流畅,我们必须在每个新查询中包含整个聊天历史记录。
如您所知,大型语言模型没有自己的记忆,因此如果我们不重新发送之前的所有对话细节,它就无法根据过去的讨论理解新问题。这意味着,随着用户不断聊天,发送的每条包含完整历史记录的消息都会显着增加我们的成本。尽管该应用程序非常成功并提供了最佳的用户体验,但它未能将运行此类应用程序的成本保持得足够低。
类似的例子可以在基于用户输入生成个性化内容的应用程序中发现。假设一款健身应用使用 GenAI 创建自定义锻炼计划。如果该应用每次建议新的锻炼时都需要考虑用户的全部锻炼历史、偏好和反馈,那么输入量就会变得相当大。反过来,这种大输入量意味着更高的处理成本。
另一种情况可能涉及食谱推荐引擎。如果引擎尝试在每项推荐中考虑用户的饮食限制、过去的喜好和营养目标,则发送处理的信息量就会增加。与聊天应用程序一样,较大的输入大小意味着更高的运营成本。
在每个例子中,关键的挑战是在提供足够的背景信息以使法学硕士 (LLM) 变得有用和个性化之间取得平衡,同时又不让成本因每次交互要处理的大量数据而失控。
我们如何解决 RAG 管道成本上升的问题
面对与 GenAI 应用相关的运营成本上升的挑战,我们专注于通过一种称为“快速工程”的策略优化与 AI 模型的通信。
即时工程是一项关键技术,涉及向底层 LLM 提出查询或指令,以便我们获得最精确和相关的响应。目标是提高模型的输出质量,同时减少所涉及的运营费用。这是以正确的方式提出正确的问题,确保法学硕士能够高效且经济高效地进行。
为了降低这些成本,我们在快速工程领域探索了各种创新方法,旨在增加价值,同时保持费用可控。
我们的探索帮助我们发现了即时压缩技术的功效。这种方法通过将我们的提示提炼为最基本的元素,去除任何不必要的信息,从而简化了沟通过程。
这不仅减少了 GenAI 系统的计算负担,而且还显着降低了部署 GenAI 解决方案的成本,尤其是那些依赖于检索增强生成技术的解决方案。
通过实施即时压缩技术,我们已经能够大幅节省 GenAI 项目的运营成本。这一突破使得在更广泛的业务应用程序中利用这些先进技术成为可能,而不会造成以前与之相关的财务压力。
我们通过完善即时工程实践的过程强调了 GenAI 交互效率的重要性,证明战略简化可以为企业带来更容易获得且经济上可行的 GenAI 解决方案。
我们不仅使用这些工具来帮助我们降低运营成本,还改进了我们用于从 LLM 获得回复的提示。使用该工具,我们发现成本节省了近 51%。但是,当我们遵循 GPT 自己的提示压缩技术(通过重写提示或使用 GPT 自己的建议来缩短提示)时,我们发现成本降低了近 70-75%。
我们使用 OpenAI 的分词器工具来处理提示,以确定我们可以将它们减少多少,同时从 OpenAI 获得相同的精确输出。分词器工具可帮助您计算 LLM 将在上下文窗口中使用的确切标记。
提示示例
让我们看一下这些提示的一些示例。
- 意大利之旅原提示:我目前正在计划去意大利旅行,我想确保参观所有必看的历史古迹并享受一些当地美食。您能给我提供意大利顶级历史景点的列表以及我在那里应该尝试的一些传统菜肴吗?压缩提示:意大利之旅:列出顶级历史景点和值得尝试的传统菜肴。
- 健康食谱原提示:我正在寻找一个健康的食谱,我可以为今晚的晚餐做。它必须是素食的,包括西红柿、菠菜和鹰嘴豆等原料,而且应该是一个小时内就能做好的东西。你有什么建议吗?压缩提示:需要一份快速、健康的素食食谱,包括西红柿、菠菜和鹰嘴豆。建议?
了解即时压缩
为在现实世界的企业应用程序中使用大型语言模型制定有效的提示至关重要。
提供分步推理、合并相关示例以及包含补充文档或对话历史记录等策略在提高专门 NLP 任务的模型性能方面发挥着至关重要的作用。
然而,这些技术通常会产生更长的提示,作为可以跨越数千个标记或单词的输入,因此它增加了输入上下文窗口。
提示长度的大幅增加可能会显着增加与采用高级模型相关的成本,特别是像 GPT-4 这样昂贵的法学硕士。这就是为什么即时工程必须集成其他技术,以在提供全面的上下文和最小化计算费用之间取得平衡。
提示压缩是一种用于优化我们使用提示工程和输入上下文与大型语言模型交互的方式的技术。
当我们向法学硕士提供提示或查询以及任何相关的上下文感知输入内容时,它会处理整个输入,这在计算上可能会很昂贵,特别是对于包含大量数据的较长提示。提示压缩旨在通过将提示压缩为其最重要的相关组件来减少输入的大小,删除任何不必要或冗余的信息,以使输入内容保持在限制范围内。
提示压缩的整个过程通常涉及分析提示并识别对于法学硕士理解上下文并生成相关响应至关重要的关键元素。这些关键元素可以是捕获提示核心含义的特定关键字、实体或短语。然后通过保留这些基本组件并丢弃其余内容来创建压缩提示。
在 RAG 管道中实施即时压缩有几个好处:
- 减少计算负荷。通过压缩提示,法学硕士需要处理更少的输入数据,从而减少计算负载。这可以带来更快的响应时间和更低的计算成本。
- 提高了成本效益。大多数 LLM 提供商根据作为输入上下文窗口的一部分传递并正在处理的标记(单词或子词)的数量进行收费。通过使用压缩提示,标记的数量大大减少,从而大大降低每次查询或与 LLM 交互的成本。
- 提高效率。更短、更简洁的提示可以帮助法学硕士专注于最相关的信息,从而有可能提高生成的响应和输出的质量和准确性。
- 可扩展性。及时压缩可以提高性能,因为不相关的词会被忽略,从而更容易扩展 GenAI 应用程序。
虽然快速压缩具有许多好处,但它也带来了一些挑战,工程团队在构建基于生成式的应用程序时应该考虑这些挑战:
- 潜在的上下文丢失。过于激进地压缩提示可能会导致重要上下文的丢失,这可能会对法学硕士的回答质量产生负面影响。
- 任务的复杂性。某些任务或提示可能本质上很复杂,因此很难在不丢失关键信息的情况下识别和保留基本组件。
- 特定领域的知识。有效的提示压缩需要工程团队的特定领域知识或专业知识,以准确识别提示中最重要的元素。
- 压缩和性能之间的权衡。在压缩量和所需性能之间找到适当的平衡可能是一个微妙的过程,可能需要仔细的调整和实验。
为了应对这些挑战,开发针对特定用例、领域和 LLM 模型定制的强大提示压缩策略非常重要。它还需要持续监控和评估压缩提示和 LLM 的响应,以确保达到所需的性能和成本效益水平。
我们用于快速压缩的工具和库
Microsoft LLMLingua
Microsoft LLMLingua是一款先进的工具包,旨在优化和增强大型语言模型的输出,包括用于自然语言处理任务的模型。
LLMLingua 的主要目的是为开发人员和研究人员提供先进的工具,以提高法学硕士的效率和有效性,特别是在生成更精确和简洁的文本输出方面。它专注于提示的细化和压缩,并使与法学硕士的交互更加简化和高效,从而能够在不牺牲原始文本的质量或意图的情况下创建更有效的提示。
LLMLingua 提供各种特性和功能,以提高法学硕士的表现。其关键优势之一在于其复杂的提示压缩算法,可以智能地减少输入提示的长度,同时保留其内容的基本含义。这对于关注令牌限制或处理效率的应用程序特别有利。
LLMLingua 还包括提示优化工具,有助于优化提示,以便从 LLM 那里获得更好的回应。LLMLingua 框架还支持多种语言,使其成为适用于全球应用的多功能工具。
这些功能使 LLMLingua 成为寻求增强用户和法学硕士之间互动的开发人员的宝贵资产,确保提示高效且有效。
只需几个简单的步骤,LLMLingua 即可与 LLM 集成,实现快速压缩。
首先,确保您已在开发环境中安装并配置了 LLMLingua。这通常涉及下载 LLMLingua 包并将其包含在项目的依赖项中。 LLMLingua 采用紧凑、经过严格训练的语言模型(例如 GPT2-small 或 LLaMA-7B)来识别和删除提示中的非必要单词或标记。这种方法有助于高效处理大型语言模型,实现高达 20 倍的压缩,同时将性能质量损失降至最低。
安装完成后,您可以先将原始提示输入到 LLMLingua 的压缩工具中。然后,该工具会处理提示,应用其算法来压缩输入文本,同时保留其核心信息。
压缩过程完成后,LLMLingua 会输出更短、优化版本的提示。然后,这个压缩的提示可以用作您的法学硕士的输入,可能会导致更快的处理时间和更集中的响应。
在整个过程中,LLMLingua 提供了自定义压缩级别和其他参数的选项,允许开发人员根据自己的具体需求微调提示长度和信息保留之间的平衡。
Selective Context
Selective Context是一个尖端框架,旨在解决大型语言模型背景下的快速压缩挑战。
在本文中,我们将探讨在开发早期阶段使用快速压缩技术,这有助于降低基于 GenAI 的应用程序的持续运营成本。
通常,生成式人工智能应用程序利用检索增强生成框架以及即时工程,从底层大语言模型中提取最佳输出。然而,从长远来看,这种方法可能不具有成本效益,因为当您的应用程序在生产中扩展并依赖于 OpenAI 或 Google Gemini 等模型提供商时,运营成本可能会显着增加。
我们将在下面探讨的即时压缩技术可以显着降低运营成本。
构建基于 RAG 的 GenAI 应用程序时面临的挑战
RAG(或检索增强生成)是一种流行的框架,用于构建由矢量数据库支持的基于 GenAI 的应用程序,其中语义相关的数据被增强到大语言模型上下文窗口的输入以生成内容。
在构建我们的 GenAI 应用程序时,当我们将该应用程序投入生产并且所有最终用户开始使用它时,我们遇到了成本上升的一个意外问题。
经过彻底检查后,我们发现这主要是由于每次用户交互需要发送到 OpenAI 的数据量所致。我们提供的信息或上下文越多,以便大型语言模型能够理解对话,费用就越高。
我们在与 OpenAI 集成的问答聊天功能中特别发现了这个问题。为了保持对话自然流畅,我们必须在每个新查询中包含整个聊天历史记录。
如您所知,大型语言模型没有自己的记忆,因此如果我们不重新发送之前的所有对话细节,它就无法根据过去的讨论理解新问题。这意味着,随着用户不断聊天,发送的每条包含完整历史记录的消息都会显着增加我们的成本。尽管该应用程序非常成功并提供了最佳的用户体验,但它未能将运行此类应用程序的成本保持得足够低。
类似的例子可以在基于用户输入生成个性化内容的应用程序中发现。假设一款健身应用使用 GenAI 创建自定义锻炼计划。如果该应用每次建议新的锻炼时都需要考虑用户的全部锻炼历史、偏好和反馈,那么输入量就会变得相当大。反过来,这种大输入量意味着更高的处理成本。
另一种情况可能涉及食谱推荐引擎。如果引擎尝试在每项推荐中考虑用户的饮食限制、过去的喜好和营养目标,则发送处理的信息量就会增加。与聊天应用程序一样,较大的输入大小意味着更高的运营成本。
在每个例子中,关键的挑战是在提供足够的背景信息以使法学硕士 (LLM) 变得有用和个性化之间取得平衡,同时又不让成本因每次交互要处理的大量数据而失控。
我们如何解决 RAG 管道成本上升的问题
面对与 GenAI 应用相关的运营成本上升的挑战,我们专注于通过一种称为“快速工程”的策略优化与 AI 模型的通信。
即时工程是一项关键技术,涉及向底层 LLM 提出查询或指令,以便我们获得最精确和相关的响应。目标是提高模型的输出质量,同时减少所涉及的运营费用。这是以正确的方式提出正确的问题,确保法学硕士能够高效且经济高效地进行。
为了降低这些成本,我们在快速工程领域探索了各种创新方法,旨在增加价值,同时保持费用可控。
我们的探索帮助我们发现了即时压缩技术的功效。这种方法通过将我们的提示提炼为最基本的元素,去除任何不必要的信息,从而简化了沟通过程。
这不仅减少了 GenAI 系统的计算负担,而且还显着降低了部署 GenAI 解决方案的成本,尤其是那些依赖于检索增强生成技术的解决方案。
通过实施即时压缩技术,我们已经能够大幅节省 GenAI 项目的运营成本。这一突破使得在更广泛的业务应用程序中利用这些先进技术成为可能,而不会造成以前与之相关的财务压力。
我们通过完善即时工程实践的过程强调了 GenAI 交互效率的重要性,证明战略简化可以为企业带来更容易获得且经济上可行的 GenAI 解决方案。
我们不仅使用这些工具来帮助我们降低运营成本,还改进了我们用于从 LLM 获得回复的提示。使用该工具,我们发现成本节省了近 51%。但是,当我们遵循 GPT 自己的提示压缩技术(通过重写提示或使用 GPT 自己的建议来缩短提示)时,我们发现成本降低了近 70-75%。
我们使用 OpenAI 的分词器工具来处理提示,以确定我们可以将它们减少多少,同时从 OpenAI 获得相同的精确输出。分词器工具可帮助您计算 LLM 将在上下文窗口中使用的确切标记。
提示示例
让我们看一下这些提示的一些示例。
- 意大利之旅原提示:我目前正在计划去意大利旅行,我想确保参观所有必看的历史古迹并享受一些当地美食。您能给我提供意大利顶级历史景点的列表以及我在那里应该尝试的一些传统菜肴吗?压缩提示:意大利之旅:列出顶级历史景点和值得尝试的传统菜肴。
- 健康食谱原提示:我正在寻找一个健康的食谱,我可以为今晚的晚餐做。它必须是素食的,包括西红柿、菠菜和鹰嘴豆等原料,而且应该是一个小时内就能做好的东西。你有什么建议吗?压缩提示:需要一份快速、健康的素食食谱,包括西红柿、菠菜和鹰嘴豆。建议?
了解即时压缩
为在现实世界的企业应用程序中使用大型语言模型制定有效的提示至关重要。
提供分步推理、合并相关示例以及包含补充文档或对话历史记录等策略在提高专门 NLP 任务的模型性能方面发挥着至关重要的作用。
然而,这些技术通常会产生更长的提示,作为可以跨越数千个标记或单词的输入,因此它增加了输入上下文窗口。
提示长度的大幅增加可能会显着增加与采用高级模型相关的成本,特别是像 GPT-4 这样昂贵的法学硕士。这就是为什么即时工程必须集成其他技术,以在提供全面的上下文和最小化计算费用之间取得平衡。
提示压缩是一种用于优化我们使用提示工程和输入上下文与大型语言模型交互的方式的技术。
当我们向法学硕士提供提示或查询以及任何相关的上下文感知输入内容时,它会处理整个输入,这在计算上可能会很昂贵,特别是对于包含大量数据的较长提示。提示压缩旨在通过将提示压缩为其最重要的相关组件来减少输入的大小,删除任何不必要或冗余的信息,以使输入内容保持在限制范围内。
提示压缩的整个过程通常涉及分析提示并识别对于法学硕士理解上下文并生成相关响应至关重要的关键元素。这些关键元素可以是捕获提示核心含义的特定关键字、实体或短语。然后通过保留这些基本组件并丢弃其余内容来创建压缩提示。
在 RAG 管道中实施即时压缩有几个好处:
- 减少计算负荷。通过压缩提示,法学硕士需要处理更少的输入数据,从而减少计算负载。这可以带来更快的响应时间和更低的计算成本。
- 提高了成本效益。大多数 LLM 提供商根据作为输入上下文窗口的一部分传递并正在处理的标记(单词或子词)的数量进行收费。通过使用压缩提示,标记的数量大大减少,从而大大降低每次查询或与 LLM 交互的成本。
- 提高效率。更短、更简洁的提示可以帮助法学硕士专注于最相关的信息,从而有可能提高生成的响应和输出的质量和准确性。
- 可扩展性。及时压缩可以提高性能,因为不相关的词会被忽略,从而更容易扩展 GenAI 应用程序。
虽然快速压缩具有许多好处,但它也带来了一些挑战,工程团队在构建基于生成式的应用程序时应该考虑这些挑战:
- 潜在的上下文丢失。过于激进地压缩提示可能会导致重要上下文的丢失,这可能会对法学硕士的回答质量产生负面影响。
- 任务的复杂性。某些任务或提示可能本质上很复杂,因此很难在不丢失关键信息的情况下识别和保留基本组件。
- 特定领域的知识。有效的提示压缩需要工程团队的特定领域知识或专业知识,以准确识别提示中最重要的元素。
- 压缩和性能之间的权衡。在压缩量和所需性能之间找到适当的平衡可能是一个微妙的过程,可能需要仔细的调整和实验。
为了应对这些挑战,开发针对特定用例、领域和 LLM 模型定制的强大提示压缩策略非常重要。它还需要持续监控和评估压缩提示和 LLM 的响应,以确保达到所需的性能和成本效益水平。
我们用于快速压缩的工具和库
Microsoft LLMLingua
Microsoft LLMLingua是一款先进的工具包,旨在优化和增强大型语言模型的输出,包括用于自然语言处理任务的模型。
LLMLingua 的主要目的是为开发人员和研究人员提供先进的工具,以提高法学硕士的效率和有效性,特别是在生成更精确和简洁的文本输出方面。它专注于提示的细化和压缩,并使与法学硕士的交互更加简化和高效,从而能够在不牺牲原始文本的质量或意图的情况下创建更有效的提示。
LLMLingua 提供各种特性和功能,以提高法学硕士的表现。其关键优势之一在于其复杂的提示压缩算法,可以智能地减少输入提示的长度,同时保留其内容的基本含义。这对于关注令牌限制或处理效率的应用程序特别有利。
LLMLingua 还包括提示优化工具,有助于优化提示,以便从 LLM 那里获得更好的回应。LLMLingua 框架还支持多种语言,使其成为适用于全球应用的多功能工具。
这些功能使 LLMLingua 成为寻求增强用户和法学硕士之间互动的开发人员的宝贵资产,确保提示高效且有效。
只需几个简单的步骤,LLMLingua 即可与 LLM 集成,实现快速压缩。
首先,确保您已在开发环境中安装并配置了 LLMLingua。这通常涉及下载 LLMLingua 包并将其包含在项目的依赖项中。 LLMLingua 采用紧凑、经过严格训练的语言模型(例如 GPT2-small 或 LLaMA-7B)来识别和删除提示中的非必要单词或标记。这种方法有助于高效处理大型语言模型,实现高达 20 倍的压缩,同时将性能质量损失降至最低。
安装完成后,您可以先将原始提示输入到 LLMLingua 的压缩工具中。然后,该工具会处理提示,应用其算法来压缩输入文本,同时保留其核心信息。
压缩过程完成后,LLMLingua 会输出更短、优化版本的提示。然后,这个压缩的提示可以用作您的法学硕士的输入,可能会导致更快的处理时间和更集中的响应。
在整个过程中,LLMLingua 提供了自定义压缩级别和其他参数的选项,允许开发人员根据自己的具体需求微调提示长度和信息保留之间的平衡。
Selective Context
Selective Context是一个尖端框架,旨在解决大型语言模型背景下的快速压缩挑战。
通过专注于上下文的选择性包含,它有助于完善和优化提示。这确保了它们既简洁又丰富,包含有效模型交互所需的信息。
这种方法允许 LLM 高效处理输入。这使得 Selective Context 成为开发人员和研究人员提高 NLP 应用程序质量和效率的宝贵工具。
Selective Context的核心能力在于能够提高LLM的提示质量。它通过集成先进的算法来实现这一点,这些算法可以分析提示的内容,以确定哪些部分与当前任务最相关且信息丰富。
通过仅保留基本信息,选择性上下文提供简化的提示,可以显着提高法学硕士的表现。这不仅可以使模型做出更准确、更相关的响应,而且还有助于加快处理时间并减少计算资源的使用。
将选择性上下文集成到您的工作流程中涉及一些实际步骤:
- 最初,用户需要熟悉该框架(可在
GitHub上找到),并将其合并到他们的开发环境中。 - 接下来,该过程从准备原始的、未压缩的提示开始,
然后将其输入到选择性上下文中。 - 该框架评估提示,识别并保留关键信息,
同时消除不必要的内容。这会产生一个压缩版本的
提示,该版本针对法学硕士的使用进行了优化。 - 然后,用户可以将这个完善的提示输入到他们选择的 LLM 中,从而受益于更高的
交互质量和效率。
在此过程中,Selective Context 提供可自定义的设置,允许用户根据他们的特定需求和 LLM 的特点调整压缩和选择标准。
OpenAI 的 GPT 模型中的即时压缩
OpenAI 的 GPT 模型中的提示压缩是一种旨在简化输入提示的技术,而不会丢失模型准确理解和响应所需的关键信息。这在考虑令牌限制的场景或寻求更有效的处理时特别有用。
技术范围从手动摘要到使用自动化流程的专用工具,例如评估和保留基本内容的选择性上下文。
例如,采用如下所示的初始详细提示:
深入讨论工业革命对欧洲社会经济结构的影响,重点关注劳动力、技术和城市化的变化。
这可以压缩成这样:
解释工业革命对欧洲的影响,包括劳动力、技术和城市化。
这种更短、更直接的提示仍然传达了询问的关键方面,但以更简洁的方式,可能会导致更快、更集中的模型响应。
以下是一些即时压缩的更多示例:
- 哈姆雷特分析原提示:您能否对莎士比亚的《哈姆雷特》进行全面分析,包括主题、人物发展及其在英国文学中的意义?压缩提示:分析《哈姆雷特》的主题、人物发展和意义。
- 光合作用原提示:我有兴趣了解光合作用的过程,包括植物如何将光能转化为化学能、叶绿素的作用以及对生态系统的整体影响。压缩提示:总结光合作用,重点关注光转换、叶绿素的作用和生态系统的影响。
- 故事建议原提示:我正在写一个故事,讲的是一个小女孩在 13 岁生日时发现自己拥有神奇的力量。故事发生在山中的一个小村庄,她必须学会如何控制自己的力量,同时又要对家人和朋友保密。你能帮我想出一些她在学习控制力量和隐藏力量时可能面临的挑战吗?压缩提示:需要故事创意:山村里 13 岁的女孩发现了魔法。控制和隐藏魔法的挑战?
这些示例展示了如何减少提示的长度和复杂性仍然可以保留基本请求,从而使 GPT 模型做出高效且集中的响应。
结论
将即时压缩纳入企业应用程序可以显着提高 LLM 应用程序的效率和有效性。
Microsoft LLMLingua 和 Selective Context 的结合提供了一种明确的提示优化方法。可以利用 LLMLingua 的高级语言分析功能来完善和简化输入,而 Selective Context 对内容相关性的关注确保了基本信息得到维护,即使采用压缩格式也是如此。
选择正确的工具时,请考虑您的 LLM 申请的具体需求。 LLMLingua 在语言精度至关重要的环境中表现出色,而选择性上下文则非常适合需要内容优先级的应用程序。
及时压缩是改善与 LLM 交互、提高效率并产生更好结果的关键。通过使用 Microsoft LLMLingua 和 Selective Context 等工具,我们可以根据各种需求微调 AI 提示。
如果我们使用OpenAI的模型,那么除了集成上述工具和库之外,我们还可以使用上面提到的简单的NLP压缩技术。这确保了节省成本的机会并提高了基于 RAG 的 GenAI 应用程序的性能。
作者:terry,如若转载,请注明出处:https://www.web176.com/news/technology/28329.html