Spiga

标签为云原生的文章

Net企业级AI项目3:构建企业知识库

2025-09-20 20:49:45

摘要:一、理论基础 1. RAG 概述 RAG:检索增强生成技术,我们先用一个例子来介绍一下什么是检索增强生成。 想象一下,你是一个很聪明的小学生,但你的知识都记在脑子里。如果老师问你一个很难的问题,比如:“恐龙是怎么消失的?”。你可能记得一些,但不完整。 这时候老师说:“来,我们开卷考!你可以去书架上查百科全书,然后再回答。” RAG 就是这样: 你有大脑(AI 的记忆)→ 你本来就知道很多事。 但遇到不知道的问题→ 你先跑去“书库”(数据库、网络等)快速查找相关的资料。 把查到的资料和你原来的知识合在一起,用你自己的话给出一个更好的答案。 所以,RAG 就是:先查资料,再结合自己的知识回答问题。这样就不会瞎编,答案更准确、更新鲜!是不是很像写作业时“先翻书,再总结”呢? 企业应用使用大模型时,至少会遇到下面2个问题: 大模型一旦训练结束,它就不会在知道结束时间之后发生的事了,也就是它有时效性缺失 另外,通用的大模型是使用公共数据来训练的,它没有企业私有的数据,也就是私有领域空白 为了解决上面2类问题,我们可以使用 RAG 技术,为模型提供一个图书馆,也就是通常说的企业知识库。 2. RAG 工作流程 在让 LLM 回答问题之前,先去外部知识库中检索相关的信息,然后将检索到的信息作为参考资料喂给LLM,让它基于资料生成答案。RAG 分为2个阶段: 索引阶段:后台异步运行的数据处理流程,将文本转换为向量,构建语义索引。 检索与生成阶段:能够在线实时响应用户请求的流程 ETL(提取、转换、加载)流: 加载:格式解析、编码标准化、元数据提取; 分割:LLM的上下文窗口有限,所以需要递归字符分割,分割可能造成语义不完整,所以在分割的2段语句通常会添加重叠窗口; 嵌入:人类语言翻译成机器语言,使用嵌入模型,将文本转换为高维向量,即高维的语义空间,后续可以使用余弦相似度 -1 ~ 1进行检索; 存储:将文本块内容、向量数据、元数据,持久化存储到向量数据库。 3. 嵌入模型选型 我们把文本转换成高维向量时,需要使用嵌入模型,那如何选择嵌入模型呢? 我们先看一下都有哪些选择: 闭源厂商云端模型 API: 优势:接入成本低、弹性扩展 劣势:数据隐私风险、长期成本不可控、网络延迟 开源模型本地私有化: 优势:绝对的数据安全、零增量成本、高性能与低延迟 劣…… 阅读全文

Net企业级AI项目2:企业助理智能体

2025-09-13 22:06:54

