手把手搭建个人AI Agent自动化助手:MCP + LangChain + Ollama 从零到部署

📅 2026/7/12 ✍️ 小文 📖 约 1 分钟

一篇面向开发者的实操教程,教你用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。后续你可以:

  1. 扩展更多的MCP Server(邮件、日历、浏览器)
  2. 加入记忆模块(用向量数据库存储对话历史)
  3. 加入多Agent协作(一个Agent做规划,多个子Agent执行不同领域的任务)
  4. 通过WebSocket提供实时反馈

Agent的核心价值不在于”一次性对话”,而在于它能持续为你执行任务。建议从最痛点的场景开始——比如”自动整理下载目录”——然后逐步扩展。

📤 分享到