
前言
CLI(命令行界面,也被称作终端或 Shell)是基于文本的用户交互界面,用户可通过输入特定命令查看、管理电脑资源并完成各类操作。CLI 人工智能智能体是开发者工具演进的最新形态,它结合了大语言模型的推理能力,可直接调用电脑终端、本地文件及各类外部工具。简单来说,你无需网页界面,就能在终端直接使用高性能 AI 模型。
2022 年 ChatGPT 的问世,彻底改变了人机交互方式,用户得以用自然语言替代繁琐的程序命令。2023 年,OpenAI 推出的**工具调用(Tool Calling)**功能实现行业重大突破:大模型不再局限于纯文本输出,还能通过结构化请求调用外部应用、获取执行结果,并基于结果持续推理。2025 年,首款无网页端、纯终端运行的 AI 智能体 Super CLI 正式上线,随后 Anthropic 的 Claude Code、OpenAI 的 Codex CLI 相继推出。
CLI 智能体能够快速普及,核心原因是它完美适配开发者现有工作流:并非取代终端,而是为终端赋予智能推理能力。命令行从此从「人工执行命令的窗口」,升级为「用户定义目标、AI 自主执行任务的协作工作台」。
目前主流 CLI 智能体分为三类:
云端原生型(代表:Claude Code):大模型在云端运行,CLI 终端安全调用本地工具完成操作。
开源编排型(代表:Hermes):智能体调度框架完全开源,支持调用本地或云端大模型。
全本地部署型(代表:Ollama):模型与智能体调度逻辑全部在本地设备运行,无需联网。
本文将手把手教你使用 Python + Ollama 从零搭建免费、全本地化 CLI 智能体,提供完整可运行代码,并逐行注释解析,确保你可以直接复刻落地。
环境部署
首先部署本地开源大模型运行工具 Ollama,执行安装命令:pip install ollama==0.6.2。
第一步:前往 Ollama 官网下载安装客户端;
第二步:在本地终端执行命令拉取大模型。本文选用阿里通义千问 Qwen 模型,兼顾轻量化与推理性能,适配本地设备运行。

模型下载完成后,即可编写 Python 代码,初始化大模型:
import ollama
llm = "qwen2.5"
该 CLI 智能体的核心能力是执行终端 Shell 命令,因此需要为模型配置专属工具能力。我们将分三步实现:定义工具执行函数、绑定函数与工具名称、适配 Ollama 工具调用规范配置结构化参数。
终端命令调用依赖 Python 内置的 subprocess 模块,可直接通过代码调用系统命令、获取执行结果。
import subprocess
# 1. 定义终端命令执行工具函数
def execute_shell_command(command: str) -> str:
"""执行终端 Shell 命令,返回标准输出或错误信息"""
try:
# 执行系统命令,捕获输出、设置10秒超时防止卡死
result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=10)
# 执行成功返回标准输出,失败返回错误信息
return result.stdout if result.returncode == 0 else result.stderr
except Exception as e:
return str(e)
# 2. 建立工具名称与Python函数的映射关系
TOOL_MAP = {
'execute_shell_command': execute_shell_command
}
# 3. 适配Ollama的工具调用结构化参数规范
TOOLS_SCHEMA = [
{
'type': 'function',
'function': {
'name': 'execute_shell_command',
'desc ription': '在本地设备执行安全的终端Shell命令',
'parameters': {
'type': 'ob ject',
'properties': {
'command': {
'type': 'string',
'desc ription': '需要运行的完整Bash/Shell命令'
}
},
'required': ['command']
}
}
}
]
智能体核心逻辑搭建
大模型对话交互包含三种核心角色,对应不同对话指令权限:
system(系统角色):为模型设定核心身份与行为规范,定义对话与任务执行规则;
user(用户角色):承载用户的提问与指令;
assistant(助手角色):大模型的回复与推理结果。
首先配置系统提示词,定义智能体的基础能力:
# 初始化对话上下文,设定智能体身份与能力
messages = [
{"role": "system", "content": "你是一个实用的本地CLI助手,可调用工具查看系统信息、执行各类终端任务。"}
]
为实现持续对话交互,我们通过死循环监听用户输入,自动调用智能体响应(文本回答或工具调用),完整基础交互框架如下:
import sys
# 持续对话循环
while True:
try:
# 接收用户终端输入
user_input = input(" >")
# 退出指令
if user_input.lower() in ['exit', 'quit']:
break
# 过滤空输入
if not user_input.strip():
continue
# 将用户指令加入对话上下文
messages.append({"role": "user", "content": user_input})
# 调用Ollama大模型,启用工具调用能力
response = ollama.chat(
model=llm,
messages=messages,
tools=TOOLS_SCHEMA
)
# 捕获手动终止指令(Ctrl+C)
except KeyboardInterrupt:
print("\n退出程序。")
sys.exit(0)
当模型判断需要调用终端工具时,会在返回结果中携带tool_calls 参数,我们需要解析该参数、执行对应系统命令,并将工具执行结果回传给模型,完成闭环推理。
在上述代码的空白位置,插入工具调用解析与执行逻辑:
import json
# 循环处理模型发起的所有工具调用请求
while response.get('message', {}).get('tool_calls'):
# 将模型的工具调用指令加入对话上下文
messages.append(response['message'])
# 遍历所有待执行的工具调用
for tool_call in response['message']['tool_calls']:
tool_name = tool_call['function']['name']
arguments = tool_call['function']['arguments']
# 打印工具执行日志
print(f" >[执行工具] {tool_name}({json.dumps(arguments)})")
# 匹配并执行对应工具函数
if tool_name in TOOL_MAP:
# 执行Shell命令,获取结果
tool_result = TOOL_MAP[tool_name](**arguments)
# 将工具执行结果回传给大模型,用于最终推理回答
messages.append({
"role": "tool",
"name": tool_name,
"content": tool_result
})
else:
print(f" >未知工具调用:{tool_name}")
# 携带工具执行结果,二次调用模型,生成最终回答
response = ollama.chat(
model=llm,
messages=messages,
tools=TOOLS_SCHEMA
)
# 输出模型最终自然语言回答
res = response['message']['content']
print(f" >{res}\n")
# 将最终回答存入上下文,保持对话记忆
messages.append({"role": "assistant", "content": res})
考虑到终端操作的风险性,该逻辑会让模型在生成最终答案前,二次校验对话历史与命令参数,避免误操作。
运行测试
将完整代码保存为 CLIagent.py,在终端执行运行命令:python CLIagent.py,即可启动本地 CLI 智能体并开始交互。
智能体可自动将自然语言需求转化为系统 Shell 命令,典型使用场景:
查询磁盘剩余空间:自动执行
df -h查看系统版本:自动执行
sw_vers查询内存占用、CPU 高负载进程:自动执行
top、ps命令

重要风险提示:模糊的清理、删除类指令(如「清空下载文件夹」)可能导致文件误删、数据丢失,使用时务必谨慎。
总结
本文完整实现了纯本地、免费、可自主执行终端命令的 AI CLI 智能体。在基础框架之上,你可以拓展更多工具能力(Excel 处理、Python 脚本运行等),复刻 Hermes、Claude Code 等成熟智能体的核心功能,搭建更复杂的本地 AI 助手。
推荐学习书籍 《CDA一级教材》适合CDA一级考生备考,也适合业务及数据分析岗位的从业者提升自我。完整电子版已上线CDA网校,累计已有10万+在读~ !



雷达卡





京公网安备 11010802022788号







