当前位置: 首页 > article >正文

MobileAgent:基于多模态大模型的手机UI自动化操作实践

1. 项目概述当你的手机学会“自己动手”最近在捣鼓一个挺有意思的开源项目叫X-PLUG/MobileAgent。简单来说它能让你的手机“长眼睛”和“会思考”然后自己动手去完成你交代的任务。这听起来是不是有点像科幻电影里的场景但别误会这不是一个通用的人工智能AGI而是一个专门为移动设备界面UI设计的“自动化操作代理”。想象一下这个场景你想在手机上完成“打开微信找到某个群聊把昨天拍的照片发出去再一下某人”这一系列操作。通常你需要手动点击、滑动、打字。而 MobileAgent 的目标是你只需要用自然语言比如“把照片发到家庭群并妈妈”告诉它它就能像真人一样“看”着屏幕理解每个图标、按钮是什么然后规划出一套点击、输入的操作序列并自动执行。它不依赖任何预先写死的脚本或坐标而是通过多模态大模型能同时理解图像和文字来实时感知屏幕、理解任务、并做出决策。这个项目解决的核心痛点正是移动端自动化测试和辅助操作的“最后一公里”问题。传统的自动化工具要么需要开发人员写大量的测试脚本维护成本高要么基于容易失效的屏幕坐标来点击适配性差。MobileAgent 试图用AI的感知和理解能力让自动化变得更智能、更通用。对于开发者、测试工程师甚至是追求效率的极客用户这都打开了一扇新的大门。接下来我就结合自己的实操和踩坑经验带你深入拆解这个项目。2. 核心架构与工作原理拆解要理解 MobileAgent 怎么工作我们不能只停留在“它能自动点手机”这个层面。它的核心是一套精心设计的感知-决策-执行闭环其智能程度直接取决于背后模型的能力和工程设计的巧思。2.1 多模态感知让AI“看懂”手机屏幕这是整个系统的眼睛。MobileAgent 接收的输入是一张手机屏幕的截图。如何从一张像素图片中提取出可供决策的结构化信息这里通常有两种主流路径端到端视觉语言模型VLM直接理解这是最“理想”的方式。将屏幕截图和用户指令如“发微信”一起输入给像 GPT-4V、Qwen-VL 这样的多模态大模型。模型直接输出对屏幕内容的描述比如“屏幕中央有一个绿色图标上面有两个白色对话气泡这是微信应用。下方有四个标签栏分别是‘微信’、‘通讯录’、‘发现’、‘我’。”优势无需额外标注数据利用了大模型的通用视觉理解能力对新颖、复杂的UI适配性好。挑战对模型能力要求极高推理速度慢成本高且描述可能不够精确比如无法精确定位“通讯录”标签的精确点击区域。UI元素检测 光学字符识别OCR 大模型摘要这是更工程化、也更常见的方案也是目前许多开源项目采用的路径。MobileAgent 很可能采用了类似架构第一步元素检测。使用一个训练好的目标检测模型如 YOLO、DETR识别出截图中的所有可交互或关键的UI元素如按钮Button、文本框Text Field、图标Icon、列表项ListItem等并为每个元素生成一个包围框Bounding Box。第二步文字提取。对每个检测到的元素区域或者全屏使用OCR引擎如 PaddleOCR、Tesseract识别出其中的所有文本内容。第三步信息融合与结构化。将元素的位置、类型如按钮、以及包含的文本如“登录”、“搜索”组合成一个结构化的列表。这个列表就像是给屏幕生成了一份“UI元素清单”。第四步语义理解与摘要。将这份“UI元素清单”和用户指令一同输入给一个纯文本的大语言模型LLM如 GPT-3.5、Llama 2。LLM 的任务是理解当前屏幕的上下文这是在哪个App的哪个页面并判断哪些元素与当前任务相关。注意在实际项目中为了降低对庞大VLM的依赖并提升速度方案2是更主流和可行的选择。MobileAgent 很可能集成了类似 Google 的 “Widget Captioning” 或微软的 “Screen Recognition” 技术思想先做细粒度检测再用LLM做高层推理。2.2 任务规划与动作决策AI的“大脑”拿到对屏幕的“理解”后系统需要决定“现在该点哪里”。这本质上是一个序列决策问题。任务分解LLM 首先将用户的复杂指令分解成一系列原子操作步骤。例如“发微信给张三说你好”可能被分解为[解锁屏幕] - [找到并点击微信图标] - [点击通讯录] - [在搜索框输入‘张三’] - [点击搜索结果] - [点击输入框] - [输入‘你好’] - [点击发送按钮]。动作预测针对当前屏幕和当前步骤LLM 需要预测下一个具体的动作。动作空间通常是定义好的比如CLICK(x, y) 在坐标 (x, y) 点击。CLICK(element_id) 点击某个检测到的UI元素通过其ID。INPUT(text) 向当前焦点输入框输入文本。SWIPE(start_x, start_y, end_x, end_y) 滑动。BACK() 返回。WAIT(seconds) 等待。关键在于如何将自然语言指令映射到具体的坐标或元素。LLM 可以基于屏幕的“UI元素清单”进行选择。例如当前步骤是“点击登录按钮”清单里有一个type: Button, text: ‘登录’, bounds: [100,200,300,250]的元素LLM 就可以输出动作CLICK([100,200,300,250])或CLICK(element_id_1)。规划与反思高级的Agent会具备“反思”能力。执行一个动作后它会观察屏幕变化新的截图检查任务是否朝着目标前进。如果点击后出现了错误弹窗或者页面没变化LLM 需要能识别出这个状态并重新规划或尝试替代方案比如“忘记密码”链接。2.3 动作执行AI的“手”决策出动作后需要真正在手机上执行。这里就涉及到与移动操作系统的交互。Android平台主要战场通过Android Debug Bridge (ADB)工具。ADB 可以发送模拟触摸、按键、输入文本等命令。adb shell input tap x y实现点击。adb shell input text “hello”实现输入。adb shell input swipe x1 y1 x2 y2实现滑动。MobileAgent 的核心执行器本质上是一个封装了ADB命令的客户端将LLM预测的动作转化为对应的ADB指令。iOS平台由于系统封闭性自动化通常依赖WebDriverAgent (WDA)或XCTest框架通过远程控制的方式实现配置比Android复杂得多。开源项目初期大多以Android为主。执行反馈执行动作后系统必须截取新的屏幕画面作为下一轮感知的输入从而形成闭环。整个工作流可以概括为截图 - 感知检测OCR理解- 规划/决策LLM- 执行ADB- 等待/截图 - ...循环直到任务完成或失败。3. 环境搭建与核心组件部署实操理论讲完了我们动手把它跑起来。假设我们在一台Ubuntu 20.04的开发机上操作目标控制一部安卓手机。3.1 基础环境准备首先确保你的开发机有Python环境建议3.8-3.10以及必备的系统工具。# 更新包列表并安装基础工具 sudo apt-get update sudo apt-get install -y python3-pip git curl unzip # 安装ADBAndroid Debug Bridge sudo apt-get install -y android-tools-adb # 连接你的安卓手机开启“开发者选项”和“USB调试” # 使用USB线连接手机和电脑在手机上授权调试 adb devices # 应该能看到你的设备序列号显示为 device 则连接成功3.2 模型服务部署以Ollama为例MobileAgent 依赖大语言模型LLM做决策。我们不可能每次都调用昂贵的GPT-4 API因此本地部署一个开源模型是更经济实用的选择。这里我选择Ollama它极大地简化了本地大模型的运行。# 安装Ollama curl -fsSL https://ollama.com/install.sh | sh # 启动Ollama服务 ollama serve # 默认服务在 http://localhost:11434 运行 # 拉取一个适合的模型例如 Llama 2 的7B参数版本对资源要求相对友好 ollama pull llama2:7b # 或者更小巧的 Mistral 7B # ollama pull mistral:7b实操心得模型选择是平衡速度和智能的关键。llama2:7b或mistral:7b在16GB内存的机器上可以流畅运行。如果你有GPU尤其是NVIDIA显卡Ollama会自动利用CUDA加速推理速度会快很多。可以用ollama run llama2:7b进入交互式命令行测试模型是否正常工作。3.3 获取与配置MobileAgent项目假设项目代码托管在GitHub上例如https://github.com/X-PLUG/MobileAgent。# 克隆项目代码 git clone https://github.com/X-PLUG/MobileAgent.git cd MobileAgent # 创建Python虚拟环境强烈推荐避免包冲突 python3 -m venv venv source venv/bin/activate # 安装项目依赖 # 通常项目会提供 requirements.txt pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 如果没有requirements.txt可能需要手动安装核心包 pip install opencv-python pillow paddlepaddle paddleocr requests numpy3.4 关键配置详解项目根目录下通常会有配置文件如config.yaml或config.py你需要根据你的环境进行调整。# 假设的 config.yaml 核心部分 model: llm_type: ollama # 指定使用本地Ollama服务 ollama_base_url: http://localhost:11434 ollama_model: llama2:7b # 与你pull的模型名一致 vision_model: null # 如果不使用端到端VLM此项可空 # 如果使用可能是 qwen-vl 或本地部署的视觉模型地址 ocr: engine: paddleocr # 使用PaddleOCR引擎 use_gpu: false # 根据你的环境决定CPU也能用但慢一些 device: adb_device_id: # 留空则使用adb devices找到的第一个设备如果有多个设备需要指定 screenshot_method: adb # 截图方式 default_wait_time: 2.0 # 执行动作后的默认等待时间秒 action_space: - CLICK - INPUT - SWIPE - BACK - HOME - WAIT配置要点LLM配置确保ollama_base_url和ollama_model正确。你可以用curl http://localhost:11434/api/tags查看Ollama已拉取的模型列表。OCR配置首次运行PaddleOCR时会自动下载模型文件请保持网络通畅。如果遇到下载问题可以手动从PaddleOCR的GitHub release页面下载模型文件放到指定目录。设备连接务必确保adb devices能识别到你的手机。如果遇到“device unauthorized”检查手机是否弹出了授权对话框。4. 核心代码模块分析与定制要真正用好MobileAgent不能只当黑盒。我们需要深入其核心模块了解其运作细节以便调试和定制。4.1 屏幕感知模块剖析这个模块通常位于perception/或screen_understanding/目录下。核心类可能是ScreenParser或UIParser。# 伪代码展示核心流程 class ScreenParser: def __init__(self, ocr_engine, detector_modelNone): self.ocr ocr_engine # PaddleOCR实例 self.detector detector_model # UI元素检测模型可能基于YOLO def parse(self, screenshot_image): # 1. UI元素检测如果启用 ui_elements [] if self.detector: boxes, labels self.detector.predict(screenshot_image) for box, label in zip(boxes, labels): ui_elements.append({ bbox: box, # [x1, y1, x2, y2] type: label, # Button, TextView等 }) # 2. OCR文字识别 # 可以是全屏OCR也可以只在检测到的元素区域内OCR以提升精度和速度 ocr_result self.ocr.ocr(screenshot_image, clsFalse) # ocr_result 结构: [[[[x1,y1],[x2,y2],[x3,y3],[x4,y4]], (text, confidence)], ...] # 3. 信息融合 # 将OCR得到的文字根据位置关联到对应的UI元素上。 # 这是一个关键步骤算法上可能是基于IOU交并比进行区域匹配。 for element in ui_elements: element_center get_center(element[bbox]) for text_box, (text, conf) in ocr_result: if is_point_in_box(element_center, text_box): element[text] text break # 对于没有检测到元素但OCR到文字的区域也补充为文本元素 for text_box, (text, conf) in ocr_result: if not is_text_assigned(text_box, ui_elements): ui_elements.append({ bbox: get_bbox_from_polygon(text_box), type: Text, text: text }) return ui_elements # 返回结构化的UI元素列表注意事项元素检测模型如果项目未提供预训练模型这部分可能被省略完全依赖OCR。这会降低对无文本图标按钮的识别能力。OCR精度中文环境下的OCR精度至关重要。PaddleOCR对中文支持很好但如果屏幕字体过小、背景复杂或颜色对比度低识别会出错直接影响后续决策。坐标系统注意截图分辨率如1080x2400与ADB坐标系的对应关系。所有检测框和预测的点击坐标都必须转换为与当前设备屏幕分辨率一致的坐标系。4.2 智能体决策模块剖析决策模块是大脑通常在agent/或llm_agent/目录下。核心是构建发给LLM的提示词Prompt和解析其返回结果。class LLMAgent: def __init__(self, llm_client, action_executor): self.llm llm_client self.executor action_executor self.prompt_template 你是一个手机操作自动化助手。你的目标是理解用户的指令并通过操作手机屏幕来完成它。 当前屏幕的UI元素信息如下格式类型[坐标]文本 {elements_description} 当前任务{task} 历史操作步骤{history} 请根据以上信息决定下一步操作。你只能从以下动作中选择一个 - CLICK [x, y] 或 CLICK [元素描述]点击指定坐标或与描述最匹配的元素。 - INPUT [文本]输入文本。请确保输入框已激活。 - SWIPE [x1, y1, x2, y2]从(x1,y1)滑动到(x2,y2)。 - BACK按下返回键。 - HOME按下主页键。 - WAIT [秒数]等待一段时间。 - TASK_COMPLETE如果认为任务已完成则输出此命令。 请直接输出动作命令不要有任何其他解释。 下一步动作 def predict_action(self, ui_elements, task, history): # 1. 将UI元素列表格式化成字符串描述 elements_desc [] for elem in ui_elements: desc f{elem[type]}{elem.get(bbox, [])}: {elem.get(text, )} elements_desc.append(desc) elements_str \n.join(elements_desc) # 2. 填充Prompt模板 prompt self.prompt_template.format( elements_descriptionelements_str, tasktask, historyhistory ) # 3. 调用LLM response self.llm.generate(prompt) # 假设返回是纯文本如 CLICK [500, 1200] # 4. 解析响应 action, params self._parse_response(response) return action, params核心技巧Prompt工程这是Agent智能度的关键。好的Prompt要清晰定义角色、约束、动作空间和输出格式。示例中的Prompt已经包含了任务、屏幕上下文和历史步骤这是实现多步任务的基础。历史上下文将之前的动作和屏幕变化简要纳入Prompt可以帮助LLM理解当前进度避免重复操作或进入死循环。输出解析LLM的输出可能不稳定需要健壮的解析逻辑。可以使用正则表达式或简单的字符串分割来提取动作和参数。有时LLM会“自言自语”需要过滤掉非动作文本。4.3 动作执行与状态管理执行模块在executor/目录下它负责将抽象的“CLICK [500,1200]”转化为具体的ADB命令并管理任务状态。class ADBExecutor: def execute(self, action, params): if action CLICK: x, y params subprocess.run(fadb shell input tap {x} {y}, shellTrue, checkTrue) elif action INPUT: text params.replace( , %s) # ADB input text需要转义空格 subprocess.run(fadb shell input text {text}, shellTrue, checkTrue) elif action SWIPE: x1, y1, x2, y2 params subprocess.run(fadb shell input swipe {x1} {y1} {x2} {y2} 500, shellTrue, checkTrue) # 500ms duration elif action BACK: subprocess.run(adb shell input keyevent KEYCODE_BACK, shellTrue, checkTrue) # ... 其他动作 class StateManager: def __init__(self): self.task self.history [] # 记录 (screen_info, action_taken, result) def step(self, current_screen_elements, predicted_action): # 1. 执行动作 result self.executor.execute(predicted_action) # 2. 等待界面稳定 time.sleep(self.config.default_wait_time) # 3. 获取新屏幕 new_screenshot take_screenshot_via_adb() # 4. 更新历史 self.history.append({ screen: current_screen_elements, action: predicted_action, next_screen: new_screenshot }) # 5. 检查任务是否完成可以是一个简单的规则或调用LLM判断 is_done self._check_task_completion(new_screenshot) return new_screenshot, is_done关键点等待时间default_wait_time非常重要。网络应用加载慢、动画效果等都需要时间。太短会导致在页面加载完成前就进行下一轮感知从而出错太长则降低效率。对于不同App或操作可能需要动态调整。错误处理ADB命令可能执行失败如坐标超出屏幕。执行器需要有try-catch机制并将失败信息反馈给状态管理器或Agent以便进行重试或调整策略。任务完成判定如何判断“发送微信消息”这个任务完成了可以预设一些成功条件例如在屏幕上检测到“已发送”的提示或者LLM判断当前屏幕状态已符合任务目标。这是一个开放性的难点。5. 实战演练从零实现一个“发微博”任务让我们用一个相对简单的例子串联起整个流程。目标让MobileAgent在微博App中发布一条内容为“今天天气真好测试MobileAgent”的微博。5.1 任务定义与启动我们首先需要将自然语言任务转化为系统可理解的格式。通常我们会写一个简单的启动脚本。# run_weibo_task.py import sys sys.path.append(.) from mobile_agent import MobileAgent def main(): # 初始化Agent它会加载配置、初始化感知模块、连接LLM和ADB agent MobileAgent(config_path./config.yaml) # 定义任务 user_task 打开微博App发布一条文字微博内容为‘今天天气真好测试MobileAgent’ # 启动任务 success agent.run_task(user_task) if success: print(任务成功完成) else: print(任务执行失败或中断。) if __name__ __main__: main()5.2 Agent执行流程拆解与观察运行上述脚本后我们可以通过日志或调试信息观察Agent的每一步决策。理想情况下它会初始状态手机处于主屏幕或锁屏。Agent首先截图。感知解析屏幕发现“微博”图标可能被识别为Icon[坐标]: “微博”或TextView[坐标]: “微博”。决策LLM根据任务“打开微博App”决定下一步动作CLICK [微博图标的中心坐标]。执行ADB执行点击操作。等待与再感知等待2秒后截取微博启动后的首页画面。感知模块识别出底部有“首页”、“视频”、“发现”、“消息”、“我”等标签首页上方可能有“搜索框”和“发布”按钮通常是一个“”号或铅笔图标。决策LLM知道要“发布文字微博”它需要在当前屏幕找到发布入口。它可能识别出“”按钮并决定点击。执行与循环点击“”后进入发布页面。感知到“请输入文字”的文本框和“发送”按钮。LLM决定CLICK [文本框区域]-INPUT [今天天气真好测试MobileAgent]-CLICK [发送按钮]。完成判定点击发送后页面可能跳转或出现“发送成功”提示。Agent通过检测新屏幕上是否出现“发送成功”字样或LLM判断当前上下文已离开发布页面来判定任务完成。5.3 可能遇到的问题与现场调试在实际运行中几乎不可能一帆风顺。以下是我在类似任务中遇到的典型问题及排查手段问题1Agent找不到“微博”图标。现象Agent在主屏幕反复滑动就是不去点击微博。排查检查截图和感知结果。打印出ui_elements列表看看是否真的识别到了“微博”文字。可能因为图标设计特殊OCR没有识别出“微博”二字。如果感知结果正确检查Prompt和LLM决策。将当前的屏幕元素描述和LLM收到的Prompt打印出来看LLM的回复是什么。也许LLM错误理解了指令。解决如果是OCR问题可以尝试调整OCR参数如识别语言lang‘ch’或对截图进行预处理如二值化、放大。如果是LLM问题可以优化Prompt更明确地指示“在主屏幕寻找名为‘微博’的应用图标并点击”。甚至可以加入示例Few-shot Learning。问题2点击“发布”按钮后没有弹出文字输入框而是弹出“拍摄”、“相册”等选项。现象Agent点击了“”按钮但后续操作无法进行。原因微博的“”按钮可能是一个多功能菜单点击后需要再次选择“文字”或“写微博”选项。Agent的规划能力不足没有预见到这个子菜单。解决这考验Agent的规划泛化能力。一个实用的工程解决方法是“技能Skill封装”。我们可以为“发微博”这个高频复杂任务预先编写一个子流程脚本Skill里面硬编码或小模型指导一系列固定操作点击 - 点击“文字”选项 - 等待页面加载 - 点击输入框 - 输入 - 点击发送。当主Agent遇到“发微博”任务时直接调用这个Skill而不是完全依赖LLM零样本规划。这混合了符号化和学习的方法在实践中非常有效。问题3输入文本时内容被错误输入或截断。现象输入的微博内容变成了“今tian天qi真hao”或只输入了一半。原因ADB的input text命令对某些特殊字符或中文输入法支持可能有问题。此外如果输入框未正确获得焦点文本可能输到了其他地方。解决在INPUT动作前确保有一个明确的CLICK动作点击输入框区域。对于复杂的文本可以尝试分多次输入或在输入命令中加入延迟。更可靠的方法是使用ADB的shell am broadcast或shell ime命令来设置输入法并输入但这更复杂。问题4任务陷入死循环。现象Agent在“点击返回 - 回到首页 - 点击发布 - 点击返回”之间无限循环。原因LLM缺乏对任务进度的全局记忆或者完成判定条件设置不当。解决在Prompt中加强历史动作的记忆明确告诉LLM“你刚刚已经点击过发送按钮了”。实现一个更强大的状态跟踪器当检测到重复的状态-动作对时主动中断并尝试新策略比如回退更多步。设置最大步数限制防止无限循环。6. 性能优化与进阶思考让一个Demo跑起来和让它稳定可用中间有巨大的鸿沟。以下是一些优化方向和进阶思考。6.1 速度优化截图与传输ADB截图adb exec-out screencap -p和传输到电脑存在延迟。可以考虑使用minicap等高性能屏幕流工具实现近乎实时的屏幕捕获。模型推理OCR模型轻量化使用PaddleOCR的轻量级模型如ch_ppocr_mobile_v2.0。LLM量化使用Ollama的量化模型如llama2:7b:q4_0在几乎不损失精度的情况下大幅降低内存占用和提升推理速度。缓存对于静态不变的界面区域如底部导航栏其感知结果可以缓存无需每次重复识别。并行化当Agent在“等待”界面稳定时可以并行进行下一轮的部分预处理工作。6.2 稳定性与鲁棒性提升元素定位策略不要完全依赖绝对坐标。优先使用基于元素的相对定位。例如在UI元素列表中寻找“text包含‘发送’且type为Button”的元素然后点击其包围框的中心。这比直接记忆坐标[500,1200]的适应性强得多。多模态确认在关键操作如点击“删除”按钮前可以结合多个信号确认元素文本是“删除”元素位置在右下角颜色可能是红色。这可以通过在Prompt中提供更丰富的UI属性颜色、形状或使用VLM进行二次确认来实现。异常处理与恢复超时处理任何操作后等待界面变化如果超时则触发恢复机制如点击返回、重试。弹窗处理设计一个专门的“弹窗检测与处理”模块。检测到弹窗时优先处理弹窗如点击“确定”、“取消”。断点续做保存任务执行状态当程序意外中断后可以从最近的成功步骤恢复而不是从头开始。6.3 可扩展性与技能库如前所述为常见App微信、淘宝、抖音的高频任务发送消息、搜索商品、点赞视频编写技能库Skill Library是提升实用性的关键。这些技能可以是模板化脚本针对固定流程的硬编码。强化学习微调的小模型针对特定App界面微调过的决策模型。包含详细示例的Prompt模板为特定任务精心设计的Few-shot Prompt。主Agent在接到任务时先进行任务分类如果匹配到已有技能则调用技能否则再走通用的VLM/LLM规划路径。这是一种混合智能的架构。6.4 安全与伦理考量在兴奋于技术可能性的同时必须清醒认识到自动化滥用此类技术可能被用于自动刷量、点赞、发布垃圾信息等违反平台规则。隐私风险Agent需要截取屏幕可能接触到用户的敏感信息。所有处理应在本地进行数据不应上传。技术边界它不是一个真正的智能体无法理解复杂语义如“把最有趣的那张照片发出去”。它的能力严格受限于其感知和规划模型。因此MobileAgent及相关技术更应被定位为生产力工具用于自动化测试、无障碍辅助、个人工作流自动化等正面场景。开发和使用者都应秉持负责任的态度。这个项目为我们展示了多模态大模型与具身智能Embodied AI在移动端落地的具体路径。从环境搭建、原理剖析到实战调试整个过程充满了工程挑战和解决问题的乐趣。它离真正的“全自动手机管家”还有很远但已经是一个足够强大的原型和实验平台。

