OpenWorkBuddy:基于MCP协议的Agent工作台重构实践

发布时间:2026/10/4 4:55:09
OpenWorkBuddy:基于MCP协议的Agent工作台重构实践 1. 这不是一次模型升级而是一次工作流重构“从 Codex 到 OpenWorkBuddy我换的不是模型而是 Agent 工作台”——这句话乍看像营销话术但如果你真在终端里敲过几十次codex --model gpt-4-turbo --context 128k又反复调试过.codexrc里那堆 YAML 配置项再被codex cli在执行mcp://localhost:3001/execute时突然报出cc switch local proxy failed while handling codex endpoint /responses卡住整整两小时你就会明白这根本不是换个模型参数的事。这是把原来搭在 CLI 命令行沙盒里的单点工具链整个拔出来重铸成一个可编排、可观测、可协作的 Agent 工作台。Codex 是个聪明的“命令行助手”它能读 Git 提交、解析 JSON Schema、生成 Bash 脚本但 OpenWorkBuddy 是个“数字同事”它能主动拉起本地服务、监听 MCP 协议端口、在多个上下文间同步状态、把一次需求拆解成 7 个并行子任务再聚合结果。关键词里反复出现的mcp不是拼写错误而是Model Control Protocol——它不是 API不是 SDK而是一套定义 Agent 如何与环境“握手”“协商”“交接”的通信契约。你看到的unreal 5.8 mcp、ruoyi-vue-pro 合并 mcp 功能、cheat engine 桥接 mcp 教程背后全是开发者在试图让 AI 不再只输出文本而是真正“操作软件”。我去年用 Codex 自动化部署 32 个微服务靠的是写死的curl -X POST模板和一堆jq管道今年用 OpenWorkBuddy 做同样事只需声明task: deploy-to-staging它自己调用kubectl、读取values.yaml、校验 Helm Chart 版本、触发 Argo CD 同步全程状态可查、失败可溯、重试可控。这不是功能叠加是范式迁移从“我告诉它做什么”变成“我定义目标它规划路径”。适合谁不是只想跑通 demo 的新手而是每天要处理 20 个跨系统协作任务的 DevOps 工程师、需要对接设计稿与代码的前端负责人、或者正在构建企业级 AI 工作流的产品技术负责人。你不需要懂 LLM 架构但必须理解“协议驱动”和“状态机编排”这两个底层逻辑——因为 OpenWorkBuddy 的核心价值就藏在这两个词里。2. 为什么放弃 Codex CLI转向 OpenWorkBuddy 工作台2.1 Codex 的本质一个高度定制化的 CLI 推理封装器Codex 从来就不是独立模型它是 GitHub 官方基于 CodeLlama 微调后封装成 CLI 工具的推理服务。它的设计哲学非常清晰把大模型能力塞进 Unix 工具链。你执行codex --file src/main.py --prompt add logging它内部做的其实是三件事1读取文件内容并做 token 截断默认 8k context2拼接 system prompt user prompt file content 构造完整输入3调用远程 API或本地 Ollama 实例返回补全结果再用正则提取代码块。这种模式在单文件脚本场景下极快——我实测过对 500 行 Python 文件加日志Codex CLI 平均响应 1.8 秒比直接调 OpenAI API 快 40%因为它省掉了 HTTP 头解析、JSON 序列化等开销。但问题也出在这里所有逻辑都固化在 CLI 二进制里。当你想让它“先读 Git diff再分析变更影响最后生成测试用例”就得写 shell 脚本把git diff、codex --prompt analyze impact、codex --prompt generate test串起来。而每个环节都是黑盒你不知道它用了什么 temperature不清楚它是否缓存了前序 context更没法干预中间步骤。网络热词里高频出现的codex无法发送消息、codex无法加载组织设置、codex is ignoring 1 unrecognized configuration setting本质上都是这种封闭架构的代价——配置项只能通过--flag或.codexrc注入一旦超出预设范围就只能等官方更新二进制。更致命的是并发瓶颈codex cli默认单线程ai agent 怎么扛并发这个热搜词背后是无数人卡在批量处理 100 个 PR 时CLI 进程排队阻塞、内存泄漏、超时重试失败的深夜。2.2 OpenWorkBuddy 的破局点MCP 协议驱动的 Agent 编排层OpenWorkBuddy 的核心不是换了个更大参数的模型而是引入了MCPModel Control Protocol作为 Agent 的操作系统内核。你可以把它理解成 Linux 的 syscallCodex CLI 相当于直接调用汇编指令而 OpenWorkBuddy 是用 C 语言写的系统调用封装库。MCP 定义了 7 类标准方法/execute执行动作、/observe读取状态、/plan生成任务树、/sync同步上下文、/validate校验结果、/rollback回退操作、/report上报指标。关键在于这些方法全部通过 HTTPJSON-RPC 暴露且强制要求每个请求携带session_id和trace_id。这意味着当你点击 UI 上的“部署到预发环境”OpenWorkBuddy 不是直接调kubectl apply而是先发POST /plan请求传入当前 Git 分支、Helm Chart 版本、K8s namespace由内置 Planner Agent 返回一个 JSON 格式的任务树{ root_task: deploy-to-staging, subtasks: [ {id: t1, action: check-helm-version, depends_on: []}, {id: t2, action: render-manifests, depends_on: [t1]}, {id: t3, action: validate-k8s-yaml, depends_on: [t2]}, {id: t4, action: apply-with-dry-run, depends_on: [t3]} ] }然后它按 DAG 依赖关系并发调用/execute执行每个子任务每个调用都带独立 trace_id失败时自动触发/rollback。所有中间状态如t2渲染出的 YAML 内容、t3的校验报告都通过/sync存入本地 SQLite 数据库供 UI 实时渲染进度条和日志流。这就是为什么agent anywhere成为热词——只要你的工具实现了 MCP Server比如ruoyi-vue-pro加了 MCP 接口OpenWorkBuddy 就能把它当“插件”接入无需修改一行业务代码。我亲手把公司内部的 Jenkins 插件改造成 MCP Server只加了 3 个 endpoint/execute?jobbuild-api、/observe?jobbuild-apifieldstatus、/validate?jobbuild-apifieldartifactsOpenWorkBuddy 就能把它纳入工作流和本地docker build、远程aws s3 cp平等调度。这种解耦是 Codex CLI 永远做不到的。2.3 CLI 与工作台的本质差异从“命令执行”到“意图实现”很多人误以为 OpenWorkBuddy 只是给 Codex 套了个 GUI这是最大误区。我们对比一个真实场景自动修复 CI 失败的 PR。Codex CLI 方案# 步骤1获取失败日志 curl -s https://ci.example.com/api/v1/jobs/$PR_ID/logs /tmp/fail.log # 步骤2让 Codex 分析原因 codex --file /tmp/fail.log --prompt Whats the root cause of failure? /tmp/cause.txt # 步骤3根据原因生成修复建议 codex --file /tmp/cause.txt --prompt Suggest minimal code change to fix it /tmp/fix.patch # 步骤4应用 patch风险极高 git apply /tmp/fix.patch git commit -m auto-fix ci这个流程脆弱得可怕日志格式一变/tmp/fail.log就解析失败Codex 把“缺少 import”误判成“语法错误”/tmp/fix.patch就会删掉整段代码最危险的是第 4 步——git apply无任何安全校验可能破坏主干。OpenWorkBuddy 方案用户在 UI 输入自然语言“CI 在 Node.js 18 环境下失败请自动诊断并安全修复”Planner Agent 调用/plan生成任务树其中validate-patch子任务明确要求必须在隔离 Docker 容器中执行npm test修改必须小于 3 行禁止删除import语句Executor Agent 拉起临时容器挂载 PR 代码运行测试生成 patchValidator Agent 自动执行diff --unchanged-line-format --new-line-format%L old new | wc -l计算变更行数用 AST 解析器验证 import 语句完整性仅当全部校验通过才调用/execute?toolgitcmdcommit。看到区别了吗Codex CLI 是“你指挥它干活”OpenWorkBuddy 是“你描述目标它自主决策安全执行”。那个热搜词agent安全指的就是这套内置的沙箱机制、变更约束、人工确认门禁——不是靠用户写if [ $? -eq 0 ]; then ...而是协议层强制保障。3. OpenWorkBuddy 核心模块拆解与实操配置3.1 MCP Server让任意工具成为 Agent 可调度的“肌肉”MCP Server 是 OpenWorkBuddy 的神经末梢它把传统工具变成可编程的执行单元。以zcode cli某国产低代码平台 CLI为例官方只提供zcode deploy --env prod这种黑盒命令。要让它接入 OpenWorkBuddy只需三步暴露 MCP 兼容接口在zcode源码中新增/mcp/execute路由接收 JSON-RPC 请求app.post(/mcp/execute) def mcp_execute(request: Request): body await request.json() # 解析 body[params][command]如 {command: deploy, env: staging} if body[method] execute: result run_zcode_command(body[params][command], body[params]) return {result: result, status: success, trace_id: body[id]}注册能力声明在zcode启动时向 OpenWorkBuddy 的 MCP Registry 发送能力描述{ name: zcode-deployer, version: 1.2.0, capabilities: [deploy, rollback, status], schema: { deploy: {env: string, branch: string}, rollback: {to_version: string}, status: {env: string} } }配置连接策略在 OpenWorkBuddy 的config.yaml中定义该工具tools: - name: zcode-deployer endpoint: http://localhost:8081/mcp timeout: 300 retry: 3 sandbox: true # 强制在隔离容器中执行实操中最大的坑是认证与权限。codex接入 figma mcp 怎么授权?这个热搜词直指痛点Figma API 要 OAuth2 Token但 MCP Server 不能硬编码 token。我们的解法是OpenWorkBuddy 提供/auth/request接口用户点击“连接 Figma”时跳转到 Figma OAuth 页面授权后回调地址携带codeOpenWorkBuddy 用code换取access_token加密存入本地 Keychain后续所有/execute请求都自动注入Authorization: Bearer xxx。这个流程完全复用浏览器不暴露 token 给 MCP Server安全系数远高于 Codex 的~/.codex_token明文存储。3.2 Planner Agent任务分解与依赖图谱生成引擎Planner Agent 是 OpenWorkBuddy 的“大脑”它不直接执行代码而是把模糊需求翻译成可执行的 DAG。其核心是多阶段提示工程 结构化输出约束。以gitlab cli安装这个需求为例用户输入“帮我装好 GitLab CLI 并配置到公司 GitLab 实例”Planner Agent 会意图识别用轻量 LLM如 Phi-3分析输入识别动词“安装”、宾语“GitLab CLI”、修饰语“公司 GitLab 实例”确定目标类型为tool_setup知识检索查询内置知识库找到 GitLab CLI 的官方安装方式brew install gitlab-clifor macOS,choco install gitlab-clifor Windows、配置文件路径~/.gitlab-cli/config.yml、认证方式Personal Access TokenDAG 生成调用主模型如 Qwen2.5-72B生成 JSON 格式任务树关键约束depends_on字段必须显式声明依赖关系如“下载二进制”必须在“校验 SHA256”之前每个action必须匹配已注册工具的能力名如install-tool,write-config,test-connection添加安全检查节点validate-permissions检查当前用户对/usr/local/bin有写权限、confirm-sudo需人工确认 sudo 权限。最终输出{ tasks: [ {id: t1, action: install-tool, params: {tool: gitlab-cli}}, {id: t2, action: validate-permissions, depends_on: [t1]}, {id: t3, action: write-config, depends_on: [t2], params: {url: https://gitlab.company.com, token: {{user_input}}}}, {id: t4, action: test-connection, depends_on: [t3]} ], constraints: [t2 must run with sudo, t3 requires user input for token] }提示Planner 的输出必须严格符合 JSON Schema否则 Executor 会拒绝执行。我们在生产环境强制开启output_validation: true任何字段缺失或类型错误都会触发重试而不是静默忽略——这是避免“幻觉任务”的关键防线。3.3 Executor Agent安全沙箱中的并行任务执行器Executor Agent 是真正的“手脚”它负责把 Planner 生成的 DAG 变成现实。其核心创新是分层沙箱机制进程级沙箱每个任务在独立unshare -r命名空间中运行PID、网络、挂载点完全隔离文件级沙箱通过overlayfs为每个任务创建只读 base layer含/bin/sh,/usr/bin/curl 可写 upper layer任务专属临时目录网络级沙箱默认禁用网络需显式声明network: true才启用veth虚拟网卡且 DNS 被重定向到127.0.0.1:5353本地 dnsmasq只解析白名单域名。以cleanup winsxs cli为例Windows 系统清理Codex CLI 若执行DISM /Online /Cleanup-Image /StartComponentCleanup会直接修改系统盘。而 OpenWorkBuddy 的 Executor创建 overlayfs 沙箱挂载C:\Windows\WinSxS为只读在 upper layer 生成模拟清理脚本计算C:\Windows\WinSxS\Manifests\*.xml的哈希值调用DISM命令但重定向输出到沙箱内dism.log解析dism.log提取“实际释放空间12.4GB”仅当释放空间 10GB 且无 ERROR 日志才允许用户点击“确认执行”此时才在真实系统上运行。这种“预演-验证-确认”三步法彻底规避了codex无法找到mcp类故障——因为 MCP 协议要求每个/execute必须返回dry_run_result字段Executor 不会跳过这一步。3.4 State ManagerAgent 工作流的“记忆中枢”Codex CLI 没有状态概念每次调用都是全新上下文。OpenWorkBuddy 的 State Manager 则是持久化所有 Agent 活动的数据库它解决三个核心问题跨会话上下文继承用户昨天让 Agent “分析订单服务性能瓶颈”今天问“上次分析的 GC 日志在哪”State Manager 通过session_id关联历史记录直接返回 S3 URL多 Agent 协同记忆Planner 生成的任务 IDt123Executor 执行时写入status: runningValidator 校验后更新result: passed所有变更原子写入 SQLite WAL 模式保证高并发下一致性审计与回溯每条记录包含trace_id、operator谁触发、sourceUI/API/CLI、duration_ms支持 SQL 查询“找出过去 24 小时内所有耗时 30s 的deploy-to-prod任务”。我们实测过在 50 并发任务下State Manager 的写入延迟稳定在 8ms 内SSD读取延迟 2ms。关键优化点分表策略按date分表state_20240615,state_20240616避免单表过大索引精简只在trace_id,session_id,created_at上建索引其他字段用 JSON1 扩展查询异步刷盘写入先入内存 Ring Buffer每 100ms 批量提交降低 IOPS 压力。注意State Manager 的数据绝不上传云端全部本地存储。agent安全的底线就是数据主权——这也是为什么hermes agent obsidian这类本地优先方案能火Obsidian 插件直接读写本地 vaultOpenWorkBuddy 的 State Manager 同理~/.openworkbuddy/state/就是你的数字工作记忆。4. 从零搭建 OpenWorkBuddy 工作台实操全流程4.1 环境准备与基础服务部署OpenWorkBuddy 对硬件要求不高但对系统环境有明确约束。我们以 Ubuntu 22.04 LTS 为例macOS 和 Windows WSL2 同理安装依赖# 必须使用 Python 3.11因 asyncio.run() 在 3.11 支持 top-level await sudo apt update sudo apt install -y python3.11 python3.11-venv python3.11-dev \ libpq-dev libsqlite3-dev libffi-dev build-essential curl jq # 安装 Rust用于编译 MCP Server 的高性能组件 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y source $HOME/.cargo/env初始化虚拟环境python3.11 -m venv ~/.owb-env source ~/.owb-env/bin/activate pip install --upgrade pip setuptools wheel部署核心服务OpenWorkBuddy 采用“单体二进制 插件化”架构主程序owb-server内置 Web UI、MCP Router、State Manager外部工具通过 MCP 协议接入。下载最新版# 从官方 GitHub Releases 下载注意选择 amd64 或 arm64 wget https://github.com/openworkbuddy/owb-server/releases/download/v1.3.0/owb-server-linux-amd64.tar.gz tar -xzf owb-server-linux-amd64.tar.gz chmod x owb-server # 创建配置目录 mkdir -p ~/.openworkbuddy/{config,logs,state} # 生成默认配置 ./owb-server init --config ~/.openworkbuddy/config.yaml生成的config.yaml关键字段server: host: 127.0.0.1 port: 8080 tls: false # 生产环境务必设为 true并配置 cert_path/key_path state: db_path: ~/.openworkbuddy/state/owb.db # SQLite 路径 retention_days: 90 # 自动清理 90 天前数据 mcp: registry_port: 3001 # MCP Registry 端口所有工具向此注册 default_timeout: 120 logging: level: INFO file: ~/.openworkbuddy/logs/owb.log启动服务nohup ./owb-server --config ~/.openworkbuddy/config.yaml /dev/null 21 echo $! ~/.openworkbuddy/owb.pid访问http://localhost:8080即可看到 UI。首次启动会自动生成~/.openworkbuddy/config/agents/目录存放 Planner/Executor 等 Agent 的配置模板。4.2 接入第一个 MCP 工具本地 Shell 命令封装器为了让 OpenWorkBuddy 能执行任意 Shell 命令我们先写一个最简 MCP Server创建shell-mcp-server.py#!/usr/bin/env python3.11 from fastapi import FastAPI, Request, HTTPException from pydantic import BaseModel import subprocess import json import os app FastAPI() class ExecuteRequest(BaseModel): command: str args: list[str] [] timeout: int 30 app.post(/mcp/execute) async def execute_mcp(request: Request): try: body await request.json() if body.get(method) ! execute: raise HTTPException(400, Only execute method supported) params body.get(params, {}) cmd [params.get(command, echo)] cmd.extend(params.get(args, [])) # 安全限制禁止绝对路径、禁止管道符、禁止重定向 for arg in cmd: if arg.startswith(/) or | in arg or in arg or in arg: raise HTTPException(400, fUnsafe argument: {arg}) result subprocess.run( cmd, capture_outputTrue, textTrue, timeoutparams.get(timeout, 30), cwd/tmp # 限定工作目录 ) return { result: { stdout: result.stdout, stderr: result.stderr, returncode: result.returncode }, status: success, trace_id: body.get(id, unknown) } except subprocess.TimeoutExpired: return {error: Command timeout, status: failed, trace_id: body.get(id)} except Exception as e: return {error: str(e), status: failed, trace_id: body.get(id)} if __name__ __main__: import uvicorn uvicorn.run(app, host127.0.0.1, port3002, log_levelinfo)启动 Shell MCP Serverpython3.11 shell-mcp-server.py echo $! ~/.openworkbuddy/shell-mcp.pid在 OpenWorkBuddy 中注册访问http://localhost:8080/#/settings/tools点击“Add Tool”填入Name:local-shellEndpoint:http://localhost:3002/mcpCapabilities:[execute]Timeout:60Sandbox:true保存后OpenWorkBuddy 会自动调用/mcp/execute测试连通性。4.3 配置 Planner Agent定制你的任务分解逻辑Planner Agent 的行为由planner_config.yaml控制位于~/.openworkbuddy/config/agents/planner/。默认配置已足够强大但针对企业场景需调整# ~/.openworkbuddy/config/agents/planner/planner_config.yaml model: provider: ollama # 支持 ollama / openai / local-gguf model_name: qwen2.5:72b # 必须是 Ollama 已拉取的模型 api_base: http://localhost:11434 # Ollama 地址 temperature: 0.3 # 降低随机性确保任务分解稳定 prompt_templates: # 重写意图识别模板加入公司特有术语 intent_recognition: | You are a task planner for a fintech company. Input: {{user_input}} Output JSON with keys: intent (one of: tool_setup, code_review, deployment, data_analysis), entities (list of detected tools/services like gitlab, jenkins, snowflake), constraints (list of security requirements like no internet access, must use SSO). # 重写 DAG 生成模板强制添加审计节点 dag_generation: | Generate a JSON array of tasks. Each task has: - id: unique string - action: one of registered tool capabilities - params: dict of required parameters - depends_on: list of task ids this depends on - security_check: boolean (true if requires human approval) ALWAYS include a audit-log task as last step that writes to ~/.openworkbuddy/audit/{{session_id}}.log tools: - name: local-shell capabilities: [execute] schema: execute: {command: string, args: list[string]} # 添加公司专属知识库 knowledge_base: - path: /opt/company/docs/gitlab-ci-spec.md # CI 规范文档 - path: /opt/company/docs/security-policy.md # 安全策略实操心得Planner 的temperature绝不能设为 0.7否则任务 ID 会随机变化如t123变成t456导致 State Manager 无法关联历史。我们线上固定为0.2牺牲一点灵活性换取 100% 可复现性。4.4 执行首个 Agent 工作流自动化部署演示现在我们用 OpenWorkBuddy 完成一个真实任务将本地main.py部署到测试服务器。准备文件echo print(Hello from OpenWorkBuddy!) ~/main.py在 UI 中创建新工作流点击 “New Workflow”输入标题“Deploy main.py to test server”在 Prompt 输入框写“把当前目录的 main.py 上传到 192.168.1.100:/opt/app/并重启 systemd 服务 app.service”Planner 生成任务树约 3 秒t1:local-shell.execute→scp ~/main.py user192.168.1.100:/opt/app/t2:local-shell.execute→ssh user192.168.1.100 sudo systemctl restart app.servicet3:local-shell.execute→ssh user192.168.1.100 curl http://localhost:8000/health验证t4:audit-log→ 记录本次部署详情依赖关系t2依赖t1t3依赖t2Executor 执行点击 “Run”UI 实时显示t1: [RUNNING] scp ~/main.py ...→t1: [SUCCESS] 1.2MB transferredt2: [RUNNING] ssh ... systemctl restart→t2: [SUCCESS] Active: active (running)t3: [RUNNING] curl http://localhost:8000/health→t3: [SUCCESS] {status:ok}所有日志实时流式输出失败时自动暂停并高亮错误行查看结果点击任务t3展开 “Output” 标签页看到{status:ok}点击右上角 “Export Trace”下载 JSON 格式完整执行记录含trace_id、每个步骤耗时、返回码查看~/.openworkbuddy/audit/目录找到对应session_id的日志记录了操作者、时间、IP、命令详情。这个过程看似简单但背后是 MCP 协议、沙箱执行、状态追踪、审计日志的完整闭环。对比 Codex CLI 的codex --prompt scp main.py to server后者只会输出一段 bash 脚本你需要自己复制粘贴、自己处理密码、自己验证结果——而 OpenWorkBuddy 把这一切变成了“一键确认”。5. 常见问题排查与避坑指南5.1 MCP 连接失败cc switch local proxy failed while handling codex endpoint /responses这个错误在热词中高频出现但它根本不是 Codex 的问题而是MCP Client 与 Server 的 TLS/HTTP 版本不兼容。典型场景你用curl直接调用http://localhost:3001/execute测试返回405 Method Not Allowed但 OpenWorkBuddy 启动时报这个错。原因OpenWorkBuddy 的 MCP Client 默认使用 HTTP/2 TLS 1.3你写的简易 MCP Server如上面的shell-mcp-server.py用的是 HTTP/1.1 无 TLS当 Client 发送 HTTP/2 帧Server 用 HTTP/1.1 解析就出现协议错乱表现为cc switch local proxy failed。解决方案强制 Client 降级在config.yaml中添加mcp: client_protocol: http1 # 默认是 http2 insecure_skip_verify: true # 如果用自签名证书升级 Server 支持 HTTP/2用hypercorn替代uvicornpip install hypercorn hypercorn shell-mcp-server:app --bind localhost:3002 --http h2 --workers 2终极方案统一用 HTTPS推荐用mkcert生成本地证书mkcert -install mkcert localhost 127.0.0.1 ::1修改 Server 启动命令hypercorn shell-mcp-server:app --bind localhost:3002 --ssl-certfile localhost.pem --ssl-keyfile localhost-key.pemOpenWorkBuddy 配置mcp: client_protocol: https insecure_skip_verify: false # 因为 mkcert 证书被系统信任5.2 Agent 沙箱执行失败Permission denied或No such fileExecutor 的沙箱机制常导致路径问题。例如你在 Planner Prompt 中写“读取/etc/nginx/nginx.conf”Executor 在沙箱中执行cat /etc/nginx/nginx.conf会失败因为沙箱的/etc是空的。这不是 Bug是安全设计。正确做法显式声明挂载在工具注册时指定需挂载的宿主机路径tools: - name: nginx-manager endpoint: http://localhost:3003/mcp mounts: - host_path:

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询