长期支持版本

    社区创新版本

      网络环境部署指南

      介绍

      openEuler Copilot System 是一款智能问答工具,使用 openEuler Copilot System 可以解决操作系统知识获取的便捷性,并且为OS领域模型赋能开发者及运维人员。作为获取操作系统知识,使能操作系统生产力工具 (如 A-Ops / A-Tune / x2openEuler / EulerMaker / EulerDevOps / StratoVirt / iSulad 等),颠覆传统命令交付方式,由传统命令交付方式向自然语义进化,并结合智能体任务规划能力,降低开发、使用操作系统特性的门槛。

      组件介绍

      组件端口说明
      euler-copilot-framework8002 (内部端口)智能体框架服务
      euler-copilot-web8080智能体前端界面
      euler-copilot-rag8005 (内部端口)检索增强服务
      euler-copilot-vectorize-agent8001 (内部端口)文本向量化服务
      mysql3306 (内部端口)MySQL数据库
      redis6379 (内部端口)Redis数据库
      postgres5432 (内部端口)向量数据库
      secret_inject配置文件安全复制工具

      环境要求

      软件要求

      类型版本要求说明
      操作系统openEuler 22.03 LTS 及以上版本
      K3s>= v1.30.2,带有 Traefik Ingress 工具K3s 提供轻量级的 Kubernetes 集群,易于部署和管理
      Helm>= v3.15.3Helm 是一个 Kubernetes 的包管理工具,其目的是快速安装、升级、卸载 openEuler Copilot System 服务
      python>=3.9.9python3.9.9 以上版本为模型的下载和安装提供运行环境

      硬件要求

      类型硬件要求
      服务器1台
      CPU鲲鹏或x86_64,>= 32 cores
      RAM>= 64GB
      存储>= 500 GB
      GPUTesla V100 16GB,4张
      NPU910ProB、910B

      注意:

      1. 若无 GPU 或 NPU 资源,建议通过调用 OpenAI 接口的方式来实现功能。(接口样例:https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions 参考链接:API-KEY的获取与配置)
      2. 调用第三方 OpenAI 接口的方式不需要安装高版本的 python (>=3.9.9)
      3. 英伟达 GPU 对 Docker 的支持必需要新版本 Docker (>= v25.4.0)
      4. 如果k8s集群环境,则不需要单独安装k3s,要求version >= 1.28

      部署视图

      部署图

      获取 openEuler Copilot System

      • 从 openEuler Copilot System 的官方Git仓库 euler-copilot-framework 下载最新的部署仓库
      • 如果您正在使用 Kubernetes,则不需要安装 k3s 工具。
      # 下载目录以 home 为例
      cd /home
      
      git clone https://gitee.com/openeuler/euler-copilot-framework.git
      

      环境准备

      设备需联网并符合 openEuler Copilot System 的最低软硬件要求。确认服务器、硬件、驱动等准备就绪后,即可开始环境准备工作。为了顺利进行后续操作,请按照指引,先进入我 们的脚本部署目录,并且按照提供的操作步骤和脚本路径依次执行,以确保初始化成功。

      # 进入部署脚本目录
      cd /home/euler-copilot-framework/euler-copilot-helm/scripts && tree
      
      .
      ├── check_env.sh
      ├── download_file.sh
      ├── get_log.sh
      ├── install_tools.sh
      └── prepare_docker.sh
      
      序号步骤内容相关指令说明
      1环境检查bash check_env.sh主要对服务器的主机名、DNS、防火墙设置、磁盘剩余空间大小、网络、检查SELinux的设置
      2文件下载bash download_file.sh模型bge-reranker-large、bge-mixed-mode下载
      3安装部署工具bash install_tools.sh v1.30.2+k3s1 v3.15.3 cn安装helm、k3s工具。注意:cn的使用是使用镜像站,可以去掉不用
      4大模型准备提供第三方 OpenAI 接口或基于硬件本都部署大模型本地部署大模型可参考附录部分

      安装

      您的环境现已就绪,接下来即可启动 openEuler Copilot System 的安装流程。

      • 下载目录以home为例,进入 openEuler Copilot System 仓库的 Helm 配置文件目录

        cd /home/euler-copilot-framework && ll
        
        total 28
        drwxr-xr-x  3 root root 4096 Aug 28 17:45 docs/
        drwxr-xr-x  5 root root 4096 Aug 28 17:45 euler-copilot-helm/
        
      • 查看euler-copilot-helm的目录

        tree euler-copilot-helm
        
        euler-copilot-helm/chart
        ├── databases
        │   ├── Chart.yaml
        │   ├── configs
        │   ├── templates
        │   └── values.yaml
        ├── authhub
        │   ├── Chart.yaml
        │   ├── configs
        │   ├── templates
        │   └── values.yaml
        └── euler_copilot
            ├── Chart.yaml
            ├── configs
            ├── templates
            │   ├── NOTES.txt
            │   ├── rag
            │   ├── vectorize
            │   └── web
            └── values.yaml
        

      1. 安装数据库

      • 编辑 values.yaml

        cd euler-copilot-helm/chart/databases
        

        仅需修改镜像tag为对应架构,其余可不进行修改

        vim values.yaml
        
      • 创建命名空间

        kubectl create namespace euler-copilot
        

        设置环境变量

        export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
        
      • 安装数据库

        helm install -n euler-copilot databases .
        
      • 查看 pod 状态

        kubectl -n euler-copilot get pods
        
        pgsql-deploy-databases-86b4dc4899-ppltc           1/1     Running   0          17d
        redis-deploy-databases-f8866b56-kj9jz             1/1     Running   0          17d
        mysql-deploy-databases-57f5f94ccf-sbhzp           2/2     Running   0          17d
        
      • 若服务器之前部署过 mysql,则可预先清除下 pvc,再部署 databases。

        # 获取pvc
        kubectl -n euler-copilot get pvc
        
        # 删除pvc
        kubectl -n euler-copilot delete pvc mysql-pvc
        

      2. 安装鉴权平台Authhub

      • 编辑 values.yaml

        cd euler-copilot-helm/chart/authhub
        

        请结合 YAML 中的注释中的[必填]项进行修改

        vim values.yaml
        
        • 注意:
        1. authHub 需要域名,可预先申请域名或在 'C:\Windows\System32\drivers\etc\hosts' 下配置。 authhub和euler-copilot必须是同一个根域名的两个子域名, 例如authhub.test.com和 eulercopilot.test.com
        2. 修改tag为对应架构的tag;
      • 安装 AuthHub

        helm install -n euler-copilot authhub .
        

        AuthHub 默认账号 administrator, 密码 changeme

      • 查看 pod 状态

        kubectl -n euler-copilot get pods
        
        NAME                                             READY   STATUS    RESTARTS   AGE
        authhub-backend-deploy-authhub-64896f5cdc-m497f   2/2     Running   0          16d
        authhub-web-deploy-authhub-7c48695966-h8d2p       1/1     Running   0          17d
        pgsql-deploy-databases-86b4dc4899-ppltc           1/1     Running   0          17d
        redis-deploy-databases-f8866b56-kj9jz             1/1     Running   0          17d
        mysql-deploy-databases-57f5f94ccf-sbhzp           2/2     Running   0          17d
        
      • 登录 AuthHub

        AuthHub 的域名以 <authhub.test.com> 为例,浏览器输入https://authhub.test.com, 登录界面如下图所示:

        部署图

      • 创建应用eulercopilot

        部署图 点击创建应用,输入应用名称、应用主页和应用回调地址(登录后回调地址),参考如下:

        • 应用名称:eulercopilot
        • 应用主页:https://eulercopilot.test.com
        • 应用回调地址:https://eulercopilot.test.com/api/auth/login
        • 应用创建好后会生成 Client ID 和 Client Secret,将生成的 Client ID 和 Client Secret 配置到应用里,以 eulercopilot 为例,创建应用后在配置文件中添加配置 euler-copilot-helm/chart/euler_copilot/values.yaml 中添加配置

        部署图

      2. 安装 openEuler Copilot System

      • 编辑 values.yaml

        cd euler-copilot-helm/chart/euler_copilot
        

        请结合 YAML 中的注释中的[必填]项进行修改

        vim values.yaml
        
        • 注意:
        1. 查看系统架构,并修改values.yaml中的tag;
        2. 修改values.yaml中的globals的domain为EulerCopilot域名,并配置大模型的相关信息
        3. 手动创建docs_dirplugin_dirmodels三个文件挂载目录
        4. 修改values.yaml中framework章节的web_url和oidc设置
        5. 如果部署插件,则需要配置用于Function Call的模型,此时必须有GPU环境用于部署sglang,可参考附件
      • 安装 openEuler Copilot System

        helm install -n euler-copilot service .
        
      • 查看 Pod 状态

        kubectl -n euler-copilot get pods
        

        镜像拉取过程可能需要大约一分钟的时间,请耐心等待。部署成功后,所有 Pod 的状态应显示为 Running。

        NAME                                              READY   STATUS    RESTARTS   AGE
        authhub-backend-deploy-authhub-64896f5cdc-m497f   2/2     Running   0          16d
        authhub-web-deploy-authhub-7c48695966-h8d2p       1/1     Running   0          17d
        pgsql-deploy-databases-86b4dc4899-ppltc           1/1     Running   0          17d
        redis-deploy-databases-f8866b56-kj9jz             1/1     Running   0          17d
        mysql-deploy-databases-57f5f94ccf-sbhzp           2/2     Running   0          17d
        framework-deploy-service-bb5b58678-jxzqr          2/2     Running   0          16d
        rag-deploy-service-5b7887644c-sm58z               2/2     Running   0          110m
        vectorize-deploy-service-57f5f94ccf-sbhzp         2/2     Running   0          17d
        web-deploy-service-74fbf7999f-r46rg               1/1     Running   0          2d
        

        注意:如果 Pod 状态出现失败,建议按照以下步骤进行排查

      注意:如果 Pod 状态出现失败,建议按照以下步骤进行排查

      1. 查看 Kubernetes 集群的事件 (Events),以获取更多关于 Pod 失败的上下文信息

        kubectl -n euler-copilot get events
        
      2. 查看镜像拉取是否成功

        k3s crictl images
        
      3. 检查 RAG 的 Pod 日志,以确定是否有错误信息或异常行为。

        kubectl logs rag-deploy-service-5b7887644c-sm58z -n euler-copilot
        
      4. 验证 Kubernetes 集群的资源状态,检查服务器资源或配额是否足够,资源不足常导致 Pod 镜像服拉取失败。

        df -h
        
      5. 如果未拉取成且镜像大小为0,请检查是否是 k3s 版本未满足要求,低于 v1.30.2

        k3s -v
        
      6. 确认 values.yaml 中 framework 的 OIDC 设置是否正确配置,以确保身份验证和授权功能正常工作。

        vim /home/euler-copilot-framework/euler-copilot-helm/chart/euler_copilot/values.yaml
        

      验证安装

      恭喜您,openEuler Copilot System 的部署已完成!现在,您可以开启智能问答的非凡体验之旅了。 请在浏览器中输入 https://$(host_ip):8080 或 https://域名(其中 port 默认值为8080,若更改则需相应调整)访问 openEuler Copilot System 网页,并尝试进行问答体验。

      Web 界面

      安装插件

      详细信息请参考文档 插件部署指南

      构建专有领域智能问答

      1. 构建 openEuler 专业知识领域的智能问答

      1. 修改 values.yaml 的 pg 的镜像仓为 pg-data
      2. 修改 values.yaml 的 rag 部分的字段 knowledgebaseID: openEuler_2bb3029f
      3. vim euler-copilot-helm/chart/databases/templates/pgsql/pgsql-deployment.yaml 的 volumes 相关字段注释
      4. 进入 cd euler-copilot-helm/chart/databases,执行更新服务 helm upgrade -n euler-copilot databases .
      5. 进入 cd euler-copilot-helm/chart/euler_copilot,执行更新服务 helm upgrade -n euler-copilot service .
      6. 进入网页端进行 openEuler 专业知识领域的问答

      2. 构建项目专属知识领域智能问答

      详细信息请参考文档 本地资产库构建指南

      附录

      大模型准备

      GPU 环境

      参考以下方式进行部署

      1. 下载模型文件:

        huggingface-cli download --resume-download Qwen/Qwen1.5-14B-Chat --local-dir Qwen1.5-14B-Chat
        
      2. 创建终端 control

        screen -S control
        
        python3 -m fastchat.serve.controller
        
        • 按 Ctrl A+D 置于后台
      3. 创建新终端 api

        screen -S api
        
        python3 -m fastchat.serve.openai_api_server --host 0.0.0.0 --port 30000  --api-keys sk-123456
        
        • 按 Ctrl A+D 置于后台
        • 如果当前环境的 Python 版本是 3.12 或者 3.9 可以创建 python3.10 的 conda 虚拟环境
        mkdir -p /root/py310
        
        conda create --prefix=/root/py310 python==3.10.14
        
        conda activate /root/py310
        
      4. 创建新终端 worker

        screen -S worker
        
        screen -r worker
        

        安装 fastchat 和 vllm

        pip install fschat vllm
        

        安装依赖:

        pip install fschat[model_worker]
        
        python3 -m fastchat.serve.vllm_worker --model-path /root/models/Qwen1.5-14B-Chat/ --model-name qwen1.5 --num-gpus 8 --gpu-memory-utilization=0.7 --dtype=half
        
        • 按 Ctrl A+D 置于后台
      5. 按照如下方式配置文件,并更新服务。

        vim euler-copilot-helm/chart/euler_copilot/values.yaml
        

        修改如下部分

        llm:
          # 开源大模型,OpenAI兼容接口
          openai:
            url: "http://$(IP):30000"
            key: "sk-123456"
            model: qwen1.5
            max_tokens: 8192
        

      NPU 环境

      NPU 环境部署可参考链接 MindIE安装指南

      FAQ

      1. huggingface 使用报错?

      File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
      raise NewConnectionError(
      urllib3.exceptions.eanconectionError: <urlib3.comnection.Hipscomnection object at exfblab6490>: Failed to establish a new conmection: [Errno 101] Network is unreachable
      
      • 解决办法
      pip3 install -U huggingface_hub
      
      export HF_ENDPOINT=https://hf-mirror.com
      

      2. 如何在 RAG 容器中调用获取问答结果的接口?

      • 请先进入到 RAG 对应 Pod
      curl  -k -X POST "http://localhost:8005/kb/get_answer"  -H "Content-Type: application/json"  -d '{ \
            "question": "", \
            "kb_sn": "default_test", \
            "fetch_source": true  }'
      

      3. 执行 helm upgrade 报错?

      Error: INSTALLATI0N FAILED: Kubernetes cluster unreachable: Get "http:/localhost:880/version": dial tcp [:1:8089: connect: connection refused
      

      或者

      Error: UPGRADE FAILED: Kubernetes cluster unreachable: the server could not find the requested resource
      
      • 解决办法
      export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
      

      4. 无法查看 Pod 日志?

      [root@localhost euler-copilot]# kubectl logs rag-deployservice65c75c48d8-44vcp-n euler-copilotDefaulted container "rag" out of: rag.rag-copy secret (init)Error from server: Get "https://172.21.31.11:10250/containerlogs/euler copilot/rag deploy"service 65c75c48d8-44vcp/rag": Forbidden
      
      • 解决办法 如果设置了代理,需要将本机的网络 IP 从代理中剔除
      cat /etc/systemd/system/k3s.service.env
      
      http_proxy="http://172.21.60.51:3128"
      https_proxy="http://172.21.60.51:3128"
      no_proxy=172.21.31.10 # 代理中剔除本机IP
      

      5. GPU环境部署大模型时出现无法流式回复?

      在服务执行 curl 大模型失败,但是将 "stream": true 改为 "stream": false就可以 curl 通?

      curl http://localhost:30000/v1/chat/completions   -H "Content-Type: application/json"   -H "Authorization: Bearer sk-123456"   -d '{
      "model": "qwen1.5",
      "messages": [
      {
      "role": "system",
      "content": "你是情感分析专家,你的任务是xxxx"
      },
      {
      "role": "user",
      "content": "你好"
      }
      ],
      "stream": true,
      "n": 1,
      "max_tokens": 32768
      }'
      
      • 解决办法:
      pip install Pydantic=1.10.13
      

      6. 如何部署sglang?

      # 1. 激活 Conda 环境, 并激活 Python 3.10 的 Conda 环境。假设你的环境名为 `myenv`:
      conda activate myenv
      
      # 2. 在激活的环境中,安装 sglang[all] 和 flashinfer
      pip install sglang[all]==0.3.0
      pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/
      
      # 3. 启动服务器
      python -m sglang.launch_server --served-model-name Qwen2.5-32B --model-path Qwen2.5-32B-Instruct-AWQ --host 0.0.0.0 --port 8001 --api-key sk-12345 --mem-fraction-static 0.5 --tp 8
      
      • 验证安装
      pip show sglang
      pip show flashinfer
      
      • 注意:
      1. API Key:请确保 --api-key 参数中的 API 密钥是正确的
      2. 模型路径: 确保 --model-path 参数中的路径是正确的,并且模型文件存在于该路径下。
      3. CUDA 版本:确保你的系统上安装了 CUDA 12.1 和 PyTorch 2.4,因为 flashinfer 包依赖于这些特定版本。
      4. 线程池大小:根据你的GPU资源和预期负载调整线程池大小。如果你有 8 个 GPU,那么可以选择 --tp 8 来充分利用这些资源。

      7. 如何 curl embedding?

      curl -k -X POST http://$IP:8001/embedding \
           -H "Content-Type: application/json" \
           -d '{"texts": ["sample text 1", "sample text 2"]}' 
      # $IP为vectorize的Embedding的内网地址
      

      8. 如何生成证书?

      下载地址: https://github.com/FiloSottile/mkcert/releases
      # 1. 下载 mkcert
      # x86_64 
      wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
      # arm64 
      wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-arm64
      # 2. 执行下面的命令生成秘钥
      mkcert -install
      # mkcert 可直接接域名或 IP, 生成证书和秘钥
      mkcert example.com 
      # 3. 将证书和秘钥拷贝到 `/home/euler-copilot-framework_openeuler/euler-copilot-helm/chart_ssl/traefik-secret.yaml` 中, 并执行下面命令使其生效。
      kubectl apply -f traefik-secret.yaml
      

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份