相关文章:

MobileAgent:基于多模态大模型的手机UI自动化操作实践

1. 项目概述:当你的手机学会“自己动手”最近在捣鼓一个挺有意思的开源项目,叫X-PLUG/MobileAgent。简单来说,它能让你的手机“长眼睛”和“会思考”,然后自己动手去完成你交代的任务。这听起来是不是有点像科幻电影里的场景&…...

从零开始开发Google Drive CLI Client自定义命令:完整实践指南

从零开始开发Google Drive CLI Client自定义命令:完整实践指南 【免费下载链接】gdrive Google Drive CLI Client 项目地址: https://gitcode.com/gh_mirrors/gd/gdrive Google Drive CLI Client(gd/gdrive)是一款功能强大的命令行工具…...

掌握Go策略模式:golang-design-pattern中的终极算法动态切换指南

掌握Go策略模式:golang-design-pattern中的终极算法动态切换指南 【免费下载链接】golang-design-pattern 设计模式 Golang实现-《研磨设计模式》读书笔记 项目地址: https://gitcode.com/gh_mirrors/go/golang-design-pattern 在软件开发中&…...

5分钟实现智慧树视频自动播放:学生党必备的刷课神器终极指南

5分钟实现智慧树视频自动播放:学生党必备的刷课神器终极指南 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台繁琐的视频学习而烦恼吗&…...

