PHP接入Bing AI:非官方库实现聊天与图像生成功能详解

news2026/5/10 11:01:30
1. 项目概述一个让PHP应用接入Bing AI的“瑞士军刀”如果你正在用PHP做项目又眼馋ChatGPT和DALL-E这类AI能力但不想去折腾复杂的OpenAI API或者被网络环境卡脖子那今天聊的这个工具可能正对你的胃口。maximerenou/php-bing-ai是一个非官方的PHP客户端库它直接让你能用PHP代码去调用微软Bing AI背后的两大核心服务基于GPT-4的聊天对话Bing Chat和图像生成Bing Image Creator技术源自DALL-E。简单说它把你在bing.com聊天框里能做的事封装成了几行清晰的PHP代码。我最初注意到它是因为需要一个能稳定生成图片并支持多轮对话的AI接口集成到内容管理系统中。官方API要么有地域限制要么成本不菲。这个库的思路很“野路子”——它模拟浏览器行为通过你提供的身份Cookie直接与Bing的后端通信。这意味着只要你的微软账户能正常使用Bing Chat理论上就能通过这个库无限调用。当然这种“非官方”的方式也伴随着风险我们后面会详细讨论。但不可否认对于快速原型验证、内部工具开发或者有特定集成需求的开发者来说它提供了一个极其轻量、直接的解决方案。最近它刚更新了重磅功能支持在聊天中发送并分析图片这让它的应用场景从纯文本对话扩展到了多模态交互。2. 核心功能与设计思路拆解2.1 双引擎驱动聊天与绘图的统一入口这个库的设计非常清晰核心就围绕两个功能模块展开Chat AI和Image Creator AI。作者没有试图做一个大而全的AI聚合平台而是精准地瞄准了Bing AI目前最实用、最成熟的两个公开能力。聊天模块Chat AI的核心是模拟一次完整的、有状态的对话。它不仅仅是一个简单的“提问-回答”接口。当你创建一个对话实例Conversation时库会在内部维护会话标识符、消息历史、对话风格创意/精确/平衡等上下文信息。这使得多轮对话、上下文关联成为可能完全复现了你在网页上和Bing聊天的体验。更重要的是它通过“卡片”Cards的概念来封装AI返回的复杂信息。一次AI回复可能包含纯文本、建议的后续问题、生成图片的请求等多种信息Cards数组将这些结构化数据完整地暴露给开发者提供了极大的灵活性。图像生成模块Image Creator AI则专注于异步任务处理。你提交一个提示词Prompt库会返回一个生成任务ID。由于图像生成通常需要数秒到数十秒库提供了wait()阻塞等待和异步轮询两种模式。这种设计充分考虑到了后端任务的特性你可以在提交任务后先去处理其他逻辑稍后再来获取结果。它还贴心集成了“加速次数”Boosts查询功能让你能清楚知道账户剩余的快速生成额度。这种“聊天”与“绘图”分离又通过同一个BingAI主类统一调度的设计既保证了功能的纯粹性又降低了使用者的认知负担。你不需要为两个功能学习两套完全不同的API。2.2 身份验证的巧思与风险提示整个库的运行基石是一个名为_U的浏览器Cookie。这是设计中最关键也最需要谨慎对待的一环。为什么是Cookie因为Bing AI的网页版bing.com/chat本身就是一个完整的Web应用。当你登录后浏览器持有的_UCookie就是服务器识别你身份、维持会话状态的凭证。这个PHP库本质上扮演了一个“无头浏览器”或“自动化脚本”的角色它携带这个Cookie去访问Bing的后端API接口从而绕过官方的OAuth或API Key验证流程。这样做的好处显而易见零成本、直接复用现有账户权益如免费的GPT-4对话和一定的图像加速次数、无需申请任何开发者密钥。对于个人项目或快速测试几乎没有门槛。但风险也同样突出违反服务条款几乎所有公开服务的条款都禁止自动化访问或非官方接口调用。这可能导致账户功能受限甚至被封禁。稳定性无保障Bing后端的API接口并非公开合约随时可能变更。一旦微软调整了接口路径或参数这个库就需要立即更新否则就会失效。Cookie安全_UCookie是高度敏感信息相当于你的账户临时密码。如果在代码中硬编码或在传输中泄露他人可能盗用你的身份。因此在决定使用这个库之前你必须做一个权衡是追求快速便捷和零成本还是选择官方API的稳定性和合规性。我的建议是将其用于个人学习、非关键业务的内部工具或一次性脚本切勿用于面向公众的、高并发的生产服务。3. 从零开始环境准备与核心配置详解3.1 基础环境搭建首先你的PHP环境需要满足两个基本条件PHP版本 7.4。建议使用PHP 8.0或以上以获得更好的性能和类型安全支持。cURL扩展必须启用。这个库的所有网络请求都依赖于cURL。你可以通过命令行快速检查php -v # 查看PHP版本 php -m | grep curl # 确认curl扩展已安装如果cURL未启用你需要根据你的操作系统和PHP安装方式如Homebrew、apt、yum或直接修改php.ini来启用它。接下来通过Composer安装这个库。在你的项目根目录下执行composer require maximerenou/bing-ai这会将库及其依赖添加到你的项目中。我建议在开发初期就建立一个独立的测试文件例如test_bing.php来验证功能避免干扰主项目代码。3.2 获取并验证你的“通行证”_U Cookie这是最关键且唯一需要手动操作的步骤。流程虽然不复杂但细节决定成败。详细获取步骤使用Chrome、Edge或Firefox浏览器访问 bing.com 。点击右上角“登录”使用你的微软账户Microsoft Account完成登录。登录后访问 Bing Chat页面 或点击搜索框旁的聊天图标。至关重要的一步在聊天框中手动输入任意内容如“Hello”并发送。这一步是为了触发并完成可能存在的CAPTCHA人机验证挑战。如果页面出现验证码请完成它。跳过此步直接获取的Cookie很可能无效。验证通过后打开浏览器开发者工具Windows/Linux按F12macOS按CmdOptionI。切换到“应用程序”Application标签页在Firefox中可能是“存储”Storage。在左侧侧边栏依次展开“Cookies” - “https://www.bing.com”。在右侧的Cookie列表中找到名为_U的那一行。双击_U对应的“值”Value单元格复制那一长串看似乱码的字符串。这就是你的Cookie。注意这个Cookie是有有效期的。如果长时间未使用或浏览器会话结束它可能会失效。如果后续调用库时出现身份验证错误你可能需要重复此步骤获取一个新的Cookie。安全存储建议绝对不要将裸Cookie硬编码在代码中并提交到Git仓库。推荐以下方式环境变量使用getenv(BING_COOKIE)读取。# 在终端中设置仅当前会话有效 export BING_COOKIE你的_U_Cookie值 # 或在项目根目录创建 .env 文件需配合vlucas/phpdotenv等库读取 BING_COOKIE你的_U_Cookie值配置文件创建一个不被Git跟踪的配置文件如config.local.php并通过.gitignore忽略它。密钥管理服务对于更严肃的用途可以考虑使用AWS Secrets Manager、Azure Key Vault等服务但这对于此库的典型使用场景可能有些“杀鸡用牛刀”。验证Cookie有效性在开始正式开发前先用库提供的方法验证一下Cookie是否有效。?php require __DIR__ . /vendor/autoload.php; use MaximeRenou\BingAI\BingAI; $cookie getenv(BING_COOKIE); // 或从你的安全配置中读取 if (empty($cookie)) { die(请设置 BING_COOKIE 环境变量。\n); } $ai new BingAI($cookie); $isValid $ai-checkCookie(); if ($isValid) { echo ✅ Cookie 有效可以开始使用。\n; } else { echo ❌ Cookie 无效。请检查\n; echo 1. 是否在bing.com/chat完成了首次人机验证并发送了一条消息\n; echo 2. Cookie 值是否复制完整\n; echo 3. 账户状态是否正常\n; }运行这个脚本看到成功的提示后再进行下一步可以避免很多后续的调试时间。4. 聊天功能深度解析与实战4.1 发起你的第一次AI对话让我们从一个最简单的文本对话开始。下面的代码展示了发起一次询问并获取答案的完整流程。?php require __DIR__ . /vendor/autoload.php; use MaximeRenou\BingAI\BingAI; use MaximeRenou\BingAI\Chat\Prompt; $cookie getenv(BING_COOKIE); $ai new BingAI($cookie); // 1. 创建一个新的聊天会话 $conversation $ai-createChatConversation(); // 2. 构建一个提示词对象 $question new Prompt(用简单的语言解释一下量子计算的基本原理。); // 3. 发送提问并获取结果 list($textAnswer, $messageCards) $conversation-ask($question); // 4. 输出结果 echo AI的文本回答 \n; echo $textAnswer . \n\n; echo 原始消息卡片数量 \n; echo count($messageCards) . 条\n; // 你可以遍历 $messageCards 来查看AI返回的完整数据结构执行这段代码你应该会得到一段关于量子计算的解释。这里有几个关键对象需要理解BingAI主客户端持有你的身份凭证。Conversation代表一次独立的对话会话。它内部管理着上下文。每次调用createChatConversation()都会开始一个全新的、独立的对话。Prompt对你要发送的消息的封装。它不仅仅是一个字符串后面我们会看到它可以附加图片、控制缓存等。ask()方法的返回值它返回一个数组第一个元素$textAnswer是AI回复的纯文本摘要非常干净适合直接显示。第二个元素$messageCards是一个数组包含了Bing后端返回的完整、结构化的消息对象。这些卡片里可能有文本、搜索建议、内部状态信号等是进行高级处理的基础。4.2 解锁多轮对话与上下文保持单次问答意义有限真正的威力在于多轮对话。库会自动在Conversation对象内部维护对话历史。// 接续上面的代码使用同一个 $conversation 对象 echo 第一轮回答结束 \n\n; // 进行第二轮提问AI会记得之前的对话 $followUpQuestion new Prompt(你刚才提到了‘量子比特’它能同时处于0和1的状态这具体是如何实现叠加的); list($textAnswer2, $cards2) $conversation-ask($followUpQuestion); echo 第二轮回答基于上下文\n; echo $textAnswer2 . \n;你会发现第二次的回答会直接引用“刚才提到”的内容证明上下文是有效的。这就是Conversation对象的核心作用——维持会话状态。如何管理和恢复会话有时你需要持久化一个对话以便用户下次回来能继续聊。库提供了获取和恢复会话标识符的方法。// 获取当前会话的唯一标识符 $sessionIdentifiers $conversation-getIdentifiers(); // $sessionIdentifiers 是一个数组包含了恢复会话所需的所有ID。 // 你可以将其存入数据库、Session或文件。 file_put_contents(saved_conversation.json, json_encode($sessionIdentifiers)); // ... 在另一个请求或时间点恢复这个会话 $savedIds json_decode(file_get_contents(saved_conversation.json), true); // 第二个参数 1 表示这个会话已经进行过1轮问答即我们之前问过一个问题。 // 这个数字必须准确用于内部的消息计数校验。 $resumedConversation $ai-resumeChatConversation($savedIds, 1); // 现在可以用 $resumedConversation 继续提问了实操心得准确记录“已进行的问答轮数”至关重要。如果传递的数字与实际历史不符Bing后端可能会报错或产生混乱的上下文。一个可靠的实践是在保存identifiers时连同当前的问答计数一起存储。4.3 高级功能图片分析、流式响应与风格定制1. 图片分析多模态理解这是该库的新特性让AI能够“看到”图片。$promptWithImage new Prompt(请描述这张图片里的场景并估算图中人物的年龄。); // 方法一提供图片文件路径 $promptWithImage-withImage(/path/to/your/photo.jpg); // 方法二直接提供图片的二进制数据第二个参数为true // $imageData file_get_contents(/path/to/photo.jpg); // $promptWithImage-withImage($imageData, true); list($analysisResult, $cards) $conversation-ask($promptWithImage); echo $analysisResult;这个功能对于构建内容审核工具、无障碍应用为视障用户描述图片或教育类应用非常有用。实测发现Bing AI对图片中物体、场景、文字的识别和描述能力相当强。2. 流式响应实时输出默认情况下ask()方法会等待AI完全生成回答后才返回。对于长回答这可能需要等待十几秒。流式响应允许你像在网页上一样看到答案逐字蹦出来。$prompt new Prompt(写一篇关于夏日星空的五百字短文。); list($finalText, $finalCards) $conversation-ask($prompt, function ($chunkText, $chunkCards) { // 这个回调函数会多次被调用每次传入当前已生成的部分文本和卡片 echo $chunkText; // 可以实时输出到网页或命令行 // 注意$chunkText是累积文本不是单次增量。如果需要增量需要自己缓存上一次的内容做对比。 }); // 循环结束后$finalText 和 $finalCards 就是完整的结果这个回调机制非常适合需要实时反馈的Web应用可以显著提升用户体验。3. 定制对话风格与区域你可以调整AI的回答风格更符合你的需求。use MaximeRenou\BingAI\Chat\Tone; $conversation $ai-createChatConversation() -withTone(Tone::Creative); // 设置为创意模式 // Tone::Balanced (平衡模式 - 默认) // Tone::Precise (精确模式 - 回答更严谨可能更简短) // Tone::Creative (创意模式 - 回答更发散、更有想象力) // 你还可以设置区域偏好这可能影响AI引用本地信息的方式如新闻、地点 $conversation-withPreferences(zh-CN, zh-CN, CN); // 语言区域国家/地区 // -withLocation(48.8566, 2.3522, 10000); // 巴黎的经纬度及半径米提供位置上下文根据我的测试“精确模式”在编写代码、总结事实时表现更好“创意模式”则在写故事、想点子时更出色。5. 图像生成功能全流程指南5.1 基础图像生成与同步等待图像生成功能被封装在ImageCreator类中使用起来比聊天更简单直接因为它通常是一个“提交任务-等待结果”的异步过程。?php require __DIR__ . /vendor/autoload.php; use MaximeRenou\BingAI\BingAI; $cookie getenv(BING_COOKIE); $ai new BingAI($cookie); // 1. 创建图像生成器并提交提示词 $promptText 一只戴着侦探帽、拿着放大镜的柯基犬卡通风格背景是雾蒙蒙的伦敦街道; $creator $ai-createImages($promptText); echo 提示词已提交生成ID: . $creator-getGenerationId() . \n; echo 正在生成请等待...\n; // 2. 阻塞等待直到生成完成或失败/超时 $creator-wait(); // 默认会有超时设置 // 3. 检查结果 if ($creator-hasFailed()) { echo ❌ 图像生成失败。原因可能是\n; echo - 提示词违反内容政策。\n; echo - 网络超时。\n; echo - 服务器内部错误。\n; // 可以调用 $creator-getError() 获取错误信息 } else { // 4. 获取生成的图片URL $imageUrls $creator-getImages(); echo ✅ 生成成功共 . count($imageUrls) . 张图片。\n; foreach ($imageUrls as $index $url) { echo 图片 . ($index 1) . : $url\n; // 你可以使用 file_get_contents($url) 或 cURL 下载这些图片 } }Bing Image Creator 通常一次会生成4张分辨率为1024x1024的图片变体。getImages()返回的就是这4个图片的直链URL。这些URL是临时的需要及时下载到本地服务器因为一段时间后可能会失效。5.2 异步处理与任务状态管理对于Web应用让用户前端长时间等待一个阻塞的wait()调用是不现实的。库提供了异步处理的机制。// 提交任务并立即返回保存任务ID $creator $ai-createImages(未来主义风格的城市空中花园); $generationId $creator-getGenerationId(); $promptUsed 未来主义风格的城市空中花园; // 将 $generationId 和 $promptUsed 存入数据库或消息队列 saveToDatabase($generationId, $promptUsed, status: generating); // --- 在另一个独立的进程或定时任务中 --- function checkImageGeneration($ai, $generationId, $originalPrompt) { $creator $ai-getImageCreator(); // 通过ID和原提示词恢复生成器对象 $creator-resume($generationId, $originalPrompt); if ($creator-isGenerating()) { return [status pending, message 仍在生成中]; } if ($creator-hasFailed()) { return [status failed, error $creator-getError()]; } // 生成完成 $imageUrls $creator-getImages(); return [status completed, images $imageUrls]; } // 示例轮询检查 $result checkImageGeneration($ai, $savedGenerationId, $savedPrompt); while ($result[status] pending) { sleep(5); // 每5秒检查一次 $result checkImageGeneration($ai, $savedGenerationId, $savedPrompt); }这种“提交-存储-轮询”的模式是构建异步AI服务端的标准做法。你需要自己实现任务状态的持久化和轮询逻辑。5.3 加速次数Boosts管理Bing为免费用户提供了有限的“加速次数”用完后生成速度会变慢。库提供了查询接口。$creator $ai-getImageCreator(); // 获取一个通用的ImageCreator实例用于查询 $remainingBoosts $creator-getRemainingBoosts(); echo 本账户剩余加速次数: $remainingBoosts\n; if ($remainingBoosts 0) { echo 下次生成将使用加速速度较快。\n; } else { echo 加速次数已用完生成速度可能较慢。\n; }一个实用的策略是在用户提交生成请求前先检查加速次数。如果次数充足可以承诺更快的生成时间如果次数为0则提示用户生成可能需要更长时间可能长达一分钟或更多。6. 生产环境注意事项与常见问题排查6.1 速率限制、会话限制与错误处理Bing AI对非官方访问有严格的限制直接体现在两个方面1. 单次对话消息上限每个对话Conversation有消息条数限制通常是30条左右包含你的提问和AI的回答。达到上限后对话会自动结束。// 每次交互后检查 $remainingMessages $conversation-getRemainingMessages(); if ($remainingMessages 0) { echo 本对话已达到消息上限请开启新对话。\n; // 你可以在这里自动创建一个新的 $conversation }2. 踢出检测Bing后端可能会因为异常活动如请求过快、内容违规而将你从当前对话中“踢出”。if ($conversation-kicked()) { echo 你已被移出此对话。\n; }一个更简便的方法是使用ended()方法它综合检查了以上两种情况。if ($conversation-ended()) { // 对话已结束达到上限或被踢出 // 处理逻辑记录日志创建新会话等 }3. 全局请求速率控制虽然库本身没有内置节流但你必须自己实现。过于频繁的请求会导致HTTP 429过多请求错误甚至临时封禁IP或账户。建议在调用ask()或createImages()之间添加随机延迟例如sleep(rand(3, 8))。对于Web应用使用队列如Redis、RabbitMQ来序列化处理AI请求避免并发调用。监控HTTP状态码库底层使用cURL如果遇到网络错误或429状态码会抛出异常。确保你的代码有try...catch块。try { list($text, $cards) $conversation-ask($prompt); } catch (\Exception $e) { // 记录错误日志包含错误信息和时间 error_log(Bing AI请求失败: . $e-getMessage()); // 根据错误类型决定重试、等待还是向用户报错 if (strpos($e-getMessage(), 429) ! false) { // 速率限制等待更长时间再重试 sleep(60); } }6.2 内容安全与合规性考量使用非官方接口你必须格外注意内容安全。用户输入过滤永远不要将未经处理的用户输入直接传递给Prompt。必须过滤敏感词、攻击性语言和个人隐私信息如电话号码、地址。Bing的后端也有过滤器触发后可能导致本次请求失败或账户被标记。生成内容审查AI生成的内容尤其是图像可能包含不可预测的元素。在将图片展示给用户或存储到服务器前应进行人工或自动化的审查。对于文本也要注意其可能存在的偏见或错误信息。遵守版权生成的图像在商业使用时需留意其版权状态。虽然Bing/DALL-E的条款可能允许使用但由AI生成的内容的版权在法律上仍处于灰色地带。明确免责声明如果你的应用使用了此库应在显著位置告知用户“本功能由AI驱动生成内容可能不准确或不适当”并提供一个反馈和举报渠道。6.3 常见问题速查与解决方案下表汇总了开发过程中可能遇到的典型问题及其排查思路问题现象可能原因排查步骤与解决方案初始化BingAI或checkCookie()失败1. Cookie无效或过期。2. 网络问题无法连接Bing。1.重新获取Cookie严格按步骤在bing.com/chat完成人机验证后获取。2.检查网络确保服务器能访问www.bing.com。3.查看错误信息捕获异常看是否是cURL错误如SSL证书问题。ask()方法长时间无响应或超时1. AI生成长回答需要时间。2. 网络延迟高或不稳定。3. 达到了Bing的服务端超时。1.使用流式响应通过回调函数给用户实时反馈。2.增加超时设置虽然库有默认超时但可以在cURL层面调整需修改库源码不推荐新手做。3.实施重试机制在catch块中等待后重试一次。收到包含“Im sorry, I cant answer that.”或类似限制的回答提示词触发了Bing的内容安全策略。1.修改提示词用更中性、更清晰的表达方式。2.拆分问题将复杂或敏感问题拆分成更小、更具体的子问题。3.切换对话风格尝试使用Tone::Balanced或Tone::Precise。图像生成失败 (hasFailed()返回true)1. 提示词违反内容政策暴力、成人、侵权等。2. 加速次数用尽且服务器繁忙。3. 生成ID过期异步等待时间过长。1.审查提示词避免明确的品牌、名人、暴力色情描述。2.查询加速次数提示用户加速次数已用完生成会变慢。3.控制超时对于异步任务设置合理的轮询超时如180秒超时后标记为失败。流式响应回调函数只被调用一次且返回完整文本这是预期行为。回调函数传入的$chunkText是截至当前时刻的完整文本而不是最新的片段。如果需要实现真正的“逐字输出”需要在函数外部维护一个变量来存储上一次接收到的文本然后计算并输出差值。$lastText ;$callback function($currentText) use ($lastText) { echo substr($currentText, strlen($lastText)); $lastText $currentText; };在对话中发送图片分析请求失败1. 图片文件路径错误或无权访问。2. 图片文件过大或格式不受支持。3. 多模态功能临时不可用。1.检查文件确保路径正确PHP进程有读取权限。2.预处理图片将图片压缩或调整大小例如长边不超过2000像素并转换为常见格式JPG, PNG。3.查看Cards失败时检查$cards数组里面可能有更详细的错误信息。6.4 性能优化与最佳实践建议会话复用与预热对于需要连续对话的场景尽量复用同一个Conversation对象而不是频繁创建新会话。创建新会话会有额外的网络开销。合理缓存对于一些通用性的、答案变化不大的问题如“解释某个编程概念”可以考虑将AI的回答缓存起来例如用Redis缓存1小时避免重复请求节省额度并提升响应速度。设置用户代理User-Agent虽然库内部可能已经设置但在高并发或特殊环境下模拟一个真实的浏览器UA可能有助于减少被风控的概率。这需要你稍微深入研究库的源码在初始化cURL句柄的地方进行修改。日志记录记录每一次请求的提示词、返回结果可脱敏、耗时和错误信息。这对于分析使用模式、排查问题和优化提示词至关重要。备选方案由于此库依赖非官方接口稳定性是最大风险。对于核心生产功能务必设计降级方案。例如当此库连续失败时可以切换到另一个AI服务如OpenAI官方API虽然成本高但稳定或返回预定义的静态内容。我个人在几个内部项目中使用了这个库超过三个月最大的体会是它是一把非常锋利的“手术刀”在特定场景下快速验证AI想法、构建一次性脚本、开发不追求极高稳定性的个人工具无比顺手。但如果你要建造的是承载大量用户、需要SLA服务等级协议保障的“大厦”那么地基一定要打在官方API或更稳定的商业服务上。理解它的工作原理和局限在合适的场景下运用才能让这个工具发挥最大价值。最后时刻关注GitHub仓库的更新和Issues社区是应对Bing后端变更的最快信息来源。

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