news 2026/4/10 21:38:33

本地部署大模型-AI Agent

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
本地部署大模型-AI Agent

从“会聊天”,到“会做事”,再到“会协作”,
AI Agent 的本质是把大模型变成一个能持续行动的系统。

一、为什么有了大模型,还需要 AI Agent?

如果你已经折腾过本地大模型、RAG、微调,你大概率会有一个感受:

模型很聪明,但它什么也“不会自己去做”。

它可以:回答问题、写代码、给建议;

但它不会:主动拆解任务、决定下一步该做什么、调用工具并根据结果修正策略

这正是AI Agent 出现的原因,让AI自动进行拆解任务、决定下一步该做什么、调用工具并根据结果修正策略。

二、一句话理解 AI Agent

AI Agent 不是更大的模型,而是“能自己行动的大模型”。

更工程一点的定义是:

AI Agent = 大模型 + 目标 + 记忆 + 工具 + 控制循环

它不再是“一问一答”,而是一个持续运行的决策系统

三、AI Agent 与普通大模型的区别

对比维度普通大模型AI Agent
交互方式一问一答目标驱动
是否拆任务NoYes
是否调用工具被动主动
是否有状态NoYes
是否能纠错NoYes
更像什么搜索引擎助理 / 执行者

我们提供想法和大概的思路,甚至只给大模型一个思路,大模型负责“想”,补充实现路径和实现细节,Agent 负责“想 + 做 + 改”。

现实中 90% 的可用 Agent,其实停留在 Level 2–4,但已经非常强。

五、一个 AI Agent 的最小实现结构(MVP)

从工程角度看,一个 Agent 至少需要这几样:

用户目标 ↓ 任务规划(LLM) ↓ 行动循环(Agent Loop) ├─ 选择工具 ├─ 执行 ├─ 读取结果 ├─ 更新记忆 └─ 判断是否完成 # 伪代码 while not done: plan = llm.plan(goal, memory) action = select_tool(plan) result = action.execute() memory.update(result) done = check_done(memory)

以下是 Agent 的所有“器官”,只差一个控制中枢。

Agent 模块对应技术
大脑本地 LLM
记忆RAG / JSON / SQLite
工具Python / API
行动写代码 / 发消息 / 建待办
控制一个 while 循环

当模型开始为目标负责,而不是为回答负责,
AI 才真正开始“工作”。

实现路线实例:

技术栈(适合 4GB 显卡)

  • 本地模型:deepseek-r1:1.5b(推理/规划)或qwen2.5-coder:1.5b(代码执行更稳)
  • 推理服务:Ollama
  • Agent 框架:自己写一个轻量 Loop(更可控、便于写推文/教学)
  • 工具:文件读写、Python 运行、R 运行、Shell(可选,建议受限)

一键起步(环境 & 拉模型)

# 1) 安装 ollama # 2) 拉取模型(选一个主模型即可) ollama pull deepseek-r1:1.5b # 或更偏代码: ollama pull qwen2.5-coder:1.5b # 3) python 依赖 pip install -U requests pydantic rich

项目结构

local_agent/ agent.py # 主循环(Planner/Executor/Memory) tools.py # 工具注册与实现 llm_ollama.py # 调用 Ollama prompts.py # 系统提示模板 workspace/ # Agent 允许读写的沙箱目录, #建议限制只在工作路径下进行,后期接入VS code很有必要

核心思想:用“结构化动作”驱动工具调用

Ollama 不保证原生 function-calling 一致,所以我们用强约束输出 JSON

Agent 每一步让模型只输出下面三种之一:

  • {"type":"plan","steps":[...]}
  • {"type":"action","tool":"read_file","args":{...}}
  • {"type":"final","answer":"..."}

这样就能稳定解析并执行。

代码:Ollama 调用(llm_ollama.py)

import requests OLLAMA_URL = "http://127.0.0.1:11434/api/chat" def chat_ollama(model: str, messages: list[dict], temperature: float = 0.2) -> str: r = requests.post( OLLAMA_URL, json={"model": model, "messages": messages, "stream": False, "options": {"temperature": temperature}}, timeout=180, ) r.raise_for_status() return r.json()["message"]["content"]

代码:工具系统(tools.py)

建议:工具只允许在workspace/里读写,避免越权。