终极指南:Exposed连接参数调优从连接超时到查询超时的完整解决方案

终极指南:Exposed连接参数调优从连接超时到查询超时的完整解决方案 【免费下载链接】Exposed Kotlin SQL Framework 项目地址: https://gitcode.com/gh_mirrors/ex/Exposed Exposed作为一款强大的Kotlin SQL框架,其连接参数的优化直接影响应用性能…...

AI Agent开发核心技术解析:ReAct、CoT与Tool Use深度剖析

上一篇我们用Coze零代码搭了一个Agent。但如果你想真正理解AI Agent的工作原理,或者想用代码开发更强大的Agent,就必须掌握这三大核心技术:ReAct、Chain-of-Thought和Tool Use。今天,我们把黑盒打开。 一、为什么需要这些技术? 1.1 大模型的原生局限 大语言模型(LLM)很…...

3大智能突破:重新定义百度网盘下载体验

3大智能突破:重新定义百度网盘下载体验 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否曾在深夜急需下载一份重要文件,却因百度网盘的限速而焦虑…...

Blender3mfFormat终极指南:在Blender中完美处理3D打印文件

Blender3mfFormat终极指南:在Blender中完美处理3D打印文件 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 还在为3D打印文件格式转换而烦恼吗?Ble…...

2024终极指南:如何选择开源疫情监测系统?10款顶尖工具深度对比

