如果你已经玩过 AI Agent,一定遇到过这几个问题:
❌ API 太贵(动不动一个月几百)
❌ 数据不安全(全发到云上)
❌ 网络依赖(断网直接废)
❌ 延迟高(调用慢到怀疑人生)
那么有没有一种方案:
不依赖任何云API,本地就能跑 AI Agent?
答案是:有,而且现在就能实现。
今天这篇文章,我们直接带你从 0 到 1 搭建一个:
完全离线的 AI Agent(Python + MCP + Ollama)
并且重点是:
一、最终效果(这才是重点)
你将得到一个这样的系统:
请输入问题:帮我查一下新加坡天气
AI 自动执行:
调用工具 → get_weather返回 → Singapore: 🌦 +30°C
重点来了👇
✅ 不用 OpenAI✅ 不用 Claude✅ 不用联网(模型层)✅ 完全本地运行
二、核心架构(一定要理解)
整个系统结构如下:
用户输入 ↓本地 LLM(Ollama) ↓MCP Tool 调度 ↓Python 工具执行 ↓返回结果
一句话总结:
本地模型负责“思考”,Python 负责“执行”。
三、环境准备(5分钟搞定)
1️⃣ 安装 Ollama
👉 官网安装(Mac / Linux / Windows)
安装完成后执行:
ollama run llama3
如果能正常对话,说明成功。
2️⃣ 拉取模型(推荐)
ollama pull llama3
或者更强一点:
ollama pull mistral
3️⃣ 安装 Python 依赖
pip install mcp requests ollama
四、完整代码(核心 Agent)
创建文件:
agent_local.py
直接上完整代码👇
import jsonimport requestsimport ollamafrom mcp.server.fastmcp import FastMCP# =========================# 1. MCP 工具定义# =========================mcp = FastMCP("Local Agent")@mcp.tool()def add(a: int, b: int) -> int: """工具函数:计算两数之和 输出:返回 int 类型的计算结果 示例:add(3, 5) -> 8 """ return a + b@mcp.tool()def get_weather(city: str) -> str: """工具函数:获取城市天气 输出:返回 str 类型的天气信息 示例:get_weather("Beijing") -> "Beijing: ☀️ +22°C" """ url = f"https://wttr.in/{city}?format=3" return requests.get(url).text# =========================# 2. 本地模型调用(Ollama)# =========================def ask_llm(prompt, tools_desc): """调用 Ollama 本地模型 输入:用户提示词 + 工具描述 输出:返回 str 类型的模型响应(可能是纯文本或 JSON 格式的工具调用指令) 示例输出1:'{"tool": "add", "args": {"a": 10, "b": 20}}' 示例输出2:'北京今天天气晴朗,气温22°C' """ response = ollama.chat( model="llama3", messages=[ { "role": "system", "content": f"""你是一个AI助手,可以调用工具完成任务。工具列表:{tools_desc}如果需要调用工具,请返回JSON格式:{{"tool": "工具名", "args": {{参数}}}}否则直接回答。""", }, {"role": "user", "content": prompt}, ], ) return response["message"]["content"]# =========================# 3. Agent 核心逻辑# =========================def run_agent(user_input): """ Agent 主控函数 输入:用户输入的字符串 输出:返回 str 类型的最终响应 执行流程: 1. 调用 LLM 判断是否需要工具 2. 如果需要工具,解析 JSON 并执行对应函数 3. 返回工具执行结果或 LLM 的直接回答 示例输出1:'[工具调用] add → 30'(当用户问"10+20等于多少") 示例输出2:'北京今天天气晴朗,气温22°C'(当 LLM 直接回答时) """ tools_desc = """ 1. add(a, b): 计算加法 2. get_weather(city): 查询天气 """ result = ask_llm(user_input, tools_desc) # 尝试解析 JSON(判断是否为工具调用) try: tool_call = json.loads(result) name = tool_call["tool"] args = tool_call["args"] # 执行对应的工具函数 if name == "add": res = add(**args) # 输出:int 类型,如 30 elif name == "get_weather": res = get_weather(**args) # 输出:str 类型,如 "Beijing: ☀️ +22°C" else: res = "未知工具" return f"[工具调用] {name} → {res}" # 输出示例:"[工具调用] add → 30" except Exception: # 如果不是 JSON 格式,说明 LLM 直接回答了问题 return result # 输出:LLM 的原始回答文本# =========================# 4. CLI 入口# =========================if __name__ == "__main__": """命令行交互界面 输出:启动提示信息,然后循环接收用户输入 交互示例: >>> 离线 AI Agent 已启动(exit 退出) >>> 10+20等于多少? [工具调用] add → 30 >>> 北京天气怎么样? [工具调用] get_weather → Beijing: ☀️ +22°C >>> exit (程序退出) """ print("离线 AI Agent 已启动(exit 退出)") while True: q = input(">>> ") if q == "exit": break print(run_agent(q)) # 输出:Agent 处理后的最终结果
五、运行效果(真实体验)
运行:
python agent_local.py
测试:
>>> 帮我计算 100 + 250[工具调用] add → 350
再试:
>>> 查询北京天气[工具调用] get_weather → Beijing: 🌤 +28°C
这时候你已经拥有:
一个完全离线的 AI Agent。
六、为什么这个方案很重要?
很多人忽略了一点:
真正的 AI 生产力,不在模型,而在系统。
这个架构解决了 4 个关键问题:
1️⃣ 成本问题
云API:按Token收费 ❌本地模型:0成本 ✅
2️⃣ 数据安全
云端:数据上传 ❌本地:完全私有 ✅
3️⃣ 可控性
云模型:黑盒 ❌本地模型:完全可控 ✅
4️⃣ 可扩展性
你可以无限加工具:
@mcp.tool()def read_file()@mcp.tool()def send_email()@mcp.tool()def control_server()
七、进阶玩法(真正的生产力)
如果你继续往下做,可以实现:
1️⃣ 自动办公系统
AI读取Excel↓生成报表↓自动发送邮件
2️⃣ 本地 AI 运维助手
AI查看日志↓分析异常↓执行修复脚本
3️⃣ AI 自动化公司(一个人就够)
AI写内容AI发文章AI做运营
八、关键问题:本地模型够强吗?
现实一点说:
❌ 不如 GPT-4❌ 有时会理解错误
但:
✅ 足够做自动化✅ 足够做工具调用✅ 足够做 Agent
一句话总结:
云模型更聪明,本地模型更自由。
九、未来趋势(非常重要)
未来 AI 架构很可能是这样:
云模型(负责复杂推理)+本地模型(负责执行)+MCP工具(连接世界)
而你现在做的这套:
已经是未来 AI 系统的雏形。
十、总结
今天你实现了一个非常关键的能力:
用 Python + MCP + 本地模型,构建一个离线 AI Agent。
这意味着:
你不再依赖API你拥有自己的AI系统你可以构建真正的AI产品
最后一句话(重点)
未来最值钱的不是模型,而是“能被 AI 调用的系统”。
而 MCP + 本地模型,就是入口。