基于MCP协议实现私有部署Azure DevOps与AI编程助手的安全集成

news2026/5/9 3:36:30
1. 项目概述当本地开发遇上云端智能最近在折腾一个挺有意思的玩意儿叫burcusipahioglu/azure-devops-mcp-onprem。乍一看这名字又是 Azure DevOps又是 MCP还带个 on-prem感觉有点绕。简单来说这是一个能让你的本地开发环境通过一个叫 MCPModel Context Protocol的协议直接“对话”你公司内网里那套私有部署的 Azure DevOps Server 的工具。说白了就是给那些没法上云、数据必须留在自己机房的团队在本地用上类似 GitHub Copilot 那样的 AI 编程助手并且让这个助手能“看懂”你内网 Azure DevOps 里的工作项、代码库和流水线。这项目解决了一个很实际的痛点很多中大型企业尤其是金融、政务、军工这些对数据安全有硬性要求的行业他们的代码仓库、CI/CD 流水线都是部署在内网环境的 Azure DevOps Server以前叫 TFS上。外面的 AI 大模型再聪明它也访问不了你内网里的数据。你想让 AI 帮你根据工单号自动生成代码想让它基于你内部的代码规范写注释或者让它分析某个流水线最近失败的原因没门儿数据隔着一道墙。而这个项目就是在这道墙上开了一扇安全、可控的“窗”让本地的 AI 助手比如 Claude Desktop、Cursor 里的 AI 功能能够通过一个标准的协议安全地查询和操作你内网的 Azure DevOps 数据。我自己在给一些企业做 DevOps 咨询时就经常遇到这种需求。团队既想享受 AI 编程带来的效率提升又受制于严格的内网策略和数据合规要求。手动在 IDE 和浏览器之间来回切换查文档、看工单效率很低。这个项目正好踩在了这个痒点上。它不是一个庞大的平台而是一个轻量的“连接器”或“适配器”技术栈选型也很务实用 Go 语言编写保证性能和跨平台能力通过 MCP 这个新兴但被 Anthropic、Cursor 等主流工具采纳的协议来提供标准化服务。2. 核心架构与 MCP 协议解析2.1 为什么是 MCP 协议要理解这个项目首先得弄明白 MCP 是什么。Model Context Protocol你可以把它想象成 AI 应用世界的“USB 协议”。在没有统一协议之前每个 AI 助手Claude、Cursor、Windmill 等想连接一个外部数据源比如你的 Azure DevOps、Jira、数据库都需要针对这个数据源开发一个特定的插件或集成工作量大且难以复用。MCP 的目标就是定义一套标准让数据源称为 Server能够以统一的方式向 AI 应用称为 Client提供一系列“工具”Tools和“资源”Resources。AI 应用只需要实现 MCP Client 端就能接入所有遵循 MCP 协议的 Server获取数据或执行操作。azure-devops-mcp-onprem项目就是一个针对私有部署 Azure DevOps Server 的 MCP Server 实现。它的架构非常清晰MCP Server本项目运行在你的本地开发机或内网某个跳板机上。它内嵌了 Azure DevOps Go SDK负责与你内网的 Azure DevOps Server 实例进行认证和通信。MCP ClientAI 应用比如你电脑上装的 Claude Desktop 应用或者 Cursor IDE。它们内置了 MCP Client 能力。协议通信Server 和 Client 之间通过 stdio标准输入输出或 SSEServer-Sent Events进行通信传输的是符合 MCP 协议格式的 JSON-RPC 消息。这意味着所有数据流转都在本地或内网非常安全。选择 MCP 而不是为每个 AI 工具单独写插件是项目设计上的一大亮点。它实现了“一次编写多处使用”。你部署好这个 Server 后理论上任何支持 MCP Client 的应用都能立刻获得访问 Azure DevOps 的能力未来生态扩展性很好。2.2 项目组件与工作流拆解我们来看看这个 Server 具体提供了哪些“能力”给 AI。根据其代码和设计核心是暴露了一系列“工具”函数。AI 助手在和你聊天时如果判断需要查询 Azure DevOps 的信息就会在后台调用这些工具。主要工具集通常包括工作项查询工具这是最常用的。AI 可以根据你提供的工单 ID、标题关键字、状态、指派给谁来查询工作项。例如你可以对 AI 说“帮我看看PROJ-123这个用户故事的具体描述和验收标准。” AI 就会在后台调用get_work_item工具从你的 Azure DevOps 拉取信息并组织成自然语言回复你。代码仓库搜索工具允许 AI 在内网的 Git 仓库中搜索代码片段、文件或提交记录。比如“在我们前端的auth模块里找找所有用到JWT验证的地方。” 这能极大辅助代码理解和重构。拉取请求查询工具查看指定 PR 的状态、评审者、评论和构建状态。“那个关于支付接口的 PR#456现在是什么状态谁还没评审”构建流水线状态工具获取最近流水线运行的结果、持续时间、错误日志摘要。“主分支上最近一次nightly-build失败的原因是什么”这些工具共同构成了一个围绕 Azure DevOps 数据的“语义层”。AI 不再是一个与世隔绝的语言模型它变成了一个能主动获取项目上下文、拥有“记忆”和“感知”的智能体。整个工作流是这样的你在 IDE 里和 AI 对话 - AI 理解你的意图 - AI 通过 MCP 调用对应的工具 - 工具访问内网 Azure DevOps API 获取数据 - 数据返回给 AI - AI 消化数据并生成针对性的回答。注意这里的安全性设计很关键。MCP Server 本身只是一个代理它需要配置 Azure DevOps 的访问令牌PAT。这个令牌的权限决定了 AI 能做什么。最佳实践是创建一个权限范围最小化的 PAT比如只授予“工作项读取”、“代码读取”、“构建读取”等权限绝对不要给“完全控制”权限。这样即使 AI 的指令被恶意构造其破坏力也仅限于读取操作无法删除仓库或修改生产流水线。3. 本地部署与配置实战3.1 环境准备与编译项目是用 Go 写的所以第一步你得有个 Go 的开发环境。建议 Go 版本在 1.21 以上。部署的目标机器可以是你的 Windows/Mac/Linux 开发机也可以是内网里一台大家都能访问到的 Linux 服务器作为共享的 MCP Server。# 1. 克隆代码库 git clone https://github.com/burcusipahioglu/azure-devops-mcp-onprem.git cd azure-devops-mcp-onprem # 2. 检查 Go 环境 go version # 3. 编译项目 go build -o azure-devops-mcp-onprem ./cmd/server # 或者直接安装 go install ./cmd/serverlatest编译完成后你会得到一个可执行文件azure-devops-mcp-onprem。这个二进制文件包含了所有依赖可以直接分发到其他机器运行这是 Go 语言部署方便的地方。3.2 关键配置详解配置是整个部署的核心直接关系到连接成功与否和安全性。项目通常通过环境变量或配置文件来读取配置。我们需要配置以下几个关键信息Azure DevOps Server 地址就是你内网 TFS/Azure DevOps Server 的访问地址比如http://tfs.mycompany.local:8080/tfs。访问令牌在 Azure DevOps Server 的 Web 界面中点击你的头像 - “安全性”创建一个新的个人访问令牌。在创建时务必遵循最小权限原则。场景如果只希望 AI 读取工作项和代码那么只勾选“工作项读取”、“代码读取”就足够了。令牌有效期可以设置一个较长的有效期如一年避免频繁更换。但要做好记录到期前更新。组织/项目集合名称Azure DevOps Server 中的项目集合名称。MCP Server 名称与描述这个会显示在 AI 客户端的连接列表里起个容易识别的名字比如“公司内网 DevOps 数据源”。一个典型的配置方式是通过.env文件# .env 文件示例 AZURE_DEVOPS_URLhttp://tfs.mycompany.local:8080/tfs AZURE_DEVOPS_TOKENyour_super_secret_pat_token_here AZURE_DEVOPS_ORGDefaultCollection MCP_SERVER_NAMEInternal DevOps MCP_SERVER_DESCRIPTION提供对公司内网Azure DevOps Server工作项、代码库的访问实操心得关于 PAT 令牌的安全存储明文存储在.env文件里对于本地开发可以接受但如果 Server 部署在共享服务器上就需要更安全的方式。可以考虑使用秘密管理工具如 HashiCorp Vault、AWS Secrets Manager程序启动时动态获取。容器化部署在 Docker 或 Kubernetes 中通过 Secret 对象注入环境变量。配置文件权限确保.env文件权限为600仅当前用户可读。 永远不要将令牌提交到版本控制系统3.3 启动服务与验证配置好后启动服务就很简单了# 加载环境变量并启动 source .env ./azure-devops-mcp-onprem # 或者在 Windows CMD 中 # set /p ENV_VAR .env azure-devops-mcp-onprem服务默认会启动一个 stdio 模式的 MCP Server等待客户端连接。但为了验证服务是否正常我们通常先让它以 HTTP SSE 模式运行并用一个简单的测试客户端比如mcp-cli来测试。项目文档或代码中可能会提供一个示例用--transport参数指定 SSE 模式并绑定一个端口./azure-devops-mcp-onprem --transport sse --port 8081然后我们可以使用一个通用的 MCP 测试工具来列出它提供的所有工具验证连接和认证是否成功# 假设使用 mcp-cli 工具进行测试 mcp-cli list-tools --server http://localhost:8081/sse如果一切正常你会看到返回一个 JSON 数组里面列出了get_work_item,search_code等工具的定义。这证明你的 MCP Server 已经成功启动并且准备好了为 AI 客户端提供服务。4. 与主流 AI 客户端集成4.1 配置 Claude DesktopClaude Desktop 是 Anthropic 官方推出的客户端对 MCP 的支持非常友好。配置过程就是在它的配置文件中添加你的 MCP Server。找到 Claude Desktop 的配置文件位置macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.jsonLinux:~/.config/Claude/claude_desktop_config.json在配置文件的mcpServers部分添加一个新的 Server 配置。这里有两种方式方式一直接引用本地编译好的二进制文件推荐适用于 Server 运行在本地{ mcpServers: { internal-devops: { command: /path/to/your/compiled/azure-devops-mcp-onprem, args: [], env: { AZURE_DEVOPS_URL: http://tfs.mycompany.local:8080/tfs, AZURE_DEVOPS_TOKEN: your_pat_token, AZURE_DEVOPS_ORG: DefaultCollection } } } }方式二连接到一个远程的 SSE 端点适用于 Server 部署在内网服务器{ mcpServers: { internal-devops: { url: http://your-internal-server:8081/sse } } }保存配置文件重启 Claude Desktop。重启后在聊天界面的输入框上方你应该能看到一个插头形状的图标点击它如果能看到internal-devops这个服务器并且状态是连接的就说明配置成功了。现在你就可以在聊天中直接问“我们项目里有哪些状态是‘进行中’的 bug” Claude 会自动调用相应的工具去查询并返回结果。4.2 配置 Cursor IDECursor 是另一个深度集成 AI 的流行 IDE。它同样支持 MCP。配置方法类似但配置文件位置和格式略有不同。在 Cursor 中你需要打开它的设置通常是Cmd ,或Ctrl ,找到MCP Servers相关配置或者直接编辑其配置文件。Cursor 的配置可能是一个cursor.json文件位于用户配置目录下。配置内容与 Claude Desktop 大同小异同样是定义 command 或 url。配置成功后在 Cursor 的 AI 聊天框中你就能获得同样的能力。这对于在编码时快速获取上下文尤其有用比如你可以选中一段代码然后问 AI“这段代码关联的原始需求工单是什么” AI 会尝试从提交历史或代码注释中提取工单号然后通过 MCP 工具去查询详细信息。4.3 集成中的注意事项与技巧工具调用的触发AI 不会在每次对话中都调用工具。它只在“认为有必要”时才会调用。比如你问“今天天气怎么样”它绝不会去查 Azure DevOps。但如果你问“PROJ-456这个任务谁负责”它识别出PROJ-456可能是一个工单 ID就会尝试调用get_work_item工具。你可以通过更明确的指令来引导它例如“请使用我们内部的 DevOps 系统查询 ID 为 1234 的工作项详情。”错误处理与反馈如果工具调用失败比如网络错误、令牌失效、权限不足AI 客户端通常会收到错误信息并尝试以友好的方式告诉你比如“无法连接到内部 DevOps 系统请检查网络或配置”。这时你需要去查看 MCP Server 的日志输出那里会有更详细的错误信息。性能考量每次工具调用都是一次网络请求。如果查询条件过于宽泛比如“列出所有工作项”可能会超时或返回大量数据影响 AI 响应速度。建议在向 AI 提问时尽量提供具体的筛选条件项目、区域路径、最近更新等。作为 Server 的开发者也可以在工具实现里增加分页或结果数量限制的逻辑。多项目支持如果你的 Azure DevOps Server 下有多个项目你可能需要让工具支持指定项目参数。这需要检查azure-devops-mcp-onprem项目的具体实现看是否支持在查询时传入project参数或者是否需要你启动多个 Server 实例每个实例配置不同的默认项目。5. 高级应用场景与定制化开发5.1 扩展自定义工具项目默认提供的工具可能无法完全满足你的团队需求。幸运的是MCP 协议和 Go 语言的框架使得添加自定义工具变得相对直接。假设你们团队使用 Azure DevOps 的测试管理模块你想让 AI 也能查询测试用例可以这样做理解代码结构首先阅读项目源码通常工具定义在internal/tools或pkg/tools目录下。你会看到每个工具都是一个实现了特定接口的函数函数内部使用 Azure DevOps Go SDK 进行 API 调用。添加新工具函数例如新增一个get_test_case工具。// 伪代码示例展示思路 func GetTestCase(ctx context.Context, input tools.GetTestCaseInput) (*tools.GetTestCaseOutput, error) { // 1. 从 input 参数中获取测试用例 ID testCaseId : input.TestCaseID // 2. 使用已初始化的 Azure DevOps Client调用测试管理 API // 假设有 testClient.GetTestCaseByID 方法 testCase, err : testClient.GetTestCaseByID(ctx, testCaseId, input.Project) if err ! nil { return nil, fmt.Errorf(failed to get test case: %w, err) } // 3. 将 API 返回的结构体转换为 MCP 工具输出的格式 output : tools.GetTestCaseOutput{ ID: testCase.ID, Title: testCase.Title, Steps: testCase.Steps, State: testCase.State, AssignedTo: testCase.AssignedTo, } return output, nil }注册工具在 Server 初始化的地方将新工具函数注册到 MCP Server 的工具列表中。定义输入输出 SchemaMCP 要求工具声明其输入输出的 JSON Schema这样 AI 客户端才知道如何调用它以及如何解析结果。你需要在工具定义时提供这些 Schema 描述。完成编译部署后重启 MCP Server 和 AI 客户端新的工具就会被自动发现。现在你可以问 AI“帮我看看测试用例TC-789的具体步骤是什么”5.2 构建团队共享的智能知识库单一的查询工具价值有限真正的威力在于组合和场景化。你可以引导团队形成一些“最佳提问实践”将 MCP Server 变成团队的智能知识库入口。晨会助手“列出我名下所有状态为‘进行中’且截止日期在本周内的工作项。”代码审查助手“针对 PR#567中修改的文件src/auth/login.ts找出历史上与之相关的所有 bug 工单。”上线支持助手“显示最近一周生产发布流水线的运行成功率和平均耗时并列出最近一次失败的具体错误摘要。”新人入职助手“给我介绍一下订单支付这个微服务模块列出它的核心代码文件、最近活跃的开发者以及相关的设计文档链接假设文档链接在工单描述里。”这些场景化的查询相当于为团队构建了一个动态的、可对话的项目仪表盘。新成员可以快速获取上下文老成员可以解放双手不用再手动进行繁琐的搜索和链接跳转。5.3 安全与审计增强对于企业级应用安全和审计是重中之重。除了使用最小权限的 PAT 令牌还可以考虑以下增强措施请求日志记录修改 MCP Server将所有工具调用的请求包括调用的工具名、输入参数、时间戳、请求来源标识记录到日志文件或发送到审计系统如 ELK Stack。这有助于追踪 AI 的使用情况并在出现问题时进行排查。输入参数校验与过滤在工具函数内部对传入的参数进行严格的校验。例如对于search_code工具可以限制搜索的仓库范围或者对搜索关键词进行敏感词过滤防止意外或恶意的数据探查。速率限制在 Server 层面添加速率限制防止某个客户端过度频繁调用 API对 Azure DevOps Server 造成压力。可以使用 Go 的golang.org/x/time/rate库轻松实现。客户端认证虽然基础的 MCP over stdio/SSE 不强制要求客户端认证但你可以在 Server 启动时要求一个共享密钥或者在 HTTP SSE 模式下配置简单的 API Key 认证确保只有受信任的客户端可以连接。6. 常见问题与故障排查实录在实际部署和使用过程中你肯定会遇到各种问题。下面是我踩过的一些坑和解决方案希望能帮你节省时间。6.1 连接与认证问题问题MCP Server 启动失败日志显示failed to create Azure DevOps client或authentication failed。排查步骤检查网络连通性首先确保运行 MCP Server 的机器能访问你的 Azure DevOps Server 地址。用curl或ping命令测试。验证 URL 格式确保AZURE_DEVOPS_URL是组织的根 URL而不是某个项目的 URL。通常是http(s)://server:port/tfs或http(s)://dev.azure.com/yourorganization云版本。对于私有部署端口和/tfs路径很容易出错。确认 PAT 令牌有效性在浏览器中尝试用这个 PAT 令牌通过 Basic Auth 访问 Azure DevOps 的 REST API 端点例如curl -u :PAT https://server/tfs/_apis/projects。如果返回 203 或 401说明令牌无效或已过期。检查 PAT 权限确认 PAT 令牌在创建时勾选了正确的权限范围。对于只读操作至少需要“工作项读取”、“代码读取”、“构建读取”等。权限不足会导致某些工具调用返回 403 错误。查看详细日志在启动 MCP Server 时可以尝试增加调试日志级别如果项目支持查看更详细的 HTTP 请求和响应信息。6.2 AI 客户端无法发现或调用工具问题Claude Desktop 或 Cursor 中看不到配置的 Server或者看到 Server 但显示“未连接”或者连接后 AI 似乎从不调用工具。排查步骤检查配置文件语法JSON 配置文件非常严格多一个逗号或少一个引号都会导致解析失败。使用 JSON 验证工具检查你的配置文件。确认 Server 运行正常先用mcp-cli或简单的 curl 命令测试 SSE 端点是否正常响应。curl http://localhost:8081/sse应该能看到持续的事件流输出。重启 AI 客户端修改配置文件后必须完全退出并重启 AI 客户端。很多客户端只在启动时加载一次配置。查看客户端日志Claude Desktop 和 Cursor 通常有日志文件。在日志中搜索 “MCP”、“server”、“connection” 等关键词能找到连接失败的具体原因。验证工具调用在 AI 聊天框中尝试使用非常明确、直接的指令例如“请调用 ‘internal-devops’ 服务器上的 ‘list_my_active_work_items’ 工具。” 如果 AI 回复说找不到该工具说明工具列表同步有问题如果调用后出错说明工具执行过程中出了问题需要查看 MCP Server 的日志。6.3 工具调用慢或超时问题AI 响应很慢或者工具调用超时。排查步骤网络延迟如果 MCP Server 和 Azure DevOps Server 不在同一个内网或者网络质量差API 调用就会慢。考虑将 MCP Server 部署在离 Azure DevOps Server 更近的位置。查询数据量过大像search_code这种工具如果搜索范围是全仓库且没有关键字或者关键字太常见会返回海量数据导致序列化和传输时间很长。在工具实现层面强烈建议加入分页和结果数量上限。作为使用者提问时应尽量具体。Azure DevOps Server 性能如果你们内部的 Azure DevOps Server 实例本身负载就很高API 响应自然慢。这不是 MCP Server 能解决的需要优化源站性能。调整超时设置检查 MCP Server 和 AI 客户端是否有可配置的超时参数适当延长。但更重要的是优化查询避免长时间操作。6.4 如何更新或维护问题项目更新了或者需要修改配置。流程更新二进制如果只是功能更新拉取最新代码重新go build生成新的二进制文件替换旧的即可。注意兼容性新版本的工具定义可能有变化。修改配置更新.env配置文件或环境变量。如果 PAT 令牌快到期提前生成新令牌并更新配置做好新旧令牌的重叠期避免服务中断。重启服务无论是更新二进制还是修改配置都需要重启 MCP Server 进程。客户端重连对于 stdio 模式重启 Server 后AI 客户端通常会自动重连。对于 SSE 模式客户端也可能有重连机制。如果发现工具不可用重启一下 AI 客户端是最稳妥的。部署和维护这样一个连接器最深的体会就是“细节决定成败”。一个字符错误的 URL一个过期的令牌一个 JSON 配置的格式错误都可能导致整个流程走不通。最好的办法就是做好文档记录把配置项、编译步骤、部署命令都记录下来。同时在开发测试环境先充分验证再推广到团队。这个项目为内网开发团队打开了一扇通往 AI 辅助编程的大门虽然初期搭建需要费点功夫但一旦跑通它对开发效率的提升是肉眼可见的特别是对于需要频繁查阅内部系统上下文的新人或者处理复杂遗留代码的老人来说价值非常大。

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