2024终极指南:如何选择开源疫情监测系统?10款顶尖工具深度对比 【免费下载链接】awesome-healthcare Curated list of awesome open source healthcare software, libraries, tools and resources. 项目地址: https://gitcode.com/GitHub_Trending/aw/…...

jless YAML文件支持的终极指南:自动检测与手动指定格式的完整教程

jless YAML文件支持的终极指南:自动检测与手动指定格式的完整教程 【免费下载链接】jless jless is a command-line JSON viewer designed for reading, exploring, and searching through JSON data. 项目地址: https://gitcode.com/gh_mirrors/jl/jless jl…...

C++ 位运算(Bitwise Operations)全解

C 位运算&#xff08;Bitwise Operations&#xff09;全解主题要点示例位运算符& ^ ~ << >>为什么要学位运算&#xff1f;速度快&#xff08;直接映射到 CPU 指令&#xff09;代码简洁&#xff08;掩码常常减少 loops&#xff09;低级硬件控制&#xff08;配合…...

VBA-JSON实战宝典:解锁Excel数据处理的无限可能

VBA-JSON实战宝典&#xff1a;解锁Excel数据处理的无限可能 【免费下载链接】VBA-JSON JSON conversion and parsing for VBA 项目地址: https://gitcode.com/gh_mirrors/vb/VBA-JSON VBA-JSON是一款强大的JSON转换与解析工具&#xff0c;专为VBA&#xff08;Windows和M…...

