2026/4/16 18:04:00
网站建设
项目流程
网站加速优化,网站建设公司不让放自己空间站,建设通官方网站下载,电子商务网站制作教程从“会聊天”#xff0c;到“会做事”#xff0c;再到“会协作”#xff0c;
AI Agent 的本质是把大模型变成一个能持续行动的系统。
一、为什么有了大模型#xff0c;还需要 AI Agent#xff1f;
如果你已经折腾过本地大模型、RAG、微调#xff0c;你大概率会有一个感受…从“会聊天”到“会做事”再到“会协作”AI Agent 的本质是把大模型变成一个能持续行动的系统。一、为什么有了大模型还需要 AI Agent如果你已经折腾过本地大模型、RAG、微调你大概率会有一个感受模型很聪明但它什么也“不会自己去做”。它可以回答问题、写代码、给建议但它不会主动拆解任务、决定下一步该做什么、调用工具并根据结果修正策略这正是AI Agent 出现的原因让AI自动进行拆解任务、决定下一步该做什么、调用工具并根据结果修正策略。二、一句话理解 AI AgentAI 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代码执行更稳推理服务OllamaAgent 框架自己写一个轻量 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 一致所以我们用强约束输出 JSONAgent 每一步让模型只输出下面三种之一{type:plan,steps:[...]}{type:action,tool:read_file,args:{...}}{type:final,answer:...}这样就能稳定解析并执行。代码Ollama 调用llm_ollama.pyimport 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}}, timeout180, ) 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_okTrue) 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(fFile not found: {path}) txt p.read_text(encodingutf-8, errorsignore) return txt[:max_chars] def write_file(path: str, content: str) - str: p _safe_path(path) p.parent.mkdir(parentsTrue, exist_okTrue) p.write_text(content, encodingutf-8) return fWrote {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_outputTrue, textTrue, cwdstr(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.pySYSTEM_PROMPT 你是一个本地AI Agent。你的任务是通过“计划-行动-观察-反思”循环完成目标。 你必须严格输出 JSON不要输出任何额外文字JSON 只允许三种类型 1) 计划 {type:plan,steps:[...,...]} 2) 行动调用工具 {type:action,tool:工具名,args:{...}} 3) 最终回答 {type:final,answer:...可包含Markdown} 规则 - 工具只允许使用提供的列表参数必须符合工具说明。 - 如果上一步工具返回错误或信息不足你要调整策略再次输出 action例如先读文件、检查数据、打印报错。 - 不允许臆造文件内容或执行结果一切依据工具返回的 observation。 - 当目标已完成输出 final。 代码Agent 主循环agent.pyimport 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_asciiFalse)} ] plan_done False for turn in range(1, MAX_TURNS 1): raw chat_ollama(MODEL, messages, temperature0.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_asciiFalse)}) 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_asciiFalse)}) 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_asciiFalse)}) 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_asciiFalse)}) 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_asciiFalse)}) 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%】