from __future__ import annotations from dataclasses import dataclass from pathlib import Path import subprocess, json, textwrap WORKSPACE = Path("workspace").resolve() WORKSPACE.mkdir(exist_ok=True) class ToolError(Exception): pass def _safe_path(rel_path: str) -> Path: p = (WORKSPACE / rel_path).resolve() if not str(p).startswith(str(WORKSPACE)): raise ToolError("Path not allowed (outside workspace).") return p def read_file(path: str, max_chars: int = 12000) -> str: p = _safe_path(path) if not p.exists(): raise ToolError(f"File not found: {path}") txt = p.read_text(encoding="utf-8", errors="ignore") return txt[:max_chars] def write_file(path: str, content: str) -> str: p = _safe_path(path) p.parent.mkdir(parents=True, exist_ok=True) p.write_text(content, encoding="utf-8") return f"Wrote {len(content)} chars to {path}" def run_python(code: str) -> str: """ 在受限模式下运行 python:不提供网络、只在 workspace 下运行文件读写(由代码自控,仍需谨慎) 这里用子进程执行,返回 stdout/stderr。 """ code = textwrap.dedent(code).strip() cmd = ["python", "-c", code] proc = subprocess.run(cmd, capture_output=True, text=True, cwd=str(WORKSPACE)) out = (proc.stdout or "") + (("\n[stderr]\n" + proc.stderr) if proc.stderr else "") return out[:20000] TOOLS = { "read_file": read_file, "write_file": write_file, "run_python": run_python, } def tool_schema() -> dict: """给模型看的工具说明""" return { "read_file": {"args": {"path": "string", "max_chars": "int(optional)"}}, "write_file": {"args": {"path": "string", "content": "string"}}, "run_python": {"args": {"code": "string"}}, }

代码:提示词(prompts.py)

SYSTEM_PROMPT = """你是一个本地AI Agent。你的任务是通过“计划-行动-观察-反思”循环完成目标。 你必须严格输出 JSON(不要输出任何额外文字),JSON 只允许三种类型: 1) 计划: {"type":"plan","steps":["...","..."]} 2) 行动(调用工具): {"type":"action","tool":"工具名","args":{...}} 3) 最终回答: {"type":"final","answer":"...(可包含Markdown)"} 规则: - 工具只允许使用提供的列表;参数必须符合工具说明。 - 如果上一步工具返回错误或信息不足,你要调整策略:再次输出 action(例如先读文件、检查数据、打印报错)。 - 不允许臆造文件内容或执行结果;一切依据工具返回的 observation。 - 当目标已完成,输出 final。 """

代码:Agent 主循环(agent.py)

import json from rich import print from llm_ollama import chat_ollama from tools import TOOLS, tool_schema, ToolError MODEL = "qwen2.5-coder:1.5b" # 或 deepseek-r1:1.5b MAX_TURNS = 12 def safe_json_loads(s: str) -> dict: s = s.strip() # 有些模型会包 ```json ... ```,做个兜底剥离 if s.startswith("```"): s = s.strip("`") s = s.replace("json", "", 1).strip() return json.loads(s) def run_agent(goal: str): tools = tool_schema() messages = [ {"role": "system", "content": __import__("prompts").SYSTEM_PROMPT}, {"role": "user", "content": json.dumps({ "goal": goal, "tools": tools, "workspace_note": "所有文件读写都在 workspace/ 目录下完成。" }, ensure_ascii=False)} ] plan_done = False for turn in range(1, MAX_TURNS + 1): raw = chat_ollama(MODEL, messages, temperature=0.2) print(f"\n[bold cyan]Turn {turn} model output:[/bold cyan]\n{raw}") try: obj = safe_json_loads(raw) except Exception as e: # 解析失败:要求模型纠正输出 messages.append({"role": "assistant", "content": raw}) messages.append({"role": "user", "content": json.dumps({ "error": f"你的输出不是合法 JSON:{e}. 请严格按三种 JSON 类型之一重写。" }, ensure_ascii=False)}) continue t = obj.get("type") if t == "plan": plan_done = True messages.append({"role": "assistant", "content": raw}) # 推进到下一步:让它开始行动 messages.append({"role": "user", "content": json.dumps({ "ok": True, "instruction": "请开始执行第1步。需要工具就输出 action。" }, ensure_ascii=False)}) continue if t == "action": tool = obj.get("tool") args = obj.get("args", {}) if tool not in TOOLS: messages.append({"role": "assistant", "content": raw}) messages.append({"role": "user", "content": json.dumps({ "error": f"工具不存在:{tool}。可用工具:{list(TOOLS.keys())}" }, ensure_ascii=False)}) continue try: result = TOOLS[tool](**args) obs = {"tool": tool, "args": args, "result": result} except Exception as e: obs = {"tool": tool, "args": args, "error": str(e)} messages.append({"role": "assistant", "content": raw}) messages.append({"role": "user", "content": json.dumps({ "observation": obs, "instruction": "基于 observation 决定下一步:继续 action 或 final。" }, ensure_ascii=False)}) continue if t == "final": return obj.get("answer", "") # 未知 type messages.append({"role": "assistant", "content": raw}) messages.append({"role": "user", "content": json.dumps({ "error": f"未知 type:{t}。只能是 plan/action/final。" }, ensure_ascii=False)}) return "❌ 超出最大轮次,任务未完成。建议缩小目标或增加工具。" if __name__ == "__main__": goal = "在 workspace 下新建一个 report.md:写一段 AI Agent 的定义(100字),再列出技术路线 Level0-6 的要点。" answer = run_agent(goal) print("\n[bold green]FINAL:[/bold green]\n", answer)