如何高效使用Python工具实现百度网盘真实下载地址解析

如何高效使用Python工具实现百度网盘真实下载地址解析 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 百度网盘解析工具是一款基于Python开发的实用工具&#xff0c;专门用于提…...

Python逆向工程实战:如何绕过百度网盘限制获取真实下载地址

Python逆向工程实战&#xff1a;如何绕过百度网盘限制获取真实下载地址 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在当今数据驱动的时代&#xff0c;百度网盘作为国内最大…...

Spring AI MCP服务如何选择使用 WebMVC还是WebFlux

在 Spring AI MCP 服务中选择使用 WebMVC 还是 WebFlux&#xff0c;主要取决于你项目的技术栈和性能需求。 简单来说&#xff0c;如果你的项目是传统的 Spring MVC 应用&#xff0c;就选 WebMVC&#xff1b;如果是响应式编程项目或需要处理高并发&#xff0c;就选 WebFlux。 下…...

离线完成上下位机时间同步(硬PTP和软NTP)

一、需求为了满足业务软件正常运行&#xff0c;需要配置时间同步一般的场景分为以下几种1、无时同设备需要对Linux系统之间进行软同步2、有时同设备需要对Linux系统之间进行硬同步3、无时同设备需要对Windows和Linux系统之间进行软同步4、有时同设备需要对Windows和Linux系统之…...