摘要:上一篇我们已经搭建好了 AI 应用的基础设施,今天我们开始创建企业助理智能体。 一、AI 网关集成 Agent 框架 关于 MAF 部分的内容,可以查看 Agent 智能体 ,我们这里直接上代码。 我们在 Qjy.AICopilot.AiGatewayService 项目添加一个 Agents 文件夹。 1. 创建聊天智能体 由于我们是一个多模型聊天应用,聊天模型数据是从数据库动态加载的。因而我们首先要创建一个工厂类,用来根据数据库中的数据来动态创建 Agent。 public class ChatAgentFactory(IServiceProvider serviceProvider) { public ChatClientAgent CreateAgentAsync(LanguageModel model, ConversationTemplate template) { using var scope = serviceProvider.CreateScope(); var httpClientFactory = scope.ServiceProvider.GetRequiredServiceIHttpClientFactory(); // 创建专属 HttpClient 对象 var httpClient = httpClientFactory.CreateClient(OpenAI); var chatClientBuilder = new OpenAIClient( new ApiKeyCredential(model.ApiKey ?? string.Empty), new OpenAIClientOptions { Endpoint = new Uri(model.BaseUrl), // 接管 OpenAI 的底层传输 Transport = new HttpClientPipelineTransport(httpClien…… 阅读全文

Net企业级AI项目1:项目基础搭建

2025-09-06 18:02:47

摘要:前面我做了一个使用 LangChain 做的 AI 通用聊天平台的示例,接下来我们回到 .NET 环境,完成一个企业级的 .NET+AI 的项目。目标是为企业通电,完成一个可扩展、可私有化部署的 AI 应用。让企业能用自然语音操作内部其他系统(ERP/CRM/OA)、获取知识、分析报告。 一、项目分析 1. 背景 我们需要完成一个AI企业助理系统,在现有的系统之上,覆盖一层“智能化层”,完成: 智能体和工具调用:赋予 AI 行动能力。 检索增强生成,企业知识中枢:赋予 AI 记忆和知识能力 AI数据分析,一句话生成可视化报表:赋予 AI 分析能力,如 NL2SQL 2. 需求分析 通过背景分析,我们梳理一下大致需要完成的功能: 智能助理(Agent):AI 交互入口(大脑) 对话与上下文管理:支持多轮上下文 意图识别:准确分析用户的输入,判断命令意图 工具调用:调用通过 MCP 接入的外部插件 富响应生成:响应不能局限于纯文本,包含表格、图表 企业知识中枢(RAG):处理非结构化知识(记忆) 文档处理流程:支持多种文档格式上传,实现自动解析、自动分块、向量化计算(嵌入)、向量存储 检索与回答:支持语义搜索,结合LLM生成精准、有来源依据的问答 企业级特性:权限控制、数据时效性 数据报表分析(NL2SQL):处理结构化数据(分析) NL2SQL引擎:自然语言翻译成 SQL 查询 多数据源支持 自动化分析与可视化:自动生成可视化图表,利用LLM总结图表中的趋势 报告导出 MCP 接入管理(Tools):负责连接外部系统(行动) 服务发现与管理:实现 MCP 服务的注册,注册到AI的能力库 调试与权限:确保操作安全 3. 技术选型 后端框架:ASP.NET Core(.NET 10) AI 框架:Semantic Kernerl(SK)、Agent Framework 知识库:向量数据库(Qdrant)+关系型数据库(PostgreSQL + pgvector) 大模型:兼容 OpenAI 接口、支持私有化部署 安全方案:Jwt + RABC 开发方式:云原生开发 .NET Aspire 部署方案:容器化部署 4. 开发流程 搭建环境与项目骨架 实现核心服务(认证 + AI 网关) 构建知识中枢(RAG …… 阅读全文

Dapr 完全离线安装方案

2024-09-01 23:15:28

摘要:Dapr 完全离线安装方案 以下是完整的 Dapr 离线安装指南,无需任何网络连接即可完成全部安装过程: 准备工作(在可联网的机器上) 1. 下载所有必需文件 # 创建离线安装目录 mkdir dapr-offline cd dapr-offline # 下载 Dapr CLI wget https://github.com/dapr/cli/releases/download/v1.15.0/dapr_linux_amd64.tar.gz # 下载 Dapr 运行时 wget https://github.com/dapr/dapr/releases/download/v1.15.5/daprd_linux_amd64.tar.gz # 下载 Dashboard wget https://github.com/dapr/dashboard/releases/download/v0.15.0/dashboard_linux_amd64.tar.gz # 下载默认配置文件 wget https://raw.githubusercontent.com/dapr/dapr/master/daprd-system/config.yaml 2. 下载 Docker 镜像并保存 # 拉取所需镜像 docker pull daprio/dapr:1.15.5 docker pull daprio/placement:1.15.5 docker pull daprio/sentry:1.15.5 docker pull daprio/dashboard:0.15.0 docker pull redis:6-alpine docker pull openzipkin/zipkin:latest # 保存镜像为 tar 文件 docker save -o dapr-1.15.5.tar daprio/dapr:1.15.5 docker save -o placement-1.15.5.tar daprio/placement:1.15.5 docker save -o sentry-1.15.5.tar daprio/sentry:1.15.5 docker save -o dashboard-0.15.0.tar daprio/dashboard:0.15.0 d…… 阅读全文

微软云平台Microsoft Azure

2019-09-13 17:27:26

摘要:持续集成、继续部署、继续交付 持续集成(Continuous integration) 是一种软件开发实践,即团队开发成员经常集成它们的工作, 通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。 每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。 持续部署(continuous deployment) 是通过自动化的构建、测试和部署循环来快速交付高质量的产品。 某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器, 投资机器优化开发流程化相对也提高了人的效率,让 engineering productivity 最大化。 持续交付(英语:Continuous delivery,缩写为 CD) 是一种软件工程手法, 让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、 持续的保持在随时可以释出的状况。它的目标在于让软件的建置、 测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。 DevOps DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。 它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。 它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。 Jenkins Jenkins是实现DevOps的工具 Jenkins是一款开源 CICD 软件,用于自动化各种任务,包括构建、测试和部署软件。 Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。 特点: 易于安装,只要把jenkins.war部署到servlet容器 易于配置-所有配置都通过其提供的web界面实现。 集成RSS/E-mail通过RSS发布构建结果或当构件完成是通过e-mail通知。 生成JUnit/TestNG测试报告。 分布式构建支持Jenkins能够让多台计算机一起构建/测试。 文件识别:Jenkins能够跟…… 阅读全文

云计算:无服务器计算

2019-03-20 11:26:30

摘要:什么是无服务器计算 “无服务器”是云计算中资源抽象的极致体现。从它的命名上你就可以看出,所谓“无服务器”就是想让用户感觉不到服务器的存在,这是因为有一朵巨大的云在底层进行着支撑。 如果说容器是给予了我们很大的定制空间,让你更加容易地按照自己的需要,来进行应用程序的拆分和封装;那么无服务器则是完全屏蔽了计算资源,它是在真正地引导你不再去关心底层环境,你只要遵循标准方式来直接编写业务代码就可以了。 而且在粒度上,无服务器会允许你拆分得更细致、更轻量。你甚至可以把每一个具有独立功能的函数,来作为一个单独的服务进行部署和运行。这也是为什么,在有些云计算的分类方法下,无服务器计算能够单独“开宗立派”,被称为函数即服务(Function-as-a-Service,FaaS)的原因。 各大云厂商现在都已经推出了各自的无服务器计算服务,比如 AWS 的 Lambda、阿里云的函数计算,和微软 Azure 的 Azure Functions。在国内的云厂商中,腾讯云的云函数也是在无服务器计算上投入较早、产品较为成熟的厂商。 无服务器计算是多面手 无服务器计算所能做的,可远远不止充当快速的 Web 开发工具。事件模型是无服务器的核心编程模型和运行逻辑,所以它非常适合相当广泛的事件驱动开发场景。 事件的起始,要依靠触发器。 云上 Serverless 服务一般都配套提供了多种多样的触发器,包括 API 触发器、对象存储触发器、队列触发器等等。比如上面的实验中,我们用的就是API 触发器,它的触发条件为 API 网关带来的外部 Web 请求。 较为常用的还有对象存储触发器。比如当用户上传了一个文件,后台程序把它保存到对象存储中,这时相应的无服务器函数会被这个新对象触发,你就能对这个新上传的文件进行必要的处理了。 此外,还值得了解相当实用的定时触发器,它可以按照设置的条件周期性触发。通过它和云函数的配合,可以在一定程度上代替操作系统中 crontab 类工具起到的作用,也许能帮你节省一台专门触发运行定时任务的虚拟机。 如果说触发器是无服务器计算的上游的话,那么各种各样的外部交互方式,也让无服务器计算能够对外访问,并向下游输出。云端的 Serverless 环境中,一般都能够提供一系列重要类库和 SDK,让你能够在函数内访问其他云服务,尤其是像数据库、消息队列这样的外部存储。 所以,在云端…… 阅读全文

云计算:应用托管服务

2019-03-17 11:04:16

摘要:什么是应用托管服务 在云计算发展的早期,就已经出现了“建站类服务”,这正是应用托管服务的雏形。当时的建站类服务,会自动为你分配好服务器,安装好相应语言的 Web 环境以供你使用。在部署层面,服务通常会开放 FTP 端口,以便你上传服务器端的代码、脚本和资源。这是应用服务的一种轻量形式。 应用服务的本质就是为你的应用提供一个隔离的独立运行环境。作为用户来讲,你可以只专注于业务逻辑,不需要来手动创建这个环境,更不需要运维这个环境。 应用托管的增值服务 成熟的应用服务还能够提供许多增值服务,来进一步地满足我们在实际开发运维 Web 应用时,产生的各个层面的需求。 第一项增值服务就是监控 尤其是针对 Web 应用的特点而进行的 HTTP 层面的应用监控。所以,你不仅能看到计算资源的占用率,如 CPU、内存使用率等,还能看到许多应用层指标,比如总请求数、错误响应数、并发连接数、响应时间等等。这些都是你在监控应用运行时非常有帮助的信息,而这一切都是 PaaS 服务自动提供、开箱即用的功能。 而且,基于这些监控的指标,你还能够在云上制定相应的报警规则,当某些指标达到你设定的阈值时,会及时发送警报。这同样是一个非常实用的功能。 第二个方面是扩展 也就是底层计算资源和流量需求的匹配。这里既包含了底层机器配置的垂直扩展,也包含了机器数量层面的水平扩展。一旦你有调整需求,只需要动动手指发出指令,就可以随时升级相应的机器配置,并无缝切换。 特别是水平扩展的存在,它相当于同时包含了负载均衡和弹性伸缩,把它们都一股脑儿集成到了托管服务中。这意味着应用托管服务不是只能对应一台机器,而是能够创建多台机器来承接请求,并会在前端均衡地分发到多个实例上去。这里你同样可以指定自动伸缩的规则,来让应用服务自动地调整实例数量。 第三个方面是集成 这里是指与其他 PaaS 的集成。这是所有 PaaS 服务的优势,各个服务间可以互相帮助、联合作战,应用托管类服务也不例外。比如在监控数据方面,它可以和云监控系统进行衔接;再比如,有些云允许 Web 应用以目录的形式,挂载对象存储中的文件等等。 其中,应用托管类服务还有一项非常重要的集成能力,就是应用服务与云上 DevOps 组件和流程的无缝对接。它意味着应用服务可以作为整个应用生命周期管理的一部分,嵌入到持续集成的流程中去。借助和源代码管理设施的联动,你的应用…… 阅读全文

云计算:云数据库

2019-03-15 22:01:47

摘要:云上的关系型数据库 关系型数据库的应用在业界是最普遍的,也是云数据库首先进入的领域。这里的先行者同样是 AWS,早在 2009 年就发布了 RDS(Relational Database Service),后来其他的厂商也纷纷开始跟进。 云数据库在外部交互的层面上,保持了和传统“原版”数据库几乎完全一致的编程接口和使用体验。 比如说,你针对 MySQL 编写的 SQL 代码和应用层连接代码,包括你很熟悉和经常会使用的连接管理工具,除了要更改连接字符串和参数之外,都能够几乎不经修改地在云数据库的 MySQL 服务上运行。 另外,针对某个数据库的某个具体版本,云厂商们会把它的功能、内部机制完整地保留下来,以求获得最大程度的兼容性。早期比较简单的云数据库实现原理,是充分利用云上已经提供的虚拟机、云磁盘等 IaaS 层面的资源,在隔离的环境下进行数据库镜像的安装。而后来技术实力比较强大的厂商,还能够做到对数据库源码和模块的深度定制,在保证兼容性的前提下,进行许多对用户透明的云端适配和优化。 所以,云数据库尽管是一个受限的 PaaS 环境(比如它通常无法让你直接访问底层的服务器),但在使用体验上和传统数据库是相当一致的。你大可放心,之前积累的 MySQL 和 PostgreSQL 的知识,在 RDS 上也大都可以适用。在云上,你也同样能够找到和安装一些数据库的常用插件,来增强 PaaS 数据库的功能。 云数据库和传统数据库又很大的区别,这是指在搭建、运维、管理层面,云数据库提升了一个层次,实现了相当程度的智能化和自动化,极大地提升了用户友好度,降低了使用门槛。比如灵活的性能等级调整、详尽的监控体系、攻击防护机制等等,这些许多在传统数据库中需要借助额外工具或产品的功能,在云数据库服务是默认内置,可以开箱即用的。 除了这些基本能力外,还有两个最具代表性的云上关系型数据库的高级特性: 支持读写分离。当并发数量上升时,关系型数据库容易出现性能瓶颈。这时比较有用的办法,就是实现基于多库同步的读写分离。云数据库在产品后台略加操作,就可以启用这个功能:从创建从库到建立同步,再到读写流量分发,云数据库都能自动完成。 支持自动调优。对于数据库来说,同样和性能有关的一个重要工作,就是性能的调优。以前我们经常需要手动地观测性能瓶颈,找出热点查询,再考虑是否有改进性能的办法。而在现代云数据库中…… 阅读全文

云计算:对象存储

2019-03-14 11:48:32

摘要:对象存储,顾名思义,就是在云端,可以存放任意对象的存储服务。要注意这里的“对象”指的是任意的二进制对象,保存到云上通常是以二进制文件的形式,不要和“面向对象编程”中的对象混淆起来。 初识对象存储 通俗地解释起来,你可以这样理解,对象存储是你在云上可以创建的一种“网盘”。这个网盘可以存储任意的二进制文件,包括结构化和非结构化数据。你可以随时上传下载,也可以修改和删除。当然,云上对象存储会保证你数据的可靠性、可用性和扩展性,你不需要操心这些细节。 那么,同样是存储服务,对象存储和云硬盘有什么区别呢? 第一个主要区别,在于访问的接口与形式。 云硬盘其实是挂载到虚拟机的虚拟硬盘,它是通过实现操作系统级别的底层接口,作为虚拟机的块存储设备而存在。我们也必须连接到相关的虚拟机,才能访问它里面的数据。 而对象存储,本质是一个网络化的服务,调用方主要通过高层的 API 和 SDK 来和它进行交互。不管是面向外部公开互联网服务,还是和内部应用程序对接,对象存储都是通过提供像 HTTP 这样的网络接口来实现的。所以它的独立性很强,不需要依赖其他组件就可以运作。 第二个主要区别,也是对象存储的一大特征,就是对象存储内本身不存在一个真正的文件系统,而是更接近一个键值(Key-Value)形式的存储服务。 这里的键就是对象的路径(路径中包含斜杠符号“/”),这里的值就是存储对象的二进制文件。 键值系统和云硬盘上经典文件系统的核心差异,就在于文件系统保存了更多的元数据,尤其是实现了目录结构和目录操作。而键值系统中,所谓的目录其实是多个对象共享的路径前缀,可以说是用前缀模拟出了目录。 第三个主要区别,在于对象存储的巨大容量。 作为云计算最具代表性的服务之一,它的可扩展性(Scalability)是毋庸置疑的,对象存储能够轻松地容纳上 PB 的超大容量数据,这是任何的云硬盘所不能企及的。所以对象存储是名副其实的大数据存储。 但从另一个角度说,对象存储和 HDFS 这样的大数据文件系统比起来,又有自己独到的优势:对象存储本身也是非常擅长和适合处理小文件的,即便是海量的小文件,对象存储也不会像 HDFS 那样处理起来捉襟见肘,可以说是“大小通吃”。 对象存储的高级特性 存储分层 在生产环境下的对象存储,我们往往会存放大量的文件和数据,这些文件的访问频率其实是会有很大差异的。比如说,对于一些比…… 阅读全文

云计算:云上虚拟网络

2019-03-11 10:03:19

摘要:什么是虚拟私有网络? 虚拟私有网络(Virtual Private Cloud,简称 VPC),是云计算网络端最重要的概念之一,它是指构建在云上的、相互隔离的、用户可以自主控制的私有网络环境。虚拟私有网络有时也称为专有网络(阿里云)或虚拟网络(Virtual Network 或 VNet,Azure 的叫法)。 私有网络就是一张属于你自己的内网。内网之内的服务器和设备,可以比较自由地互相通信,与外界默认是隔离的。如果外部互联网,或者其他虚拟网络需要连接,则需要额外的配置。 所以说,虚拟私有网络,就是云上的保护网,能够有效地保护网内的各种设施。有的时候,可能还要同时创建多个虚拟网络,让它们各司其职,实现更精细的隔离。 虚拟私有网络麻雀虽小,但五脏俱全。在传统数据中心里,经典网络架构中的概念和组件,在虚拟网络中你几乎都能找到对应。这里比较重要的一些概念包括: 网段,私有网络的内部 IP 区段,通常用 CIDR 形式来表达,如 192.168.0.0/16。 子网,私有网络的下级网络结构,一个私有网络可以划分多个子网,这和通常意义上的子网也是对应和一致的。阿里云中把子网形象地称为“交换机”。 路由表,用于定义私有网络内流量的路由规则,决定着数据包的“下一跳”去向何方。每个子网都必须有一张关联的路由表,通常情况下,系统会自动帮你创建一个默认的路由表。 网关,是对进出私有网络的流量进行把守和分发的重要节点,根据用途的不同,有多种类型,后面我们还会讲到。 安全组,私有网络里虚拟机进出流量的通行或拦截规则,可以起到虚拟机网络防火墙的作用。 阿里云VPC体验 首先,来到阿里云的专有网络管理控制台,选择新建一个 VPC,这里的网段我们选择 192.168.0.0/16 。 注意:VPC 属于局域网,按照 RFC 规范,能够使用的 IPv4 区段必须为 192.168.0.0/16、172.16.0.0/12、10.0.0.0/8 这三个或它们的子集。 至少要创建一个子网,也就是交换机。 我们选择一个子 IP 段 192.168.0.0/24,并且设置所属可用区为“可用区 D” 我们再来创建另外一个交换机,网段设置为 192.168.1.0/24。这里的关键在于,我们可以让第二个交换机位于另外一个可用区 E。这就说明,我们可以建立跨可用区,也就是跨同区域内不同数据中心的私有网…… 阅读全文