基于MCP协议实现AI自然语言查询PostgreSQL数据库的实践指南

news2026/4/27 17:10:51
1. 项目概述让AI助手用自然语言直接对话你的Postgres数据库如果你和我一样日常工作中需要频繁地与Postgres数据库打交道无论是分析业务数据、排查问题还是生成报表那么“如何快速、准确地查询数据”就是一个绕不开的痛点。写SQL本身不难但面对一个陌生的、表结构复杂的数据库时搞清楚“哪个表存了什么”、“字段名具体是什么”、“表之间怎么关联”这些前置问题往往比写查询本身更耗时。更别提那些偶尔才用一次的分析需求每次都得重新回忆SQL语法和表结构。最近在探索AI编程助手比如Cursor、Claude Desktop时我就在想能不能让AI直接“理解”我的数据库然后我用大白话问问题它就能给我返回准确的数据这听起来像是给数据库装了个“自然语言接口”。经过一番搜寻和尝试我发现了PGMCP这个项目它完美地实现了这个想法。简单来说PGMCP是一个实现了Model Context ProtocolMCP标准的服务器它在你现有的Postgres数据库和AI助手之间架起了一座桥梁。你不需要修改数据库的一行代码只需要启动这个服务AI就能通过自然语言查询你的数据并以表格、JSON或CSV格式返回结果。这个项目的核心价值在于它的“无侵入性”和“安全性”。它对你的数据库是100%只读的所有潜在的写操作INSERT, UPDATE, DELETE, DROP等都会被严格拦截。这意味着你可以放心地把它连接到生产环境的只读副本上而不用担心AI助手会误操作搞乱你的数据。对于数据分析师、产品经理、运营同学或者任何需要频繁查询数据但又不愿深陷SQL细节的人来说这无疑是一个效率神器。1.1 核心需求与适用场景解析在深入技术细节之前我们先明确一下PGMCP到底解决了哪些具体问题以及它最适合用在什么场景。1. 降低数据库查询的认知门槛与操作成本这是最直接的需求。很多业务同学有数据需求但要么不会SQL要么对复杂的表关系望而却步。PGMCP允许他们用“上个月销售额最高的产品是什么”、“找出最近一周登录异常的用户”这样的自然语言提问AI会将其转化为正确的SQL并执行。这极大地扩展了数据自助服务的能力边界。2. 加速开发与调试过程中的数据探查作为开发者我们在开发新功能或调试Bug时经常需要快速查看数据库中的实时状态。与其在psql命令行或GUI工具里手写SELECT语句不如直接问AI“显示用户ID为12345的最近3条订单记录”。这种交互方式更符合大脑的思考流程能让我们更专注于问题本身而不是语法细节。3. 为AI编程助手注入“数据库上下文”这是MCP协议的精髓。像Cursor、Claude Code这样的AI编程助手本身已经具备强大的代码理解和生成能力。当它们通过PGMCP获得了你数据库的实时结构Schema和数据样本后它们的建议会变得无比精准。例如当你让AI“写一个API来获取用户订单列表”时AI已经知道了你的users表和orders表的具体字段以及关联关系生成的代码几乎可以直接使用无需你再反复提供上下文。4. 实现安全可控的数据开放在很多公司直接给业务方开放数据库查询权限是高风险行为。PGMCP提供了一个安全的中间层。你可以将其部署在数据库的只读副本上通过API密钥或网络策略控制访问。业务方通过AI助手进行查询所有的操作都是只读的、被审计的并且有查询超时等保护机制从根本上杜绝了“删库跑路”的风险。注意虽然PGMCP极大地提升了便利性但它并非万能。对于极其复杂的、涉及多步计算和业务逻辑的查询自然语言描述的准确性可能会下降。它最适合的是替代那些简单的、临时的、探索性的SELECT查询。对于固定的报表和复杂的ETL任务专门的BI工具或写好的SQL脚本仍然是更可靠的选择。2. 核心架构与工作原理深度拆解PGMCP不是一个简单的“自然语言转SQL”的脚本而是一个具备生产级考量的服务端应用。理解其架构有助于我们更好地部署、使用和信任它。2.1 基于MCP协议的通信模型MCPModel Context Protocol是一个新兴的开放协议旨在为AI模型提供一个标准化的方式来与外部工具、数据源和服务进行交互。你可以把它想象成AI世界的“USB协议”或“驱动程序框架”。PGMCP就是一个实现了MCP协议的“Postgres数据库驱动”。工作流程如下用户/AI助手发起请求你在Cursor的聊天框里输入“列出今年的新客户”。MCP客户端封装请求Cursor作为MCP客户端将这个自然语言问题按照MCP协议格式打包通过HTTP请求发送给PGMCP服务器。PGMCP服务器处理核心逻辑这是PGMCP的“大脑”。它接收到请求后会执行一系列动作Schema缓存与理解首先它会连接到你配置的Postgres数据库获取并缓存所有表、视图、列名、数据类型、主外键关系等信息。这个缓存是智能查询的基础。自然语言转SQLNL2SQL利用内置的提示词工程将你的问题、当前数据库Schema上下文一起发送给AI引擎默认是OpenAI的GPT-4o-mini。AI引擎的任务是生成一句语法正确、符合Schema的SELECT查询语句。SQL安全审查与执行在执行AI生成的SQL前PGMCP会进行严格的安全检查。它会解析SQL语法树确保不包含任何写操作、DDL语句或危险函数。确认安全后才在数据库的只读事务中执行该查询。.流式结果处理与返回查询可能返回大量数据。PGMCP不会一次性加载所有结果到内存而是使用游标Cursor进行流式读取并通过Server-Sent EventsSSE或分块HTTP响应将数据流式传输回客户端。客户端可以边接收边渲染体验非常流畅。结果呈现最终Cursor以美观的表格形式将查询结果展示给你。这个架构的关键在于解耦和标准化。PGMCP服务器只负责“理解问题并安全地查询数据库”而像Cursor、Claude Desktop这样的客户端只负责“与用户交互并展示结果”。它们通过标准的MCP HTTP接口通信这意味着未来任何支持MCP的AI工具都能立即获得查询你数据库的能力。2.2 安全性与可靠性设计剖析让AI直接操作数据库安全必然是头等大事。PGMCP在多个层面构建了防护网1. 查询层面严格的只读隔离这是最根本的防线。PGMCP在代码层面维护了一个“黑名单”列表包含了所有可能修改数据的SQL关键字如INSERT,UPDATE,DELETE,DROP,ALTER,GRANT,TRUNCATE等。在AI生成SQL后、执行前会进行词法分析和语法树解析一旦检测到任何写操作或DDL语句会立即拒绝执行并返回错误。此外所有查询都被包裹在BEGIN READ ONLY TRANSACTION; ... COMMIT;中从数据库会话层面再次加固。2. 资源层面防滥用机制查询超时每个查询都有默认的超时时间例如30秒防止复杂或错误的查询长时间占用数据库连接。连接池管理PGMCP使用高效的数据库连接池避免为每个请求创建新连接同时也能限制最大并发连接数保护数据库不被洪水请求冲垮。结果集限制虽然支持流式传输但通常会有默认的行数限制例如1000行防止一次性查询过大的数据量。客户端可以通过参数调整但服务器端也可配置全局上限。3. 运维层面可观测性与审计详细的日志PGMCP会记录每一条收到的自然语言请求、AI生成的SQL、执行状态成功/失败、执行时间以及返回的行数。这些日志对于监控使用情况、排查问题以及进行安全审计至关重要。错误优雅降级如果AI引擎如OpenAI API暂时不可用或者生成了无法执行的SQLPGMCP不会直接崩溃。它会捕获异常返回结构化的错误信息包含错误原因和可能的修复建议给客户端服务本身继续保持运行等待下一个请求。4. 网络与接入层面访问控制Bearer Token认证你可以通过AUTH_BEARER环境变量设置一个密钥。客户端必须在HTTP请求头中提供正确的Authorization: Bearer token才能访问否则返回401未授权错误。网络隔离在部署时你可以将PGMCP服务器部署在数据库的同一私有网络内仅对内网特定的AI客户端开放8080端口进一步减少暴露面。这些设计共同保证了即便在最坏的情况下例如AI被“诱导”生成恶意SQLPGMCP也能将其拦截确保数据库的绝对安全。3. 从零开始部署与实战配置理论讲完了我们来点实际的。下面我将手把手带你完成一次典型的PGMCP部署并连接到一个真实的数据库进行测试。我会以在Linux/macOS本地开发环境部署为例并穿插讲解生产环境部署的注意事项。3.1 环境准备与安装首先你需要一个正在运行的PostgreSQL数据库版本10及以上。你可以使用本地安装的Postgres也可以使用云服务如AWS RDS, Google Cloud SQL, Azure Database for PostgreSQL。记下你的连接字符串格式通常为postgresql://username:passwordhostname:port/database_name。安装PGMCP服务器官方提供了多种安装方式最快捷的是下载预编译的二进制文件。# 1. 访问项目Release页面下载对应你系统的压缩包 # 例如对于Linux x86_64系统 wget https://github.com/subnetmarco/pgmcp/releases/latest/download/pgmcp_Linux_x86_64.tar.gz # 2. 解压 tar xzf pgmcp_Linux_x86_64.tar.gz # 3. 进入解压后的目录你会看到两个可执行文件pgmcp-server 和 pgmcp-client cd pgmcp_Linux_x86_64 # 4. 可选将二进制文件移动到系统PATH目录方便全局调用 sudo mv pgmcp-server pgmcp-client /usr/local/bin/如果你习惯使用包管理器macOS用户可以通过Homebrew安装项目首次发布后可用brew tap subnetmarco/homebrew-tap brew install pgmcp对于追求最新特性或需要自定义编译的开发者也可以从源码构建git clone https://github.com/subnetmarco/pgmcp.git cd pgmcp go build -o pgmcp-server ./server go build -o pgmcp-client ./client3.2 基础配置与启动安装完成后我们需要配置环境变量并启动服务。强烈建议将敏感信息如数据库密码、API密钥通过环境变量传递而不是写在命令行或脚本里。# 1. 设置必需的环境变量数据库连接串 export DATABASE_URLpostgresql://myuser:mypasswordlocalhost:5432/mydb # 2. 可选但推荐设置OpenAI API密钥用于AI生成SQL。 # 如果不设置PGMCP会使用一种基于规则和Schema匹配的简易模式适用于简单查询。 export OPENAI_API_KEYsk-你的OpenAI密钥 # 3. 可选配置其他参数 export OPENAI_MODELgpt-4o # 使用更强大的模型默认是gpt-4o-mini export HTTP_ADDR:8080 # 服务监听地址默认就是8080端口 export AUTH_BEARERmy-secret-token # 设置访问令牌增强安全 # 4. 启动服务器 ./pgmcp-server # 如果已移动到PATH直接运行pgmcp-server启动成功后你应该能看到类似以下的日志INFO[0000] Starting PGMCP server addr:8080 path/mcp INFO[0000] Connected to database dbmydb hostlocalhost INFO[0000] Schema cache initialized tables42 INFO[0000] MCP server is ready这表示服务已经在本地8080端口启动并成功连接到了你的数据库缓存了42张表的结构。3.3 使用内置客户端进行快速测试在启动服务器的同一个终端里它会在前台运行。我们需要打开另一个终端窗口来使用客户端进行测试。客户端pgmcp-client是一个方便的命令行工具用于直接与PGMCP服务器交互无需依赖Cursor等复杂环境。# 在新的终端中确保在同一个目录或pgmcp-client在PATH中 # 1. 测试连接列出所有表这是一个不需要AI的简单查询 ./pgmcp-client -ask What tables are in the database? -format table # 2. 进行一个简单的自然语言查询 ./pgmcp-client -ask Show me the 10 most recent orders -format table # 3. 进行跨表关联查询 ./pgmcp-client -ask List customers along with their total order amount -format table # 4. 使用搜索功能在所有文本字段中查找关键词 ./pgmcp-client -search error -format table # 5. 指定输出为JSON格式便于其他程序处理 ./pgmcp-client -ask Count the number of active users -format jsonpgmcp-client会自动连接到http://localhost:8080/mcp。如果你的服务器地址或路径变了可以通过环境变量PGMCP_SERVER_URL来指定。实操心得初次测试建议第一次使用时建议从一个结构清晰、数据量适中的测试数据库开始。你可以使用项目自带的schema_minimal.sql或schema.sql来快速创建一个示例数据库。这能帮你快速验证整个流程是否通畅并观察AI生成SQL的质量。# 导入示例Schema到你的测试数据库 export DATABASE_URLpostgresql://localhost:5432/testdb psql $DATABASE_URL /path/to/pgmcp/schema_minimal.sql # 启动服务器连接此测试库 export DATABASE_URLpostgresql://localhost:5432/testdb ./pgmcp-server # 在另一个终端测试 ./pgmcp-client -ask Show all products and their categories -format table4. 与主流AI开发工具深度集成PGMCP的真正威力在于与你的日常开发工具无缝融合。下面我们详细看看如何配置Cursor和Claude Desktop。4.1 在Cursor中配置PGMCPCursor是目前对MCP支持最完善的IDE之一。配置好后你可以在它的聊天界面直接查询数据库。确保PGMCP服务器正在运行如前所述在终端运行./pgmcp-server。打开Cursor进入设置。你可以通过菜单Cursor - Settings或快捷键Cmd ,(Mac) /Ctrl ,(Windows) 打开。在设置中找到“MCP Servers”部分。这可能在“Advanced”或“Features”标签下。点击“Add New MCP Server”或编辑配置文件。你需要添加如下配置{ mcp.servers: { pgmcp: { command: pgmcp-server, args: [], env: { DATABASE_URL: postgresql://user:passlocalhost:5432/yourdb, OPENAI_API_KEY: sk-... } } } }更推荐使用HTTP模式因为这样服务器可以独立管理更稳定{ mcp.servers: { pgmcp: { transport: { type: http, url: http://localhost:8080/mcp, headers: { // 如果你设置了AUTH_BEARER需要在这里添加 // Authorization: Bearer my-secret-token } } } } }保存设置并重启Cursor。重启后在Cursor的聊天界面你应该就能直接向AI提问关于数据库的问题了。例如输入“帮我查一下上个月销售额前十的产品并列出它们的名称和销售额”。Cursor会调用PGMCP获取结果并以表格形式展示。注意事项Cursor配置的坑路径问题如果使用command模式确保pgmcp-server在系统的PATH环境变量中否则需要填写绝对路径。环境变量在Cursor的配置中设置环境变量可能会因为Cursor的沙盒环境而不生效。最可靠的方式是先在终端里导出环境变量然后从同一个终端启动Cursor。例如export DATABASE_URL... open -a Cursor。端口冲突确保8080端口没有被其他程序占用。如果占用可以在启动服务器时通过HTTP_ADDR环境变量修改例如export HTTP_ADDR:9090并在Cursor配置中同步修改URL。4.2 在Claude Desktop中配置PGMCPClaude Desktop是Anthropic官方推出的客户端同样支持MCP。首先找到Claude Desktop的配置文件。它的位置通常是macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.jsonLinux:~/.config/Claude/claude_desktop_config.json如果文件不存在就创建一个。编辑这个JSON文件添加PGMCP服务器的配置{ mcpServers: { pgmcp: { transport: { type: http, url: http://localhost:8080/mcp } } } }保存文件并完全重启Claude Desktop应用不是关闭窗口而是从任务栏/程序坞退出再重新打开。重启后在新的对话中你就可以像在Cursor中一样用自然语言查询数据库了。配置生效验证一个简单的验证方法是在配置好后向Claude或Cursor提问“你现在可以访问我的数据库吗”或者“列出你知道的工具”。如果配置成功AI通常会回复它现在可以通过PGMCP工具访问数据库并可能列出可用的ask、search等工具。4.3 进阶使用Docker容器化部署对于生产环境或希望保持环境干净的情况使用Docker部署是更佳选择。PGMCP提供了官方镜像。# 1. 拉取镜像 docker pull ghcr.io/subnetmarco/pgmcp:latest # 2. 运行容器通过环境变量传入配置 docker run -d \ --name pgmcp-server \ -p 8080:8080 \ -e DATABASE_URLpostgresql://user:passhost.docker.internal:5432/db \ -e OPENAI_API_KEYsk-... \ -e AUTH_BEARERmy-secret-token \ ghcr.io/subnetmarco/pgmcp:latest # 注意如果数据库在宿主机Docker for Mac/Windows可以使用 host.docker.internal 作为主机名。 # Linux环境下可能需要使用 --network host 模式或指定真实的IP地址。Docker Compose示例对于更复杂的部署可以编写一个docker-compose.yml文件将PGMCP和数据库如用于测试的Postgres一起管理version: 3.8 services: postgres: image: postgres:15-alpine environment: POSTGRES_DB: mydb POSTGRES_USER: myuser POSTGRES_PASSWORD: mypassword volumes: - postgres_data:/var/lib/postgresql/data ports: - 5432:5432 pgmcp: image: ghcr.io/subnetmarco/pgmcp:latest depends_on: - postgres environment: DATABASE_URL: postgresql://myuser:mypasswordpostgres:5432/mydb OPENAI_API_KEY: sk-... # 建议通过外部secret管理 HTTP_ADDR: :8080 ports: - 8080:8080 # 如果设置了AUTH_BEARER也需要在这里配置 volumes: postgres_data:然后使用docker-compose up -d启动所有服务。这种方式非常适合本地开发和集成测试。5. 高级功能、问题排查与性能调优当你熟悉了基本操作后可以探索一些高级功能并了解如何应对可能遇到的问题。5.1 高级查询与流式处理PGMCP提供了三个核心工具Toolsask,search,stream。ask: 最常用的工具将自然语言转为SQL查询。它支持自动分页和流式返回对于大型结果集你会看到数据一块一块地加载出来而不是长时间等待。search: 这是一个全文搜索工具。它会在你数据库的所有文本列text,varchar等中进行模糊匹配找出包含关键词的行。这在排查日志、查找特定用户记录时非常有用。注意对于超大型表全表扫描可能较慢适合在已建立索引的字段上进行精确查询。stream: 这是一个更底层的流式接口提供了对分页、批处理大小的更细粒度控制。通常ask工具的内置流式处理已经足够stream更适合需要自定义处理逻辑的集成场景。使用pgmcp-client进行高级查询示例# 同时问多个问题 ./pgmcp-client -ask How many users do we have? -ask Whats the average order value? -format table # 限制返回行数并输出为CSV格式便于导入Excel ./pgmcp-client -ask List all products with inventory less than 10 -format csv -max-rows 500 low_inventory.csv # 使用搜索功能并指定搜索的列如果客户端支持特定参数 # 注意基础search工具通常是全文本搜索更复杂的列过滤需在自然语言提问中明确。 ./pgmcp-client -search pending -format table5.2 常见问题与排查指南即使配置正确你也可能会遇到一些问题。下面是一些常见情况及其解决方法。1. 连接数据库失败症状启动pgmcp-server时立刻报错提示“dial tcp failed”或“authentication failed”。排查检查DATABASE_URL环境变量是否正确特别是密码中的特殊字符是否需要转义。确认数据库服务器是否正在运行并且可以从运行PGMCP的机器网络访问尝试telnet host port或psql连接。检查数据库用户的权限确保其有对目标数据库的连接和只读查询权限。如果使用Docker注意容器网络隔离确保使用正确的主机名如host.docker.internal或服务名。2. AI生成的SQL不正确或无法执行症状提问后返回错误提示“column X does not exist”或“syntax error”。排查与解决检查Schema缓存PGMCP启动时会缓存Schema。如果你的数据库表结构发生了变化新增了表或列需要重启PGMCP服务以刷新缓存。优化你的提问尽量清晰、明确。例如“显示订单表里今天的状态为已发货的记录”比“今天的发货”要好。可以带上表名和字段名作为提示“从orders表里查询status为‘shipped’且order_date是今天的记录”。查看日志PGMCP服务器日志会打印出AI生成的原始SQL。查看这条SQL能帮你理解AI的“思路”哪里出了错从而调整你的提问方式。启用更强大的模型默认的gpt-4o-mini性价比高但能力有限。对于复杂Schema或复杂查询可以尝试切换到gpt-4o或gpt-4-turbo通过OPENAI_MODEL环境变量设置通常会有更好的表现。3. 查询速度慢或超时症状查询长时间无响应最后返回超时错误。排查与解决检查数据库性能首先在数据库本身执行AI生成的那条SQL看是否本身就很慢。可能是缺少索引导致的全表扫描。你需要优化底层数据库。调整超时设置PGMCP本身可能有查询超时限制。查看文档或源码看是否有相关配置参数可以调整如QUERY_TIMEOUT。注意在生产环境谨慎调大超时以免拖垮数据库。分页查询对于预期返回大量数据的查询在提问时主动要求分页。例如“列出最近1000个用户每次返回100个”。PGMCP的流式处理会帮你分批获取。4. 在Cursor/Claude中不生效症状配置了MCP Server但AI助手似乎不知道这个工具或者调用失败。排查确认服务器运行首先用pgmcp-client命令行测试确保服务器本身工作正常。检查配置格式Cursor和Claude的配置文件是JSON格式一个多余的逗号或引号错误都会导致整个配置失效。可以使用在线JSON校验工具检查。重启客户端修改MCP配置后必须完全重启Cursor或Claude Desktop应用新的配置才会被加载。查看客户端日志Cursor和Claude Desktop通常有开发者控制台或日志文件里面会有MCP连接失败的详细错误信息。根据错误信息对症下药。5.3 性能调优与生产部署建议当你打算将PGMCP用于团队或生产环境时需要考虑以下几点1. 数据库连接优化使用连接池PGMCP内置了连接池但你需要根据实际并发量调整池的大小如果项目暴露了相关配置。默认值对于中小规模使用通常足够。连接只读副本务必连接到一个只读的数据库副本如Postgres的Hot Standby而不是主库。这既能保证数据安全也能避免给主库增加不必要的负载。2. AI API成本与缓存Schema缓存PGMCP在启动时拉取并缓存Schema。对于Schema不常变的数据库这很好。如果Schema频繁变更需要考虑如何触发缓存刷新目前可能需要重启服务。查询缓存未来可能性目前每个自然语言查询都会调用AI API。对于重复的、高频的查询可以考虑在应用层比如用一个简单的Redis对“自然语言问题 - SQL”的结果进行缓存能显著降低成本和延迟。不过要注意如果数据更新了缓存的SQL结果可能过期需要设计合理的缓存失效策略。3. 监控与告警日志聚合将PGMCP的日志接入到你的集中日志系统如ELK、Loki。重点关注错误日志和慢查询日志如果AI生成了低效SQL。基础指标监控监控服务器的CPU、内存使用情况以及数据库的连接数、查询QPS。可以使用PrometheusGrafana如果PGMCP暴露了metrics端点或通过进程监控来实现。API用量监控如果你使用OpenAI等付费API务必在OpenAI后台设置用量告警防止意外的高额账单。4. 高可用与扩展多实例部署对于高可用场景可以在负载均衡器如Nginx后面部署多个PGMCP实例。由于PGMCP本身是无状态的状态在数据库连接和AI API水平扩展很容易。健康检查为PGMCP的HTTP服务/health或/mcp端点配置健康检查让负载均衡器能够剔除不健康的实例。我个人在将一个内部数据分析工具迁移到PGMCP后最大的体会是“对话式查询”彻底改变了团队探索数据的方式。以前需要我帮忙写SQL的同事现在可以自己尝试提问即使偶尔AI理解有偏差他们也能根据错误反馈调整问法这个过程本身也加深了他们对数据模型的理解。对于开发者而言它就像给IDE装上了一个“数据库实时文档”编码时对数据的把握更加自信。当然它不是一个替代专业BI或数据工程师的工具而是在“灵活、临时的数据获取”这个场景下一个无比顺手的“瑞士军刀”。开始使用前务必在测试环境充分验证并制定好安全边界然后就可以享受它带来的效率提升了。

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