Elasticsearch 8 RAG 技术分享
作者:来自 Elastic 中国区首席架构师 Jerry
本文由 Elastic 中国区首席架构师 Jerry Zhu 在【AI 搜索 TechDay】上的分享整理而成。【AI 搜索 TechDay】 是 Elastic 和阿里云联合主办的 AI 技术 Meetup 系列,聚焦企业级 AI 搜索应用和开发者动手实践,旨在帮助开发者在大模型浪潮下升级 AI 搜索,助力业务增长。
Elacticsearch:从文本搜索到混合搜索
Elasticsearch 的发展历程及其在丰富应用场景中的扩张,是一个技术演进与市场需求相互促进的经典案例。初期,ES 作为一款以文本搜索为核心功能的搜索引擎,满足了基本的模糊搜索需求,这主要得益于其倒排索引技术,该技术在全文搜索领域表现出色。然而,随着用户需求的深化,特别是对时间、标签过滤及排序等结构化搜索需求的增加,传统的全文搜索技术已难以独立支撑。此时,ES 引入了 doc_value 特性,采用列式存储优化了结构化数据处理能力,有效提升了过滤和排序效率,从而能够替代部分数据库完成结构化搜索任务,这是ES应用场景得以大幅拓展的关键转折点。
随后,聚合(aggregation)功能的引入进一步推动了 ES 的应用边界。它允许在搜索结果集上进行统计分析,如不同类别的搜索结果数量,极大丰富了应用层面的数据洞察力,使得 ES 不仅仅局限于简单的查找,而是成为数据分析的强大工具。
地理空间搜索(BKD tree)的集成,则标志着 ES 能够应对更加复杂、现实世界的查询需求,如 “附近餐馆搜索”,展现了其在非结构化、结构化数据及地理位置信息综合处理方面的强大能力。
近年来,向量搜索的加入,是对 ES 能力的又一次重要扩展。尽管市场上已有专注于此的数据库,但 ES 整合向量搜索的能力,响应了用户减少技术栈复杂性、统一处理多种类型数据的需求。这一举措背后,不仅体现了技术发展趋势(如 OpenAI 引领的 AI 热潮对向量搜索的需求激增),也突显了 ES 作为广泛采纳的技术平台,有能力快速吸收并内化新兴技术,为用户提供一站式混合搜索解决方案。
Elasticsearch 之所以能在多变的场景中持续繁荣,关键在于其不断进化的能力 —— 从最初的全文搜索,到结构化数据处理,再到聚合分析、地理空间搜索,直至现今的向量搜索,每一步都紧贴用户需求和技术前沿。ES 的成功,不仅在于技术的创新与整合,更在于其能够无缝融入用户日常生活与各行各业的数字化转型之中,成为驱动现代信息搜索与分析不可或缺的一部分。
Elasticsearch 的普及与产品易用性的考量
Elasticsearch 的普及程度已显著提升,不仅局限于企业界的应用,还渗透到了高等教育领域。这一现象反映在高校大数据课程中,学生不仅开始采用 ES 进行项目实践,还能深入理解其架构及应用方法,这标志着 ES 的普及率与易用性达到了较高水平。易用性作为技术采纳的关键因素,对于促进技术在学生群体中的快速学习和应用至关重要,它降低了复杂技术的入门门槛,如分布式系统的配置与管理,从而加速了技术的推广步伐。
在国内技术生态中,ES 的成功案例凸显出在追求高性能的同时,不应忽视技术的易用性和维护性,这些因素在全球范围内被视为与性能同等重要的衡量标准,对技术栈能否广泛推广至大型企业用户群体起着决定性作用。实际上,技术的普及速度和接受度受到多维度因素的影响,速度虽然是重要考量,但并非唯一标准。
ES 的发展路径展现了其对市场需求的积极响应,它并未预先设定所有功能,而是依据用户需求动态演进,无论是全文搜索、结构化搜索还是聚合统计等功能,均是在实际应用场景驱动下逐步完善。这种以用户需求为导向的产品设计理念,确保了 ES 能够持续适应并推动各类应用场景的发展,体现了高度的灵活性与前瞻性。
打造最佳混合搜索引擎:Elasticsearch 的技术演进与创新
在技术产品的发展历程中,适时的市场进入时机至关重要。 Elasticsearch 的成功案例展示了它如何巧妙地把握住了用户需求的爆发期,既不过早,也不滞后,恰如其分地推出了向量搜索等前瞻功能。尽管在 7.x 版本时已具备 CPU 驱动的向量搜索能力,但直到技术成熟与市场需求相匹配时,才加大资源投入,实现了有效的产品迭代与市场响应。这种策略性的资源分配,避免了过早投资的潜在浪费,体现了在产品管理中对时机与资源平衡的精妙掌握。
语义搜索的兴起,进一步验证了 ES 对行业趋势的敏锐洞察。面对关键词搜索的局限性,ES 预见到语义理解技术的潜力,并等待如 OpenAI 推动的模型进步,适时引入高性能的 embedding 模型,推动语义搜索的落地,从而让用户无需转换技术栈就能享受到语义搜索带来的显著提升。混合搜索的集成策略,即在传统搜索基础上融入向量搜索,成为提高搜索质量的关键步骤,尤其是在 RAG 场景下,重排序技术的应用通过高级模型进一步提升了搜索结果的相关性和精准度。
ES 的核心优势在于其强大的生态系统和对现有项目的无缝升级能力,使得从传统搜索过渡到语义搜索变得自然而高效。此外,ES 自研的 HNSW 索引及检索引擎,不仅强化了其向量搜索的性能,还确保了与既有搜索功能的深度整合,旨在打造最佳的混合搜索引擎体验,而非仅限于向量搜索本身。这一决策背后的逻辑,是维护技术自主权,确保在不断优化过程中,能灵活应对并满足混合搜索日益增长的复杂需求,同时也反映出与 Lucene 项目核心特性的兼容考量。
ES 在技术演进与市场适应中的战略,体现了对技术创新的前瞻布局与实践智慧,以及对用户需求深刻理解基础上的精准执行,最终目标是助力用户在不增加技术负担的前提下,平滑过渡至更高级的搜索解决方案,实现搜索体验的革命性飞跃。
性能与向量计算在搜索引擎中的重要性
要实现既定目标,首要认识到性能虽非唯一标准,却是不可或缺的基础。特别是在向量计算领域,性能需求尤为显著,因为它涉及大量矩阵运算,天然适合单指令多数据(SIMD)处理,这要求我们深入探索硬件加速的可能性。因此,即便是以 Java 为根基的系统如 Lucene 和 Elasticsearch,在向量计算的背景下,也必须跨越传统界限,积极整合硬件优化措施,以应对计算密集型任务的挑战。
此外,传统 ES 在搜索和聚合计算方面已表现出色,但面对向量处理和更复杂的分析需求时,单纯依赖软件层面的优化已不足以满足高效计算的要求。这不仅涉及到如何高效利用硬件资源,比如通过特定的硬件加速技术如 SIMD 指令集,还要求在设计上更加灵活,以适应不同计算场景的并发需求。例如,ES 引入新的计算引擎,不仅为了提升聚合计算的性能,也为更好地适配硬件加速趋势。
量化技术的采用,尤其是从 float32 到更低精度格式的转变,是向量处理中减少资源消耗的关键策略。这对于处理高维向量数据尤其重要,能够显著降低存储和计算成本,而 ES 对此的支持也体现了其向高效计算迈进的决心。
同时,系统设计需考虑并行处理能力的提升,特别是在计算密集型应用中。以往在搜索领域,关注点可能更多在于处理高并发请求的能力,而在向量计算及数据分析场景下,充分利用多核处理器和现代硬件的高并发潜力成为必要。这意味着不仅要提升单个查询的处理能力,还要确保系统能有效协调多个并发任务,实现资源的最佳分配和利用。
为实现这些目标,Elasticsearch 采取了一系列技术革新,包括采用 Panama 项目等手段,以确定性方式利用 JDK 的硬件加速能力,并逐步增加对本地代码调用的支持,以进一步挖掘硬件潜能。这些改变不仅是为了提升现有功能的性能,更是为了适应计算领域的新要求,确保 ES 能够在不牺牲易用性和可扩展性的前提下,满足日益增长的计算密集型工作负载需求。
ES 的发展路径清晰地展示了从专注于搜索到融合高性能计算的转变过程,这一转变不仅体现在技术选型和架构调整上,更在于对硬件资源的深度整合与优化,以及对计算效率和并发控制的深刻理解与实践。随着技术进步和硬件能力的不断提升,ES的持续演进将为用户提供更强大、更灵活的数据处理能力。
深化向量搜索与语义理解:Elasticsearch 的新方向
在应对日益增长的向量数据处理成本时,社区普遍关注如何高效压缩而不大幅度牺牲质量,其中量化技术成为一个焦点。量化主要是将原本占用较大存储空间的浮点型数据(如float32)转换为更紧凑的整型数据(如 int8 或 int4),这不仅能减少每个维度的存储需求,而且对模型输出的向量质量影响相对较小,尤其是当不减少向量维度而仅改变数据类型时。Elasticsearch 自动化这一量化过程,将模型生成的 float32 数据自动转换为 int8 格式,从而显著减小存储需求,间接降低了内存消耗,这对依赖内存高效的 HNSW 算法至关重要,确保了索引检索速度。
混合搜索策略是 ES 致力于优化的方向,旨在结合不同类型的向量处理与文本搜索能力,服务于广泛的使用场景。其中,“密集向量” 技术通过深度学习模型将文本映射到高维空间,实现语义理解;而 “稀疏向量” 则更贴近传统的关键词加权方法,如 BM25,尤其适用于文本搜索。通过结合两者,ES 不仅能够支持基于文本的查询,还能扩展至图像等多媒体内容的语义搜索,满足多样化需求
针对文本搜索中常见的关键词缺失问题,ES 引入了文档扩写技术,利用深度学习模型预测并补充文档中可能缺失但与查询相关的关键词,进而优化基于 BM25 的倒排索引搜索效果,无需将所有数据加载至内存即可实现高效检索。此外,模型还能动态调整关键词权重,增强搜索灵活性和准确性。
为了进一步提升搜索质量,ES 整合了诸如 Cohere 等社区广受好评的模型,不仅在代码搜索、长文本处理、半结构化数据检索等方面展现出显著性能提升,还在商业版本中提供了对这些模型的支持与对接服务。这表明,现代语义搜索已不再局限于传统方法,而是深入到模型微调、多向量支持等高级功能,以适应复杂多变的检索需求。多向量支持尤为重要,因为它允许对文档的不同部分(如标题、摘要、段落乃至图文内容)独立建模,深化语义理解,提升检索系统的全面性和精确性。
通过精细化的量化策略、混合搜索技术的集成、以及模型辅助的文档扩写与多向量处理,Elasticsearch 正不断推动语义搜索技术边界,为用户提供更加智能、高效、定制化的搜索解决方案。
提升搜索与分析能力:利用社区 AI 和开源工具
Elasticsearch 现已融入模型上传功能,特别是与现有的 Active Search 配合时,其内置的机器学习模块(基于C++)提供了高度灵活性。该模块依托开源基础架构,便于集成如 Value 模型等高质量模型,实现从 Hugging Face 直接上传至社区,并自动执行文本到向量的嵌入转换,存储于 ES 内,极大简化了处理流程。
在管理层面,Kibana 界面支持模型的可视化管理,包括部署规模、内存分配及并发度设定,全面监控各模型的请求量与资源消耗,提供直观便捷的控制体验。此外,针对模型集成,不仅预设了 Python API 以简化对接流程,无需依赖外部服务,还特别设计了 Inference API 以满足更广泛需求,特别是针对大规模模型或需高性能计算资源的场景,确保了与各种环境(如阿里云 PaaS 平台托管的模型、OpenAI 服务乃至其他 SaaS 服务)的无缝衔接,提升了服务的通用性和灵活性。
Inference API 作为核心中介,贯穿搜索、排序、评估等多个环节,不仅强化了与内部部署模型的互动,也优化了私有化或云端部署模型的调用流程,实现了AI能力接入的高效与多样性。这一系列设计充分体现了 “社区 AI” 理念,旨在利用 AI 技术加强传统搜索,简化用户操作,降低使用门槛,即便在复杂的向量处理领域,亦能显著提升用户体验,减少开发中的重复工作,确保技术应用更加直观与集中。
通过不断优化的接口设计与强大的后端支持,ES 及其相关工具集正逐步实现搜索技术的智能化转型,不仅加速了 AI 在搜索领域的融合进程,也彰显了对用户体验与易用性重视的新时代技术发展趋势
ES与AI结合实现高效搜索与数据分析
在融合 ES 与 AI 技术的背景下,我们致力于打造高效的数据搜索与分析体验,通过深度集成推理 API 与外部服务,实现了搜索功能的智能化升级。我们的混合召回设计不仅简化了开发流程,还显著提升了索引处理与查询效率。具体而言,用户只需在索引定义时指定如 “synthetic test” 这类需进行语义搜索的字段,并关联相应的推理 API,系统便会自动完成文本到向量的转换与存储,以及后续的查询转换,极大地减轻了开发者负担,避免了重复编码工作。
此外,我们重视安全性与隐私保护,提供精细化的权限控制功能,确保数据访问遵循严格的角色与权限界定。ES 商业版在此基础上更进一步,支持行级别与列级别的权限管理,使得不同角色用户在相同查询条件下可获取的信息范围各异,满足复杂的企业级安全需求。同时,无缝集成企业认证系统(如 SSO),简化了身份验证流程,提升了系统的整体安全性与易用性。
针对数据处理与合规性,我们提供敏感词过滤机制,并依托 ES 强大的规则构建能力,进一步强化了数据处理的灵活性与安全性。在阿里云的搜索开发平台上,ES 作为核心组件,完美融入其全面的AI搜索解决方案中,不仅简化了部署与维护工作,还通过持续的技术迭代,如向量引擎的性能加速、计算引擎的革新,以及与AI生态的深度融合,不断拓展其功能边界与性能极限。
着眼未来,我们正聚焦于提升计算引擎的能力,旨在通过现代化的计算范式与硬件加速技术,为用户提供超越传统架构的高性能搜索与计算服务。同时,云原生策略的支持与阿里云的紧密合作,确保了服务的高可用性与可扩展性,覆盖从日志分析、APM 监控到安全检测等多元应用场景。
为促进技术交流与学习,我们提供了丰富的学习资源与实验室环境,涵盖搜索、安全等多个领域,鼓励开发者深入探索 ES 与 AI 结合的广阔应用前景,并通过技术社群加强实践交流,共同推动技术创新与发展。
阿里云搜索开发工作台 面向企业及开发者提供先进的 AI 搜索开发平台,内置实践打磨的多模态数据解析、文档切分、文本向量、查询分析、大模型文本生成、效果测评等丰富的组件化服务以及开发模版,同时,可选多种引擎能力,用户可灵活调用,实现智能搜索、检索增强生成(RAG)、多模态搜索等搜索相关场景的搭建。
相关文章:

