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

如何借助人工智能AI模型开发一个类似OpenAI Operator的智能体实现电脑自动化操作?

这几天关于Manus的新闻铺天盖地,于是研究了一下AI智能体的实现思路,发现Openai 的OpenAI Operator智能体已经实现了很强的功能,但是每月200美金的价格高不可攀,而Manus的邀请码据说炒到了几万块!就想能不能求助人工智能,让它指导我自己写一个。把我的问题抛给了豆包、Deepseek、Claude,我的问题如下:

如何使用大语言模型API开发一个类似OpenAI Operator这样的智能体实现本地电脑自动化操作?

豆包、Deepseek虽然也给出了实现思路和程序样本,但是发现Claude的回复要专业得多,文档深度和程序结构都非常清晰,代码更容易落地执行,实在是太强悍太厉害了!所以分享出来。下面是Claude生成的回复内容和对应文档:

我可以帮你了解如何使用大语言模型API开发一个类似于OpenAI Operator的智能体,实现本地电脑自动化操作。
开发智能体自动化系统架构 要实现这样的自动化智能体,你需要构建几个关键组件:

与大语言模型的接口 本地操作系统交互层 工具集成框架 状态管理和上下文追踪 安全性控制

让我为你创建一个详细的开发指南:

LLM驱动的本地自动化智能体开发指南

系统架构概述

开发一个类似OpenAI Operator的本地自动化智能体需要几个核心组件协同工作:
希望这个指南能帮助你开始构建自己的本地自动化智能体!
用户 ↔ 界面层 ↔ 核心控制器 ↔ LLM API

工具管理器

本地系统接口 / 外部集成

1. 核心组件

1.1 LLM接口层

这一层负责与大语言模型API通信:

import anthropic  # 或其他LLM提供商的SDKclass LLMInterface:def __init__(self, api_key, model="claude-3-7-sonnet-20250219"):self.client = anthropic.Anthropic(api_key=api_key)self.model = modelself.history = []def query(self, prompt, system_prompt=None, tools=None):# 构建消息历史messages = self.history + [{"role": "user", "content": prompt}]# 添加工具定义(如果有)if tools:response = self.client.messages.create(model=self.model,messages=messages,system=system_prompt,tools=tools,tool_choice="auto")else:response = self.client.messages.create(model=self.model,messages=messages,system=system_prompt)# 更新历史self.history.append({"role": "user", "content": prompt})self.history.append({"role": "assistant", "content": response.content})return response

1.2 工具管理器

这个组件管理可用于自动化的各种工具:

class ToolManager:def __init__(self):self.tools = {}def register_tool(self, name, description, function, parameters_schema):"""注册一个新工具"""self.tools[name] = {"name": name,"description": description,"function": function,"parameters_schema": parameters_schema}def execute_tool(self, tool_name, parameters):"""执行指定工具"""if tool_name not in self.tools:return {"error": f"Tool {tool_name} not found"}try:result = self.tools[tool_name]["function"](**parameters)return {"result": result}except Exception as e:return {"error": str(e)}def get_tools_schema(self):"""返回所有工具的schema定义,用于LLM的工具调用"""return [{"type": "function","function": {"name": tool["name"],"description": tool["description"],"parameters": tool["parameters_schema"]}}for tool in self.tools.values()]

1.3 本地系统接口

这一层负责执行具体的本地系统操作:

import os
import subprocess
import pyautogui
import platform
import psutilclass SystemInterface:def __init__(self):self.os_type = platform.system()def execute_command(self, command):"""执行Shell命令"""try:result = subprocess.run(command, shell=True, capture_output=True, text=True)return {"stdout": result.stdout,"stderr": result.stderr,"return_code": result.returncode}except Exception as e:return {"error": str(e)}def list_files(self, path="."):"""列出指定目录下的文件"""try:files = os.listdir(path)return {"files": files}except Exception as e:return {"error": str(e)}def get_system_info(self):"""获取系统信息"""return {"os": self.os_type,"cpu_percent": psutil.cpu_percent(),"memory_percent": psutil.virtual_memory().percent,"disk_usage": psutil.disk_usage('/').percent}def mouse_click(self, x, y):"""模拟鼠标点击"""pyautogui.click(x, y)return {"status": "success"}def type_text(self, text):"""模拟键盘输入"""pyautogui.write(text)return {"status": "success"}def take_screenshot(self):"""截取屏幕"""screenshot = pyautogui.screenshot()path = "screenshot.png"screenshot.save(path)return {"path": path}

2. 智能体核心控制器

核心控制器协调所有组件,处理用户输入,调用LLM进行决策,并执行相应的工具:

