AWS CDK构造库实战:快速构建生成式AI应用基础设施

news2026/4/30 0:47:59
1. 项目概述当CDK遇上生成式AI如果你正在用AWS构建生成式AI应用并且已经厌倦了在控制台里手动点击、配置各种服务或者在CloudFormation模板里反复调试那些复杂的IAM权限和网络配置那么awslabs/generative-ai-cdk-constructs这个项目很可能就是你一直在找的“脚手架”。简单来说这是AWS Labs官方出品的一个开源CDK构造库。它的核心目标就一个把构建生成式AI应用时那些重复、繁琐且容易出错的AWS基础设施配置工作打包成一个个可复用的、类型安全的“乐高积木”。你不再需要从零开始编写SageMaker端点的生命周期策略或者为Bedrock模型流精心设计API Gateway的集成请求模板。你只需要像调用一个函数一样声明“我需要一个基于Claude 3的聊天API”这个库就能在背后帮你把Bedrock、Lambda、API Gateway、必要的IAM角色、日志组等一系列资源按照AWS最佳实践一次性部署好。我最初接触它是因为团队需要快速搭建一个内部的知识库问答原型。当时我们评估了直接调用Bedrock API、在Lambda里封装、以及使用这个CDK构造库三种方案。直接调用API最灵活但毫无基础设施管理和运维可言自己用CDK从零搭建虽然可控但光是搞定Bedrock的调用权限、Lambda的冷启动优化、API的限流和监控就花了差不多两天。而用这个构造库我只用了不到一个小时就得到了一个具备完整监控、自动伸缩和标准错误处理的生产就绪型API端点。这种效率提升对于需要快速迭代和验证想法的AI项目来说是决定性的。2. 核心构造体深度解析从基础模型调用到复杂应用架构这个库提供的构造体覆盖了生成式AI应用的核心链路。我们可以把它们大致分为三类模型接入层、应用模式层和工具与代理层。理解每一类的设计意图和适用场景是高效使用它的关键。2.1 模型接入层统一抽象告别配置地狱这一层的构造体如BedrockChat和SageMakerEndpointChat解决的是最根本的问题如何安全、高效、可观测地调用一个AI模型。以BedrockChat为例你可能会想调用Bedrock不就是一行boto3代码吗何必大费周章但生产级应用远不止于此。这个构造体在背后为你做了以下几件“脏活累活”IAM权限最小化它会自动创建一个IAM角色并附加精确到具体模型ID如anthropic.claude-3-haiku-20240307-v1:0的Bedrock调用权限策略。这避免了常见的“给Lambda分配AmazonBedrockFullAccess”这种过度授权的安全风险。网络隔离与安全如果你的VPC需要私有访问Bedrock通过VPC端点构造体可以轻松地将Lambda函数部署到私有子网并配置好所有安全组和路由。这是手动配置时最容易出错的地方之一。可观测性内置它会自动创建CloudWatch日志组并配置Lambda函数将完整的请求和响应可选脱敏日志输出。同时它也会添加必要的X-Ray跟踪集成让你能清晰地看到从API网关到Lambda再到Bedrock的完整调用链。成本与用量跟踪通过资源标签Tags和与AWS Budgets的集成模式可以方便地按项目、环境跟踪模型调用成本。from aws_cdk import Stack from aws_cdk.aws_lambda import Runtime from generative_ai_cdk_constructs import BedrockChat # 在CDK Stack中定义一个Bedrock Claude聊天接口只需几行代码 class MyChatStack(Stack): def __init__(self, scope, id, **kwargs): super().__init__(scope, id, **kwargs) chat BedrockChat( self, “ClaudeHaikuChat”, model_id“anthropic.claude-3-haiku-20240307-v1:0”, model_kwargs{“max_tokens”: 2048, “temperature”: 0.7}, streamingFalse # 设置为True可启用流式响应 ) # 现在 chat.function 就是一个配置好的Lambda函数 # 你可以将其连接到API Gateway、EventBridge等任何事件源。实操心得模型参数配置model_kwargs这个参数非常关键。它允许你以字典形式传入模型特定的推理参数。这里有个坑不同模型提供商Anthropic, Meta, Amazon的参数名可能略有不同。例如Claude系列用max_tokens而Llama 2可能用max_gen_len。构造体内部会尝试做适配但最稳妥的方式是查阅对应模型的Bedrock API文档。建议将这些参数定义为Stack的配置属性方便在不同环境开发、测试、生产切换不同的温度temperature或top_p值。2.2 应用模式层开箱即用的解决方案这是库的精华所在它封装了常见的生成式AI应用模式。RAGChat和Summarization是两个典型代表。RAGChat快速构建知识库问答系统RAG检索增强生成是当前企业级AI应用最热的架构。自己实现RAG你需要协调OpenSearch/Amazon Kendra检索、Lambda编排、Bedrock生成等多个服务数据流的错误处理和重试逻辑非常复杂。RAGChat构造体将这个模式产品化了。你主要需要提供两样东西知识库数据源通常是S3桶里的一堆PDF、TXT或DOCX文件。嵌入模型用于将文本转换为向量的模型如amazon.titan-embed-text-v1。部署后你会得到一个完整的流水线它自动触发S3文件上传事件通过Lambda调用嵌入模型将文档切片转换为向量存入内嵌或指定的OpenSearch向量索引中。当用户提问时另一个Lambda函数会执行检索-生成流程。from generative_ai_cdk_constructs import RAGChat, RagKnowledgeBase knowledge_base RagKnowledgeBase( self, “MyKnowledgeBase”, embeddings_model“amazon.titan-embed-text-v1”, vector_store“opensearch”, # 也可选 ‘aurora’ (PostgreSQL pgvector) input_bucketmy_s3_bucket, chunk_size500, # 文本切片大小 chunk_overlap50 # 切片重叠保持上下文连贯 ) rag_app RAGChat( self, “HelpdeskRAG”, knowledge_baseknowledge_base, llmBedrockChat(..., model_id“anthropic.claude-3-sonnet-20240229-v1:0”), retrieval_k5 # 每次检索返回的文档片段数量 )注意事项冷启动与索引延迟使用RAGChat时要特别注意“冷知识库”问题。部署完成后索引是空的。首次上传大量文档后向量化过程可能需要数分钟到数小时取决于文档量和嵌入模型速度。在此期间查询可能返回无关结果。最佳实践是预填充索引在部署后通过一个单独的初始化脚本批量处理初始文档集。监控索引状态利用构造体输出的CloudWatch指标如DocumentsProcessed设置告警确保数据管道健康。优化切片策略chunk_size和chunk_overlap对检索质量影响巨大。对于技术文档500-1000的块大小可能合适对于对话记录可能需要更小的块。这需要根据你的数据特性进行实验。Summarization构建异步摘要服务另一个经典模式是文本摘要。Summarization构造体非常适合处理来自SQS队列或S3事件的大量文档摘要任务。它内置了异步处理、结果存储到S3或DynamoDB和状态通知通过EventBridge的能力。2.3 工具与代理层面向AI Agent的基建随着AI Agent概念的兴起模型需要能够调用外部工具API、函数、数据库。Agent构造体提供了初步的支持。它允许你将多个Lambda函数或其他CDK构造体定义为“工具”并创建一个协调这些工具的“Agent” Lambda函数。其核心是遵循了工具调用的标准格式类似于OpenAI的Function Calling。Agent函数接收用户请求和可用工具列表决定调用哪个工具执行工具然后将结果返回给模型进行下一步推理。虽然当前版本的实现可能还比较基础但它为构建复杂的多步骤工作流如“查询天气然后规划出行”提供了基础设施框架。3. 实战部署从零搭建一个企业级RAG问答系统让我们通过一个更完整的例子将上述构造体组合起来部署一个具备完整监控、安全隔离和CI/CD的企业内部技术文档问答系统。3.1 环境准备与项目初始化首先确保你的环境已就绪# 1. 安装或更新AWS CDK npm install -g aws-cdk # 2. 初始化一个Python CDK项目如果你还没有 mkdir my-rag-helper cd my-rag-helper cdk init app --language python # 3. 激活虚拟环境并安装依赖 python -m venv .venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows pip install -r requirements.txt # 4. 安装生成式AI构造体库 pip install generative-ai-cdk-constructs接下来规划你的项目结构。我建议按功能模块分栈有利于独立更新和资源清晰隔离my-rag-helper/ ├── app.py # CDK App入口定义各Stack ├── cdk.json ├── requirements.txt ├── source.bat └── stacks/ ├── __init__.py ├── network_stack.py # VPC 安全组 VPC端点 ├── rag_infra_stack.py # 核心RAG构造体知识库 聊天接口 └── monitoring_stack.py # 仪表盘 告警3.2 网络与安全隔离配置在生产环境中将AI服务部署在私有子网并通过VPC端点访问是基本要求。我们在network_stack.py中实现。from aws_cdk import Stack, Duration from aws_cdk.aws_ec2 import ( Vpc, SubnetType, SecurityGroup, InterfaceVpcEndpoint, InterfaceVpcEndpointAwsService ) from constructs import Construct class NetworkStack(Stack): def __init__(self, scope: Construct, id: str, **kwargs): super().__init__(scope, id, **kwargs) # 1. 创建VPC 包含私有和隔离子网用于Lambda 通常不需要公有子网 self.vpc Vpc( self, “RagVpc”, max_azs2, # 至少两个可用区保证高可用 nat_gateways1, # 如果Lambda需要访问公网如下载公共包 需要NAT网关 subnet_configuration[ { “name”: “Private”, “subnetType”: SubnetType.PRIVATE_WITH_EGRESS, # 带出站访问的私有子网 “cidrMask”: 24, }, { “name”: “Isolated”, “subnetType”: SubnetType.PRIVATE_ISOLATED, # 完全隔离的子网 更安全 “cidrMask”: 28, } ] ) # 2. 创建安全组 允许Lambda访问VPC端点 self.lambda_sg SecurityGroup( self, “LambdaSG”, vpcself.vpc, description“Security group for RAG Lambda functions”, allow_all_outboundTrue # 允许出站 访问Bedrock等 ) # 3. 为Bedrock和SageMaker创建VPC接口端点PrivateLink # 这允许Lambda在私有子网内安全地调用这些服务 流量不出AWS网络 self.bedrock_endpoint InterfaceVpcEndpoint( self, “BedrockEndpoint”, vpcself.vpc, serviceInterfaceVpcEndpointAwsService(“bedrock”), subnetsSubnetSelection(subnet_typeSubnetType.PRIVATE_WITH_EGRESS), security_groups[self.lambda_sg] ) # 可选 为S3和CloudWatch Logs创建网关端点 成本更低 # self.vpc.add_gateway_endpoint(“S3Endpoint”, serviceGatewayVpcEndpointAwsService.S3)关键点解析子网选择为什么将Lambda放在PRIVATE_WITH_EGRESS子网因为我们的Lambda需要出站访问通过NAT网关访问公网用于下载Lambda层Layer中的公共依赖库如PyTorch、SentenceTransformers除非你全部打包在容器镜像中。入站访问无。Lambda由事件源如API Gateway异步触发不需要公网IP。访问VPC端点通过PrivateLink安全地连接Bedrock。如果你希望极致安全且能确保所有依赖都在容器镜像内可以将Lambda放在PRIVATE_ISOLATED子网并仅为必要的服务如ECR、CloudWatch配置VPC端点。3.3 核心RAG基础设施部署在rag_infra_stack.py中我们将使用RAGChat构造体。from aws_cdk import Stack, RemovalPolicy, CfnOutput from aws_cdk.aws_s3 import Bucket, BlockPublicAccess from aws_cdk.aws_ec2 import InterfaceVpcEndpoint from generative_ai_cdk_constructs import ( RAGChat, RagKnowledgeBase, BedrockChat ) from constructs import Construct from .network_stack import NetworkStack # 导入网络栈的输出 class RagInfraStack(Stack): def __init__(self, scope: Construct, id: str, network_stack: NetworkStack, **kwargs): super().__init__(scope, id, **kwargs) # 1. 创建S3桶存放原始文档。 生产环境应考虑加密和版本控制。 self.documents_bucket Bucket( self, “DocumentsBucket”, block_public_accessBlockPublicAccess.BLOCK_ALL, encryptionBucketEncryption.S3_MANAGED, auto_delete_objectsTrue, # 方便测试 删除Stack时自动清空桶 removal_policyRemovalPolicy.DESTROY ) # 2. 创建知识库 使用Titan Embeddings模型 # 注意 这里我们传入了VPC和安全组 使处理文档的Lambda能运行在私有网络并访问Bedrock端点 self.knowledge_base RagKnowledgeBase( self, “TechDocsKnowledgeBase”, embeddings_model“amazon.titan-embed-text-v1”, vector_store“opensearch”, input_bucketself.documents_bucket, vpcnetwork_stack.vpc, vpc_subnetsnetwork_stack.vpc.select_subnets(subnet_typeSubnetType.PRIVATE_WITH_EGRESS), security_groups[network_stack.lambda_sg], chunk_size800, chunk_overlap100, removal_policyRemovalPolicy.DESTROY # 测试用 生产环境应为 RETAIN ) # 3. 创建聊天LLM接口 使用Claude Sonnet self.llm BedrockChat( self, “ChatLLM”, model_id“anthropic.claude-3-sonnet-20240229-v1:0”, model_kwargs{“max_tokens”: 2000, “temperature”: 0.1}, # 低温度保证答案更确定 vpcnetwork_stack.vpc, vpc_subnetsnetwork_stack.vpc.select_subnets(subnet_typeSubnetType.PRIVATE_WITH_EGRESS), security_groups[network_stack.lambda_sg], timeoutDuration.seconds(30) # Bedrock调用可能较慢 适当延长超时 ) # 4. 组装完整的RAG应用 self.rag_app RAGChat( self, “TechDocsHelper”, knowledge_baseself.knowledge_base, llmself.llm, retrieval_k4, vpcnetwork_stack.vpc, vpc_subnetsnetwork_stack.vpc.select_subnets(subnet_typeSubnetType.PRIVATE_WITH_EGRESS), security_groups[network_stack.lambda_sg] ) # 5. 输出有用的信息 例如API端点URL如果后续连接了API Gateway CfnOutput(self, “DocumentsBucketName”, valueself.documents_bucket.bucket_name) CfnOutput(self, “RagHandlerFunctionArn”, valueself.rag_app.handler_function.function_arn)部署与验证在app.py中组装这些栈并部署#!/usr/bin/env python3 import aws_cdk as cdk from stacks.network_stack import NetworkStack from stacks.rag_infra_stack import RagInfraStack app cdk.App() # 网络栈可以被多个应用栈共享 network_stack NetworkStack(app, “RagNetworkStack”) # RAG基础设施栈依赖网络栈 rag_stack RagInfraStack(app, “RagInfraStack”, network_stacknetwork_stack ) app.synth()使用CDK命令行部署cdk deploy RagNetworkStack cdk deploy RagInfraStack部署成功后控制台会输出S3桶名。你可以立即上传一些PDF文档到该桶观察CloudWatch日志中知识库处理Lambda的运行情况。待处理完成后你就可以通过直接调用rag_app.handler_function这个Lambda函数来测试问答了。3.4 增强功能添加API网关与监控基础RAG部署好后我们通常需要对外提供HTTP API并监控其运行状况。添加HTTP API你可以使用CDK的aws_apigateway模块轻松创建一个REST API或HTTP API将rag_app.handler_function作为集成目标。构造体生成的Lambda函数已经处理好了标准的请求响应格式。搭建监控仪表盘在monitoring_stack.py中利用CDK的aws_cloudwatch模块创建仪表盘。# 示例监控RAG处理Lambda的错误率和持续时间 from aws_cdk.aws_cloudwatch import Dashboard, GraphWidget, Metric, Alarm from aws_cdk.aws_cloudwatch_actions import SnsAction from aws_cdk.aws_sns import Topic # 创建告警主题 alarm_topic Topic(self, “RagAlarmTopic”) # 针对RAG处理Lambda的错误创建告警 error_alarm Alarm( self, “RagLambdaErrorAlarm”, metricrag_stack.rag_app.handler_function.metric_errors(), threshold1, evaluation_periods1, datapoints_to_alarm1, comparison_operatorComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD ) error_alarm.add_alarm_action(SnsAction(alarm_topic)) # 创建CloudWatch仪表盘 dashboard Dashboard(self, “RagDashboard”) dashboard.add_widgets( GraphWidget( title“RAG Lambda Metrics”, left[ rag_stack.rag_app.handler_function.metric_invocations(), rag_stack.rag_app.handler_function.metric_errors() ], right[ rag_stack.rag_app.handler_function.metric_duration() ] ), # 可以添加更多Widget 如Bedrock调用延迟、OpenSearch索引大小等 )关键监控指标应包括Lambda调用次数、错误率、持续时间、并发数Bedrock的调用延迟和令牌使用量OpenSearch集群的CPU、内存和存储使用率。4. 避坑指南与高级技巧在实际使用中我积累了一些宝贵的经验和常见问题的解决方法。4.1 性能优化与成本控制Lambda冷启动这是Serverless架构的经典问题。对于RAG中的检索和生成Lambda冷启动尤其是加载嵌入模型或大语言模型时可能导致首次请求延迟高达10-20秒。对策使用Provisioned Concurrency预置并发。为关键的聊天处理Lambda配置1-2个预置并发实例可以基本消除冷启动。注意这会产生额外费用需根据业务流量模式调整。代码优化在Lambda初始化层__init__加载模型和连接向量数据库而不是在每次调用时。BedrockChat和RAGChat构造体内部已经遵循了这一最佳实践。向量检索效率当知识库文档超过数万份时在OpenSearch中进行精确的向量相似性搜索k-NN可能变慢。对策在创建RagKnowledgeBase时考虑调整OpenSearch索引的配置。虽然构造体提供了默认配置但对于大规模数据你可能需要自定义index_settings例如使用HNSW算法、调整ef_search和m参数在召回率和速度之间取得平衡。分级检索对于复杂查询可以先使用关键词BM25进行粗筛再对结果进行向量精排。这需要自定义Lambda函数逻辑超出了当前构造体的范围但可以作为进阶优化方向。成本监控Bedrock按令牌和模型类型收费调用次数可能快速增长。必做项为Bedrock服务设置AWS Budgets预算告警。在IAM策略中使用条件键aws:RequestedRegion和bedrock:ModelId来限制只能调用特定区域和特定成本较低的模型防止意外使用昂贵模型。缓存策略对常见、重复的用户问题可以在Lambda前面加上Amazon API Gateway缓存或使用DynamoDB缓存问答对避免重复调用模型显著节省成本。4.2 安全加固实践最小权限原则构造体自动生成的IAM角色通常已经比较精细。但你仍需审查。例如处理文档的Lambda角色是否真的需要s3:GetObject*所有版本权限还是仅s3:GetObject即可使用CDK的Grant方法进行细粒度授权。数据加密静态加密确保S3桶、OpenSearch域、Lambda环境变量都启用了加密。构造体创建的S3桶默认启用SSE-S3对于更严格的要求可以考虑使用KMS CMK客户管理密钥。传输中加密确保所有VPC端点、API Gateway都使用TLS 1.2。构造体创建的API Gateway默认已启用TLS。输入验证与防护构造体提供了基础框架但恶意或异常的输入可能绕过。在API Gateway层配置请求限流Throttling和验证器Request Validator限制负载大小。在Lambda层对用户输入进行清洗防范Prompt注入攻击。例如检查输入中是否包含可能用于系统指令覆盖的特殊字符或模式。4.3 常见问题排查清单问题现象可能原因排查步骤部署失败提示“VPC配置无效”子网类型不匹配或缺少VPC端点1. 检查Lambda函数配置的子网是否为PRIVATE_WITH_EGRESS或PRIVATE_ISOLATED。2. 确认已为Bedrock等服务创建了正确的VPC接口端点且Lambda的安全组允许访问该端点。上传文档后问答返回“未找到相关信息”知识库索引未成功创建或为空1. 检查S3桶事件是否成功触发处理Lambda查看CloudWatch日志。2. 查看处理Lambda的日志确认文档解析和向量化过程无错误。3. 登录OpenSearch仪表板确认索引已创建且包含文档。Lambda函数超时Timeout模型响应慢、网络延迟或检索数据量大1. 逐步增加Lambda函数的超时时间如从3秒增至30秒。2. 检查Bedrock模型的max_tokens是否设置过高。3. 检查OpenSearch检索的size参数避免一次返回过多文档片段。提示“AccessDeniedException”调用BedrockIAM角色权限不足或VPC端点策略限制1. 检查Lambda执行角色的IAM策略是否包含对应模型ID的bedrock:InvokeModel权限。2. 检查Bedrock VPC端点的策略是否允许来自该VPC的调用。流式响应Streaming不工作客户端未正确处理流式响应或配置有误1. 确认在构造BedrockChat时设置了streamingTrue。2. 确认API Gateway与Lambda的集成类型是AWS_PROXY并且客户端使用SSEServer-Sent Events或WebSocket来接收分块数据。4.4 进阶使用自定义与扩展构造体提供了良好的扩展点。例如如果你需要对接自托管的开源模型如通过SageMaker部署的Llama 2你可以参考BedrockChat的实现创建一个自定义的SageMakerChat构造体。核心思路是继承aws_cdk.aws_lambda的Function类并在其内部封装与SageMaker端点交互的逻辑同时处理好IAM、网络和日志。你可以直接复用库中已有的BedrockChat作为模板将其中的boto3客户端调用从bedrock-runtime改为sagemaker-runtime并调整请求/响应的数据格式。另一个常见的扩展是多轮对话记忆。标准的RAGChat可能只处理单轮问答。你可以通过引入Amazon DynamoDB表来存储会话历史并在Lambda处理逻辑中将历史对话摘要或最近的几轮对话作为上下文连同检索到的文档一起发送给LLM。这需要对RAGChat生成的Lambda函数代码进行定制化修改或者创建一个全新的、集成了记忆功能的构造体。最后这个库本身在快速迭代。密切关注其 GitHub仓库 的更新新的构造体如针对图像生成、音频处理的和现有构造体的功能增强会不断加入。参与社区讨论提交Issue或PR也是解决你特定需求的好方法。毕竟最好的工具永远是那个能随着你的需求一起成长

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2558307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…