Promptulate框架:用Python构建可复用AI智能体的工程化实践

news2026/4/27 10:07:51
1. 项目概述当AI遇上“提示工程”一个框架如何重塑对话如果你最近在折腾大语言模型尤其是想让它帮你干点“正经事”而不是简单地闲聊那你大概率会碰到一个词提示工程。这玩意儿说白了就是研究怎么跟AI“说话”才能让它更好地理解你的意图并给出高质量、稳定、符合预期的输出。从简单的角色扮演到复杂的多步推理、工具调用背后都离不开精心设计的提示词。但问题来了。当你开始深入你会发现写提示词就像在写一种新的“代码”——它没有编译器报错但效果天差地别它需要反复调试但过程繁琐且难以复用。今天写了个让AI总结财报的提示词明天想让它分析新闻又得从头来过。更别提那些需要串联多个模型、调用外部工具比如搜索引擎、数据库、代码解释器的复杂任务了手动拼接各种API和提示模板简直是开发者的噩梦。这就是Undertone0809/promptulate这个项目诞生的背景。它不是一个简单的提示词库而是一个为构建复杂、可靠、可复用的AI智能体Agent应用而生的Python框架。你可以把它理解为一个“提示工程”的脚手架和工具箱。它的核心目标是让开发者能像搭积木一样用清晰、模块化的代码构建出功能强大的AI应用而无需深陷于与不同模型API打交道的泥潭或是重复编写脆弱的提示逻辑。简单来说Promptulate 想解决的是AI应用开发的“工程化”问题。它把那些脏活累活——模型适配、对话历史管理、工具封装、提示模板管理——都封装好了让你能专注于业务逻辑本身你告诉AI要做什么框架帮你解决怎么做。2. 核心设计哲学为什么是“框架”而非“库”在深入细节之前我们先聊聊Promptulate的设计思路。市面上有很多优秀的LLM SDK如OpenAI官方库、LangChain的LLM模块也有很多提示词管理工具。Promptulate的定位更偏向于一个轻量级、高内聚的Agent框架。它的设计哲学体现在几个关键选择上2.1 以“智能体”为中心而非以“模型调用”为中心很多库的出发点是“我给你一个函数你能方便地调用ChatGPT。” 而Promptulate的出发点是“我要构建一个能自主完成任务的智能体它需要记忆、思考、使用工具。”因此框架的核心抽象是Agent。一个Agent默认就具备了与用户对话、维持对话历史、根据需求选择是否使用工具的能力。你不需要手动维护一个消息列表也不需要写一堆if-else来判断什么时候该调用搜索。你只需要定义好这个Agent可以使用的工具Tools和它遵循的指令System Prompt框架会帮你处理复杂的决策流程。2.2 极简的接口与强大的扩展性Promptulate的API设计追求“开箱即用”的简单。创建一个使用GPT-4、具备联网搜索能力的智能体可能只需要不到10行代码。这种简洁性降低了上手门槛。但同时它的架构是高度可扩展的。无论是支持新的LLM提供商除了OpenAI它还内置或易于扩展支持Azure、智谱AI、Ollama本地模型等还是集成新的工具Calculator, WebSearch, FileReader等或是自定义复杂的提示模板、记忆后端框架都提供了清晰的接口。这意味着当你的需求从“做个聊天机器人”升级到“做一个能分析数据、写报告、发邮件的自动化助手”时Promptulate依然能支撑你。2.3 对“提示工程”的深度封装这是它最核心的价值。框架内置了PromptTemplate机制。你可以把一段复杂的、带有变量占位符的提示词比如包含指令、示例、输出格式要求定义成一个模板并给它起个名字。之后在代码中你只需要引用模板名并传入变量框架会自动渲染成完整的提示词发给模型。更重要的是框架在底层为不同的任务场景如工具调用、总结、推理预置了优化过的提示模板。当你让Agent使用工具时它并不是简单地把工具描述扔给模型而是使用一个精心设计的“工具选择”提示让模型更准确地理解在什么上下文下该调用哪个工具。这种封装把最佳实践固化在了框架里让开发者直接受益。3. 核心模块深度解析与实操要点了解了设计思路我们拆开看看Promptulate的核心部件。我会结合代码示例和实际场景说明每个模块怎么用以及为什么要这么设计。3.1 灵魂所在智能体Agent与它的“大脑”Agent类是框架的枢纽。创建一个基础Agent非常简单from promptulate.agents import ToolAgent from promptulate.tools import DuckDuckGoSearchTool, Calculator from promptulate.llms import ChatOpenAI # 1. 准备工具 tools [DuckDuckGoSearchTool(), Calculator()] # 2. 创建Agent指定模型和工具 agent ToolAgent( toolstools, llmChatOpenAI(modelgpt-4-turbo-preview, temperature0.1), system_prompt你是一个乐于助人的助手可以回答问题并使用工具。, ) # 3. 运行 response agent.run(请搜索一下特斯拉2024年第一季度的交付量是多少然后计算如果比去年同期增长20%去年同期的交付量大概是多少) print(response)这段代码做了什么工具定义我们给了Agent两个工具一个联网搜索工具DuckDuckGo一个计算器。Agent实例化创建了一个ToolAgent这是框架提供的一种常用Agent类型专为使用工具设计。我们传入了工具列表、LLM实例这里用了OpenAI的GPT-4和一个系统提示。运行我们问了一个复合问题。Agent会自主决策首先需要搜索“特斯拉2024 Q1 交付量”得到数据后再调用计算器进行增长率的反推计算。注意system_prompt是控制Agent行为的关键。你可以在这里定义它的角色、行为规范、输出格式等。一个好的系统提示能极大提升任务完成的准确率。例如对于数据分析Agent你可以要求“所有数值结论必须附上数据来源或计算过程”。Agent的内部工作流大致如下接收用户输入。结合对话历史和系统提示形成当前的“思考上下文”。关键步骤判断是否需要使用工具。如果需要则进入“工具选择”阶段模型根据当前问题和可用工具描述决定使用哪个工具或按顺序使用多个工具。执行工具调用获取工具返回的结果如搜索到的网页摘要、计算结果。将工具返回的结果作为新的上下文再次让模型生成面向用户的最终回答。 这个过程可能循环多次直到模型认为不需要再使用工具为止。3.2 力量延伸工具Tools生态工具是Agent能力的延伸。Promptulate 提供了不少开箱即用的工具DuckDuckGoSearchTool/BingSearchTool联网搜索获取实时信息。Calculator执行数学计算避免大模型“一本正经地胡说八道”数学问题。FileReaderTool读取本地文件txt, pdf, docx等内容。PythonREPLTool在安全沙箱中执行Python代码用于数据分析或复杂计算。WebBrowserTool模拟浏览器访问网页并提取主要内容。自定义工具是发挥框架威力的关键。创建一个工具非常简单你只需要继承BaseTool类定义_run方法from promptulate.tools import BaseTool from typing import Optional, Any import requests class WeatherQueryTool(BaseTool): 一个查询城市天气的自定义工具。 name: str weather_query description: str 根据城市名称查询该城市的当前天气情况。 def _run(self, city_name: str, **kwargs) - str: 工具的执行逻辑。 # 这里模拟一个API调用实际应用中请替换为真实的天气API # 例如response requests.get(fhttps://api.weather.com/v1/city/{city_name}) # 为了示例我们返回模拟数据 simulated_data { 北京: 晴15°C北风2级, 上海: 多云18°C东南风1级, 深圳: 阵雨22°C南风3级, } weather simulated_data.get(city_name, 抱歉未找到该城市的天气信息。) return f{city_name}的天气是{weather} # 使用自定义工具 from promptulate.agents import ToolAgent agent ToolAgent(tools[WeatherQueryTool()]) answer agent.run(今天北京天气怎么样) print(answer) # 输出北京的天气是晴15°C北风2级实操心得编写工具描述name和description至关重要。Agent的“大脑”LLM完全依赖这些描述来判断何时以及如何使用工具。描述应该清晰、准确说明工具的用途、输入参数和输出是什么。例如description输入一个城市名返回该城市的实时天气概况。就比简单的“查询天气”要好得多。3.3 记忆与上下文对话历史管理没有记忆的对话是徒劳的。Promptulate 的Agent自动维护着对话历史Conversation。这意味着在同一个Agent实例的多次run()调用中它能记住之前的对话内容。agent ToolAgent(llmChatOpenAI(modelgpt-3.5-turbo)) # 第一轮 response1 agent.run(我叫小明。) print(response1) # 可能回复“你好小明” # 第二轮Agent知道你在和谁说话 response2 agent.run(我刚才说我叫什么名字) print(response2) # 应该能正确回答“你刚才说你叫小明。”框架底层使用了一个MessageHistory对象来存储消息。默认情况下它使用内存存储。对于生产环境你可以将其替换为基于数据库如Redis, PostgreSQL的持久化存储以实现跨会话的记忆或用于知识库检索RAG场景。管理上下文长度大模型有上下文窗口限制。当对话轮数很多时历史记录可能会超长。Promptulate 提供了一些策略来处理例如只保留最近N轮对话或者通过LLM对历史进行总结压缩。这需要在初始化Agent或LLM时进行配置。3.4 连接核心大语言模型LLM适配层Promptulate 定义了一个统一的LLM接口 (BaseLLM)所有具体的模型提供商如OpenAI、Azure、智谱GLM、Ollama等都通过适配器实现这个接口。这带来了巨大的灵活性from promptulate.llms import ChatOpenAI, AzureChatOpenAI, QianfanLLM, Ollama # 使用OpenAI官方API llm_openai ChatOpenAI(modelgpt-4) # 使用Azure OpenAI服务 llm_azure AzureChatOpenAI( deployment_nameyour-gpt4-deployment, api_basehttps://your-resource.openai.azure.com/, api_version2024-02-15-preview ) # 使用百度千帆文心一言 llm_qianfan QianfanLLM(modelERNIE-Bot-4) # 使用本地部署的Ollama例如运行Llama2 llm_ollama Ollama(modelllama2:13b, base_urlhttp://localhost:11434) # 将不同的llm实例赋予Agent即可代码其他部分无需改动 agent ToolAgent(llmllm_ollama)这种设计让你可以轻松切换模型在开发、测试、生产环境使用不同模型只需改一行配置。实现降级策略当主模型如GPT-4额度用尽或响应慢时可以快速切换到备用模型如GPT-3.5或本地模型。降低成本将不同的任务路由到不同成本的模型上简单任务用便宜模型复杂任务用强大模型。4. 构建实战从零打造一个研究助手Agent理论说了这么多我们动手构建一个有点实用价值的Agent一个市场研究助手。它的功能是根据用户提出的公司或产品名自动搜索最新信息并生成一份结构化的简短报告。4.1 定义需求与工具集我们的Agent需要搜索信息使用联网搜索工具获取最新资讯。总结与提炼从搜索结果中提取关键信息。结构化输出按照固定格式生成报告。我们将使用以下工具DuckDuckGoSearchTool: 用于搜索。WebBrowserTool: 可选用于深入访问某个具体链接获取更详细内容。我们还需要自定义一个“报告生成”的环节这可以通过精心设计的提示模板来实现不一定需要独立工具。4.2 分步实现代码import asyncio from promptulate.agents import ToolAgent from promptulate.tools import DuckDuckGoSearchTool, WebBrowserTool from promptulate.llms import ChatOpenAI from promptulate.prompts import PromptTemplate # 第1步定义报告生成模板 report_prompt_template PromptTemplate( template 你是一名专业的市场分析师。请根据以下关于「{topic}」的搜索信息生成一份简洁的市场动态简报。 # 搜索到的信息 {search_results} # 简报要求 1. **核心动态**用1-2句话概括最新最重要的消息。 2. **关键数据**列出涉及的核心数据如市场份额、销量、股价变化等如无则注明“未发现明确数据”。 3. **可能的影响**分析该动态对行业或竞争对手的潜在影响1-2点。 4. **信息来源**提及1-2个最主要的来源。 请以Markdown格式输出确保内容客观、准确。 , input_variables[topic, search_results] ) # 第2步创建增强型Agent class ResearchAssistantAgent(ToolAgent): 专门用于市场研究的助手Agent。 async def run(self, query: str) - str: 重写run方法实现“搜索 - 总结”的流水线。 # 1. 使用搜索工具获取原始信息 print(f[助手] 正在搜索关于「{query}」的信息...) search_tool DuckDuckGoSearchTool() # 注意实际使用中可能需要更精细的搜索关键词构造 search_results await search_tool.run(query 最新 动态 2024) # 2. 可选如果搜索结果中有看起来特别相关的链接可以用浏览器工具深入抓取 # 这里为了简化我们直接使用搜索摘要 # 3. 使用LLM结合报告模板生成最终简报 print(f[助手] 信息已获取正在生成分析简报...) final_prompt report_prompt_template.format(topicquery, search_resultssearch_results) # 这里我们直接使用Agent内部的LLM来生成而不是再次触发工具循环 llm_response await self.llm.call(final_prompt) return llm_response # 第3步配置并运行Agent async def main(): llm ChatOpenAI(modelgpt-4-turbo-preview, temperature0.2) # 温度调低输出更稳定 agent ResearchAssistantAgent( llmllm, # 这个Agent本身仍然可以保留一些基础工具但我们的run方法覆盖了主要逻辑 system_prompt你是一个市场研究助手专门负责搜集和整理公开市场信息。, ) topic 新能源汽车 比亚迪 # 你可以替换成任何公司或产品 report await agent.run(topic) print(\n *50) print(f「{topic}」市场动态简报) print(*50) print(report) # 运行异步主函数 if __name__ __main__: asyncio.run(main())4.3 代码解读与优化点这个示例展示了如何超越简单的工具调用构建一个具有特定工作流的Agent继承与重写我们创建了ResearchAssistantAgent继承自ToolAgent。通过重写run方法我们接管了控制流实现了“先搜索后分析”的固定流水线而不是让模型自由决定每一步。提示模板化我们将复杂的报告生成指令写成了PromptTemplate。这比在代码中拼接字符串更清晰也更容易维护和复用。input_variables定义了模板中的占位符。直接调用LLM在流程的最后一步我们直接使用了self.llm.call()而不是再次调用agent.run()。这是因为此时任务已经明确根据模板格式化输出不需要Agent再做工具决策。这体现了对框架不同层次的灵活运用。可能的优化方向搜索优化当前的搜索关键词比较简单。可以改进为先让LLM根据query生成3-5个更精准的搜索关键词再进行并行搜索。多源验证可以配置多个搜索工具如DuckDuckGo和Bing对比结果提高信息可靠性。记忆与缓存对同一主题的重复查询可以将搜索结果缓存一段时间例如1小时避免频繁调用搜索API节省成本和时间。结构化输出要求LLM以JSON格式输出便于后续程序化处理而不仅仅是Markdown文本。5. 避坑指南与进阶技巧在实际使用Promptulate开发项目时你会遇到一些典型问题。以下是我踩过坑后总结的经验。5.1 工具调用失败描述不清与参数解析问题你定义了一个工具但Agent从来不调用它或者调用时参数传递错误。排查与解决检查工具描述这是最常见的原因。确保name简洁明了description必须清晰说明工具的功能、输入参数和输出。LLM完全靠这个描述来做决策。好的描述示例“将一个英文句子翻译成中文。输入参数sentence (str): 需要翻译的英文句子。”观察Agent的思考过程启用调试日志。Promptulate通常有日志开关可以查看Agent在每一步的“思考”LLM生成的中间文本看看它是否正确地识别了使用工具的需求以及它尝试传递给工具的参数是什么。import logging logging.basicConfig(levellogging.DEBUG) # 设置日志级别为DEBUG简化开始如果工具调用逻辑复杂先从最简单的工具如一个返回固定字符串的工具开始测试确保基础链路通畅再逐步增加复杂度。5.2 上下文管理历史过长与信息丢失问题对话进行到后面Agent似乎“忘记”了之前说过的关键信息或者响应速度变慢因为上下文太长。解决策略设置合理的max_tokens和上下文窗口在初始化LLM时明确设置max_tokens单次生成的最大长度和上下文窗口大小。确保留给历史对话的token数在合理范围。使用总结性记忆对于长对话可以实现一个自定义的MessageHistory当历史消息达到一定长度时触发一个LLM调用将早期的对话总结成一段简短的摘要然后用摘要替换掉详细的历史记录。这能保留核心信息同时大幅节省token。主动管理在系统提示中要求Agent对特别重要的信息进行确认或复述。或者在程序逻辑中定期将关键信息提取出来存储在外部变量中在需要时再以系统消息的形式重新注入。5.3 性能与成本优化问题使用GPT-4等高级模型API调用成本高且响应速度可能成为瓶颈。优化技巧模型路由实现一个智能的LLM路由层。根据任务的复杂度、对实时信息的需求、对准确性的要求动态选择不同模型。例如简单问答用gpt-3.5-turbo复杂推理用gpt-4代码生成用claude-3-sonnet。缓存对频繁出现的、结果相对固定的查询进行缓存。例如可以将(用户问题, 系统提示)的哈希值作为键将LLM的回复缓存起来设置合适的TTL。Promptulate的架构允许你在LLM调用层轻松添加缓存装饰器。异步与并发如果Agent需要调用多个独立的工具例如同时搜索三个不同的问题使用异步IO (asyncio) 来并发执行可以显著减少总体等待时间。确保你使用的工具和LLM客户端支持异步操作。精简提示词不断优化你的系统提示和工具描述去除冗余信息用最精炼的语言表达意图。每一个token都在花钱。5.4 错误处理与稳定性问题网络波动、API限流、工具执行异常等都会导致整个Agent流程失败。健壮性设计重试机制对于网络请求和API调用必须添加带有退避策略的重试逻辑如tenacity库。Promptulate的底层HTTP客户端可能已经内置了部分重试但对于关键业务自己再加一层更保险。超时设置为LLM调用和工具执行设置明确的超时时间。避免因为一个慢速的工具调用卡住整个线程。优雅降级当某个工具或模型不可用时要有备用方案。例如搜索工具失败时可以尝试从预置的知识库中查找答案或者直接告知用户“暂时无法获取实时信息以下基于我的知识进行回答...”。结构化输出要求LLM以JSON等格式输出并在代码中做好解析和验证。当LLM“胡言乱语”返回非结构化文本时程序能够捕获异常而不是崩溃。6. 从框架到生态Promptulate的定位与未来Promptulate 在AI应用开发栈中处于“应用框架”层。它比纯粹的LLM SDK如openai库更高级提供了Agent抽象和工作流管理同时又比一些极其庞大、全面的框架如LangChain更轻量、更聚焦。它的设计哲学是“够用且优雅”适合快速构建原型和中等复杂度的生产应用。它最适合的场景包括智能对话机器人需要长期记忆、工具调用查天气、订日历、搜资料的客服、娱乐、个人助手机器人。自动化工作流将重复性的、基于知识和判断的任务自动化如邮件分类与回复、内容摘要生成、数据报告初稿撰写。研究分析与信息聚合就像我们上面构建的示例自动从多源获取信息并整理成固定格式。作为更复杂系统的核心引擎你可以用Promptulate构建一个功能强大的Agent然后将其嵌入到一个Web应用、移动App或桌面软件中作为其智能大脑。学习与进阶建议从官方示例开始Clone项目仓库运行里面的examples这是最快理解框架能力的方式。深入阅读关键模块源码特别是agents/base.py,tools/base.py,llms/base.py。理解基类的设计能让你更好地进行自定义扩展。参与到社区关注项目的GitHub Issues和Discussions看看别人遇到了什么问题是如何解决的。你也可以分享自己的使用案例和自定义工具。结合其他技术Promptulate 可以很好地与FastAPI/Django构建Web服务、LangChain利用其更丰富的文档加载器和文本分割器、向量数据库实现RAG结合使用构建更强大的系统。最终Promptulate 这类框架的价值在于它把开发者从繁琐的“胶水代码”中解放出来让我们能更专注于创造AI应用本身的价值逻辑。它可能不是解决所有问题的银弹但在正确的场景下它能显著提升你的开发效率和最终应用的质量。开始用它搭建你的第一个智能体吧从让AI帮你自动回复邮件或者分析每天的行业新闻开始你会直观地感受到“提示工程”被工程化之后带来的力量。

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