本地可执行命令的智能体部署方案

news2025/5/9 13:06:49

本地可执行命令的智能体部署方案,目标是让大语言模型(LLM)在本地接收自然语言指令,并自动调用系统命令、脚本或应用程序,完成任务自动化。这类系统通常被称为 LLM Agent with Tool Use本地 Agent 实体系统


🧠 一、系统整体架构(LLM+Agent+Command执行)

       ┌────────────┐
       │ 自然语言输入 │
       └────┬───────┘
            ▼
       ┌────────────┐
       │  LLM Agent │  ← 支持 Tool 使用
       └────┬───────┘
            ▼
       ┌──────────────┐
       │ 指令解析与规划 │
       └────┬─────────┘
            ▼
   ┌────────────────────┐
   │ 系统命令执行 (bash, python, etc.) │
   └────────────────────┘
            ▼
       ┌────────────┐
       │ 执行结果反馈 │
       └────────────┘

🚀 二、部署方案选型

类型模型支持工具管理优点缺点
LangChain + ChatGLM/Qwen + Tool生态成熟,可组合配置复杂
AutoGPT / OpenAgents 本地版任务自动规划占资源多
Custom Agent(FastAPI + Shell)自定义手动定义工具控制强、轻量需自建功能

推荐方案:LangChain + LLM + 本地工具调用 + FastAPI 接口包装


⚙️ 三、核心实现步骤(LangChain 本地智能体)

1. 环境准备

conda create -n agent python=3.10 -y
conda activate agent
pip install langchain openai transformers auto-gptq faiss-cpu
pip install duckduckgo-search # optional web tool

2. 加载本地模型(Qwen/ChatGLM)

from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-1_8B-Chat", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-1_8B-Chat", trust_remote_code=True).half().cuda()

封装成 llm = HuggingFacePipeline(...),用于 langchain。


3. 定义可调用工具(如 shell 执行器)

from langchain.tools import Tool
import subprocess

def execute_shell(command: str) -> str:
    try:
        return subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT, timeout=10).decode("utf-8")
    except subprocess.CalledProcessError as e:
        return f"[Error]: {e.output.decode('utf-8')}"

shell_tool = Tool(name="shell", func=execute_shell, description="Execute shell command on local system")

4. 构建 Agent

from langchain.agents import initialize_agent, AgentType
from langchain.agents.agent_toolkits import Tool

tools = [shell_tool]  # 你也可以加入 python 执行器、浏览器搜索器等

agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 测试
response = agent.run("列出当前目录下的所有文件,并显示文件大小")
print(response)

5. FastAPI 封装成服务(可被Web调用)

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Request(BaseModel):
    query: str

@app.post("/agent")
def run_agent(req: Request):
    result = agent.run(req.query)
    return {"result": result}

运行:

uvicorn agent_api:app --host 0.0.0.0 --port 8080

🔐 安全建议

项目建议
命令白名单限制 LLM 只能调用指定命令(避免 rm -rf)
沙盒执行使用 dockerchroot 隔离指令
日志审计记录调用历史
用户认证增加 JWT 或 API Token

📦 推荐工具扩展

  • Python Executor Tool:解释 Python 代码(如计算器、数据分析)
  • 文件系统工具:读写指定目录下的文本、Excel、PDF
  • 网络爬虫 Tool:执行 requests/get 接口(需加认证)
  • 插件系统:仿 OpenAI Function Call 的格式

✅ 示例自然语言任务

- 帮我统计当前目录下的 Python 文件数量
- 运行一个 Python 脚本,并返回输出
- 用 curl 请求一个 API 并展示返回内容
- 列出系统进程中占用内存最多的前5个

如果你需要我生成一个**完整部署项目(含工具定义、模型加载、API服务)**的代码压缩包,我可以立即打包给你。你希望使用哪种模型(如 Qwen-1.8B、ChatGLM2、Baichuan2)?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2371482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rust程序静态编译的两种方法总结

1. 概述 经过我的探索,总结了两种rust程序静态编译的方法,理论上两种方法都适用于windows、mac os和linux(mac os未验证),实测方法一性能比方法二好,现总结如下,希望能够帮到你. 2.方法一 2.1 添加配置文件 在项目的同级文件夹下新…

【Linux系列】目录大小查看

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

2048游戏(含Python源码)

前言 相关参考游戏: 像素飞机大战(含Python源码)-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/147693018?spm1001.2014.3001.5501使用DeepSeek定制Python小游戏——以“俄罗斯方块”为例-CSDN博客https://blog.csdn.n…

中间件-RocketMQ

RocketMQ 基本架构消息模型消费者消费消息模式顺序消息机制延迟消息批量消息事务消息消息重试最佳实践 基本架构 nameServer: 维护broker列表信息,客户端连接时只需要连接nameServer。可配置成集群。 broker:broker分为master和slave,master负…

Python就业方向有哪些?

Python 作为一门通用、易学且功能强大的编程语言,在多个领域都有广泛的应用,因此就业方向也非常多样化。以下是 Python 主要的就业方向及相关技能要求。 1. Web 开发 岗位:Python Web 开发工程师、后端工程师、全栈工程师技术栈&#xff1a…