Elasticsearch 8 RAG 技术分享
作者:来自 Elastic 中国区首席架构师 Jerry 本文由 Elastic 中国区首席架构师 Jerry Zhu 在【AI 搜索 TechDay】上的分享整理而成。【AI 搜索 TechDay】 是 Elastic 和阿里云联合主办的 AI 技术 Meetup 系列,聚焦企业级 AI 搜索应用和开发者动手实践&am…...

根据字典值回显,有颜色的
背景 本项目以若依前端vue2版本为例,项目中有根据字典值回显文本的函数selectDictLabel,但是有时候我们需要带颜色的回显,大概这样的 用法 <template v-slotscope><dict-label :options"dangerLevelOptions" :value&qu…...

多台PC网络ADB连接同一台RK3399 Android7.1.2设备
在RK3399 Android7.1.2上面,进行网络ADB调试时,如果多台电脑连接同一台Android设备,第一台连接上的能正常操作,之后连接的看到设备状态为OFFLINE,分析了下ADBD相关代码,发现在ACCEPT Client的时候没有区分别…...

前端黑科技:使用 JavaScript 实现网页扫码功能
在数字化时代,二维码已经渗透到我们生活的方方面面。从移动支付到产品溯源,二维码凭借其便捷性和高效性,成为了信息传递的重要载体。而随着前端技术的不断发展,我们甚至可以使用 JavaScript 在网页端实现二维码扫描功能࿰…...