神经网络学习率调优指南与实战技巧

1. 学习率对神经网络性能的影响概述在训练神经网络时&#xff0c;学习率(Learning Rate)可能是最关键的单一超参数。它决定了每次参数更新的步长大小&#xff0c;直接影响着模型收敛的速度和质量。想象一下你在下山&#xff1a;学习率就像你每一步迈出的距离 - 步子太大可能越过…...

Phi-4-mini-flash-reasoning部署指南:Web工作台一键启用长文本推理

Phi-4-mini-flash-reasoning部署指南&#xff1a;Web工作台一键启用长文本推理 1. 模型介绍 Phi-4-mini-flash-reasoning 是一款专为复杂推理任务优化的轻量级文本模型&#xff0c;特别适合需要多步思考和分析的场景。不同于常规的文本生成模型&#xff0c;它更擅长&#xff…...

Casdoor开源身份认证平台:基于OAuth 2.0/OIDC的统一登录解决方案

1. 项目概述&#xff1a;一个开源的统一身份认证与单点登录平台如果你正在为一个新项目搭建用户系统&#xff0c;或者正在为手头一堆各自为政的应用&#xff08;比如内部的OA、CRM、知识库&#xff09;如何统一登录而头疼&#xff0c;那么你很可能需要了解Casdoor。简单来说&am…...

