网站开发器,免费ip地址,做的网站怎么发网上,wordpress嵌入代码一、环境搭建
我的电脑是Windows 10版本#xff0c;其他的没尝试#xff0c;如果大家系统和我的不一致#xff0c;请自行判断#xff0c;基本上没什么大的出入啊。 openManus的Git地址#xff1a;https://github.com/mannaandpoem/OpenManus 根据官网的两种安装推荐方式如…一、环境搭建
我的电脑是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 python3.12
conda activate open_manus
克隆存储库
git clone https://github.com/mannaandpoem/OpenManus.git
cd OpenManus
安装依赖项
pip install -r requirements.txt为了方便大家快速搭建直接贴了我的提示词运行结果如下
以下是为 Windows 10 系统适配的详细步骤使用 Anaconda1. 安装前置工具
- 确保已安装 [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 python3.12 -y
conda activate open_manus克隆仓库
git clone https://github.com/mannaandpoem/OpenManus.git
cd OpenManus安装依赖
pip install -r requirements.txt常见问题解决方案 如果遇到环境激活问题 在 PowerShell 中首次使用需执行conda init powershell关闭后重新打开终端 如果缺少 C 编译工具安装某些包时报错 安装 Microsoft C Build Tools 如果 Python 3.12 不可用 conda create -n open_manus python3.11替代克隆方式如果 git 不可用 直接下载 ZIPhttps://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 Noneapp.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, mimetypetext/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],stdinsubprocess.PIPE,stdoutsubprocess.PIPE,stderrsubprocess.STDOUT,textTrue,bufsize1,universal_newlinesTrue,creationflagssubprocess.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 fdata: {line}\n\nyield event: end\ndata: \n\nreturn Response(generate(),mimetypetext/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 responseapp.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}), 404app.after_request
def add_cors_headers(response):response.headers[Access-Control-Allow-Origin] *response.headers[Access-Control-Allow-Headers] Content-Typeresponse.headers[Access-Control-Allow-Methods] GET, POST, PUT, DELETE, OPTIONSreturn responseif __name__ __main__:app.run(port5000, threadedTrue)index.html的页面代码如下
!DOCTYPE html
html langzh-CN
headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleOpenManus 实时控制台/titlelink hrefhttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css relstylesheetstyle#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
bodydiv classcontainer py-5h1 classtext-primary mb-4 OpenManus 实时控制台/h1div classmb-4textarea idideaInput classform-control bg-dark text-light rows4 placeholder输入您的创意示例分析特斯拉最近三个月的股价趋势并生成可视化报告/textarea/divdiv classd-flex gap-2 mb-4button classbtn btn-success onclickstartExecution()开始执行/buttonbutton classbtn btn-danger onclickstopExecution()终止任务/button/divdiv classcard bg-darkdiv classcard-header text-light实时输出/divdiv idoutput classcard-body/div/divdiv idloading classloadingdiv classspinner-border text-primary rolestatusspan classvisually-hidden加载中.../span/div/div/divscriptlet 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 classtext-danger${message}/div;}function ansiToHtml(text) {return text.replace(/\x1B\[32m/g, span classtext-success).replace(/\x1B\[31m/g, span classtext-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 classlog-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会按照步骤给你执行自动处理解放双手吧。
至此基本上就完成了。 我本地也是刚跑出来大家遇到什么问题欢迎可以互相套路。