【人工智能】全景解析:【机器学习】【深度学习】从基础理论到应用前景的【深度探索】
目录 1. 人工智能的基本概念 1.1 人工智能的定义与发展 1.1.1 人工智能的定义 1.1.2 人工智能的发展历史 1.2 人工智能的分类 1.2.1 弱人工智能 1.2.2 强人工智能 1.2.3 超人工智能 1.3 人工智能的关键组成部分 1.3.1 数据 1.3.2 算法 1.3.3 计算能力 2. 机器学习…...

MySQL与PostgreSQL语法区别
1. 数据类型差异 a. 整型 ● MySQL中的text数据类型最大存储容量为64KB,PostgreSQL中的text类型没有此限制。 ● MySQL中使用tinyint、mediumint和int表示不同大小的整数,PostgreSQL使用smallint、int和bigint。 b. 浮点数类型 ● MySQL提供了float和…...

vue2+OpenLayers 天地图上凸显出当前地理位置区域(4)
凸显出当前区域 需要当前地方的json数据 这个可以在阿里的这个阿里 看下效果图 遮盖层的逃命都是可以调的 引入 下面一段代码 import sx from "/views/json/sx1.json"; // 下载的json import GeoJSON from "ol/format/GeoJSON"; // ol的一些方法 imp…...

