基于原生deepseek开发的智能终端工具Nuwa Terminal
基于原生deepseek开发的智能终端工具Nuwa Terminal
基于生成式AI可以重构一切传统软件的思路,我产生了一种想法就是使用AI大模型,来开发一款更加智能的终端工具。于是Nuwa Terminal诞生了。
nuwa-terminal 是一个在终端中与大语言模型(LLM)聊天的程序,该工具基于LLM,旨在使终端更加智能。这个终端可以帮助用户使用自然语言
执行命令或任务,同时它还可以作为终端智能助手,你可以询问任何关于软件开发的任何问题。
为什么需要Nuwa Terminal智能终端
作为程序员,实际上我们只有少部分时间在写代码,大部分的时间在分析需求、阅读文档、调试代码、解决bug、沟通交流等。过程中有相当一部分
时间是在使用终端来完成一些任务,比如:
- 使用git命令提交代码。
- 使用docker或者K8S命令部署项目并进行测试。
- 调试应用程序。
- 使用Linux系统命令调查各种系统问题。
这些任务中,大部分都是重复性的工作,同时程序员需要查阅各种文档,Linux map page等等,这些都大大降低了我们的工作效率。
多个上下文的切换,降低了同一任务的专注度。尤其对于复杂的任务来说,如果是要编写shell脚本的话(shell 并不是每天都在使
用的编程语言,只有在需要的时候,尤其是测试的时候使用),并不是每个人都擅长。这需要花更多的时间学习来完成。
然而,大语言模型存储了大量的知识,有些模型尤其擅长软件开发,Linux及开源软件的知识。通过大语言模型,可以轻松的使用自然
语言来生成Linux命令行或者shell脚本。
因此使用AI大模型的能力来赋能终端,可以让程序员的工作更加容易,同时专注在当前任务上。
Nuwa terminal的架构
nuwa terminal 的架构非常简单,它使用langchaingo作为基础库和大模型进行交互,langchaingo是langchain的golang复刻版本,
nuwa terminal 是基于单个AI agent的架构,通过调用命令和脚本来完成任务。
Nuwa terminal 目前支持的功能特性
- 基于终端的AI运维助力。
- 使用自然语言生成shell命令并执行。
- 使用自然语言生成shell脚本并执行。
- 使用智能体模式执行复杂任务或者故障排查。
- 支持执行自然语言编写的脚本。
- 支持和bash之间进行自由切换。
如何使用 Nuwa Terminal
Nuwa Terminal 的使用文档可以参考这里
安装前准备
- 你需要安装golang 1.22的版本
- 申请一个deepseek chat 的api key(https://www.deepseek.com/)
安装和使用
# 构建并安装 nuwa-terminal-chat
git clone https://github.com/darmenliu/nuwa-terminal-chat.git
cd nuwa-terminal-chat
make
# 使用 sed 将 LLM_API_KEY=apikey 替换为真实的 api key
sed -i 's/LLM_API_KEY=apikey/LLM_API_KEY=<你的 api key>/g' envs.sh
source envs.sh
# 运行 nuwa-terminal-chat
(base) $ ./nuwa-terminal
███ ██ ██ ██ ██ ██ █████ ████████ ███████ ██████ ███ ███ ██ ███ ██ █████ ██
████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ████ ██ ████ ██ ██ ██ ██
██ ██ ██ ██ ██ ██ █ ██ ███████ ██ █████ ██████ ██ ████ ██ ██ ██ ██ ██ ███████ ██
██ ██ ██ ██ ██ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ████ ██████ ███ ███ ██ ██ ██ ███████ ██ ██ ██ ██ ██ ██ ████ ██ ██ ███████
/home/bob>>> 你是谁?
你: 你是谁?
NUWA: 我是NUWA,一个终端聊天工具。我可以通过生成代码、执行命令和回答问题来帮助你进行软件开发。我有三种模式:
* **聊天模式:** 用于一般聊天和代码生成。
* **命令模式:** 用于执行Linux命令。
* **任务模式:** 用于生成shell脚本并执行Linux命令。
你可以使用以下命令在模式之间切换: chatmode
, cmdmode
, 和 taskmode
。
今天我能为你做些什么?
/home/bob>>> 你能为我做什么?
你: 你能为我做什么?
NUWA: 我是NUWA,你友好的软件工程师聊天机器人。我可以帮助你完成各种任务,包括:
**聊天模式:**
* 回答你关于软件开发概念、最佳实践等问题。
* 根据你的指示生成各种编程语言的代码片段。
**命令模式:**
* 直接在我们的聊天中执行Linux命令。
**任务模式:**
* 创建根据你需求定制的shell脚本。
* 在任务上下文中执行Linux命令。
要开始,告诉我你想进入哪种模式:
* **chatmode** 用于一般软件开发聊天
* **cmdmode** 用于运行Linux命令
* **taskmode** 用于创建和运行shell脚本
今天你想做什么?
/home/bob>>>
Nuwa Terminal 的工作模式
Nuwa 有四种工作模式,分别是:
- 聊天模式:用于一般聊天和代码生成。
- 命令模式:用于执行Linux命令。
- 任务模式:用于创建和运行shell脚本。
- 智能体模式:用于执行复杂任务或者故障排查。
聊天模式相当于Nuwa是一个智能运维助手,你可以和它进行聊天,询问各种问题,它可以帮助你回答问题,并生成代码或者shell命令。
在命令模式下,你可以通过自然语言生成Linux命令,并执行。同样任务模式下,你可以通过自然语言生成shell脚本,并执行。智能体
模式还是一个实验性的功能,在智能体模式下,Nuwa可以执行更加复杂的任务,比如:寻找系统高负载的原因,并找出相应的进程。
以下可以提供一些使用示例:
# 使用聊天模式,生成一个查询所有指定namespace下k8s pods日志的脚本
nuwa-terminal-chat@ 帮我生成查询所有指定namespace下k8s pods日志的脚本,
You: 帮我生成查询所有指定namespace下k8s pods日志的脚本,
NUWA: 好的,我可以帮你生成一个查询指定 Kubernetes 命名空间下所有 Pods 日志的脚本。这个脚本将使用 kubectl
命令来获取日志。
@get_pods_logs.sh@
#!/bin/bash
# 检查是否提供了命名空间参数
if [ -z "$1" ]; then
echo "Usage: $0 "
exit 1
fi
NAMESPACE=$1
# 获取指定命名空间下的所有 Pods
PODS=$(kubectl get pods -n $NAMESPACE -o jsonpath='{.items[*].metadata.name}')
# 遍历每个 Pod 并获取日志
for POD in $PODS; do
echo "Fetching logs for pod: $POD"
kubectl logs $POD -n $NAMESPACE
done
### 使用方法:
1. 将上述脚本保存为 get_pods_logs.sh
。
2. 赋予脚本执行权限:chmod +x get_pods_logs.sh
。
3. 运行脚本并指定命名空间:./get_pods_logs.sh <namespace>
。
这个脚本会输出指定命名空间下所有 Pods 的日志。如果你需要进一步处理这些日志,可以在脚本中添加相应的逻辑。
# 默认是聊天模式,切换到命令模式,执行命令时以自然语言描述
nuwa-terminal-chat@ cmdmode
You: cmdmode
2025-01-11 21:26:03 INFO NUWA TERMINAL: Mode is cmdmode
nuwa-terminal-chat# 获取当前系统cpu占用较高的进程
You: 获取当前系统cpu占用较高的进程
NUWA: execute command: ps aux --sort=-%cpu | head -n 10
time=2025-01-11T21:26:47.635+08:00 level=INFO msg=Matched: "match content"="ps aux --sort=-%cpu | head -n 10"
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 245519 2.1 0.1 6258356 30852 pts/5 Sl+ 21:25 0:01 ./nuwa-terminal
root 1 1.0 0.0 167020 12400 ? Ss 11:33 6:03 /sbin/init
root 781 0.4 0.2 43388 36800 ? S 11:33 2:37 python3 /snap/ubuntu-desktop-installer/1286/usr/bin/cloud-init status --wait
# 切换到任务模式,生成一个shell脚本,并执行
# taskmode
You: taskmode
2025-01-11 21:31:09 INFO NUWA TERMINAL: Mode is taskmode
nuwa-terminal-chat> 查询当前内存使用情况,找出系统中占用内存较高的前5进程
You: 查询当前内存使用情况,找出系统中占用内存较高的前5进程
NUWA: 以下是一个用于查询当前内存使用情况并找出系统中占用内存较高的前5进程的Shell脚本:
#!/bin/bash
# 获取内存使用情况并排序,显示前5个进程
ps aux --sort=-%mem | head -n 6
### 解释:
- ps aux
:显示所有进程的详细信息。
- --sort=-%mem
:按照内存使用率(%MEM)降序排序。
- head -n 6
:显示前6行(包括标题行),即前5个进程。
运行此脚本后,您将看到系统中占用内存最高的前5个进程及其详细信息。
time=2025-01-11T21:33:12.748+08:00 level=INFO msg="Adding file to source file dict" content="`` shell\n#!/bin/bash\n\n# 获取内存使用情况并排序,显示前5个进程\nps aux --sort=-%mem | head -n 6\n
``"
time=2025-01-11T21:33:12.748+08:00 level=INFO msg=Matched: "match_content "="#!/bin/bash\n\n# 获取内存使用情况并排序,显示前5个进程\nps aux --sort=-%mem | head -n 6"
2025-01-11 21:33:12 INFO NUWA TERMINAL: script file saved to
│ .nuwa-terminal/scripts/39ea4f03-79d9-4cc4-8ea4-1cb338ce9314.sh
2025-01-11 21:33:12 INFO NUWA TERMINAL: script output
└ output: + ps aux --sort=-%mem
+ head -n 6
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
2025-01-11 21:33:12 INFO NUWA TERMINAL: script file removed
未来的开发计划
- 支持项目和解释代码
- 支持分析日志和解释日志
- 支持远程模式,通过ssh在远程主机上执行命令或者任务
- 支持通过自然语言执行git 相关的操作
贡献者招募
Nuwa Terminal 是一个开源项目,是一个有趣的学习和尝试,通过AI大模型来重构终端工具,欢迎有兴趣的伙伴参与贡献,共同打造一个更加智能的终端工具。
如果感兴趣,可以联系我,一起交流。
如果你关注到这个项目,欢迎给个star,谢谢。
写在最后
我希望将Nuwa Terminal打造成一个更加智能的终端工具,也许它会成为程序员运维工作的好帮手。未来我会引进多智能体架构,使得该工具能够
更加智能和自主的完成任务,目前该工具还处于早期阶段,欢迎大家关注和使用,并提出宝贵的意见和建议。足够多的反馈,会让我
更有动力去完善它。
最后,感谢大家的关注和支持。
[…] 该文章基于原生deepseek开发的智能终端工具nuwa-terminal 会有详细的介绍。 […]