diff --git "a/docs/EulerCopilot\345\234\250\347\272\277\351\203\250\347\275\262\346\214\207\345\215\227.md" "b/docs/EulerCopilot\345\234\250\347\272\277\351\203\250\347\275\262\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..151edd8aed1063438e61052dace905d71d4f7060 --- /dev/null +++ "b/docs/EulerCopilot\345\234\250\347\272\277\351\203\250\347\275\262\346\214\207\345\215\227.md" @@ -0,0 +1,161 @@ +# EulerCopilot部署指南 +## EulerCopilot介绍 +NeoCopilot是一款智能问答工具,使用NeoCopilot可以解决操作系统知识获取的便捷性,并且为OS领域模型赋能开发者及运维人员。作为获取操作系统知识,使能操作系统生产力工具(如A-ops/Atune/X2openEuler/Eulermake/EulerDevops/stratovirt/iSulad等),颠覆传统命令交付方式,由传统命令交付方式向自然语义进化,并结合智能体任务规划能力,降低开发、使用操作系统特性的门槛。 + +### 功能描述 + - 通过web/shell/公众号方式,覆盖在openEuler社区/社区公众号/shell 命令行界面; + - 面向普通用户支持语言对话交流的方式,获取操作系统基础知识、欧拉基础知识、生成命令; + - 面向运维人员支持自然语义目标意图理解,自动生成工作流,基于openEuler A-OPS/ATUNE生产力工具实现启发式诊断、调优; + - 面向企业用户支持语义级功能特性调用,使能openEuler 主要特性(stratovirt/iSulad等) +### 应用场景 + - openEuler 在社区入口,通过自然语言方式,进行智能问答,包括但不限于:检索欧拉社区相关知识,案例;生成简单命令;对接社区基础设施;获取社区代办事项;构建社区流水线;构建软件包等。 + - shell 终端用户,基于shell 命令行增强自然语言识别能力,构建启发式运维、部署等能力,包括但不限于:智能诊断、智能调优、智能部署。 + - 端侧设备用户,通过公众号,复用社区入口能力 +### 解决痛点 + - 随着操作系统规模剧增,当前操作系统覆盖的软件包超过3000+,整个规模达3.6万+,操作系统可调参数达13000+,依靠积累需要大量的学习成本;调优诊断依靠专家经验,10年以上专家诊断、调优效率是新员工的10倍以上;调优、诊断、部署过程需要掌握大量的命令,使用门槛较高。 +### 关键价值 + - 通过NeoCopilot统一知识问答,知识准确率超过80%,降低重复性知识咨询问题,通过自然语言启发式运维,调优诊断部署效率倍级提升。工具通过自然语言交付,实现意图理解,生成工作流,生成命令,生成报告,生成建议,为初学者构建专家系统; + +### 组件介绍 + +| 组件 | 端口 | 说明 | +| ----------------------------- | --------------- | -------------------- | +| euler-copilot-framework | 8002 (内部端口) | 智能体框架服务 | +| euler-copilot-web | 8080 | 智能体前端界面 | +| euler-copilot-rag | 8005 (内部端口) | 检索增强服务 | +| euler-copilot-vectorize-agent | 8001 (内部端口) | 文本向量化服务 | +| secret_ingect | 无 | 配置文件安全复制工具 | +| mysql | 3306 (内部端口) | MySQL数据库 | +| redis | 6379 (内部端口) | Redis数据库 | +| postgres | 5432 (内部端口) | 向量数据库 | + +## 环境要求 +以下部署必须在联网的状态下执行 + +### 软件要求 + +| 软件 | 版本要求 | 说明 | +|------------| ------------------------------------|--------------------------------------| +| 操作系统 | openEuler 22.03 LTS及以上版本 | 无 | +| K3s | >= v1.29.0,带有Traefik Ingress工具 | K3s提供轻量级的 Kubernetes集群,易于部署和管理 | +| Docker | >= v25.4.0 | docker提供一个独立的运行应用程序环境,作用是用来部署模型 | +| Helm | >= v3.14.4 | Helm是一个 Kubernetes的包管理工具,其目的是快速安装、升级、卸载Eulercopilot服务 | + +#### 部署方案1 + + +| 硬件要求 | 说明 | +| ------------- | -------------------------------------------------------------------| +| 服务器 | 需要2台服务器 | +| CPU | 鲲鹏或x86_64, >= 32 cores | +| RAM | >= 64GB | +| 存储 | >= 500 GB | +| GPU/NPU | [基于所选模型评估硬件资源需求](https://huggingface.co/spaces/hf-accelerate/model-memory-usage)| + +部署视图如下图1所示 + +![user-flow](./pictures/EulerCopilot部署方案1.png) + +#### 部署方案2 + +| 硬件类型 | 说明 | +| -------- | ----------------------------| +| 服务器 | 需要1台服务器 | +| CPU | 鲲鹏或x86_64, >= 32 cores | +| RAM | >= 64GB | +| 存储 | >= 500 GB | +| GPU/NPU | [基于所选模型评估硬件资源需求](https://huggingface.co/spaces/hf-accelerate/model-memory-usage)| + +部署视图如下图2所示 + +![user-flow](./pictures/EulerCopilot部署方案2.png) + + +## 环境初始化 +如果您的服务器准备完成后,就可以对环境进行初始化操作了,以下是操作步骤的说明和脚本,可以按照顺序去执行 + +| 步骤 | 脚本路径 | 说明 | +| ------------------| ---------------------------|------------------------------------------ | +| 1)环境检查 | script/check_env.sh | 主要对服务器的主机名、DNS、防火墙设置 | +| 2)文件下载 | script/download_file.sh | 模型bge-reranker-large、bge-mixed-modetext2和分词工具vec-base-chinese-paraphrase的下载 | +| 3)安装部署工具 | script/install_tools.sh | 安装helm、k3s工具 | +| 4)大模型准备 | 相关指令可参考本文附录部分 | 提供openai接口或按照附录部建议方式部署 | + +## EulerCopilot安装 +您的环境已准备好了,就可以开始安装EulerCopilot了 + +### 1. 编辑YAML + euler-copilot-helm是EulerCopilot安装时需要的配置文件库,需要在安装前根据实际情况以及文件的注释内容修改values.yaml + `vim euler-copilot-helm/chat/values.yaml` + +### 2. 安装EulerCopilot +```bash + helm install -n euler-copilot 服务名称 . + # 服务名称可任意指定 +``` + +### 3. 查看pod状态 +```bash + kubectl -n euler-copilot get pods + # 注意:镜像拉取需要等待一分钟左右,若Pod状态均为Running,则部署成功 + # 如果部署有如下报错,可查看部署日志和pod日志 + kubectl -n euler-copilot get events + kubectl logs $(pod_id) -n euler-copilot +``` + +## 测试 + +到目前为止,您已经完成EulerCopilot的部署,现在您可以开启智能问答的体验之旅了 + +#### 1. 公网环境使用 + - 在浏览器输入https://<当前机器公网IP地址>:8080/, 进行智能问答测试 +#### 2. 内网环境使用 + - 内网下使用eulerCopilot + 1. 修改values.yaml中的domain的值为内网ip + 2. 按照如下方式修改相关配置文件: + +```bash + vim euler-copilot-helm/chat_ssl/traefik-config.yml + # 内容如下 + websecure: + exposedPort: port + # 将该处的port修改成要转发的端口 + kubectl apply -f traefik-config.yml +``` + + 3. 网页登录验证:`https://$(内网ip):$(port)` + +## 构建专有领域的问答 +- 构建openEuler专业知识领域的智能问答 + 1. 修改values.yaml的pg的镜像仓为`pg-data` + 2. 修改values.yaml的rag部分的字段`knowledgebaseID: openEuler_2bb3029f` + 3. 将`euler-copilot-helm/chat/templates/pgsql`里面pgsql-deployment.yaml的volume相关字段注释掉 + 4. 进入`euler-copilot-helm/chat`,执行更新服务`helm upgrade -n $(name_space) $(服务名) .` + 5. 进入网页端进行openEuler专业知识领域的问答 +- 构建项目专属知识领域的智能问答 + 详细信息请查看`docs/本地语料上传指南.md` + +## 附录 +### 大模型部署 +#### GPU环境部署模型可参考以下方式 +``` +# 下载模型文件: +huggingface-cli download --resume-download Qwen/Qwen1.5-14B-Chat --local-dir Qwen1.5-14B-Chat +# 创建终端,screen -S contol +python3 -m fastchat.serve.controller +按ctrl A+D置于后台 +# 创建新终端,screen -S api +python3 -m fastchat.serve.openai_api_server --host 0.0.0.0 --port 30000 --api-keys sk-123456 +# 如果当前环境的python版本是3.12或者3.9可以创建python3.10的conda虚拟环境 +mkdir -p /root/python-py310 +conda create --prefix=/root/python-py310 python==3.10.14 +conda activate /root/python-py310 +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 +``` +#### NPU环境部署模型待补充 \ No newline at end of file diff --git "a/docs/pictures/EulerCopilot\351\203\250\347\275\262\346\226\271\346\241\2101.png" "b/docs/pictures/EulerCopilot\351\203\250\347\275\262\346\226\271\346\241\2101.png" new file mode 100644 index 0000000000000000000000000000000000000000..97ea4f384fa0e7779139e48238ac77cf02005403 Binary files /dev/null and "b/docs/pictures/EulerCopilot\351\203\250\347\275\262\346\226\271\346\241\2101.png" differ diff --git "a/docs/pictures/EulerCopilot\351\203\250\347\275\262\346\226\271\346\241\2102.png" "b/docs/pictures/EulerCopilot\351\203\250\347\275\262\346\226\271\346\241\2102.png" new file mode 100644 index 0000000000000000000000000000000000000000..fd362c90e655874b8a2f5837e87b0529da57e4c9 Binary files /dev/null and "b/docs/pictures/EulerCopilot\351\203\250\347\275\262\346\226\271\346\241\2102.png" differ diff --git "a/docs/\346\234\254\345\234\260\350\257\255\346\226\231\344\270\212\344\274\240\346\214\207\345\215\227.md" "b/docs/\346\234\254\345\234\260\350\257\255\346\226\231\344\270\212\344\274\240\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..f936e18eb700b74aee06c515f562de90fe7901d4 --- /dev/null +++ "b/docs/\346\234\254\345\234\260\350\257\255\346\226\231\344\270\212\344\274\240\346\214\207\345\215\227.md" @@ -0,0 +1,40 @@ +# 本地语料上传指南 +本地语料上传指南是用户构建项目专有语料的指导,目前语料功能支持格式docx、txt、md格式 +## 上传前准备 +1. 修改配置文件中路径 +修改euler-copilot-helm/chat/values.yaml的rag,指定待向量化的文档存放的位置: +`docs_dir: /home/data/corpus` +2. 将本地语料保存到服务器的`/home/data/corpus`目录 +3. 执行环境变量,并更新服务: +``` +export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +helm upgrade -n euler-copilot 服务名称 . +``` +4. 进入到rag容器: +`kubectl -n exec -it -- bash` + +## 上传语料到数据库 +进入脚本目录进行语料相关操作`cd /rag-service/scripts` +- 初始化pg:  +`python3 corpus_manager.pyc --method init_pg --pg_host=127.0.0.1 --pg_port=5432 --pg_user=postgres --pg_pwd=123456` + +- 初始化资产 +`python3 corpus_manager.pyc --method init_corpus_asset ` + +- 上传语料: +`python3 corpus_manager.pyc --method up_corpus` + +- 查询语料:  +`python3 corpus_manager.pyc --method query_corpus` + +- 删除已上传的语料 +`python3 corpus_manager.pyc --method del_corpus --corpus_name="文件名"` + +- 清空数据库 +`python3 corpus_manager.pyc --method clear_pg + +## 端口转发 +``` +kubectl port-forward  $(主机上的端口):$(容器端口) -n euler-copilot  --address=0.0.0.0 +端口映射后可以直接用<主机IP:端口>去访问,例如如:http://192.168.16.177:3000/ +``` \ No newline at end of file diff --git a/script/README.md b/script/README.md new file mode 100644 index 0000000000000000000000000000000000000000..308d12e57e6f2df84a214296bc4ddc50ffa140c4 --- /dev/null +++ b/script/README.md @@ -0,0 +1,4 @@ +# script + +#### 介绍 +该目录存放部署过程使用的相关脚本