FastAPI部署机器学习模型:实战指南与性能优化

1. 机器学习模型部署实战&#xff1a;基于FastAPI的完整指南作为一名长期奋战在机器学习一线的工程师&#xff0c;我深知模型部署是许多同行最头疼的环节。今天我将分享一个经过生产验证的解决方案——使用FastAPI构建轻量级预测API。这个方案已经支撑了我们团队80%的中小型模型…...

平板电脑Linux内核显示配置实战:绕过HDMI探测,手动指定DP-1接口与分辨率

平板电脑Linux内核显示配置实战&#xff1a;绕过HDMI探测&#xff0c;手动指定DP-1接口与分辨率 在嵌入式设备开发中&#xff0c;显示配置往往是工程师面临的第一个挑战。不同于标准PC环境&#xff0c;平板电脑、工控设备等定制化硬件通常采用固定连接的显示屏&#xff0c;缺乏…...

别再折腾VCS破解了!用Iverilog+GTKWave在Ubuntu 20.04上快速搭建数字电路仿真环境

开源数字电路仿真指南&#xff1a;Iverilog与GTKWave高效工作流搭建 在数字电路设计与验证领域&#xff0c;商业EDA工具虽然功能强大&#xff0c;但其复杂的安装流程、高昂的授权费用和苛刻的运行环境要求常常让初学者望而却步。对于高校学生、硬件爱好者和初创团队而言&#x…...