class AgentController:def __init__(self, api_key, system_prompt=None):self.llm = LLMInterface(api_key)self.tool_manager = ToolManager()self.system = SystemInterface()self.system_prompt = system_prompt or self._default_system_prompt()# 注册基本工具self._register_default_tools()def _default_system_prompt(self):return """你是一个能够操作本地计算机的智能助手。用户会告诉你他们想完成的任务,
你需要思考如何使用可用的工具来实现这些任务。在操作前,请先分析任务并制定计划,
然后一步步执行。如果遇到问题,尝试诊断并解决。优先考虑用户数据的安全性。"""def _register_default_tools(self):"""注册默认工具"""# 执行命令工具self.tool_manager.register_tool(name="execute_command",description="在系统Shell中执行命令",function=self.system.execute_command,parameters_schema={"type": "object","properties": {"command": {"type": "string","description": "要执行的命令"}},"required": ["command"]})# 列出文件工具self.tool_manager.register_tool(name="list_files",description="列出目录中的文件",function=self.system.list_files,parameters_schema={"type": "object","properties": {"path": {"type": "string","description": "要列出文件的目录路径"}}})# 截屏工具self.tool_manager.register_tool(name="take_screenshot",description="截取当前屏幕",function=self.system.take_screenshot,parameters_schema={"type": "object","properties": {}})# 鼠标点击工具self.tool_manager.register_tool(name="mouse_click",description="在指定位置点击鼠标",function=self.system.mouse_click,parameters_schema={"type": "object","properties": {"x": {"type": "integer","description": "屏幕X坐标"},"y": {"type": "integer","description": "屏幕Y坐标"}},"required": ["x", "y"]})# 键盘输入工具self.tool_manager.register_tool(name="type_text",description="模拟键盘输入文本",function=self.system.type_text,parameters_schema={"type": "object","properties": {"text": {"type": "string","description": "要输入的文本"}},"required": ["text"]})def process_user_request(self, request):"""处理用户请求"""# 获取工具schematools_schema = self.tool_manager.get_tools_schema()# 查询LLMresponse = self.llm.query(prompt=request,system_prompt=self.system_prompt,tools=tools_schema)# 检查是否有工具调用if hasattr(response, 'tool_calls') and response.tool_calls:results = []for tool_call in response.tool_calls:tool_name = tool_call.function.nameparameters = json.loads(tool_call.function.arguments)# 执行工具result = self.tool_manager.execute_tool(tool_name, parameters)results.append({"tool": tool_name,"parameters": parameters,"result": result})# 将工具执行结果发送给LLM进行总结summary_prompt = f"我执行了你的指令,以下是结果:\n{json.dumps(results, ensure_ascii=False, indent=2)}\n请分析这些结果并给出下一步建议。"summary = self.llm.query(summary_prompt).contentreturn {"thinking": response.content,"actions": results,"summary": summary}else:# 如果没有工具调用,直接返回LLM回复return {"thinking": response.content,"actions": [],"summary": response.content}

3. 用户界面层

可以选择不同的界面实现方式:

3.1 命令行界面

class CommandLineInterface:def __init__(self, api_key):self.agent = AgentController(api_key)def run(self):print("🤖 本地自动化智能体已启动,输入'exit'退出")while True:user_input = input("\n✍️ 输入你的请求: ")if user_input.lower() == 'exit':print("👋 再见!")breakprint("\n🧠 智能体思考中...")result = self.agent.process_user_request(user_input)print("\n💭 思考过程:")print(result["thinking"])if result["actions"]:print("\n🛠️ 执行的操作:")for i, action in enumerate(result["actions"], 1):print(f"  {i}. {action['tool']}({action['parameters']})")print(f"     结果: {action['result']}")print("\n📝 总结:")print(result["summary"])# 使用示例
if __name__ == "__main__":api_key = "your_api_key_here"cli = CommandLineInterface(api_key)cli.run()

3.2 Web界面

使用Flask或Streamlit等框架可以创建简单的Web界面。

4. 高级功能扩展

4.1 视觉理解

通过集成计算机视觉模型,智能体可以理解屏幕内容:

from PIL import Image
import base64
import io
import requestsclass VisionHelper:def __init__(self, api_key):self.api_key = api_keydef analyze_screenshot(self):# 截取屏幕screenshot = pyautogui.screenshot()# 转换为base64buffered = io.BytesIO()screenshot.save(buffered, format="PNG")img_str = base64.b64encode(buffered.getvalue()).decode()# 调用视觉模型APIresponse = self._call_vision_api(img_str)return responsedef _call_vision_api(self, image_base64):# 这里使用Anthropic的Claude Vision API作为示例client = anthropic.Anthropic(api_key=self.api_key)response = client.messages.create(model="claude-3-7-sonnet-20250219",max_tokens=1000,messages=[{"role": "user","content": [{"type": "image","source": {"type": "base64","media_type": "image/png","data": image_base64}},{"type": "text","text": "描述这个屏幕上的内容,特别关注界面元素、按钮、文本和其他可交互的组件。"}]}])return response.content

4.2 工作流自动化

创建和保存常用工作流以便重复使用:

import jsonclass WorkflowManager:def __init__(self, storage_path="workflows.json"):self.storage_path = storage_pathself.workflows = self._load_workflows()def _load_workflows(self):try:with open(self.storage_path, 'r') as f:return json.load(f)except (FileNotFoundError, json.JSONDecodeError):return {}def _save_workflows(self):with open(self.storage_path, 'w') as f:json.dump(self.workflows, f, indent=2)def create_workflow(self, name, description, steps):"""创建新工作流"""self.workflows[name] = {"description": description,"steps": steps}self._save_workflows()def get_workflow(self, name):"""获取指定工作流"""return self.workflows.get(name)def execute_workflow(self, name, agent_controller):"""执行指定工作流"""workflow = self.get_workflow(name)if not workflow:return {"error": f"Workflow '{name}' not found"}results = []for step in workflow["steps"]:result = agent_controller.process_user_request(step)results.append(result)return resultsdef list_workflows(self):"""列出所有工作流"""return {name: workflow["description"] for name, workflow in self.workflows.items()}def delete_workflow(self, name):"""删除指定工作流"""if name in self.workflows:del self.workflows[name]self._save_workflows()return Truereturn False

4.3 任务规划与分解

智能体需要能够将复杂任务分解为更小的步骤,以便更好地执行:

class TaskPlanner:def __init__(self, llm_interface):self.llm = llm_interfacedef plan_task(self, task_description, available_tools):"""将复杂任务分解为步骤序列"""prompt = f"""
我需要完成以下任务: "{task_description}"可用的工具有:
{json.dumps(available_tools, indent=2)}请帮我将这个任务分解为逻辑步骤,每一步都应该可以通过使用上述工具来完成。
对于每一步,请指定:
1. 步骤描述
2. 要使用的工具
3. 该工具的参数
4. 成功标准以JSON格式返回计划:
```json
{{"task": "任务描述","steps": [{{"description": "步骤1描述","tool": "工具名称","parameters": {{参数JSON对象}},"success_criteria": "成功标准描述"}},// 更多步骤...]
}}

“”"
response = self.llm.query(prompt)
try:
# 从回复中提取JSON
import re
json_match = re.search(r’json\s*(.*?)\s*', response.content, re.DOTALL)
if json_match:
plan_json = json_match.group(1)
return json.loads(plan_json)
else:
# 尝试直接解析整个回复
return json.loads(response.content)
except json.JSONDecodeError:
return {“error”: “无法解析计划”, “raw_response”: response.content}

def execute_plan(self, plan, agent_controller):"""执行计划中的步骤"""results = []for i, step in enumerate(plan["steps"]):print(f"执行步骤 {i+1}/{len(plan['steps'])}: {step['description']}")# 执行工具调用result = agent_controller.tool_manager.execute_tool(step["tool"], step["parameters"])# 记录结果step_result = {"step": i+1,"description": step["description"],"result": result}results.append(step_result)# 检查是否成功success_prompt = f"""

我执行了步骤: “{step[‘description’]}”
结果是: {json.dumps(result, ensure_ascii=False)}

成功标准是: “{step[‘success_criteria’]}”

这个步骤是否成功完成了? 请回答 “成功” 或 “失败”, 并简要解释原因。
“”"
success_response = self.llm.query(success_prompt)
step_result[“success_evaluation”] = success_response.content

        # 如果步骤失败,可以选择停止或尝试修复if "失败" in success_response.content:fix_prompt = f"""

步骤 “{step[‘description’]}” 失败了。
结果是: {json.dumps(result, ensure_ascii=False)}

请提供一种修复或替代方案,包括:

  1. 修改后的工具选择
  2. 修改后的参数
  3. 为什么这个修改会解决问题

以JSON格式返回修复计划:

{{"tool": "工具名称","parameters": {{参数JSON对象}},"explanation": "解释"
}}

“”"
fix_response = self.llm.query(fix_prompt)
try:
json_match = re.search(r’json\s*(.*?)\s*', fix_response.content, re.DOTALL)
if json_match:
fix_plan = json.loads(json_match.group(1))
else:
fix_plan = json.loads(fix_response.content)

                # 尝试执行修复方案print(f"尝试修复: {fix_plan['explanation']}")fix_result = agent_controller.tool_manager.execute_tool(fix_plan["tool"], fix_plan["parameters"])step_result["fix_attempt"] = {"plan": fix_plan,"result": fix_result}except Exception as e:step_result["fix_attempt"] = {"error": str(e),"raw_response": fix_response.content}return results

### 4.4 安全管理为防止危险操作,实现安全检查机制:```python
class SafetyManager:def __init__(self, llm_interface):self.llm = llm_interfaceself.sensitive_operations = ["rm", "del", "format", "shutdown", "reboot", "drop", "truncate", "sudo"]def analyze_command(self, command):"""分析命令的安全性"""# 基础检查 - 检查是否包含敏感操作for op in self.sensitive_operations:if op in command.lower():return {"safe": False,"reason": f"命令包含敏感操作: {op}","needs_confirmation": True}# 使用LLM进行更深入的分析prompt = f"""
请分析以下系统命令的安全性:
"{command}"请考虑:
1. 这个命令是否会删除或修改重要文件?
2. 这个命令是否会改变系统配置?
3. 这个命令是否会影响系统运行或网络连接?
4. 这个命令是否会泄露敏感信息?以JSON格式回答:
```json
{{"safe": true或false,"reason": "详细解释为什么安全或不安全","potential_impact": "如果执行可能产生的影响","needs_confirmation": true或false
}}

“”"
response = self.llm.query(prompt)
try:
import re
json_match = re.search(r’json\s*(.*?)\s*', response.content, re.DOTALL)
if json_match:
return json.loads(json_match.group(1))
else:
return json.loads(response.content)
except json.JSONDecodeError:
# 如果解析失败,默认需要确认
return {
“safe”: False,
“reason”: “无法确定安全性,需要人工确认”,
“needs_confirmation”: True,
“raw_response”: response.content
}


## 5. 实际应用案例### 5.1 自动化文件整理```python
def setup_file_organization_agent(agent_controller):"""配置文件整理自动化智能体"""# 注册相关工具agent_controller.tool_manager.register_tool(name="analyze_directory",description="分析目录中的文件类型和数量",function=lambda path: {"file_counts": {ext: sum(1 for f in os.listdir(path) if f.endswith(ext))for ext in {os.path.splitext(f)[1] for f in os.listdir(path) if os.path.splitext(f)[1]}}},parameters_schema={"type": "object","properties": {"path": {"type": "string", "description": "要分析的目录路径"}},"required": ["path"]})agent_controller.tool_manager.register_tool(name="create_directory",description="创建新目录",function=lambda path: {"success": os.makedirs(path, exist_ok=True) or True},parameters_schema={"type": "object","properties": {"path": {"type": "string", "description": "要创建的目录路径"}},"required": ["path"]})agent_controller.tool_manager.register_tool(name="move_file",description="移动文件到指定目录",function=lambda source, destination: {"success": bool(shutil.move(source, destination)),"source": source,"destination": destination},parameters_schema={"type": "object","properties": {"source": {"type": "string", "description": "源文件路径"},"destination": {"type": "string", "description": "目标路径"}},"required": ["source", "destination"]})# 更新系统提示agent_controller.system_prompt = """你是一个专门负责文件整理的助手。你可以帮助用户:
1. 分析目录中的文件类型和数量
2. 按照文件类型、日期或其他标准创建组织结构
3. 移动文件到适当的位置
4. 重命名文件以保持一致性在执行任何文件移动或重命名操作前,请先分析目录结构并制定组织计划。
确保不会删除任何文件,只进行移动操作。
"""return agent_controller# 使用示例
if __name__ == "__main__":api_key = "your_api_key_here"agent = AgentController(api_key)file_agent = setup_file_organization_agent(agent)# 现在可以处理文件整理请求result = file_agent.process_user_request("请帮我整理下载文件夹,按文件类型分类")

5.2 自动化应用程序操作

def setup_app_automation_agent(agent_controller):"""配置应用程序自动化智能体"""# 注册应用程序特定工具agent_controller.tool_manager.register_tool(name="find_ui_element",description="在屏幕上查找UI元素",function=lambda element_image_path=None, element_text=None: {"locations": pyautogui.locateAllOnScreen(element_image_path) if element_image_path else [pyautogui.locateOnScreen(text) for text in element_text.split(',')] if element_text else []},parameters_schema={"type": "object","properties": {"element_image_path": {"type": "string", "description": "UI元素图像的路径"},"element_text": {"type": "string", "description": "要查找的UI元素文本"}}})agent_controller.tool_manager.register_tool(name="start_application",description="启动应用程序",function=lambda app_name: {"success": subprocess.Popen(app_name) is not None,"app_name": app_name},parameters_schema={"type": "object","properties": {"app_name": {"type": "string", "description": "要启动的应用程序名称或路径"}},"required": ["app_name"]})# 更新系统提示agent_controller.system_prompt = """你是一个专门负责应用程序自动化的助手。你可以帮助用户:
1. 启动应用程序
2. 在应用程序界面上找到并点击特定元素
3. 输入文本
4. 执行特定的操作序列
5. 在多个应用程序之间协调工作在执行操作前,请先确认应用程序是否已经启动,并分析当前屏幕状态。
对于不确定的操作,先尝试找到UI元素再执行点击等操作。
"""return agent_controller# 使用示例
if __name__ == "__main__":api_key = "your_api_key_here"agent = AgentController(api_key)app_agent = setup_app_automation_agent(agent)# 现在可以处理应用程序自动化请求result = app_agent.process_user_request("打开浏览器,访问google.com并搜索'Python自动化'")

6. 安全与隐私注意事项

在开发和使用本地自动化智能体时,需要考虑以下安全和隐私问题:

6.1 权限控制

  • 最小权限原则:只授予智能体完成任务所需的最小权限
  • 敏感操作确认:对删除文件、修改系统设置等操作实现二次确认机制
  • 操作日志:记录所有执行的命令和操作,便于审计和回溯

6.2 数据隐私

  • 本地处理:尽量在本地处理敏感数据,减少数据传输
  • 数据筛选:向LLM发送数据前进行筛选,移除不必要的敏感信息
  • 加密传输:确保与LLM API的通信使用加密连接

6.3 安全审查

  • 定期代码审查:检查是否存在安全漏洞或逻辑错误
  • 定期更新依赖:确保使用的库和框架没有已知安全漏洞
  • 模拟攻击测试:测试智能体是否能够抵抗恶意指令

7. 完整项目结构示例

local_automation_agent/
├── README.md
├── requirements.txt
├── src/
│   ├── __init__.py
│   ├── agent/
│   │   ├── __init__.py
│   │   ├── controller.py      # 核心控制器
│   │   ├── llm_interface.py   # LLM接口
│   │   ├── tool_manager.py    # 工具管理器
│   │   └── system_interface.py # 系统接口
│   ├── tools/
│   │   ├── __init__.py
│   │   ├── file_tools.py      # 文件操作工具
│   │   ├── system_tools.py    # 系统操作工具
│   │   ├── browser_tools.py   # 浏览器操作工具
│   │   └── ui_tools.py        # UI操作工具
│   ├── safety/
│   │   ├── __init__.py
│   │   ├── command_analyzer.py # 命令安全分析
│   │   └── permission_manager.py # 权限管理
│   ├── ui/
│   │   ├── __init__.py
│   │   ├── cli.py             # 命令行界面
│   │   └── web_app.py         # Web界面
│   └── utils/
│       ├── __init__.py
│       ├── workflow_manager.py # 工作流管理
│       └── task_planner.py    # 任务规划器
├── config/
│   ├── default_config.json    # 默认配置
│   └── tools_config.json      # 工具配置
├── examples/
│   ├── file_organization.py   # 文件整理示例
│   └── app_automation.py      # 应用程序自动化示例
└── main.py                    # 主入口

8. 安装与依赖

8.1 所需Python库

# requirements.txt
anthropic>=0.7.0  # 或其他LLM API客户端
pyautogui>=0.9.53
pillow>=9.0.0
psutil>=5.9.0
flask>=2.0.0  # 如果使用Web界面
requests>=2.27.0
pynput>=1.7.6
opencv-python>=4.5.0  # 用于高级UI元素检测
python-dotenv>=0.19.0

8.2 安装步骤

# 创建虚拟环境
python -m venv venv
source venv/bin/activate  # 在Windows上使用: venv\Scripts\activate# 安装依赖
pip install -r requirements.txt

9. 未来发展方向

9.1 增强交互能力

  • 语音接口:添加语音识别和合成,实现语音指令
  • 自然语言理解改进:优化智能体对用户意图的理解能力
  • 上下文记忆:改进对过去操作和系统状态的记忆能力

9.2 增强自主性

  • 任务学习:学习用户经常执行的操作序列
  • 错误恢复:更智能地从操作错误中恢复
  • 主动建议:基于系统状态主动提供优化建议

9.3 多平台支持

  • 跨平台兼容:同时支持Windows、macOS和Linux
  • 移动端集成:扩展到Android和iOS平台
  • 云端协作:实现本地智能体与云服务的无缝协作

10. 实际项目启动示例

# main.py
import os
import json
from dotenv import load_dotenv
from src.agent.controller import AgentController
from src.ui.cli import CommandLineInterface
from src.ui.web_app import WebInterfacedef main():# 加载环境变量load_dotenv()# 获取API密钥api_key = os.getenv("LLM_API_KEY")if not api_key:print("错误: 未设置LLM_API_KEY环境变量")return# 加载配置try:with open("config/default_config.json", "r") as f:config = json.load(f)except (FileNotFoundError, json.JSONDecodeError):print("警告: 未找到配置文件或格式错误,使用默认配置")config = {"interface": "cli", "debug": False}# 创建智能体控制器agent = AgentController(api_key)# 根据配置选择界面if config.get("interface") == "web":ui = WebInterface(agent, debug=config.get("debug", False))else:ui = CommandLineInterface(agent)# 启动界面ui.run()if __name__ == "__main__":main()

结论

通过结合大语言模型和本地自动化工具,你可以创建一个强大的智能体系统,帮助用户完成各种计算机任务。关键是构建好核心组件之间的通信机制,以及提供足够的安全保障。随着大语言模型能力的不断提升,这类智能体的应用场景将越来越广泛。

相关文章:

如何借助人工智能AI模型开发一个类似OpenAI Operator的智能体实现电脑自动化操作?

这几天关于Manus的新闻铺天盖地,于是研究了一下AI智能体的实现思路,发现Openai 的OpenAI Operator智能体已经实现了很强的功能,但是每月200美金的价格高不可攀,而Manus的邀请码据说炒到了几万块!就想能不能求助人工智能…...

langchain系列(终)- LangGraph 多智能体详解

目录 一、导读 二、概念原理 1、智能体 2、多智能体 3、智能体弊端 4、多智能体优点 5、多智能体架构 6、交接(Handoffs) 7、架构说明 (1)网络 (2)监督者 (3)监督者&…...

springboot旅游管理系统设计与实现(代码+数据库+LW)

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅游管理系统就是在这样的大环境下诞生,其可以帮助使用者在短时间内处理完毕庞大的数据信息&a…...

【前端跨域】WebSocket如何实现跨域通信?原理、实践与安全指南

在实时通信场景(如在线聊天、实时数据推送)中,WebSocket因其高效的双向通信能力成为首选技术 然而,当客户端与服务器部署在不同源时,跨域问题同样可能阻碍WebSocket的连接 一、WebSocket与跨域的关系 WebSocket的跨…...

Go红队开发—格式导出

文章目录 输出功能CSV输出CSV 转 结构体结构体 转 CSV端口扫描结果使用CSV格式导出 HTML输出Sqlite输出nmap扫描 JSONmap转json结构体转jsonjson写入文件json编解码json转结构体json转mapjson转string练习:nmap扫描结果导出json格式 输出功能 在我们使用安全工具的…...

Sharp 存在任意文件读取漏洞( DVB-2025-8923)

免责声明 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x01…...

C++数组,链表,二叉树的内存排列是什么样的,结构体占多大内存如何计算,类占多大内存如何计算,空类的空间是多少,为什么?

C数组是连续存储的,C数组元素依次存放在相邻的内存地址之中,并且内存大小相同。 C链表是离散存储的,C链表是由节点构成的,每个节点之中存在节点的值以及指向下一个节点的指针,每个节点是动态分配的。 C二叉树也是离散…...

【vLLM 教程】使用 TPU 安装

vLLM 是一款专为大语言模型推理加速而设计的框架,实现了 KV 缓存内存几乎零浪费,解决了内存管理瓶颈问题。 更多 vLLM 中文文档及教程可访问 →https://vllm.hyper.ai/ vLLM 使用 PyTorch XLA 支持 Google Cloud TPU。 依赖环境​ Google Cloud TPU …...

【RAG】基于向量检索的 RAG (BGE示例)

RAG机器人 结构体 文本向量化: 使用 BGE 模型将文档和查询编码为向量。 (BGE 是专为检索任务优化的开源 Embedding 模型,除了本文API调用,也可以通过Hugging Face 本地部署BGE 开源模型) 向量检索: 从数据库中找到与查询相关的文…...

【RAG】RAG 系统的基本搭建流程(ES关键词检索示例)

RAG 系统的基本搭建流程 搭建过程: 文档加载,并按一定条件切割成片段将切割的文本片段灌入检索引擎封装检索接口构建调用流程:Query -> 检索 -> Prompt -> LLM -> 回复 1. 文档的加载与切割 # !pip install --upgrade openai…...

PSIM积累经验

1、三极管的部署报错。 出错信息: 元件: R 名称: R2 Error: The RLC branch R2 is connected to the gate node of the switch Q1. The gate node should be connected to an On-Off Controller output. Refer to the switch Help p…...

C++之vector类(超详解)

这节我们来学习一下,C中一个重要的工具——STL,这是C中自带的一个标准库,我们可以直接调用这个库中的函数或者容器,可以使效率大大提升。这节我们介绍STL中的vector。 文章目录 前言 一、标准库类型vector 二、vector的使用 2.…...

Go学习笔记

<!-- 注意* --> 初始化工程 go mod init GoDemo 结构体&#xff0c;接口 type i struct{} type i interface{} 条件&#xff0c;选择 循环 键值对 make(map[string]int) 切片&#xff0c;集合 make([]int,10) 函数 通道 Channel make(chan int) ​ ch <- v…...

前端杂的学习笔记

什么是nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 Nginx是一款轻量级的Web 服务器/反向代理服务器&#xff0c;处理高并发能力是十分强大的&#xff0c;并且支持热部署&#xff0c;启动简单&#xff0c;可以做到7*24不间断运行 正代和反代 学习nginx&a…...

痉挛性斜颈护理:全方位呵护,重燃生活希望

痉挛性斜颈是一种以颈部肌肉不自主收缩导致头部向一侧扭转或倾斜为特征的疾病。对于痉挛性斜颈患者而言&#xff0c;科学有效的护理能够显著提升其生活质量&#xff0c;辅助病情的改善。 生活护理&#xff1a;在生活环境布置上&#xff0c;要充分考虑患者行动的便利性。确保室内…...

MySQL的安装以及数据库的基本配置

MySQL的安装及配置 MySQL的下载 选择想要安装的版本&#xff0c;点击Download下载 Mysql官网下载地址&#xff1a;​ ​https://downloads.mysql.com/archives/installer/​​ MySQL的安装 选择是自定义安装&#xff0c;所以直接选择“Custom”&#xff0c;点击“Next”​ …...

WangEditor快速实现版

WangEditor快速实现版 效果 案例代码 后端 package com.diy.springboot.controller;import cn.hutool.core.util.IdUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiImplicitParam; import org.sp…...

LeetCode Hot100刷题——反转链表(迭代+递归)

206.反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#…...

10.2 继承与多态

文章目录 继承多态 继承 继承的作用是代码复用。派生类自动获得基类的除私有成员外的一切。基类描述一般特性&#xff0c;派生类提供更丰富的属性和行为。在构造派生类时&#xff0c;其基类构造函数先被调用&#xff0c;然后是派生类构造函数。在析构时顺序刚好相反。 // 基类…...

java项目之基于ssm的智能训练管理平台(源码+文档)

项目简介 智能训练管理平台实现了以下功能&#xff1a; 系统可以提供信息显示和相应服务&#xff0c;其管理员增删改查课程信息和课程信息资料&#xff0c;审核课程信息预订订单&#xff0c;查看订单评价和评分&#xff0c;通过留言功能回复用户提问。 &#x1f495;&#x1…...

29-验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#xf…...

(57)[HGAME 2023 week1]easyasm

nss&#xff1a;3477 [HGAME 2023 week1]easyasm 关于这个题吧&#xff0c;我还是和上一个题一样&#xff0c;我观察到了异或0x33 所以我就把result的结果跟0x33异或&#xff0c;然后我就就这样&#xff0c;做出来了...

FY-3D MWRI亮温绘制

1、FY-3D MWRI介绍 风云三号气象卫星&#xff08;FY-3&#xff09;是我国自行研制的第二代极轨气象卫星&#xff0c;其有效载荷覆 盖了紫外、可见光、红外、微波等频段&#xff0c;其目标是实现全球全天候、多光谱、三维定量 探测&#xff0c;为中期数值天气预报提供卫星观测数…...

Java集合面试题

引言 Java集合框架是Java编程中不可或缺的一部分&#xff0c;它提供了一系列用于存储和操作对象的接口和类。在Java面试中&#xff0c;集合框架的相关知识往往是必考的内容。本文将汇总一系列关于Java集合的面试题&#xff0c;帮助求职者更好地准备面试。 一、Java集合框架概…...

知识蒸馏综述Knowledge Distillation: A Survey解读

论文链接&#xff1a;Knowledge Distillation: A Survey 摘要&#xff1a;近年来&#xff0c;深度神经网络在工业界和学术界都取得了成功&#xff0c;尤其是在计算机视觉任务方面。深度学习的巨大成功主要归功于它能够扩展以对大规模数据进行编码&#xff0c;并且能够处理数十…...

ES映射知识

映射 映射类似于关系型数据库的Schema&#xff08;模式&#xff09;。 映射来定义字段列和存储的类型等基础信息。 {"mappings": {"properties": {"username": {"type": "keyword","ignore_above": 256 // 忽略…...

Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实战指南

Spring Boot拦截器&#xff08;Interceptor&#xff09;与过滤器&#xff08;Filter&#xff09;深度解析&#xff1a;区别、实现与实战指南 一、核心概念对比 1. 本质区别 维度过滤器&#xff08;Filter&#xff09;拦截器&#xff08;Interceptor&#xff09;规范层级Serv…...

Debian二次开发一体化工作站:提升科研效率的智能工具

在科研领域&#xff0c;数据处理是实验成功的关键环节之一。随着实验数据的复杂性和规模不断增加&#xff0c;传统的数据处理方法已经难以满足科研人员的需求。这时&#xff0c;一体化工作站应运而生&#xff0c;成为科研实验数据处理的 “智能大脑”。 一体化工作站&#xff…...

swift-5-汇编分析闭包本质

一、枚举、结构体、类都定义方法 方法占用对象的内存么&#xff1f; 不占用 方法的本质就是函数 方法、函数都存放在代码段&#xff0c;因为方法都是公共的&#xff0c;不管 对象一还是对对象二调用都是一样的&#xff0c;所以放在代码段&#xff0c;但是每个对象的成员不一样所…...

Linux安装升级docker

Linux 安装升级docker Linux 安装升级docker背景升级停止docker服务备份原docker数据目录移除旧版本docker安装docker ce恢复数据目录启动docker参考 安装找到docker官网找到docker文档删除旧版本docker配置docker yum源参考官网继续安装docker设置开机自启配置加速测试 Linux …...

小程序事件系统 —— 33 事件传参 - data-*自定义数据

事件传参&#xff1a;在触发事件时&#xff0c;将一些数据作为参数传递给事件处理函数的过程&#xff0c;就是事件传参&#xff1b; 在微信小程序中&#xff0c;我们经常会在组件上添加一些自定义数据&#xff0c;然后在事件处理函数中获取这些自定义数据&#xff0c;从而完成…...

推荐一些免费开源支持Vue3甘特图组件

文章目录 前言一、dhtmlxGantt二、frappe-gantt三、vue-ganttastic四、gantt-elastic五、v-gantt六、vue-gantt-schedule-timeline-calendar七、vue-gantt八、总结 前言 在现代项目管理和任务调度中&#xff0c;甘特图是一种非常实用的工具。它能够直观地展示任务的时间安排、…...

Dify 本地部署教程

目录 一、下载安装包 二、修改配置 三、启动容器 四、访问 Dify 五、总结 本篇文章主要记录 Dify 本地部署过程&#xff0c;有问题欢迎交流~ 一、下载安装包 从 Github 仓库下载最新稳定版软件包&#xff0c;点击下载~&#xff0c;当然也可以克隆仓库或者从仓库里直接下…...

nlp培训重点-5

1. LoRA微调 loader&#xff1a; # -*- coding: utf-8 -*-import json import re import os import torch import numpy as np from torch.utils.data import Dataset, DataLoader from transformers import BertTokenizer """ 数据加载 """cl…...

XWiki使用war部署在tomcat9

xwiki部署 官方文档&#xff0c;比较详细。 https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/Installation/InstallationWAR/ xwiki是基于java的开源知识库&#xff0c;可以替代Confluence。有多种部署方式&#xff0c;本文使用war方式部署在tomca下&#x…...

CTA策略【量化理论】

CTA策略演变史 全称&#xff1a;Commodity Trading Advisor &#xff08;商品交易顾问&#xff09; CTA最开始是指通过为客户提供期权、期货方面的交易建议&#xff0c;或者直接通过受管理的期货账户参与实际交易&#xff0c;来获得收益的机构或个人。 随着市场的发展&#…...

旋转编码器原理与应用详解:从结构到实战 | 零基础入门STM32第四十七步

主题内容教学目的/扩展视频旋转编码器电路原理&#xff0c;跳线设置&#xff0c;结构分析。驱动程序与调用。熟悉电路和驱动程序。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 一、旋转编码器是什么&#xff1f;二、内部结构揭秘2.1 机械组件解剖2.2 核心部件说明…...

计算机视觉cv2入门之图像的读取,显示,与保存

在计算机视觉领域&#xff0c;Python的cv2库是一个不可或缺的工具&#xff0c;它提供了丰富的图像处理功能。作为OpenCV的Python接口&#xff0c;cv2使得图像处理的实现变得简单而高效。 示例图片 目录 opencv获取方式 图像基本知识 颜色空间 RGB HSV 图像格式 BMP格式 …...

基于Canvas和和原生JS实现俄罗斯方块小游戏

这里是一个完整的H5俄罗斯方块游戏&#xff0c;使用了 HTML CSS JavaScript (原生) 实现&#xff0c;支持基本的俄罗斯方块玩法&#xff0c;如&#xff1a; ✅ 方块自动下落 ✅ 方向键控制移动、旋转、加速下落 ✅ 方块堆叠、消行 ✅ 计分系统 在 canvas 上绘制游戏&#x…...

阿里云 QwQ-32B 模型调研文档

阿里云 QwQ-32B 模型调研文档 ——技术解析、部署实践与微调指南 一、模型概述 QwQ-32B 是阿里云开源的轻量化大语言模型,以 320 亿参数 实现与 DeepSeek-R1(6710 亿参数)相当的推理性能。其核心优势包括: 参数效率:1/20 参数量达成竞品性能,显存需求降低 70%部署灵活性…...

【玩转23种Java设计模式】结构型模式篇:组合模式

软件设计模式&#xff08;Design pattern&#xff09;&#xff0c;又称设计模式&#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...

Eolink:专为开发者设计的API协作平台

Eolink Apikit 是一款集 API 设计、管理、自动化测试、Mock 和异常监控于一体的全生命周期智能协作平台&#xff0c;旨在提升 API 研发和管理的效率。以下是对其功能和特点的详细介绍&#xff1a; 核心功能&#xff1a; API 设计与文档管理&#xff1a;Apikit 提供了强大的 API…...

【Python】为什么要写__init__.py

文章目录 PackageA(__init__特性)应该往__init__.py里放什么东西&#xff1f;1、包的初始化2、管理包的公共接口3、包的信息 正常我们直接导入就可以执行&#xff0c;但是在package的时候&#xff0c;有一种__init__.py的特殊存在 引入moduleA.py&#xff0c;执行main.py&…...

golang 从零单排 (一) 安装环境

1.下载安装 打开网址The Go Programming Language 直接点击下载go1.24.1.windows-amd64.msi 下载完成 直接双击下一步 下一步 安装完成 环境变量自动设置不必配置 2.验证 win r 输入cmd 打开命令行 输入go version...

30-判断子序列

给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"的一个子序列&#…...

AI 驱动的软件测试革命:从自动化到智能化的进阶之路

&#x1f680;引言&#xff1a;软件测试的智能化转型浪潮 在数字化转型加速的今天&#xff0c;软件产品的迭代速度与复杂度呈指数级增长。传统软件测试依赖人工编写用例、执行测试的模式&#xff0c;已难以应对快速交付与高质量要求的双重挑战。人工智能技术的突破为测试领域注…...

深度相机进行目标物体的空间姿态(位姿)估计

利用深度相机&#xff08;如Kinect、Intel Realsense、Zed相机等&#xff09;进行目标物体的空间姿态&#xff08;位姿&#xff09;估计&#xff0c;通常结合了3D点云处理、目标识别和位姿优化算法。以下是完整的实现流程、算法选择及注意事项&#xff1a; 一、实现流程 1. 目…...

3月8日实验

拓扑&#xff1a; 需求&#xff1a; 1.学校内部的HTTP客户端可以正常通过域名www.baidu.com访问到白度网络中的HTTP服务器 2.学校网络内部网段基于192.168.1.0/24划分&#xff0c;PC1可以正常访问3.3.3.0/24网段&#xff0c;但是PC2不允许 3.学校内部路由使用静态路由&#…...

GO语言学习笔记

一、viper笔记【七米】 https://liwenzhou.com/posts/Go/viper/ 二、优雅关机和平滑重启 https://liwenzhou.com/posts/Go/graceful-shutdown/ 三、gin使用zap https://liwenzhou.com/posts/Go/zap-in-gin/ 四、flag 用于命令行传参 https://liwenzhou.com/posts/Go/flag/ 五、…...

Autosar技术栈总目录

总目录 Autosar架构理解Autosar Mcal配置开发&#xff08;TC3xx系列 基于EB&#xff09;Autosar Mcal配置开发&#xff08;S32K3xx系列 基于EB&#xff09;Autosar BSW服务开发&#xff08;基于Davinci CFG &Dev&#xff09;Makefile编译自动化脚本 持续更新中… Autosar架…...