基于Python、Django开发Web计算器
1、创建项目 创建Django项目参照https://blog.csdn.net/qq_42148307/article/details/140798249,其中项目名为compute,并在该项目下创建一个名为app的应用,并且进行基本的配置。 2、导入Bootstrap前端框架 Bootstrap的使用参照https://blo…...

高性能并行计算面试-核心概念-问题理解
目录 1.什么是并行计算?高性能从哪些方面体现? 2.CPU常见的并行技术 3.GPU并行 4.并发与并行 5.常见的并行计算模型 6.如何评估并行程序的性能? 7.描述Am达尔定律和Gustafson定律,并解释它们对并行计算性能的影响 8.并行计…...

java-activiti笔记
版本:activiti7 <dependency><groupId>org.activiti</groupId><artifactId>activiti-json-converter</artifactId><version>7.0.0.Beta2</version><exclusions><exclusion><groupId>org.mybatis</g…...

Layui——隐藏表单项后不再进行验证
目录 修改后的部分代码 修改后的完整代码 我编辑用户信息和添加新用户用的是同一个表单,不同的是编辑用户信息里没有密码项和确认密码项,但是把它们隐藏后仍然要进行验证,也就是说它们俩的验证并没有随着表单项的隐藏而关闭。原因…...

Github Copilot 使用技巧
🎯目标读者 本文不包含如何安装 Github Copilot本文介绍了 Github Copilot 使用方法和一些技巧 本人已经使用 Github Copilot 2 年了,交了 3 次年费,每年 100$ 着实心痛,但是用着确实爽歪歪 但是感觉一直只用了一小部分功能&am…...