运行:

python agent.py

在1.5b的小模型中,效果并不佳,建议换高参数模型。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

作为一名老互联网人,看着AI越来越火,也总想为大家做点啥。干脆把我这几年整理的AI大模型干货全拿出来了。
包括入门指南、学习路径图、精选书籍、视频课,还有我录的一些实战讲解。全部免费,不搞虚的。
学习从来都是自己的事,我能做的就是帮你把路铺平一点。资料都放在下面了,有需要的直接拿,能用到多少就看你自己了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以点击文章最下方的VX名片免费领取【保真100%】

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/4 8:13:45

聊一聊大模型幻觉问题及其解决方案

01 什么是大模型幻觉问题 **1.**什么是大模型幻觉 首先介绍一下什么是大模型的幻觉。在某些情况下,我们在使用大模型生成结果时,会有一个直观的感受,就是“一本正经的胡说八道”。 一本正经:生成结果流畅、困惑度 PPL 低、有逻辑性…

作者头像 李华
网站建设 2026/4/4 9:00:48

电商直播AI助手:集成M2FP实现主播服装智能标签化

电商直播AI助手:集成M2FP实现主播服装智能标签化 在电商直播场景中,商品信息的自动化标注是提升运营效率的关键环节。尤其对于服饰类目,主播所穿服装的实时识别与打标,能够显著加速商品上架、推荐匹配和用户搜索流程。然而&#…

作者头像 李华
网站建设 2026/4/1 20:10:11

算法竞赛备考冲刺必刷题(C++) | 洛谷 P10289 小杨的旅游

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…

作者头像 李华
网站建设 2026/3/15 19:59:32

AI视觉落地新方向:M2FP人体解析助力智能零售场景升级

AI视觉落地新方向:M2FP人体解析助力智能零售场景升级 在智能零售、无人门店、客流分析等场景中,传统的人体检测与行为识别技术已难以满足精细化运营的需求。如何从视觉层面深入理解顾客的穿着特征、身体姿态与空间分布,成为提升用户体验和优化…

作者头像 李华
网站建设 2026/4/8 18:19:45

Z-Image-Turbo英文提示词结构设计技巧

Z-Image-Turbo英文提示词结构设计技巧 引言:从中文到英文提示词的进阶之路 随着阿里通义Z-Image-Turbo WebUI图像生成模型的普及,越来越多用户开始探索如何通过精准的提示词(Prompt) 提升生成图像的质量与可控性。虽然该工具支持中…

作者头像 李华
网站建设 2026/4/8 8:56:37

基于M2FP的智能健身分析系统:实时动作识别前端搭建

基于M2FP的智能健身分析系统:实时动作识别前端搭建 在构建智能健身分析系统的完整技术链路中,精准的人体结构感知是实现后续动作识别、姿态评估与运动反馈的核心前提。传统姿态估计算法(如OpenPose)虽能提供关键点信息&#xff0…

作者头像 李华