iptables 访问控制列表使用记录

iptables 是linux操作系统上自带的防火墙程序,功能强大,能够依据策略过滤掉一些恶意访问流量,本次记录一下iptables的常见使用方法,未尽之处,欢迎补充。 一、iptables 下载 我这里使用的是华为openEuler 22.03版本&am…

16. Qt系统相关:事件、定时器

1. Qt事件 1.1 简介 事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件。所有的Qt事件均继承于抽象类QEvent。事件是由系统或者Qt平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候&#…

云平台搭建

物联网云平台的基本概述 基本概念 随着物联网技术的快速发展,越来越多的设备需要接入网络以实现智能化功能,物联网平台应运而生。 物联网云平台(IoT Cloud Platform)是物联网生态系统中的核心组件,它通过提供一系列…

数学实验(Matlab语言环境和线性代数实验)

一、Matlab语言环境和线性代数实验 1.Matlab语言环境 Matlab简介 Matlab:Matrix Laboratry 矩阵实验室 Matlab 提供了强大的科学计算、灵活的程序设计流程、高质量的图形可视化与界面设计等功能,被广泛应用于科学计算、控制系统、信息处理等领域的分…

Elasticsearch 中的索引模板:如何使用可组合模板

作者:来自 Elastic Kofi Bartlett 探索可组合模板以及如何创建它们。 更多阅读: Elasticsearch:可组合的 Index templates - 7.8 版本之后 想获得 Elastic 认证吗?查看下一期 Elasticsearch Engineer 培训的时间! El…

【LeetCode 42】接雨水(单调栈、DP、双指针)

题面: 思路: 能接雨水的点,必然是比两边都低(小)的点。有两种思路,一种是直接计算每个点的最大贡献(也就是每个点在纵向上最多能接多少水),另一种就是计算每个点在横向上…

【JS逆向基础】前端基础-HTML与CSS

1,flask框架 以下是一个使用flask框架写成的serve程序 # noinspection PyUnresolvedReferences #Flash框架的基本内容from flask import Flask app Flask(__name__)app.route(/index) def index():return "hello index"app.route(/login) def login():re…

手机网页提示ip被拉黑名单什么意思?怎么办

‌当您使用手机浏览网页时,突然看到“您的IP地址已被列入黑名单”的提示,是否感到困惑和不安?这种情况在现代网络生活中并不罕见,但确实会给用户带来诸多不便。本文将详细解释IP被拉黑的含义、常见原因,并提供一系列实…

CCF编程能力等级认证 一级 第一次课

介绍 CCF 编程能力等级认证(GESP)为青少年计算机和编程学习者提供学业能力验证的规则和平台,由中国计算机学会发起并主办。 每年考试分四次,时间是每年的3月、6月、9月、12月,以当年每期公布的时间为准。 GESP适用年…

SpringBoot 讯飞星火AI WebFlux流式接口返回 异步返回 对接AI大模型 人工智能接口返回

介绍 用于构建基于 WebFlux 的响应式 Web 应用程序。集成了 Spring WebFlux 模块,支持响应式编程模型,构建非阻塞、异步的 Web 应用。WebFlux 使用了非阻塞的异步模型,能够更好地处理高并发请求。适合需要实时数据推送的应用场景。 WebClie…

Python爬虫中time.sleep()与动态加载的配合使用

一、动态加载网页的挑战 动态加载网页是指网页的内容并非一次性加载完成,而是通过JavaScript等技术在用户交互或页面加载过程中逐步加载。这种设计虽然提升了用户体验,但对于爬虫来说,却增加了抓取的难度。传统的爬虫方法,如简单…

AtCoder Beginner Contest 404 A-E 题解

还是ABC好打~比ARC好打多了&#xff08; 题解部分 A - Not Found 给定你一个长度最大25的字符串&#xff0c;任意输出一个未出现过的小写字母 签到题&#xff0c;map或者数组下标查询一下就好 #include<bits/stdc.h>using namespace std;#define int long long #def…

【mysql】常用命令

一 系统mysql用户密码查询 1、在工程目录如/usr/local/httpd/下的*.php中查找类似有db.inf的文件 以php为例。 2、在代码文件中确认有数据库连接的的功能实现 例如&#xff1a; $dbconf parse_ini_file(/usr/local/httpd/conf/db.inf); $link mysql_connect($dbconf[d…

macOS Arduino IDE离线安装ESP8266支持包

其实吧&#xff0c;本来用platformio也是可以的&#xff0c;不过有时候用Arduino IDE可能更快一些&#xff0c;因为以前一直是Arduino.app和Arduino IDE.app共存了一段时间&#xff0c;后来下决心删掉Arduino.app并升级到最新的Arduino IDE.app。删除了旧的支持板级支持包之后就…

网络靶场基础知识

一、网络靶场的核心概念 网络靶场&#xff08;Cyber Range&#xff09;是一种基于虚拟化和仿真技术的网络安全训练与测试平台&#xff0c;通过模拟真实网络环境和业务场景&#xff0c;为攻防演练、漏洞验证、安全测试和人才培养提供安全可控的实验空间。其核心目标是通过“虚实…