【实现100个unity特效之20】用unity实现物品悬浮和发光像素粒子特效
最终效果 文章目录 最终效果新增飞升粒子效果光圈效果修改不同颜色完结 新增飞升粒子效果 效果 光圈效果 效果 修改不同颜色 完结 赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持…...

GPT-4o mini发布,轻量级大模型如何颠覆AI的未来?
从巨无霸到小巨人:GPT-4o Mini的创新之路 ©作者|潇潇 来源|神州问学 引言 随着人工智能技术的飞速进步,AI领域的竞争日益激烈,大型模型的发布几乎成为常态。然而,这些庞大的模型通常需要大量的计算资源和存储空间ÿ…...

高性能的 C++ Web 开发框架 CPPCMS + WebSocket 模拟实现聊天与文件传输案例。
1. 项目结构 2. config.json {"service": {"api": "http","port": 8080,"ip": "0.0.0.0"},"http": {"script": "","static": "/static"} }3. CMakeLists.txt…...

合合信息OCR支持30类国内常见票据一站式分类识别,支持医疗发票、数电票识别
合合信息TextIn平台明星产品——国内通用票据识别,重磅更新! 产品支持票据类型扩展到23大类、30小类,覆盖场景更全面,同时升级优化了多款票据识别模型,平均识别率较前版本提升11.5%,整体识别速度提升21.9%…...

LeetCode-day40-3151. 特殊数组 I
LeetCode-day40-3151. 特殊数组 I 题目描述示例示例1:示例2:示例3: 思路代码 题目描述 如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个 特殊数组 。 Aging 有一个整数数组 nums。如果 nums 是一个 特殊…...

