惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google DeepMind News
Google DeepMind News
T
Tenable Blog
博客园_首页
S
Securelist
Spread Privacy
Spread Privacy
Google Online Security Blog
Google Online Security Blog
Forbes - Security
Forbes - Security
Engineering at Meta
Engineering at Meta
U
Unit 42
L
LINUX DO - 热门话题
量子位
T
Threat Research - Cisco Blogs
博客园 - 【当耐特】
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
The Last Watchdog
The Last Watchdog
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
Martin Fowler
Martin Fowler
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Security Latest
Security Latest
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
Know Your Adversary
Know Your Adversary
Cisco Talos Blog
Cisco Talos Blog
The Register - Security
The Register - Security
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
V2EX - 技术
V2EX - 技术
T
Tailwind CSS Blog
月光博客
月光博客
Recent Announcements
Recent Announcements
G
Google Developers Blog
F
Full Disclosure
W
WeLiveSecurity
宝玉的分享
宝玉的分享
腾讯CDC
G
GRAHAM CLULEY
Vercel News
Vercel News
Simon Willison's Weblog
Simon Willison's Weblog
美团技术团队
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
我在给 Ops 工具写 Copilot
微信公众号 · 2023-09-23 · via 陈少文的网站

1. 什么是 Ops 工具

https://www.chenshaowen.com/ops/ 是我日常运维最频繁使用的工具之一。

运维机器,我可以复用之前的脚本,批量进行操作。

运维集群,我可以复用之前的脚本,不用登录节点也可以操作机器。

如果遇到新的运维问题,我会马上编写 Task Yaml 对操作进行固化,方便下一次复用。

Ops 的核心操作是脚本执行和文件分发,核心对象是主机、Kubernetes 集群。主机和集群都需要实现 Ops 的两种核心操作,最上层是 Task 编排,沉淀运维场景。

2. 为什么要写 Copilot

尝试开发基于大模型的应用。大模型提供了一种全新的使用和设计思路,代表着先进的生产方式。对于人类来说,重复、繁琐、机械的事情,只要有足够的数据积累,都可以交给大模型来完成。应用会朝着基于大模型的方向演进,我也希望自己在这个方向上多思考落地的可能。

弥补 Ops 工具场景不足的问题。Ops 可以实现有限的运维核心能力,对接有限的基础设施。但无法满足无限的运维场景,开放式的场景需要一个类似大模型这样的智能体,对场景进行肢解,转换为按照一定逻辑执行的 Ops 已经实现的核心能力。这种开发场景到有限核心能力的转换,是基于大模型的应用需要重点考虑的一个问题。

写 Copilot 比想象中简单,但需要一个使用的场景,促进思考与迭代。前段时间,一直在折腾大模型推理,这周正好有时间开发 Ops。从有想法,到开始写,再到有点效果,不到半周时间,真正写代码的时间不到一天。

能提高我的工作效率。Ops 目前有三个组件,Opscli、OpsServer、OpsController。Opscli 是命令行工具,形态上很类似一个大模型的前端,同时 Opscli 也是我高频使用的组件,在 Opscli 上集成 Copliot 有助于节省我排查故障、变更配置所需的时间。

3. 聊聊我的思路

3.1 处理流程

如上图:

  1. 用户的输入,可能是一条文本,一个点击,当然也可以是一个事件
  2. 大模型需要针对这个输入,将其转换为系统内部的若干步骤
  3. 我的应用执行这一系列的任务
  4. 大模型整理这些任务的执行结果,给出一个输出。这个输出可能是一个提示,一个弹框,一个文本,一个事件。

3.2 拆解任务

在上面处理流程中,第一个难点就是如何拆分任务。

如上图:

人的思维是方向性的,人的描述是抽象的。

比如,人饿的时候说,”我饿了“,”我要吃饭“。但这种表述,对于机器来说,是无法理解的。你得说,“我在半个小时之后,在家里,吃饭,一碗米饭,一个番茄炒鸡蛋,一个炒青菜”,这样才是机器能够理解,并且可以得以执行的。

这种抽象的任务转换为具体任务 TodoList 的过程,就是 Copilot 需要完成的核心功能之一。

在拆解任务的过程中,除了需要大模型本身的智能外,还需要:

  • 领域大知识,大模型掌握的是泛泛的知识,比如文化习惯、语言习惯、行为习惯等,但是对于具体的、最新的领域知识,大模型是来不及学习的,也没有足够的语料来学习。如果能通过动态加载 lora 微调的方式、向量知识库,来加载领域知识,会是一个很好的方式。
  • 我的应用相关的信息。我的应用对于大模型来说,是一个黑盒,全新、陌生、不了解的新事物。只有让大模型理解我的应用,才能更好的拆解任务。
  • 上下文。每次事件的响应,都需要考虑上下文。哪一个用户,哪一个数据库,哪一个集群,哪一个操作系统等,这些组成了上下文信息。

有了这些补充,大模型就可以将抽象的任务转换为具体的任务,以供我的应用执行。

3.3 对大模型暴露应用信息

这又是一个我需要继续优化 Ops 工具的地方。

如上图:

为了让大模型更好理解我的应用,我需要将应用详细完整的文档提交给大模型。但提交全部的文档给大模型,不具备可行性。你不仅要克服大模型处理的最长文本限制,还需要考虑因长文本导致的中间段信息丢失的问题。因此,最好的办法就是提交一个 Schema,提交你的设计思路,而不是提交你的设计实现

同理的还有 API\CLI 的实现,不要将一个一个接口 URL、参数、返回值都提交给大模型,而是要告诉大模型,你的 API\CLI 的设计思路是什么。

但这对应用的设计者提出了非常高的要求,我们不能再人云亦云、到处抄袭,而是要让产品有简单、自洽、统一的设计。

4. 现在啥进度、未来啥计划

目前 Ops 的 Copilot 还处于非常初级的阶段,实现了类似 open-interpreter 的功能。

opscli copilot 能够根据用户的输入,在本地执行脚本,输出结果,完成类似,打开浏览器、查询 Kubernetes 集群各种信息、关闭微信应用等任务。

如果开发顺利,我希望 opscli copilot 能演化为一个单独的服务 OpsCopilot,对接 OpsCli、OpsServer、OpsController。

同时,Copilot 也不会依赖任何 GPT-3.5、GPT-4 等模型专有的一些功能特性,比如 function call 等,保持 Copilot 的通用性,而不是兼容性。