从零搭建本地AI助手:Python + Agent技术实战指南(超30步全流程)
引言:为什么我们需要本地AI助手?
2026年,AI Agent无疑是最火热的技术方向。从LangGraph到CrewAI,从AutoGen到Smolagents,各类Agent框架层出不穷。然而,面对琳琅满目的云端API和复杂的框架生态,很多开发者都有一个共同的疑问:能不能在本地搭建一套完全自主可控的AI助手,让它帮我完成信息采集、邮件处理、文档撰写和报告生成等一系列日常自动化工作?
答案是肯定的。事实上,截至2026年,LangGraph已经成为Python生态中最广泛采用的生产级AI工作流编排框架,被Klarna、Replit、Elastic等知名公司信赖。结合Ollama等本地模型部署工具,完全可以用一台普通电脑零成本构建功能完备的本地AI助手。
本教程将以30多个详细步骤,手把手带你从零搭建一套本地AI助手系统,覆盖:信息采集与资料整理、邮件自动收发、日报生成、月报生成、年终总结PPT制作五大核心功能。
第一部分:技术选型与整体架构(第1-5步)
第1步:理解AI Agent的核心概念
在动手编码之前,有必要先理解AI Agent究竟是什么。传统的聊天机器人只能被动回答问题,而AI Agent能够主动规划、调用工具并执行多步骤任务。想象一下:如果你问“我本月在餐饮上花了多少钱?”,普通的聊天机器人无法回答,但一个拥有数据库查询工具的Agent可以:思考→调用交易搜索工具→获取数据→生成答案。
这正是我们构建本地AI助手的核心价值所在——让它真正“有手有脚”地去执行任务。
第2步:核心技术栈选型
本教程将采用以下技术栈:
- LangGraph:作为核心Agent编排框架。它基于图结构组织Agent逻辑,支持状态管理、条件分支和循环执行,是目前生产级Agent应用的首选。
- CrewAI(可选) :如果你偏向角色分工明确的团队协作模式,CrewAI提供了一种角色化Agent编排范式。
- Smolagents:Hugging Face推出的轻量级Agent框架,整个核心逻辑仅约1000行代码,可作为轻量级替代方案。
- Ollama:本地大模型推理引擎,支持运行Llama、Qwen、DeepSeek等开源模型,完全离线免费。
- LlamaIndex:RAG检索增强生成框架,用于构建私有知识库。
- ScrapeGraphAI:基于LLM的智能网页爬取库。
框架对比建议:LangGraph最适合需要精细控制流程和状态的复杂工作流;CrewAI适合多角色协作场景(如研究+写作+审核);Smolagents适合对代码透明度和可定制性有高要求的场景。本教程以LangGraph为主展开。
第3步:了解整体系统架构
┌─────────────────────────────────────────────────────────────┐
│ 本地AI助手系统架构 │
├─────────────────────────────────────────────────────────────┤
│ 【用户交互层】 │
│ CLI / Web UI │
├─────────────────────────────────────────────────────────────┤
│ 【Agent编排层】← 核心 │
│ LangGraph StateGraph(节点 + 边 + 状态) │
├─────────────────────────────────────────────────────────────┤
│ 【工具层】 │
│ Web爬取工具 │ 邮件收发工具 │ 报告生成工具 │ PPT生成工具 │
├─────────────────────────────────────────────────────────────┤
│ 【知识层】 │
│ LlamaIndex RAG │ 本地向量数据库 │
├─────────────────────────────────────────────────────────────┤
│ 【模型层】 │
│ Ollama(Qwen/Llama/Gemma) │
└─────────────────────────────────────────────────────────────┘
分层架构的优势在于:每一层可以独立演进、替换或优化,这是生产级Agent系统的基本要求。
第4步:硬件与软件环境准备
硬件要求:
- CPU:4核心以上(现代处理器即可)
- 内存:至少16GB(推荐32GB)
- 显卡:如有NVIDIA GPU(16GB以上显存或以上可运行主流中型模型),无GPU也可运行CPU版本的小型模型
- 存储:至少50GB空闲空间
软件要求:
- Python 3.10或更高版本
- Git
- Docker(可选,用于部署Dify等工作流平台)
- 现代操作系统(Windows 10/11、macOS或Linux)
第5步:创建Python虚拟环境
# 创建项目目录
mkdir local-ai-assistant
cd local-ai-assistant
# 创建虚拟环境(Windows)
python -m venv venv
venv\Scripts\activate
# 创建虚拟环境(macOS/Linux)
python3 -m venv venv
source venv/bin/activate
# 升级pip
pip install --upgrade pip
第二部分:本地大模型部署(第6-11步)
第6步:安装Ollama
Ollama是目前最简单易用的本地模型部署工具,它能让你在几分钟内跑通一个大模型。
Windows:前往ollama.com/download/Windows下载安装程序运行。
macOS/Linux:使用命令行安装:
# macOS/Linux
curl -fsSL https://ollama.com/install.sh | sh
# Linux 也可以通过包管理器安装
安装完成后,Ollama通常会自动启动服务。如需手动启动,运行:
ollama serve
服务默认运行在 http://localhost:11434。
第7步:下载并运行本地模型
推荐选择Qwen 2.5 4B版本,它在性能和硬件需求之间取得了良好的平衡,仅需约3.5GB内存。
# 下载并运行Qwen 2.5
ollama run qwen2.5:7b
# 或选择更小的4B版本
ollama run qwen2.5:4b
模型选择参考:
| 模型 | 参数量 | 显存要求 | 适用场景 |
|---|---|---|---|
| Qwen 2.5 7B | 7B | 8GB | 通用场景(推荐) |
| Qwen 2.5 4B | 4B | 4GB | 轻量级设备 |
| Gemma 4 E4B | 4.5B | 6GB | 多模态任务 |
| DeepSeek R1 14B | 14B | 16GB | 高精度推理 |
第8步:验证Ollama模型调用
新建test_ollama.py测试模型是否正常:
import requests
import json
url = "http://localhost:11434/api/generate"
payload = {
"model": "qwen2.5:7b",
"prompt": "你好,请简单介绍一下你自己。",
"stream": False
}
response = requests.post(url, json=payload)
result = response.json()
print(result["response"])
第9步:安装LangChain和LangGraph核心库
pip install langchain langgraph langchain-community langchain-ollama
第10步:配置LangChain与Ollama集成
from langchain_ollama import ChatOllama
# 初始化本地模型
llm = ChatOllama(
model="qwen2.5:7b",
base_url="http://localhost:11434",
temperature=0.7,
top_p=0.9,
# 可选配置
# num_ctx=8192, # 上下文长度
)
# 测试调用
response = llm.invoke("你好,请用一句话介绍什么是LangGraph")
print(response.content)
第11步:理解LangGraph的核心概念
在继续编码前,需要掌握LangGraph的三个核心概念:
- State(状态) :使用TypedDict定义Agent运行过程中全局共享的数据结构。
- Node(节点) :Agent执行的每个动作都是一个节点函数,接收当前状态,返回状态更新。
- Edge(边) :连接节点,决定流程走向,支持条件分支和循环。
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, START, END
class AgentState(TypedDict):
messages: list
current_task: str
task_result: str
第三部分:构建Agent的“工具箱”——工具开发(第12-17步)
第12步:理解LangGraph的工具机制
在LangGraph中,工具就是Agent可以调用的Python函数。LLM会根据用户问题自主决定何时调用哪个工具。这与传统的函数调用不同——工具的选择权交给了LLM。LangGraph并不抽象提示或架构,而是提供了支撑长时运行、状态化工作流的基础设施。
第13步:构建网页信息采集工具
使用ScrapeGraphAI库实现智能网页爬取。ScrapeGraphAI是一种基于LLM的网页抓取库,你只需要告诉它“需要提取什么信息”,它就能自动完成爬取。
# 安装依赖
# pip install scrapegraphai playwright
# playwright install
from langchain_core.tools import tool
from scrapegraphai.graphs import SmartScraperGraph
@tool
def scrape_webpage(url: str, prompt: str) -> dict:
"""
从指定网页提取信息。
Args:
url: 目标网页URL
prompt: 要提取的信息描述,如"提取公司简介、产品列表和联系方式"
Returns:
提取的信息字典
"""
graph_config = {
"llm": {
"model": "ollama/qwen2.5:7b",
"model_tokens": 8192,
"format": "json",
},
"verbose": True,
"headless": True,
}
scraper = SmartScraperGraph(
prompt=prompt,
source=url,
config=graph_config
)
result = scraper.run()
return result
第14步:批量网页信息采集增强
对于需要同时爬取多个URL的场景,可以使用ScriptCreatorMultiGraph生成多页爬取脚本:
from scrapegraphai.graphs import ScriptCreatorMultiGraph
@tool
def batch_scrape_websites(urls: list, prompt: str) -> list:
"""批量爬取多个网页并提取信息"""
results = []
for url in urls:
try:
result = scrape_webpage(url, prompt)
results.append({"url": url, "data": result})
except Exception as e:
results.append({"url": url, "error": str(e)})
return results
第15步:构建邮件收发工具
pip install yagmail imaplib2 python-mailchimp
发送邮件工具:
import yagmail
@tool
def send_email(to: str, subject: str, body: str) -> str:
"""
发送邮件。
Args:
to: 收件人邮箱
subject: 邮件主题
body: 邮件正文
Returns:
发送结果状态
"""
# 需要在环境变量中配置邮箱信息
# SENDER_EMAIL: 发件人邮箱
# SENDER_PASSWORD: 邮箱授权码(非登录密码)
import os
try:
yag = yagmail.SMTP(
user=os.environ.get("SENDER_EMAIL"),
password=os.environ.get("SENDER_PASSWORD")
)
yag.send(to=to, subject=subject, contents=body)
return f"邮件已成功发送至 {to}"
except Exception as e:
return f"邮件发送失败: {str(e)}"
接收邮件工具(使用IMAP协议):
import imaplib
import email
from email.header import decode_header
@tool
def fetch_recent_emails(limit: int = 10) -> list:
"""
获取收件箱中的最新邮件。
Args:
limit: 获取邮件数量
Returns:
邮件列表
"""
import os
imap = imaplib.IMAP4_SSL("imap.gmail.com") # 根据实际邮箱提供商调整
imap.login(os.environ.get("SENDER_EMAIL"), os.environ.get("EMAIL_PASSWORD"))
imap.select("INBOX")
status, messages = imap.search(None, "ALL")
email_ids = messages[0].split()[-limit:]
emails = []
for e_id in email_ids:
status, msg_data = imap.fetch(e_id, "(RFC822)")
msg = email.message_from_bytes(msg_data[0][1])
subject = decode_header(msg["Subject"])[0][0]
if isinstance(subject, bytes):
subject = subject.decode()
emails.append({
"subject": subject,
"from": msg["From"],
"date": msg["Date"],
})
imap.close()
imap.logout()
return emails
第16步:构建日报/月报生成工具
from datetime import datetime
import json
@tool
def generate_daily_report(tasks_completed: list, issues: list, plan_next: list) -> str:
"""
根据输入信息生成日报。
Args:
tasks_completed: 已完成任务列表
issues: 遇到的问题列表
plan_next: 明日计划列表
Returns:
格式化后的日报文本
"""
today = datetime.now().strftime("%Y年%m月%d日")
report = f"""
## 日报 - {today}
### 今日完成
{chr(10).join(f'- {task}' for task in tasks_completed)}
### 遇到的问题
{chr(10).join(f'- {issue}' for issue in issues) if issues else '- 无'}
### 明日计划
{chr(10).join(f'- {plan}' for plan in plan_next)}
---
生成时间: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
"""
return report
@tool
def generate_monthly_report(weekly_summaries: list, highlights: list) -> str:
"""根据每周总结生成月报"""
month = datetime.now().strftime("%Y年%m月")
report = f"""
## 月度总结报告 - {month}
### 本月工作亮点
{chr(10).join(f'- {highlight}' for highlight in highlights)}
### 周度汇总
{chr(10).join(f'{chr(10).join(w_summary)}' for w_summary in weekly_summaries)}
---
报告生成时间: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
"""
return report
第17步:构建年终总结PPT生成工具
PPT生成需要python-pptx库:
pip install python-pptx markdown
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
import markdown
from bs4 import BeautifulSoup
@tool
def generate_yearly_ppt(content: dict, output_path: str = "yearly_summary.pptx") -> str:
"""
根据内容字典生成年终总结PPT。
Args:
content: 包含以下键的字典:
- title: PPT标题
- summary: 年度总结文本
- achievements: 成就列表
- projects: 重点项目列表(每项含name和description)
- next_year_plan: 来年计划列表
output_path: 输出文件路径
Returns:
生成状态信息
"""
prs = Presentation()
# 标题页
title_slide = prs.slides.add_slide(prs.slide_layouts[0])
title = title_slide.shapes.title
subtitle = title_slide.placeholders[1]
title.text = content.get("title", "年终工作总结")
subtitle.text = f"报告期间:{datetime.now().strftime('%Y')}年"
# 年度概述页
summary_slide = prs.slides.add_slide(prs.slide_layouts[1])
summary_slide.shapes.title.text = "年度工作概述"
content_box = summary_slide.placeholders[1]
content_box.text = content.get("summary", "")
# 主要成就页
achievements_slide = prs.slides.add_slide(prs.slide_layouts[1])
achievements_slide.shapes.title.text = "主要工作成就"
achievements_text = "\n".join(f"• {ach}" for ach in content.get("achievements", []))
achievements_slide.placeholders[1].text = achievements_text
# 重点项目页
for project in content.get("projects", []):
project_slide = prs.slides.add_slide(prs.slide_layouts[1])
project_slide.shapes.title.text = project.get("name", "项目名称")
project_slide.placeholders[1].text = project.get("description", "")
# 来年计划页
plan_slide = prs.slides.add_slide(prs.slide_layouts[1])
plan_slide.shapes.title.text = "来年工作计划"
plan_text = "\n".join(f"• {plan}" for plan in content.get("next_year_plan", []))
plan_slide.placeholders[1].text = plan_text
# 保存
prs.save(output_path)
return f"PPT已成功生成:{output_path}"
第四部分:组装LangGraph多节点Agent(第18-25步)
第18步:定义Agent的全局状态
from typing import TypedDict, Annotated, List
from langgraph.graph.message import add_messages
class AssistantState(TypedDict):
"""Agent的全局状态定义"""
messages: Annotated[list, add_messages] # 对话历史
current_intent: str # 用户意图分类
scraped_data: dict # 爬取到的数据
email_content: dict # 邮件内容
report_content: str # 生成的报告
ppt_content: dict # PPT内容
execution_status: str # 执行状态
errors: List[str] # 错误记录
第19步:创建工作流节点(节点定义)
from langgraph.graph import StateGraph, START, END
from langchain_ollama import ChatOllama
from langchain.agents import create_agent
# 初始化LLM
llm = ChatOllama(model="qwen2.5:7b", base_url="http://localhost:11434")
# 工具列表
tools = [scrape_webpage, batch_scrape_websites, send_email,
fetch_recent_emails, generate_daily_report,
generate_monthly_report, generate_yearly_ppt]
# 使用create_agent构建基础Agent
agent = create_agent(
model=llm,
tools=tools,
system_prompt="""你是一个智能的工作辅助助手。你的职责包括:
1. 从网页中采集和整理信息
2. 收发邮件
3. 生成日报、月报和年终总结PPT
4. 帮助用户自动化日常办公任务
请根据用户的请求,选择合适的工具来完成任务。
"""
)
第20步:构建条件路由函数
def route_by_intent(state: AssistantState) -> str:
"""根据用户意图决定下一步走向"""
last_message = state["messages"][-1]["content"].lower()
if any(keyword in last_message for keyword in ["爬取", "采集", "网页", "信息提取"]):
return "scrape"
elif any(keyword in last_message for keyword in ["邮件", "发送", "收件箱"]):
return "email"
elif any(keyword in last_message for keyword in ["日报", "每日报告"]):
return "daily_report"
elif any(keyword in last_message for keyword in ["月报", "月度报告"]):
return "monthly_report"
elif any(keyword in last_message for keyword in ["年终", "PPT", "总结"]):
return "yearly_ppt"
else:
return "general_chat"
第21步:组装完整的StateGraph
from langgraph.graph import StateGraph, START, END
workflow = StateGraph(AssistantState)
# 添加所有节点
workflow.add_node("classify", route_by_intent) # 路由节点
workflow.add_node("scrape", scrape_node)
workflow.add_node("email", email_node)
workflow.add_node("daily_report", daily_report_node)
workflow.add_node("monthly_report", monthly_report_node)
workflow.add_node("yearly_ppt", yearly_ppt_node)
workflow.add_node("general_chat", general_chat_node)
# 定义边
workflow.add_edge(START, "classify")
workflow.add_conditional_edges("classify", route_by_intent, {
"scrape": "scrape",
"email": "email",
"daily_report": "daily_report",
"monthly_report": "monthly_report",
"yearly_ppt": "yearly_ppt",
"general_chat": "general_chat"
})
# 每个工作节点完成后回到分类(支持多轮交互)
workflow.add_edge("scrape", "classify")
workflow.add_edge("email", "classify")
workflow.add_edge("daily_report", "classify")
workflow.add_edge("monthly_report", "classify")
workflow.add_edge("yearly_ppt", "classify")
workflow.add_edge("general_chat", "classify")
workflow.add_edge("classify", END)
app = workflow.compile()
第22步:Define具体节点的实现
def scrape_node(state: AssistantState) -> AssistantState:
"""信息采集节点"""
prompt = state["messages"][-1]["content"]
result = scrape_webpage.invoke({"url": extracted_url, "prompt": prompt})
state["scraped_data"] = result
state["messages"].append({
"role": "assistant",
"content": f"已采集到以下信息:\n{result}"
})
return state
def email_node(state: AssistantState) -> AssistantState:
"""邮件处理节点"""
# 根据用户意图发送/接收邮件
last_msg = state["messages"][-1]["content"]
if "发送" in last_msg:
# 使用LLM提取邮件信息
# 实际代码中需要解析参数...
pass
elif "收件箱" in last_msg:
emails = fetch_recent_emails()
state["email_content"] = emails
return state
def daily_report_node(state: AssistantState) -> AssistantState:
"""日报生成节点"""
# 这里可以从用户的对话中提取任务信息
# 简化版:询问用户并提供模板
state["messages"].append({
"role": "assistant",
"content": "请提供以下信息:\n1. 今日完成的任务\n2. 遇到的问题\n3. 明日的计划"
})
return state
def general_chat_node(state: AssistantState) -> AssistantState:
"""通用对话节点"""
response = llm.invoke(state["messages"][-1]["content"])
state["messages"].append({
"role": "assistant",
"content": response.content
})
return state
第23步:运行Agent工作流
def run_assistant(user_input: str, state: AssistantState = None):
if state is None:
state = {
"messages": [],
"current_intent": "",
"scraped_data": {},
"email_content": {},
"report_content": "",
"ppt_content": {},
"execution_status": "idle",
"errors": []
}
state["messages"].append({"role": "user", "content": user_input})
final_state = app.invoke(state)
return final_state
# 测试
result = run_assistant("帮我从 https://ollama.com 爬取这个网站的主要功能介绍")
print(result["messages"][-1]["content"])
第24步:添加持久化状态(Checkpointing)
LangGraph支持持久化执行,Agent可以在失败后从上次中断的位置自动恢复:
from langgraph.checkpoint.sqlite import SqliteSaver
# 创建SQLite存储
memory = SqliteSaver.from_conn_string("checkpoints.db")
workflow = StateGraph(AssistantState)
# ... 添加节点和边 ...
app = workflow.compile(checkpointer=memory)
# 调用时指定thread_id即可在不同会话间恢复状态
config = {"configurable": {"thread_id": "user-123-session"}}
result = app.invoke(state, config=config)
第25步:添加Human-in-the-Loop支持
对于重要决策(如发送邮件前确认),LangGraph支持人工介入:
from langgraph.checkpoint import interrupt
def email_node_with_confirm(state: AssistantState) -> AssistantState:
# 在发送前暂停,等待用户确认
confirm = interrupt("确认发送邮件?回复'y'继续,'n'取消")
if confirm == "y":
# 执行发送
send_email(to=email_to, subject=subject, body=body)
state["messages"].append({"role": "assistant", "content": "邮件已发送"})
else:
state["messages"].append({"role": "assistant", "content": "发送已取消"})
return state
第五部分:RAG知识库增强(第26-28步)
第26步:使用LlamaIndex构建本地知识库
LlamaIndex是专为RAG(检索增强生成)场景设计的轻量级Python框架,它能够将非结构化本地数据与大语言模型高效连接。
pip install llama-index llama-index-embeddings-huggingface
第27步:加载文档并创建向量索引
from llama_index.core import (
SimpleDirectoryReader,
VectorStoreIndex,
Settings
)
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
# 配置嵌入模型(使用轻量级中文模型)
Settings.embed_model = HuggingFaceEmbedding(
model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
)
# 加载知识文档(将工作资料放入./knowledge目录)
documents = SimpleDirectoryReader("./knowledge").load_data()
index = VectorStoreIndex.from_documents(documents)
# 创建查询引擎
query_engine = index.as_query_engine()
@tool
def search_knowledge_base(query: str) -> str:
"""在本地知识库中检索相关信息"""
response = query_engine.query(query)
return str(response)
第28步:将RAG工具集成到Agent
# 将知识库搜索工具添加到工具列表
tools_with_rag = tools + [search_knowledge_base]
agent_with_rag = create_agent(
model=llm,
tools=tools_with_rag,
system_prompt="""你是一个智能工作助手,具备本地知识库检索能力。
当用户提问涉及公司内部信息、文档资料或历史工作时,优先使用知识库搜索工具。
"""
)
第六部分:进阶增强与生产部署(第29-32步)
第29步:探索多Agent协作模式(CrewAI)
当任务复杂度进一步提升时,可以考虑引入多Agent协作架构。CrewAI提供了一个基于角色的多Agent框架:
from crewai import Agent, Task, Crew
researcher = Agent(
role="研究员",
goal="搜索和整理网络信息",
backstory="擅长分析网页内容并提取关键信息",
tools=[scrape_webpage],
llm=llm
)
writer = Agent(
role="报告撰写员",
goal="将信息整理成结构化报告",
backstory="擅长生成工作日报、周报",
tools=[generate_daily_report],
llm=llm
)
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
verbose=True
)
第30步:部署可视化工作流(Dify平台)
如需更低代码的迭代体验,Dify是一个优秀的选择。它是一个拥有13万+GitHub Star的开源AI工作流平台,提供了可视化的工作流编辑器。配合Docker,可以在几分钟内完成自托管部署:
git clone https://github.com/langgenius/dify.git
cd dify/docker
docker-compose up -d
然后在Dify的Web界面中配置Ollama模型供应商,即可通过拖拽方式搭建Agent工作流。
第31步:性能优化与监控
对于生产级部署,建议:
- 使用LangSmith进行调试和观测:LangSmith提供Agent轨迹可视化、状态追踪和运行时指标采集。
- 实现工具调用重试机制:LangGraph内置了错误处理和重试机制,可大幅提升鲁棒性。
- 配置速率限制和预算控制:针对涉及API调用的工具设置使用上限。
第32步:完整项目总结与展望
至此,我们成功从零搭建了一个功能完备的本地AI助手,实现了以下核心能力:
| 功能模块 | 实现方式 | 验证要点 |
|---|---|---|
| 网页信息采集 | ScrapeGraphAI + LangGraph工具 | 单页/多页信息提取准确 |
| 邮件自动收发 | yagmail + IMAP协议 | 发送接收成功,异常处理完整 |
| 日报/月报生成 | LangGraph节点 + 模板引擎 | 格式规范、内容充实 |
| 年终总结PPT | python-pptx | 多页PPT生成、内容填充 |
| 私有知识库RAG | LlamaIndex | 文档解析、向量检索准确 |
| 状态持久化 | SqliteSaver | 支持断点续传和会话恢复 |
最终架构全貌
# 完整的运行示例
def main():
assistant = LocalAIAssistant()
# 场景1:自动采集信息
print(assistant.run("从 https://ollama.com 爬取模型列表和功能介绍"))
# 场景2:生成日报
print(assistant.run("我今天完成了模型部署、Agent配置、文档编写三项任务,没有遇到问题,明天计划开始写日报生成功能"))
# 场景3:搜索本地知识库
print(assistant.run("查找我们项目中关于Agent框架选型的讨论记录"))
# 场景4:生成年终总结PPT
content = {
"title": "2026年度AI助手工作总结",
"summary": "本年度成功实现本地化AI助手从0到1的完整建设...",
"achievements": [
"完成Agent框架从选型到落地的全过程",
"实现五大核心功能(爬取/邮件/日报/月报/PPT)",
"构建私有知识库RAG系统"
],
"next_year_plan": ["引入多模态能力", "优化工具调用效率", "扩展更多自动化场景"]
}
print(assistant.run(f"生成年终总结PPT,内容如下:{content}"))
if __name__ == "__main__":
main()
结语
从LangGraph的核心概念到具体工具实现,从单一Agent到多Agent协作,从命令行交互到可视化编排——30多个步骤,200多行核心代码,我们已经完整走通了本地AI助手的全栈开发流程。
2026年的Agent生态已经相当成熟:LangGraph提供了生产级的图编排能力,Ollama让本地模型部署触手可及,ScrapeGraphAI和LlamaIndex覆盖了数据采集与知识管理的各个环节。这套系统完全可以应用于日常办公自动化、个人知识管理、企业内部效率工具等真实场景。
当然,Agent技术的发展远未止步。微软于2026年4月发布的Agent Framework 1.0,整合了Semantic Kernel和AutoGen的生态,提供了跨.NET和Python的统一开发模型。Dify和n8n的结合也让AI自动化工作流更接近“零代码”的愿景[3†L19-L23]。今后的AI助手将不只是被动响应指令的聊天机器人,而是能够主动规划、持续学习的真正智能体。
现在,动手试试吧。你的本地AI助手,就在这几行代码之中。
相关资源:
更多推荐

所有评论(0)