为什么你需要一个自己的AI Agent?

说实话,现在市面上各种AI Agent工具太多了——Coze、Dify、LangFlow、AutoGen……每个都说自己能帮你搞定一切。但实际用下来你会发现,真正能解决你具体需求的,往往还是自己动手搭的那个。

我之前试过好几个现成的平台,要么有各种限制,要么数据不在自己手里。说白了,我想让AI帮我自动处理一些私人的工作流——比如每天早上自动整理邮件、抓取行业动态、然后生成一份简报——但这些事情放到别人的平台上做,总觉得不踏实。

所以干脆自己动手。用Python + LangChain + 几个开源库,搭了一个能跑起来的个人AI Agent。今天就把整个过程写出来,希望能帮到也想自己搞一个的朋友。

AI Agent架构示意

整体架构

先上架构图,心里有个谱:

┌─────────────┐     ┌──────────────┐     ┌──────────────┐
│  用户输入    │────▶│  Agent 核心  │────▶│  LLM 模型    │
│  (Web/API)  │     │  (调度器)    │     │  (推理)      │
└─────────────┘     └──────┬───────┘     └──────────────┘
                           │
                  ┌────────┴────────┐
                  ▼                 ▼
           ┌──────────┐     ┌──────────┐
           │ 工具管理  │     │ 记忆管理  │
           │ (Tools)  │     │ (Memory) │
           └──────────┘     └──────────┘

核心就三个部分:调度器(Agent Core) 决定做什么、工具集(Tools) 执行具体操作、记忆(Memory) 记住上下文。

第一步:环境准备

先装依赖,别用最新版本,踩过坑了:

pip install openai==1.55.0 langchain==0.3.7 langchain-openai==0.2.5 python-dotenv==1.0.1

然后配环境变量,我习惯用 .env 文件管理:

# .env
OPENAI_API_KEY=sk-你的key
OPENAI_BASE_URL=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini

环境配置截图

第二步:构建Agent核心

这是最关键的代码。咱们用 LangChain 的 AgentExecutor 来搭:

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from langchain.prompts import PromptTemplate

load_dotenv()

# 初始化LLM
llm = ChatOpenAI(
    model=os.getenv("MODEL_NAME"),
    temperature=0.7,
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL")
)

# 定义工具
def search_web(query: str) -> str:
    """搜索网络信息"""
    return f"搜索到关于{query}的结果..."

def summarize_text(text: str) -> str:
    """总结文本内容"""
    response = llm.invoke(f"请总结以下内容:{text}")
    return response.content

# 注册工具
tools = [
    Tool(name="web_search", func=search_web, description="搜索网络信息"),
    Tool(name="summarize", func=summarize_text, description="总结文本内容"),
]

# 创建Agent
prompt = PromptTemplate.from_template(
    """你是一个个人AI助手,可以使用工具来帮助用户完成任务。
可用的工具:{tools}
工具格式:
Action: 工具名
Action Input: 输入

用户问题:{input}

{agent_scratchpad}"""
)

agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
    agent=agent, tools=tools,
    verbose=True, handle_parsing_errors=True
)

第三步:添加记忆能力

没有记忆的Agent就是个傻子。用 ConversationBufferMemory:

from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory(
    memory_key="chat_history",
    return_messages=True
)

# 带记忆的对话
agent_executor = AgentExecutor(
    agent=agent, tools=tools,
    memory=memory, verbose=True,
    handle_parsing_errors=True
)

# 测试
response = agent_executor.invoke({"input": "帮我查一下今天的AI新闻"})
print(response["output"])

对话测试截图

第四步:部署到服务器

本地跑通了,接下来部署到服务器上。我用的方案是 FastAPI + Docker:

# app.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI()

class Query(BaseModel):
    message: str
    session_id: str = "default"

@app.post("/chat")
async def chat(query: Query):
    try:
        response = agent_executor.invoke({"input": query.message})
        return {"response": response["output"]}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.get("/health")
async def health():
    return {"status": "ok"}

Dockerfile 也很简单:

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]

常见问题

Q:为什么不用Coze/Dify现成的?
A:数据在自己手里,想怎么改都行,不受平台限制。

Q:需要多少资源?
A:如果只用API调用,一个2核4G的服务器就够跑了,一个月几十块。

Q:支持哪些模型?
A:OpenAI、Claude、本地模型都行,改一下MODEL_NAME就行。

总结

说实话,自己搭Agent这件事,最大的收获不是技术本身,而是真正理解了Agent的工作机制。当你亲手写过调度逻辑、接过工具、管理过记忆之后,再去用那些现成的平台,思路完全不一样了。

下一步的计划是加上定时任务调度,让它每天早上自动跑一遍工作流,真正变成一个"个人助理"。后面搭好了再分享。

有想一起折腾的,评论区聊聊你的需求,说不定我能帮上忙。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