手把手搭建个人AI Agent自动化助手:MCP + LangChain + Ollama 从零到部署
一篇面向开发者的实操教程,教你用MCP协议 + LangChain框架 + Ollama本地模型构建一个能自动执行日常任务的个人AI Agent助手,涵盖架构设计、代码实现和Docker部署。
为什么需要自建个人AI Agent?
市面上的AI助手(ChatGPT、Claude)虽然强大,但无法直接操作你的本地文件、日历、邮件和开发工具。而通过MCP协议 + LangChain搭建的个人Agent,可以:
- 📁 搜索和整理本地文件
- 📧 自动生成并发送邮件和Slack消息
- 📅 管理你的Google日历
- 🐙 操作GitHub仓库
- 💻 执行本地命令行任务
架构设计
┌─────────────────┐
│ 用户输入 │
└────────┬────────┘
▼
┌─────────────────────┐
│ LangChain Agent │ ← LLM驱动,负责规划与决策
│ (规划器+执行器) │
└────┬────────┬───────┘
│ │
▼ ▼
┌─────────┐ ┌──────────┐
│ MCP Server │ MCP Server │ ... ← 统一协议连接外部工具
└─────────┘ └──────────┘
│ │
▼ ▼
本地系统 API服务
(文件/命令) (Gmail/GitHub/日历)
第一步:搭建环境
# 创建项目
mkdir my-ai-agent && cd my-ai-agent
python -m venv venv && source venv/bin/activate
# 安装依赖
pip install langchain langchain-community langchain-ollama
pip install mcp httpx python-dotenv
pip install google-api-python-client google-auth-oauthlib
pip install "fastapi[standard]" uvicorn
笔者推荐使用Ollama运行DeepSeek-V4-7B或Qwen3-14B作为本地模型:
ollama pull deepseek-v4:7b
# 或
ollama pull qwen3:14b
第二步:实现MCP Server
MCP(Model Context Protocol)是Agent与工具之间的标准接口。我们实现一个文件操作MCP Server:
# mcp_file_server.py
from mcp.server import Server, NotificationOptions
from mcp.server.models import InitializationOptions
import mcp.server.stdio
import mcp.types as types
import os
import json
from pathlib import Path
class FileMCP:
"""文件操作MCP Server实现"""
def __init__(self, workspace: str):
self.workspace = Path(workspace).resolve()
self.server = Server("file-agent")
async def handle_list_tools(self) -> list[types.Tool]:
return [
types.Tool(
name="read_file",
description="读取指定文件内容",
inputSchema={
"type": "object",
"properties": {
"path": {"type": "string", "description": "文件路径"}
},
"required": ["path"]
}
),
types.Tool(
name="write_file",
description="写入文件内容",
inputSchema={
"type": "object",
"properties": {
"path": {"type": "string"},
"content": {"type": "string"}
},
"required": ["path", "content"]
}
),
types.Tool(
name="list_directory",
description="列出目录内容",
inputSchema={
"type": "object",
"properties": {
"path": {"type": "string", "default": "."}
}
}
),
]
第三步:构建LangChain Agent
将MCP Server注册为LangChain的工具:
# agent.py
from langchain_ollama import ChatOllama
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import Tool
from langchain.prompts import PromptTemplate
from mcp_file_server import FileMCP
import asyncio
# 初始化LLM
llm = ChatOllama(
model="deepseek-v4:7b",
temperature=0.1,
num_predict=4096,
)
# 初始化MCP工具
file_mcp = FileMCP(workspace="./workspace")
# 将MCP工具映射为LangChain Tool
tools = [
Tool(
name="read_file",
func=lambda path: asyncio.run(file_mcp.read_file(path)),
description="读取本地文件内容,输入文件路径"
),
Tool(
name="write_file",
func=lambda path, content: asyncio.run(file_mcp.write_file(path, content)),
description="写入文件内容,输入path和content"
),
]
# ReAct Agent Prompt
agent_prompt = PromptTemplate.from_template("""
你是一个自动化助手。请根据用户的问题,使用可用的工具来完成。
工具列表:
{tools}
工具名称格式:使用工具名和参数
思考过程:
1. 分析用户需求
2. 逐步使用工具
3. 汇总结果
用户问题:{input}
{agent_scratchpad}
""")
agent = create_react_agent(llm, tools, agent_prompt)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
handle_parsing_errors=True,
max_iterations=15
)
第四步:添加更多MCP Server
除了文件操作,你还可以快速添加更多MCP Server:
GitHub操作MCP
# 支持:创建Issue、PR、查看仓库状态
class GitHubMCP:
# 使用gh CLI或Github API
pass # 实现参考FileMCP模式
日程管理MCP
# 使用Google Calendar API
class CalendarMCP:
# 创建/查询/修改日程
pass
浏览器操作MCP
# 使用Playwright控制浏览器
class BrowserMCP:
# 截图、爬取网页、填写表单
pass
多个MCP Server可以同时注册到Agent中,Agent会自动选择最合适的工具。
第五步:Docker部署
# Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
# 安装Ollama(可选:也可以使用远程Ollama)
RUN curl -fsSL https://ollama.com/install.sh | sh
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
# docker-compose.yml
version: "3.8"
services:
ollama:
image: ollama/ollama:latest
volumes:
- ./ollama_data:/root/.ollama
ports:
- "11434:11434"
agent:
build: .
volumes:
- ./workspace:/app/workspace
ports:
- "8000:8000"
depends_on:
- ollama
environment:
- OLLAMA_HOST=http://ollama:11434
六、实际用例演示
场景:每天早上自动整理工作目录
user_input = """
1. 查看 ~/Downloads 目录下的所有PDF文件
2. 将它们移动到 ~/Documents/Received/
3. 将文件名中的空格替换为下划线
4. 生成一个文件清单发送到我的Slack
"""
result = agent_executor.invoke({"input": user_input})
print(result["output"])
Agent会自动规划:list_directory → 筛选PDF → execute("mv ...") → execute("rename ...") → slack_send_message。
总结与扩展
本文演示了如何用不到200行代码搭建一个具备文件操作能力的个人AI Agent。后续你可以:
- 扩展更多的MCP Server(邮件、日历、浏览器)
- 加入记忆模块(用向量数据库存储对话历史)
- 加入多Agent协作(一个Agent做规划,多个子Agent执行不同领域的任务)
- 通过WebSocket提供实时反馈
Agent的核心价值不在于”一次性对话”,而在于它能持续为你执行任务。建议从最痛点的场景开始——比如”自动整理下载目录”——然后逐步扩展。