技术研究:Redis 数据结构与 I/O 模型
数据结构 Redis之所以“快”,一方面因为它是内存数据库,所有操作都在内存上完成,内存的访问速度本来就快。另一方面则是因为高效的数据结构,使得操作键值效率较高。总体来说,Redis使用了一个用来保存每个Key/Value的全…...

46-扇孔的处理及铺铜以及布线
1.先连信号线 2.电源管脚,以如下方式处理: 引线打孔处理...

LVS实验的三模式总结
文章目录 LVS的概念叙述NAT工作模式实战案例**思想:**NAT工作模式的优点NAT工作模式的缺点 NAT工作模式的应用场景大致配置 route:打开路由内核功能 部署DR模式集群案例工作思想:大致工作图如下思路模型 具体配置与事实步骤补充 防火墙标签解…...

游戏安全入门-扫雷分析远程线程注入
前言 无论学习什么,首先,我们应该有个目标,那么入门windows游戏安全,脑海中浮现出来的一个游戏 – 扫雷,一款家喻户晓的游戏,虽然已经被大家分析的不能再透了,但是我觉得自己去分析一下还是极好…...

bert-base-chinese模型的完整训练、推理和一些思考
前言 使用google-bert/bert-base-chinese模型进行中文文本分类任务,使用THUCNews中文数据集进行训练,训练完成后,可以导出模型,进行预测。 项目详细介绍和数据下载 数据集下载地址 Github完整代码 现记录训练过程中的一些感悟…...

JS基础5(JS的作用域和JS预解析)
JS的作用域 1. 全局作用域 全局作用域是在代码的任何地方都能访问到的最外层作用域。在浏览器环境下,全局作用域就是window对象,因此所有在全局作用域中声明的变量和函数都会成为window对象的属性和方法。 var globalVar "I am global"; …...

Doris 夺命 30 连问!(中)
导言 抱歉,作为从 S2 开始的骨灰级玩家看到 EDGUZI 官宣首发上线,兴奋之余忘了写文档 - -||,还望各位看官老爷见谅,这次错了,下次还敢 ^_^ 这是继上次的 30 问上篇的中篇,也是 10 个问题,有些…...

书生.浦江大模型实战训练营——(四)书生·浦语大模型全链路开源开放体系
最近在学习书生.浦江大模型实战训练营,所有课程都免费,以关卡的形式学习,也比较有意思,提供免费的算力实战,真的很不错(无广)!欢迎大家一起学习,打开LLM探索大门…...

SpringBoot 整合 RabbitMQ 实现延迟消息
一、业务场景说明 用于解决用户下单以后,订单超时如何取消订单的问题。 用户进行下单操作(会有锁定商品库存、使用优惠券、积分一系列的操作);生成订单,获取订单的id;获取到设置的订单超时时间࿰…...

Cilium:基于开源 eBPF 的网络、安全性和可观察性
基于 eBPF 的网络、安全性和可观察性 Cilium 是一种开源的云原生解决方案,它利用 Linux 内核中的 eBPF 技术来提供、保护和监控工作负载之间的网络连接。 什么是 eBPF? eBPF 是一项源自 Linux 内核的技术,允许沙盒程序在特权上下文&#x…...

Axios 详解与使用指南
Axios 详解与使用指南 1. Axios 简介 Axios 是一个基于 Promise 的 HTTP 客户端,能够在浏览器和 Node.js 环境中运行。它提供了一种简便的方式来执行 HTTP 请求,并支持多种请求方法,如 GET、POST、PUT、DELETE 等。Axios 的配置灵活&#x…...

深度学习 —— 个人学习笔记20(转置卷积、全卷积网络)
声明 本文章为个人学习使用,版面观感若有不适请谅解,文中知识仅代表个人观点,若出现错误,欢迎各位批评指正。 三十九、转置卷积 import torch from torch import nndef trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[…...

解决Mac系统Python3.12版本pip安装报错error: externally-managed-environment的问题
遇到的问题 在Mac安装了Python3.12.x版本(3.12.3、3.12.4)后,当尝试pip3 install xxx的时候,总是报错:error: externally-managed-environment error: externally-managed-environment This environment is external…...