告别虚拟机!在Win10上原生运行ROS Melodic/Foxy的保姆级配置指南(含VS2022适配)

在Windows 10上原生运行ROS Melodic/Foxy的终极指南&#xff08;VS2022适配版&#xff09; 对于机器人开发者而言&#xff0c;长期依赖虚拟机运行ROS不仅消耗系统资源&#xff0c;还会导致开发效率低下。本文将彻底解决这一痛点&#xff0c;手把手教你如何在Windows 10上原生配…...

ToolEmu:用LLM模拟工具测试AI代理安全性的框架解析与实践

1. 项目概述&#xff1a;用大语言模型“模拟”工具&#xff0c;提前发现AI代理的风险如果你正在开发或者使用基于大语言模型的智能代理&#xff0c;比如让GPT-4去调用搜索引擎、操作数据库、发送邮件&#xff0c;那你一定思考过这个问题&#xff1a;我怎么知道它不会捅出大篓子…...

WeDLM-7B-Base开源大模型教程:Diffusion LM与AR模型本质差异

WeDLM-7B-Base开源大模型教程&#xff1a;Diffusion LM与AR模型本质差异 1. 认识WeDLM-7B-Base模型 WeDLM-7B-Base是一款基于扩散机制&#xff08;Diffusion&#xff09;的70亿参数高性能语言模型。与传统的自回归&#xff08;AR&#xff09;模型不同&#xff0c;它采用创新的…...

从‘相似用户挖掘’实战出发:手把手教你用Faiss构建你的第一个向量检索系统

从‘相似用户挖掘’实战出发&#xff1a;手把手教你用Faiss构建你的第一个向量检索系统 在推荐系统和精准营销领域&#xff0c;寻找相似用户&#xff08;Look-alike&#xff09;是一项基础但关键的任务。想象一下&#xff0c;你手头有一批高价值用户&#xff0c;如何快速找到与…...

WeDLM-7B-Base一文详解:32K上下文扩散语言模型的推理加速与精度平衡

WeDLM-7B-Base一文详解&#xff1a;32K上下文扩散语言模型的推理加速与精度平衡 1. 模型概述 WeDLM-7B-Base是一款基于扩散机制&#xff08;Diffusion&#xff09;的高性能基座语言模型&#xff0c;拥有70亿参数规模。作为新一代语言模型的代表&#xff0c;它采用了创新的并行…...

LeaguePrank完整教程:安全修改英雄联盟段位显示的终极指南

LeaguePrank完整教程&#xff1a;安全修改英雄联盟段位显示的终极指南 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 你是否厌倦了英雄联盟客户端一成不变的段位显示&#xff1f;想要在朋友面前展示独特的个人资料页面&#…...

LM多风格生成探索:写实/时尚/角色/服饰四大方向提示词模板库

LM多风格生成探索&#xff1a;写实/时尚/角色/服饰四大方向提示词模板库 1. 平台介绍与特点 LM是基于Tongyi-MAI / Z-Image底座的文生图镜像&#xff0c;专为高质量图像生成而设计。这个开箱即用的解决方案已经完成了模型预加载和Web页面封装&#xff0c;用户无需编写任何代码…...

匝道合流控制序列优化及控制算法的三种对比场景

匝道合流控制序列优化控制算法&#xff1a; 总共包括三个对比函数&#xff1a; 匝道无控制场景&#xff1a;不对车辆将进行任何控制&#xff0c;由sumo自带算法运行 匝道序列采用先入先出控制采用最优控制&#xff08;哈密顿&#xff09;场景 匝道序列采用蒙特卡洛算法进行优化…...