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

本地部署 OpenManus 保姆级教程(Windows 版)

一、环境搭建

我的电脑是Windows 10版本,其他的没尝试,如果大家系统和我的不一致,请自行判断,基本上没什么大的出入啊。
openManus的Git地址:https://github.com/mannaandpoem/OpenManus
根据官网的两种安装推荐方式如下:
在这里插入图片描述
这里我使用第一只方式,虽然推荐了使用UV,但是我使用过,就不用第二种方式。

二、Anaconda下载

我电脑上没有安装:Anaconda,那就一并安装一下吧
这里推荐两种下载方式一是官网下载,二是镜像下载;官网下载太慢可选用镜像下载。

官网下载:https://www.anaconda.com/products/distribution
在这里插入图片描述
镜像下载:https://mirrors.bfsu.edu.cn/anaconda/archive/
在这里插入图片描述
我这里选择了Anaconda3-5.3.1-Windows-x86_64.exe这个镜像版本,大家随意啊。
具体Anaconda如何安装的,大家自行搜索啊,这里就不赘述了。

三、核心组件安装

为了方便不知道如何安装的,我也偷懒一下,也是直接使用deepseek帮我搞一下:
在这里插入图片描述

https://github.com/mannaandpoem/OpenManus
我在学习如何使用open-manus,但是下面的安装步骤,是在linux中运行的,我的电脑是window10 ,请把下面的操作步骤换成windows10中的步骤,让我一目了然
使用 conda
创建一个新的 conda 环境:
conda create -n open_manus python=3.12
conda activate open_manus
克隆存储库:
git clone https://github.com/mannaandpoem/OpenManus.git
cd OpenManus
安装依赖项:
pip install -r requirements.txt

为了方便大家快速搭建,直接贴了我的提示词,运行结果如下:

以下是为 Windows 10 系统适配的详细步骤(使用 Anaconda):1. 安装前置工具
- 确保已安装 [Git for Windows](https://git-scm.com/download/win)
- 确保已安装 [Miniconda 或 Anaconda](https://docs.conda.io/en/latest/miniconda.html)2. 打开 Anaconda Prompt(推荐)或 PowerShell3. 创建 conda 环境
```powershell
conda create -n open_manus python=3.12 -y
conda activate open_manus
  1. 克隆仓库
git clone https://github.com/mannaandpoem/OpenManus.git
cd OpenManus
  1. 安装依赖
pip install -r requirements.txt

常见问题解决方案:

  1. 如果遇到环境激活问题:

    • 在 PowerShell 中首次使用需执行:conda init powershell
    • 关闭后重新打开终端
  2. 如果缺少 C++ 编译工具(安装某些包时报错):
    安装 Microsoft C++ Build Tools

  3. 如果 Python 3.12 不可用:

    conda create -n open_manus python=3.11
    
  4. 替代克隆方式(如果 git 不可用):
    直接下载 ZIP:https://github.com/mannaandpoem/OpenManus/archive/refs/heads/main.zip
    解压后进入目录执行后续步骤

至此已经本地已经安装完毕了。

四、服务配置与连接

在这里插入图片描述
找到Config文件夹,进去,重新复制一份config.toml文件
在这里插入图片描述
这里替换config文件配置:

# Global LLM configuration
[llm]
model = "Qwen/QwQ-32B" 
base_url = "https://api.siliconflow.cn/v1"
api_key = "这里写你自己的Key"
max_tokens = 16384
temperature = 0.6# Optional configuration for specific LLM models
[llm.vision]
model = "Qwen/Qwen2-VL-72B-Instruct" 
base_url = "https://api.siliconflow.cn/v1"
api_key = "这里写你自己的Key"

这里我使用的硅基流动Key,他们家刚好有活动,注册就送你2000万Tokens,我们这边测试用,完全够了,薅羊毛地址是:https://cloud.siliconflow.cn/i/pCa1dBVX
大家有其他的Key,也是可以用,随自己的意愿。

配置完毕之后,接下来就是运行main.py
在这里插入图片描述
至此,流程基本已经开始跑起来了。

五、前端页面

由于是控制台我不喜欢,然后我又用deepseek帮我制作了html页面,便于我页面处理:
在这里插入图片描述
这里就写了2个文件
在这里插入图片描述
在这里插入图片描述

主要两个文件:app.py和templates/index.html
两个文件的详细代码如下:
app.py:

from flask import Flask, Response, request, jsonify, render_template
from flask_cors import CORS
import subprocess
import sys
import os
import signal
import threadingapp = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "*"}})# 进程管理
process_lock = threading.Lock()
current_process = None@app.route('/')
def index():return render_template('index.html')@app.route('/stream', methods=['GET', 'POST', 'OPTIONS'])
def stream_execute():global current_process# 处理预检请求if request.method == 'OPTIONS':return _build_preflight_response()# 获取输入内容idea = request.json.get('idea', '') if request.method == 'POST' else request.args.get('idea', '')if not idea:return Response("data: 错误:未提供输入\n\n", mimetype='text/event-stream')# 终止已有进程with process_lock:if current_process and current_process.poll() is None:current_process.terminate()# 启动新进程current_process = subprocess.Popen([sys.executable, '-u', 'main.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,text=True,bufsize=1,universal_newlines=True,creationflags=subprocess.CREATE_NEW_PROCESS_GROUP if os.name == 'nt' else 0)# 发送输入current_process.stdin.write(idea + '\n')current_process.stdin.flush()# 流式响应def generate():while True:line = current_process.stdout.readline()if not line:if current_process.poll() is not None:breakcontinueyield f"data: {line}\n\n"yield "event: end\ndata: \n\n"return Response(generate(),mimetype='text/event-stream',headers={'Access-Control-Allow-Origin': '*','Cache-Control': 'no-cache','X-Accel-Buffering': 'no'})def _build_preflight_response():response = jsonify({'status': 'ok'})response.headers.add("Access-Control-Allow-Origin", "*")response.headers.add("Access-Control-Allow-Headers", "*")response.headers.add("Access-Control-Allow-Methods", "*")return response@app.route('/stop', methods=['POST'])
def stop_execution():global current_processwith process_lock:if current_process and current_process.poll() is None:current_process.terminate()return jsonify({'status': 'stopped'})return jsonify({'status': 'not running'}), 404@app.after_request
def add_cors_headers(response):response.headers['Access-Control-Allow-Origin'] = '*'response.headers['Access-Control-Allow-Headers'] = 'Content-Type'response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS'return responseif __name__ == '__main__':app.run(port=5000, threaded=True)

index.html的页面代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>OpenManus 实时控制台</title><link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet"><style>#output {background: #1e1e1e;color: #d4d4d4;padding: 20px;border-radius: 5px;font-family: 'Consolas', monospace;height: 60vh;overflow-y: auto;white-space: pre-wrap;}.log-item {margin: 5px 0;padding: 3px 10px;border-left: 3px solid #3c3c3c;}.loading {position: fixed;top: 20px;right: 20px;display: none;}</style>
</head>
<body><div class="container py-5"><h1 class="text-primary mb-4">🚀 OpenManus 实时控制台</h1><div class="mb-4"><textarea id="ideaInput" class="form-control bg-dark text-light" rows="4" placeholder="输入您的创意(示例:分析特斯拉最近三个月的股价趋势并生成可视化报告)"></textarea></div><div class="d-flex gap-2 mb-4"><button class="btn btn-success" onclick="startExecution()">开始执行</button><button class="btn btn-danger" onclick="stopExecution()">终止任务</button></div><div class="card bg-dark"><div class="card-header text-light">实时输出</div><div id="output" class="card-body"></div></div><div id="loading" class="loading"><div class="spinner-border text-primary" role="status"><span class="visually-hidden">加载中...</span></div></div></div><script>let eventSource = null;function showLoading() {document.getElementById('loading').style.display = 'block';}function hideLoading() {document.getElementById('loading').style.display = 'none';}function clearOutput() {document.getElementById('output').innerHTML = '';}function showError(message) {const output = document.getElementById('output');output.innerHTML += `<div class="text-danger">${message}</div>`;}function ansiToHtml(text) {return text.replace(/\x1B\[32m/g, '<span class="text-success">').replace(/\x1B\[31m/g, '<span class="text-danger">').replace(/\x1B\[0m/g, '</span>');}function startExecution() {const idea = document.getElementById('ideaInput').value.trim();if (!idea) return alert('请输入执行内容');clearOutput();showLoading();// 先发送POST请求fetch('http://localhost:5000/stream', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({ idea: idea })}).then(response => {if (!response.ok) {throw new Error(`HTTP错误 ${response.status}`);}// 建立SSE连接eventSource = new EventSource(`http://localhost:5000/stream?idea=${encodeURIComponent(idea)}`);eventSource.onmessage = (e) => {const formatted = ansiToHtml(e.data);document.getElementById('output').innerHTML += `<div class="log-item">${formatted}</div>`;// 自动滚动const output = document.getElementById('output');output.scrollTop = output.scrollHeight;};eventSource.onerror = (e) => {console.error('SSE Error:', e);hideLoading();eventSource.close();};eventSource.addEventListener('end', () => {hideLoading();eventSource.close();});}).catch(error => {hideLoading();showError(`请求失败: ${error.message}`);});}function stopExecution() {if (eventSource) {eventSource.close();hideLoading();}fetch('http://localhost:5000/stop', {method: 'POST'}).then(response => {if (response.ok) {alert('已终止执行');}});}// 清理资源window.addEventListener('beforeunload', () => {if (eventSource) eventSource.close();fetch('/stop', { method: 'POST' });});</script>
</body>
</html>

启动服务:
在这里插入图片描述
再打开一个powershell
在这里插入图片描述
启动服务,至此页面完成:浏览器直接访问:http://localhost:5000/
在这里插入图片描述
openmanus会按照步骤给你执行,自动处理,解放双手吧。
在这里插入图片描述

至此基本上就完成了。
我本地也是刚跑出来,大家遇到什么问题,欢迎可以互相套路。

相关文章:

本地部署 OpenManus 保姆级教程(Windows 版)

一、环境搭建 我的电脑是Windows 10版本&#xff0c;其他的没尝试&#xff0c;如果大家系统和我的不一致&#xff0c;请自行判断&#xff0c;基本上没什么大的出入啊。 openManus的Git地址&#xff1a;https://github.com/mannaandpoem/OpenManus 根据官网的两种安装推荐方式如…...

【Pandas】pandas Series compare

# Pandas2.2 Series ## Computations descriptive stats |方法|描述| |-|:-------| |Series.compare(other[, align_axis, ...])|用于比较两个 Series| ### pandas.Series.compare pandas.Series.compare 方法用于比较两个 Series&#xff0c;并返回一个包含差异的 DataFram…...

基于DeepSeek的智慧医药系统(源码+部署教程)

运行环境 智慧医药系统运行环境如下&#xff1a; 前端&#xff1a; HTMLCSS后端&#xff1a;Java AIGCDeepseekIDE工具&#xff1a;IDEA技术栈&#xff1a;Springboot HTMLCSS MySQL 主要角色 智慧医药系统主要分为两个角色。 游客 尚未进行注册和登录。具备登录注册、…...

如何为服务设置合理的线程数

1. 首先&#xff0c;要确定最大线程数的限制因素。通常&#xff0c;线程数量受限于内存、CPU和操作系统限制。比如&#xff0c;每个线程都需要一定的栈内存&#xff0c;默认情况下Java线程的栈大小是1MB&#xff08;64位系统可能更大&#xff09;&#xff0c;所以如果内存不足&…...

Unity--Cubism Live2D模型使用

了解LIVE2D在unity的使用--前提记录 了解各个组件的作用 Live2D Manuals & Tutorials 这些文件都是重要的控制动画参数的 Cubism Editor是编辑Live2D的工具&#xff0c;而导出的数据的类型&#xff0c;需要满足以上的条件 SDK中包含的Cubism的Importer会自动生成一个Pref…...

Vue.js 3 的设计思路:从声明式UI到高效渲染机制

目录 一、声明式UI与虚拟DOM的灵活性 二、渲染器&#xff1a;虚拟DOM到真实DOM的桥梁 三、组件的本质与实现 四、编译与运行时的协同优化 五、性能与可维护性的权衡 总结 Vue.js 3 作为新一代前端框架&#xff0c;其设计理念在声明式UI描述、虚拟DOM优化、组件化架构…...

部署前后端项目

部署项目 liunx 软件安装 软件安装方式 在Linux系统中&#xff0c;安装软件的方式主要有四种&#xff0c;这四种安装方式的特点如下&#xff1a; 建议nginx、MySQL、Redis等等使用docker安装&#xff0c;会很便捷&#xff0c;这里只演示JDK、ngxin手动的安装 安装JDK 上述我…...

Vue Diff算法原理深度解析:如何高效更新虚拟DOM?

文章目录 1. 为什么需要Diff算法&#xff1f;2. Diff算法核心原则3. 核心流程图解4. 核心代码实现&#xff08;简化版&#xff09;5. Key的重要性示例6. 算法优化策略7. 时间复杂度优化8. 与其他框架的对比9. 总结 1. 为什么需要Diff算法&#xff1f; 在Vue的响应式系统中&…...

Dify平台部署记录

安装dify项目 官网地址&#xff1a;http://difyai.com/ github地址&#xff1a;https://github.com/langgenius/dify 下载项目&#xff1a; git clone https://github.com/langgenius/dify.git下载过慢&#xff0c;直接访问网页下载zip压缩包&#xff1a; 解压&#xff0c;…...

ArcGIS Pro中字段的新建方法与应用

一、引言 在地理信息系统&#xff08;GIS&#xff09;的数据管理和分析过程中&#xff0c;字段操作起着至关重要的作用。 无论是进行地图制作、空间分析还是数据统计&#xff0c;字段都是承载属性信息的基本单元。 ArcGIS Pro作为一款功能强大的GIS软件&#xff0c;为用户提…...

Git 的基本概念和使用方式。

Git 是一种分布式版本控制系统&#xff0c;用于跟踪文件和目录的变化。Git 的基本概念和使用方式如下&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git 仓库是用来存储项目文件和历史记录的地方。一个 Git 仓库包含项目的文件、版本记录和配置信息。 提交…...

贪心算法--

1.柠檬水找零 link:860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; code class Solution { public:bool lemonadeChange(vector<int>& bills) {// 贪心算法&#xff0c; 优先花出大面额bill&#xff0c; 尽可能保护小面额billint five 0, ten 0;// 不…...

mysql下载与安装、关系数据库和表的创建

一、mysql下载&#xff1a; MySQL获取&#xff1a; 官网&#xff1a;www.mysql.com 也可以从Oracle官方进入&#xff1a;https://www.oracle.com/ 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 选择对应的版本和对应的操作系统&a…...

万字技术指南STM32F103C8T6 + ESP8266-01 连接 OneNet 平台 MQTT/HTTP

此博客为一份详细的指南&#xff0c;涵盖 STM32F103C8T6 通过 ESP8266-01 连接 OneNet 平台&#xff0c;并使用 MQTT/HTTP 进行数据通信的完整流程。这份文档包括&#xff1a; OneNet 平台的介绍与功能概览在 OneNet 上创建和配置设备的方法STM32CubeIDE 的开发环境搭建ESP826…...

MWC 2025 | 紫光展锐联合移远通信推出全面支持R16特性的5G模组RG620UA-EU

2025年世界移动通信大会&#xff08;MWC 2025&#xff09;期间&#xff0c;紫光展锐联合移远通信&#xff0c;正式发布了全面支持5G R16特性的模组RG620UA-EU&#xff0c;以强大的灵活性和便捷性赋能产业。 展锐芯加持&#xff0c;关键性能优异 RG620UA-EU模组基于紫光展锐V62…...

PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)!

PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程&#xff08;通用&#xff09;&#xff01; 当我们成功接入大模型时&#xff0c;可以选中任意代码区域进行解答&#xff0c;共分为三个区域&#xff0c;分别是选中区域、提问区域以及回答区域&#xff0c;我…...

小智智能体语言大模型硬件软件开发

硬件可以参考ESP32-AI语音助手 - 立创开源硬件平台 单片机使用esp32s3&#xff0c;可以直接替换&#xff0c;但是引脚IO有变化&#xff0c;而且esp32s3 io35 36 37不能用&#xff0c;所以得飞一条线&#xff0c;原先接在io35的飞到io4上。如果不飞线的话系统一直重启 软件使用…...

网络tcp协议设置,网络tcp协议设置不了

网络TCP协议的设置通常涉及到多个方面&#xff0c;包括IP地址、子网掩码、默认网关、DNS服务器等参数的配置&#xff0c;以及TCP/IP协议栈本身的配置。如果遇到网络TCP协议设置不了的问题&#xff0c;可能是由多种原因导致的。以下是一些可能的原因及解决方法&#xff1a; 一、…...

配置Hadoop集群

Hadoop的运行模式 本地运行&#xff1a;在一台单机上运行&#xff0c;没有分布式文件系统&#xff0c;直接读写本地操作系统的文件系统。特点&#xff1a;不对配置文件进行修改&#xff0c;Hadoop 不会启动 伪分布式&#xff1a;也是在一台单机上运行&#xff0c;但用不同的 …...

模型微调-基于LLaMA-Factory进行微调的一个简单案例

模型微调-基于LLaMA-Factory进行微调的一个简单案例 1. 租用云计算资源2. 拉取 LLaMa-Factory3. 安装依赖环境4. 启动 LLaMa-Factory 界面5. 从 Huggingface 下载模型6. 模型验证7. 模型微调 1. 租用云计算资源 以下示例基于 AutoDL 云计算资源。 在云计算平台选择可用的云计…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Axure Rp 11 安装、汉化、授权

Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接&#xff1a;https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…...