AI代理网关实战:统一管理多模型API调用,解决密钥安全与异构难题

news2026/5/15 22:45:25
1. 项目概述一个AI代理网关的诞生最近在折腾AI应用开发发现一个挺普遍的需求如何在一个项目里安全、稳定且低成本地调用多个不同厂商的大语言模型API比如你可能同时需要Claude的创意写作、GPT-4的代码分析以及国内某个大模型的快速响应。直接在每个业务代码里写死一堆API密钥和不同的调用方式不仅管理混乱密钥泄露风险高而且一旦某个服务商调整接口或计费策略改起来就是一场灾难。newaiproxy/claude-proxy这个项目最初看名字像是一个专门为Anthropic的Claude API设计的反向代理但深入使用和研究后我发现它的定位远不止于此。它本质上是一个统一、可扩展的AI模型代理网关。你可以把它理解为你所有AI服务调用的“总闸门”和“翻译官”。业务代码只需要和这个网关通信由网关负责将请求分发到后端的Claude、OpenAI、甚至是兼容OpenAI API格式的其他模型服务并处理认证、限流、日志、缓存等一系列繁琐但必要的工作。这个项目特别适合哪些场景呢如果你是个人开发者正在构建一个集成了多种AI能力的工具比如一个智能写作助手既能用GPT润色又能用Claude生成大纲它能极大简化你的后端架构。如果你是小团队的技术负责人需要为团队成员提供安全可控的AI调用能力避免密钥满天飞它就是一个现成的、可自托管的基础设施。甚至你还可以基于它做二次开发实现更复杂的路由策略比如根据请求内容自动选择最合适的模型或者实现负载均衡和故障转移。我自己在几个内部项目中部署了它最直接的感受是“清爽”。前端或中间件服务只需要配置一个统一的网关地址和一套认证方式比如简单的Bearer Token所有的模型切换、版本升级、甚至更换供应商都在网关层面完成对上游业务几乎透明。接下来我就结合自己的实操经验拆解一下这个项目的核心设计、如何部署配置以及那些官方文档可能没细说但实际使用中一定会遇到的“坑”。2. 核心架构与设计思路拆解2.1 为什么需要代理网关解决三大痛点在直接调用各厂商原生API的年代我们主要面临三个核心痛点而代理网关正是为解决它们而生。痛点一密钥管理与安全风险分散。每个开发人员、每个微服务都可能持有敏感的生产环境API密钥。密钥一旦通过Git意外提交、日志打印或配置错误而泄露轻则产生意外费用重则导致服务被滥用。代理网关将密钥集中管理在服务器端客户端只需使用一个权限受限的网关访问令牌大大缩小了攻击面。痛点二API异构性与升级维护成本。尽管OpenAI的API格式正在成为事实标准但不同厂商的接口在细节上仍有差异如参数名、认证头、错误码格式。业务代码需要为每个供应商编写适配层。当某个API升级比如Anthropic从Messages API升级到新版时需要排查和修改所有相关代码。网关可以封装这些差异向上提供统一的接口向下适配不同的供应商变更的影响被控制在网关内部。痛点三缺乏全局的管控与观测能力。很难对散落在各处的API调用进行统一的速率限制、费用预算控制、调用日志审计和性能监控。网关作为所有流量的必经之路天然是实施这些管控措施的最佳位置。你可以清晰地看到哪个项目、哪个用户在什么时间调用了哪个模型消耗了多少Token便于成本分析和优化。claude-proxy的设计正是围绕这些痛点展开。它没有试图做一个大而全的企业级API管理平台而是聚焦于AI模型调用这个垂直场景在简洁性和功能性之间取得了不错的平衡。2.2 项目核心组件与工作流这个项目采用Go语言编写部署后主要包含以下几个核心组件我们可以通过一个典型的请求流来理解它们是如何协同工作的路由与认证模块这是网关的入口。它接收来自客户端的HTTP请求通常是模仿OpenAI格式的/v1/chat/completions。首先它会检查请求头中的Authorization字段验证客户端提供的Token是否有效并解析出该Token对应的用户或项目标识。这个Token是你在网关配置的与后端的真实API密钥无关。模型映射与配置管理模块认证通过后网关需要知道这个请求最终要发给哪个后端的哪个模型。这里有一个核心概念模型路由。网关维护一个模型映射表例如你可以配置当客户端请求模型名为gpt-4时实际将请求转发到https://api.openai.com/v1/chat/completions并使用配置好的OpenAI密钥当请求模型名为claude-3-opus时则转发到https://api.anthropic.com/v1/messages使用Anthropic的密钥。这个映射关系可以通过配置文件或环境变量灵活定义。请求/响应适配器这是网关的“翻译”核心。由于Claude APIAnthropic Messages API的请求和响应格式与OpenAI API并不完全一致网关需要在这里进行转换。例如它将OpenAI格式的messages数组包含role和content转换为Claude格式的messages数组同样包含role和content但结构略有不同并将model参数映射为Claude能识别的模型标识。响应返回时再进行反向转换确保客户端始终收到符合OpenAI API格式的响应。对于本身就是OpenAI格式的后端如OpenAI官方、Azure OpenAI、一些开源模型服务这个适配器可以直通或做最小修改。代理与传输层负责与后端API服务建立安全的HTTP连接转发经过适配的请求并接收响应。这里会处理超时设置、重试逻辑对于可重试的错误如网络波动或速率限制、以及可能的负载均衡如果你为同一个模型配置了多个后端端点。中间件与可观测性层可选但重要这是网关价值的延伸。可以在请求处理链中插入各种中间件例如日志中间件记录每一次调用的详细信息用户、模型、输入/输出Token数、耗时、状态码便于审计和调试。限流中间件基于用户、IP或全局维度限制请求频率防止滥用。缓存中间件对于某些重复性的、确定性强的提示词可以将结果缓存一段时间显著降低成本和延迟。计量与计费中间件统计各用户/项目的Token消耗为内部结算或预算控制提供数据。整个工作流清晰而高效统一入口 - 身份校验 - 路由决策 - 格式转换 - 代理转发 - 响应回转 - 增强处理。这种设计使得业务端极其简单而所有的复杂性和管控能力都下沉到了网关。3. 从零开始部署与核心配置详解理论讲清楚了我们动手把它跑起来。这里我以最常用的Docker部署方式为例因为它能屏蔽环境差异最适合快速启动和后续维护。3.1 基础环境准备与部署首先确保你的服务器上已经安装了Docker和Docker Compose。这里假设你使用Linux系统。步骤一获取部署配置文件项目通常提供了docker-compose.yml示例。我们创建一个专门的工作目录并下载它。mkdir -p ~/claude-proxy cd ~/claude-proxy # 假设从项目的GitHub仓库获取示例配置这里以常见结构为例 # 你可以从项目的Release页面或文档中找到最新的docker-compose.yml # 下面是一个典型的示例内容我们直接创建它 cat docker-compose.yml EOF version: 3.8 services: claude-proxy: image: ghcr.io/newaiproxy/claude-proxy:latest # 使用官方镜像 container_name: claude-proxy restart: unless-stopped ports: - 8080:8080 # 将容器的8080端口映射到宿主机的8080端口 environment: - CONFIG_FILE/app/config.yaml # 指定配置文件路径 volumes: - ./data:/app/data # 持久化数据目录用于存放数据库等如果项目需要 - ./config.yaml:/app/config.yaml:ro # 挂载配置文件 # 如果需要设置时区 # environment: # - TZAsia/Shanghai EOF步骤二编写核心配置文件config.yaml这是整个网关的大脑定义了路由、密钥和各项策略。我们在同一目录下创建它。# config.yaml # 服务器基础配置 server: port: 8080 # 认证令牌客户端调用时需要携带在Authorization头中Bearer your-token-here auth_tokens: - sk-your-gateway-token-abc123 # 示例令牌请务必修改为强密码 # 日志配置 log: level: info # debug, info, warn, error format: json # 推荐json便于日志收集系统处理 # 上游模型供应商配置 upstreams: - name: openai # 给这个上游起个名字用于内部引用 type: openai # 上游类型支持 openai, anthropic, azure 等 base_url: https://api.openai.com/v1 # OpenAI官方API地址 # 如果你使用第三方代理或反代可以修改这里的base_url api_key: ${OPENAI_API_KEY} # 从环境变量读取真实密钥更安全 # 连接池、超时等高级设置可选 timeout: 300 # 请求超时时间秒 max_idle_conns: 100 # 最大空闲连接数 - name: anthropic type: anthropic base_url: https://api.anthropic.com api_key: ${ANTHROPIC_API_KEY} # 从环境变量读取 # Anthropic API可能需要特定的版本头网关通常会自动处理 # extra_headers: # anthropic-version: 2023-06-01 # 模型路由配置将客户端请求的模型名映射到具体的上游和其对应的真实模型 model_routes: - name: gpt-4-turbo # 客户端请求的模型标识 upstream: openai # 使用哪个上游配置 model: gpt-4-turbo # 上游的真实模型名 # 可以设置模型级别的默认参数如温度 # default_params: # temperature: 0.7 - name: gpt-3.5-turbo upstream: openai model: gpt-3.5-turbo - name: claude-3-opus upstream: anthropic model: claude-3-opus-20240229 # Claude的模型名通常带版本号 - name: claude-3-sonnet upstream: anthropic model: claude-3-sonnet-20240229 # 缓存配置可选但强烈推荐用于生产环境 cache: enabled: true type: memory # 或 redis单机内存足够集群需用Redis ttl: 300 # 缓存存活时间单位秒 # 如果使用redis # redis_url: redis://localhost:6379/0关键提示一环境变量与密钥安全注意配置文件中的${OPENAI_API_KEY}。这是一种最佳实践意味着真实的API密钥不直接写在配置文件里而是通过Docker容器的环境变量传入。我们接下来在docker-compose.yml中设置或者使用.env文件。绝对不要将包含真实密钥的配置文件提交到版本控制系统如Git。步骤三使用环境变量文件并启动创建.env文件来存储敏感信息并修改docker-compose.yml以引入它。# 创建 .env 文件填入你的真实密钥 cat .env EOF OPENAI_API_KEYsk-your-real-openai-key-here ANTHROPIC_API_KEYsk-your-real-anthropic-key-here EOF # 修改 docker-compose.yml添加env_file指令 # 在 claude-proxy 服务下添加 # env_file: # - .env更新后的docker-compose.yml部分services: claude-proxy: image: ghcr.io/newaiproxy/claude-proxy:latest container_name: claude-proxy restart: unless-stopped ports: - 8080:8080 env_file: - .env # 加载环境变量文件 environment: - CONFIG_FILE/app/config.yaml volumes: - ./config.yaml:/app/config.yaml:ro步骤四启动服务docker-compose up -d使用docker-compose logs -f claude-proxy查看启动日志确认没有错误。现在你的AI代理网关就在本地的http://你的服务器IP:8080运行起来了。3.2 客户端调用方式与验证网关启动后如何调用它呢因为它兼容OpenAI API格式所以你可以使用任何OpenAI的客户端库只需将base_url和api_key替换成网关的地址和你在config.yaml中配置的auth_tokens。这里以Python的openai库为例import openai # 配置客户端指向你的网关 client openai.OpenAI( base_urlhttp://localhost:8080/v1, # 注意这里要加上 /v1 api_keysk-your-gateway-token-abc123, # 这是网关的token不是OpenAI的 ) # 发起聊天补全请求模型名使用你在 model_routes 里定义的 response client.chat.completions.create( modelgpt-4-turbo, # 这个模型名会被网关映射到真正的OpenAI GPT-4 messages[ {role: user, content: 你好请用中文介绍一下你自己。} ], streamFalse # 非流式响应 ) print(response.choices[0].message.content)再试一下调用Claude模型# 同样的客户端配置只需修改模型名 response client.chat.completions.create( modelclaude-3-sonnet, # 网关会将其路由到Anthropic API messages[ {role: user, content: Hello, who are you?} ], streamFalse ) print(response.choices[0].message.content)你会发现对于客户端代码来说调用GPT和调用Claude的代码完全一样只是改变了model参数。所有的格式转换和路由工作都由网关在背后默默完成了。这就是统一网关的最大价值。关键提示二流式传输支持这个代理网关通常也完美支持流式响应streamTrue。这对于需要实时显示生成内容的应用如聊天机器人至关重要。在流式模式下网关会以Server-Sent Events (SSE) 的形式将后端模型生成的数据块实时转发给客户端延迟很低。在配置时确保网关与后端以及网关与客户端之间的网络连接稳定避免流中断。4. 高级功能与生产环境调优基础功能跑通后我们需要考虑如何让它更稳定、更安全、更能应对生产环境的挑战。4.1 多租户与细粒度权限控制默认的单一auth_tokens配置只适合个人或小团队。当用户增多时你需要区分不同用户或项目的调用并实施不同的限制。claude-proxy通常支持更灵活的认证和配额配置。一种常见的模式是使用“令牌-用户”映射和“用户-配额”策略。虽然项目本身可能不内置复杂的用户系统但你可以通过配置多个令牌并结合外部数据库或中间件来实现。方案一静态多令牌配置在config.yaml的server.auth_tokens里配置多个令牌每个令牌对应一个“用户”。然后在日志中通过令牌来区分流量。这是最简单的方式。server: auth_tokens: - sk-token-for-user-a - sk-token-for-user-b - sk-token-for-user-c方案二动态令牌与配额管理进阶对于更复杂的场景你可能需要集成外部的认证授权系统如OAuth2、JWT。这时可以考虑修改网关代码或者在其前面再部署一个专业的API网关如Kong、APISIX或反向代理如Nginx由它们来处理复杂的认证、鉴权和速率限制然后将携带了用户身份信息的请求转发给claude-proxy。claude-proxy则可以专注于模型路由和格式转换。4.2 性能、高可用与监控1. 性能调优连接池确保upstreams配置中的max_idle_conns设置合理如50-100避免频繁建立TCP连接的开销。超时设置根据模型响应速度设置合适的timeout。对于GPT-4等慢速模型可以设置长一些如120秒对于快速模型可以设置短一些如30秒避免客户端长时间等待。缓存策略充分利用cache配置。对于常见的、结果确定的系统提示词或用户查询缓存能极大提升响应速度并节省费用。注意根据数据敏感性设置合适的TTL。2. 高可用部署单点部署有宕机风险。生产环境建议多实例部署使用Docker Swarm或Kubernetes部署多个claude-proxy实例。前置负载均衡器使用Nginx或云负载均衡器将请求分发到多个网关实例。共享状态如果开启了缓存且使用多实例必须将缓存后端设置为共享存储如Redis否则每个实例的缓存是独立的效果会打折扣。一个简单的基于Docker Compose的多实例示例需配合Nginx# docker-compose.yml version: 3.8 services: claude-proxy-1: image: ghcr.io/newaiproxy/claude-proxy:latest # ... 环境变量和卷配置同上 ports: [] # 不直接暴露端口 claude-proxy-2: image: ghcr.io/newaiproxy/claude-proxy:latest # ... 配置同上 nginx: image: nginx:alpine ports: - 80:80 volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - claude-proxy-1 - claude-proxy-2对应的nginx.conf中配置 upstream 和负载均衡规则。3. 监控与告警日志收集将容器输出的JSON日志收集到ELKElasticsearch, Logstash, Kibana或LokiGrafana等系统中。可以清晰地看到请求量、成功率、延迟、Token消耗等指标。健康检查为claude-proxy配置HTTP健康检查端点如果项目提供并在Docker Compose或K8s中配置healthcheck确保不健康的实例能被及时剔除。基础监控监控服务器的CPU、内存、网络流量。网关本身是轻量级的资源消耗通常不高但需关注其连接数。4.3 成本控制与用量统计这是企业级应用的核心关切。网关作为流量枢纽是统计成本的最佳位置。1. 基于日志的分析最直接的方法是从网关的访问日志中提取信息。JSON格式的日志通常包含model、usage.prompt_tokens、usage.completion_tokens等字段。你可以编写脚本定期分析日志按模型、按用户通过Token标识聚合Token消耗。2. 集成计量中间件如果项目支持中间件扩展或者你愿意修改源码可以添加一个计量中间件。该中间件在每次请求完成后不仅记录日志还将消耗情况写入数据库如PostgreSQL或MySQL或时序数据库如InfluxDB。这样可以实现更实时、更结构化的用量查询和仪表盘展示。3. 设置预算与告警基于上述统计数据你可以为每个用户/项目设置每日或每月的Token预算或费用预算。当用量接近阈值时通过网关主动拒绝请求返回429等状态码或发送告警通知邮件、钉钉、Slack。这需要一定的定制开发但能有效防止成本失控。5. 常见问题排查与实战技巧在实际部署和运维中我踩过不少坑也总结了一些技巧。5.1 部署与连接问题问题1容器启动失败提示“config file not found”或“permission denied”。排查检查docker-compose.yml中配置文件的挂载路径是否正确。确保config.yaml文件存在于宿主机对应目录并且文件权限允许容器内进程读取通常644权限即可。技巧始终使用docker-compose logs claude-proxy查看详细的错误日志这是第一步。问题2客户端调用网关超时或连接被拒绝。排查确认网关容器是否正常运行docker ps | grep claude-proxy。确认宿主机防火墙是否放行了网关监听的端口如8080。如果客户端不在同一台机器检查网络连通性telnet 网关IP 8080。检查网关配置的server.port是否与Docker映射的端口一致。技巧先在服务器本地用curl命令测试排除客户端网络问题。curl -X POST http://localhost:8080/v1/chat/completions \ -H Authorization: Bearer sk-your-gateway-token-abc123 \ -H Content-Type: application/json \ -d {model: gpt-3.5-turbo, messages: [{role: user, content: Hi}]}问题3调用成功但返回错误提示“Invalid upstream”或“Model not found”。排查检查config.yaml中的model_routes配置确认客户端请求的model参数是否在其中明确定义。检查对应的upstream配置是否存在且name拼写正确。检查上游的api_key是否通过环境变量正确设置并且有效。可以尝试直接用该密钥调用原生API验证密钥是否过期或额度不足。技巧开启网关的debug级别日志将log.level设为debug查看详细的请求路由过程。5.2 请求与响应问题问题4调用Claude模型时返回格式错误或内容截断。原因Claude API对请求格式有特定要求且早期版本与OpenAI格式差异较大。虽然网关会做转换但可能因为版本更新或非标准参数导致转换失败。排查确认你使用的claude-proxy镜像版本是否较新支持最新的Anthropic Messages API。检查请求中是否包含了Claude不支持的参数如某些特定的stop序列或logit_bias。尝试简化请求只保留最基本的model,messages,max_tokens,temperature。查看网关的debug日志看转换后的请求体是什么与Anthropic官方文档进行对比。技巧对于Claude调用建议在客户端代码中显式设置max_tokens参数因为Claude API对此有强制要求而OpenAI的某些模型可以不设置。问题5流式响应streamTrue中途断开。原因网络不稳定、网关或后端服务超时、客户端读取缓冲区太慢都可能造成流中断。排查检查网关配置中的timeout是否设置得太短。对于长文本生成建议适当延长。检查客户端代码是否正确处理了流式响应。确保你是在一个循环中持续读取数据块并正确处理了连接关闭的信号。在客户端和网关之间、网关和后端之间是否存在代理或负载均衡器有些代理对长连接的支持不完善可能需要调整其配置如保持连接超时时间。技巧在客户端实现重试逻辑。对于非幂等的对话补全请求重试需要小心但对于简单的流中断可以尝试重新建立连接并从上次中断的地方继续如果上下文允许。5.3 安全与配置问题问题6如何安全地管理多个环境的配置最佳实践环境分离为开发、测试、生产环境准备不同的config.yaml和.env文件。密钥管理绝不将密钥硬编码或直接提交到代码库。使用.env文件但需加入.gitignore或更专业地使用Docker Secrets、HashiCorp Vault、AWS Secrets Manager等密钥管理服务。在docker-compose.yml中通过secrets指令引入。配置即代码将非敏感的配置部分如路由规则、端口号仍放在config.yaml中纳入版本控制。敏感部分通过环境变量或外部服务注入。问题7网关本身如何防止被滥用措施网络层隔离不要将网关服务直接暴露在公网。通过内网负载均衡器或VPN供内部服务调用。如果必须对外则设置严格的防火墙规则如只允许特定的IP段访问。速率限制在网关层面或前置的Nginx中对每个认证令牌Token实施速率限制如每分钟N次请求。请求验证可以对请求的messages内容进行简单的过滤或审查注意隐私和法律合规防止恶意提示词攻击。定期轮换令牌像管理密码一样管理网关的访问令牌定期更新。5.4 扩展与定制问题8我想支持一个新的、兼容OpenAI API格式的模型服务如DeepSeek、Ollama本地模型该怎么加步骤这非常简单因为网关的openai类型上游通常兼容任何遵循OpenAI API标准的服务。在config.yaml的upstreams部分新增一个配置项。- name: my-local-llm type: openai # 使用openai类型 base_url: http://localhost:11434/v1 # 例如Ollama的API地址 api_key: sk-not-needed # 如果本地服务不需要密钥可以填任意值但字段通常需要存在在model_routes中新增一条路由。- name: deepseek-coder # 客户端使用的模型名 upstream: my-local-llm model: deepseek-coder # 上游服务识别的模型名重启网关服务即可。问题9项目更新后如何平滑升级策略阅读更新日志关注项目GitHub的Release页面了解新版本特性、不兼容变更和修复的Bug。备份配置和数据升级前备份你的config.yaml、.env以及任何持久化数据卷。测试环境先行如果有测试环境先在测试环境升级验证核心功能。使用Docker Tag在docker-compose.yml中不要一直使用latestTag而是使用具体的版本号如v1.2.3。升级时修改版本号并重新docker-compose up -d。Docker Compose会拉取新镜像并重新创建容器。蓝绿部署对于生产环境可以采用更稳妥的方式。先部署一个新版本的容器实例与旧版本并存将少量流量切到新版本进行验证无误后再逐步全量切换。经过以上从架构到部署从基础使用到生产调优再到问题排查的完整梳理相信你已经对newaiproxy/claude-proxy这个项目有了深入的理解。它不是一个复杂的庞然大物而是一个精准解决AI模型调用“最后一公里”问题的利器。将它纳入你的技术栈就像为你的AI应用加装了一个智能、可靠的中控系统让后续的集成、管理和扩展都变得事半功倍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2600438.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…