我们常见的操作kubernetes的方式,除了kubectl命令行客户端,api接口调用kubnernetes接口,或者类似于kubnernetes官方的图形客户端dashboard,我自己曾经一直用cient-go 结合 gin框架搭建一套api 的kubernetes接口,操作kubernetes。如何利用大语言模型的agent,以一种用户对话的方式,操作k8s.
工具
硅基流动模型广场 https://cloud.siliconflow.cn/models
Pro/deepseek-ai/DeepSeek-R1
框架:golang gin, Cobra ,go-openai
kubernetes 集群 可用简答的 kind 或者 minekube 就可以
Cobra 是golang的一种命令行客户端框架,这里扮演前端用户客户端角色,用户不用在客户端操作kubectl,而是prompt。
创建Ai客户端的,不好科学上网的,我这里用的是硅基流动的模型广场,这样可以选择当下最火的DeepSeek大模型华为云升腾服务器,强烈推荐,当然阿里云百炼也很不错
这里贴出部分代码 https://github.com/Charlie-todream/llmk8s
1 | func NewOpenAiClient() *openai.Client { |
AGENT开发其实大半只需要更高promot模板,从ReAct下载一个模板并修改
1 | You are a Kubernetes expert. A user has asked you a question about a Kubernetes issue they are facing. You need to diagnose the problem and provide a solution. |
结合client-go创建增删该差工具
1 | type CreateTool struct { |
结合自己gin的api 整个过程如下
1 | func (c *CreateTool) Run(prompt string, resource string) string { |
进入 Cobra 的交互式命令后,用户可以在 shell 终端输入 prompt,程序会将用户 prompt 以及工具描述等用 sprintf 函数灌入到 ReAct 模板中,将该模板当作新的 prompt 发送给大模型。大模型在第一轮思考后会给出要调用什么工具以及 json 格式的工具参数,此时代码会通过 if else 进行工具名称匹配,匹配到后进行工具调用。最后将工具调用结果拼接到 Obervation 后面,开始下一轮对话。直到得到 Final Answer 后,对话结束。
- 本文作者: 东方觉主
- 本文链接: http://www.charon193.com/2025/02/22/k8sllm/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!