楼主: CDA网校
286 0

如何使用 Python 与 Ollama 构建命令行智能体:从零搭建免费本地 CLI 智能体 [推广有奖]

管理员

已卖:189份资源

泰斗

14%

还不是VIP/贵宾

-

威望
3 级
论坛币
159838 个
通用积分
19325.5256
学术水平
338 点
热心指数
350 点
信用等级
313 点
经验
247543 点
帖子
7924
精华
22
在线时间
4577 小时
注册时间
2019-9-13
最后登录
2026-10-20

初级热心勋章

楼主
CDA网校 学生认证  发表于 2026-8-11 18:04:40 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

前言

CLI(命令行界面,也被称作终端或 Shell)是基于文本的用户交互界面,用户可通过输入特定命令查看、管理电脑资源并完成各类操作。CLI 人工智能智能体是开发者工具演进的最新形态,它结合了大语言模型的推理能力,可直接调用电脑终端、本地文件及各类外部工具。简单来说,你无需网页界面,就能在终端直接使用高性能 AI 模型。

2022 年 ChatGPT 的问世,彻底改变了人机交互方式,用户得以用自然语言替代繁琐的程序命令。2023 年,OpenAI 推出的**工具调用(Tool Calling)**功能实现行业重大突破:大模型不再局限于纯文本输出,还能通过结构化请求调用外部应用、获取执行结果,并基于结果持续推理。2025 年,首款无网页端、纯终端运行的 AI 智能体 Super CLI 正式上线,随后 Anthropic 的 Claude Code、OpenAI 的 Codex CLI 相继推出。

CLI 智能体能够快速普及,核心原因是它完美适配开发者现有工作流:并非取代终端,而是为终端赋予智能推理能力。命令行从此从「人工执行命令的窗口」,升级为「用户定义目标、AI 自主执行任务的协作工作台」。

目前主流 CLI 智能体分为三类:

  1. 云端原生型(代表:Claude Code):大模型在云端运行,CLI 终端安全调用本地工具完成操作。

  2. 开源编排型(代表:Hermes):智能体调度框架完全开源,支持调用本地或云端大模型。

  3. 全本地部署型(代表: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万+在读~ !

免费加入阅读:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python 如何使用 智能体 Ama Lam

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-10-20 15:17