AI Agent个人助理:打造你的数字分身
一、开场:每个人都值得一个助理
大家好,我是老金。
去年我的一天是这样的:
- 早上翻邮件、回消息:30分钟
- 查日程、安排会议:20分钟
- 整理笔记、写日报:30分钟
- 各种杂事:1小时+
现在有了AI个人助理:
- 邮件自动分类+草拟回复:5分钟
- 日程智能管理:2分钟
- 日报自动生成:1分钟
- 杂事交给助理:几乎为0
这不是科幻,这就是AI Agent个人助理的现实应用。今天分享如何打造你的数字分身。
二、个人助理Agent架构
系统架构
┌─────────────────────────────────────────────────────────┐
│ AI个人助理Agent架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ 用户接口层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 语音交互 │ │ 文字对话 │ │ APP界面 │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ └────────────┼────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 意图理解层 │ │
│ │ • 自然语言理解 │ │
│ │ • 意图识别 │ │
│ │ • 实体抽取 │ │
│ └────────────────────┬────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 技能调度层 │ │
│ │ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ │
│ │ │ 日程 │ │ 邮件 │ │ 任务 │ │ 信息 │ │ │
│ │ │ 管理 │ │ 处理 │ │ 管理 │ │ 检索 │ │ │
│ │ └───────┘ └───────┘ └───────┘ └───────┘ │ │
│ └────────────────────┬────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 数据层 │ │
│ │ • 日历数据 │ │
│ │ • 邮件数据 │ │
│ │ • 任务数据 │ │
│ │ • 笔记数据 │ │
│ │ • 用户偏好 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
三、日程管理Agent
智能日程安排
class ScheduleAgent:
"""日程管理Agent"""
def __init__(self, calendar_api, llm):
self.calendar = calendar_api
self.llm = llm
async def schedule_event(self, description: str) -> dict:
"""智能安排日程"""
# 1. 解析日程描述
event_info = await self._parse_event(description)
# 2. 查找合适时间
available_slots = await self._find_available_time(
event_info['duration'],
event_info['preferred_time']
)
# 3. 选择最佳时间
best_slot = await self._select_best_slot(available_slots, event_info)
# 4. 创建事件
event = await self.calendar.create_event(
title=event_info['title'],
start_time=best_slot['start'],
end_time=best_slot['end'],
description=event_info.get('description')
)
return {
"success": True,
"event": event,
"message": f"已为您安排在 {best_slot['start'].strftime('%m月%d日 %H:%M')}"
}
async def _parse_event(self, description: str) -> dict:
"""解析日程描述"""
prompt = f"""
解析以下日程描述:
"{description}"
提取信息:
- 事件标题
- 时长(分钟)
- 偏好时间(如有)
- 重要程度(高/中/低)
- 描述
输出JSON格式。
"""
response = await self.llm.generate(prompt)
return json.loads(response)
async def _find_available_time(self, duration: int,
preferred: dict = None) -> list:
"""查找可用时间"""
# 获取未来7天的日程
events = await self.calendar.get_upcoming_events(days=7)
# 找出空闲时段
slots = []
current = datetime.now()
for day in range(7):
date = current + timedelta(days=day)
daily_slots = await self._get_daily_available_slots(
date, duration
)
slots.extend(daily_slots)
return slots
async def _select_best_slot(self, slots: list, event_info: dict) -> dict:
"""选择最佳时间"""
# 根据用户偏好打分
for slot in slots:
score = self._calculate_slot_score(slot, event_info)
slot['score'] = score
# 返回得分最高的
return max(slots, key=lambda x: x['score'])
def _calculate_slot_score(self, slot: dict, event_info: dict) -> float:
"""计算时段得分"""
score = 100.0
# 工作时间加分
hour = slot['start'].hour
if 9 <= hour <= 18:
score += 20
# 上午适合重要事项
if event_info.get('importance') == 'high' and hour <= 12:
score += 10
# 避开午休
if 12 <= hour dict:
"""发送每日简报"""
today_events = await self.calendar.get_today_events()
if not today_events:
return {"message": "今天没有安排"}
# 生成简报
brief = await self._generate_briefing(today_events)
return {
"date": datetime.now().strftime('%Y年%m月%d日'),
"events_count": len(today_events),
"briefing": brief
}
async def _generate_briefing(self, events: list) -> str:
"""生成简报"""
prompt = f"""
为今天的日程生成简报:
{json.dumps(events, ensure_ascii=False, indent=2)}
要求:
1. 友好的语气
2. 提醒重要事项
3. 建议时间安排
"""
return await self.llm.generate(prompt)
四、邮件管理Agent
智能邮件处理
class EmailAgent:
"""邮件管理Agent"""
async def process_inbox(self) -> dict:
"""处理收件箱"""
emails = await self.email_api.get_unread_emails()
results = {
"total": len(emails),
"categorized": {},
"urgent": [],
"drafts": []
}
for email in emails:
# 1. 分类
category = await self._classify_email(email)
results['categorized'][category] =
results['categorized'].get(category, 0) + 1
# 2. 判断紧急程度
urgency = await self._assess_urgency(email)
if urgency == 'high':
results['urgent'].append(email)
# 3. 自动回复(可选)
if category in ['notification', 'promotion']:
draft = await self._generate_reply(email, category)
results['drafts'].append({
"email_id": email['id'],
"draft": draft
})
return results
async def _classify_email(self, email: dict) -> str:
"""分类邮件"""
prompt = f"""
分类这封邮件:
发件人:{email['from']}
主题:{email['subject']}
内容预览:{email['body'][:200]}
分类选项:
- work: 工作相关
- personal: 个人事务
- notification: 通知提醒
- promotion: 推广营销
- spam: 垃圾邮件
只输出分类。
"""
return (await self.llm.generate(prompt)).strip().lower()
async def _assess_urgency(self, email: dict) -> str:
"""评估紧急程度"""
prompt = f"""
评估这封邮件的紧急程度:
主题:{email['subject']}
内容:{email['body'][:500]}
紧急程度:
- high: 需要立即处理
- medium: 今天内处理
- low: 可以稍后处理
只输出等级。
"""
return (await self.llm.generate(prompt)).strip().lower()
async def draft_reply(self, email: dict, instruction: str = None) -> str:
"""草拟回复"""
prompt = f"""
为这封邮件草拟回复:
原邮件:
发件人:{email['from']}
主题:{email['subject']}
内容:{email['body']}
回复要求:{instruction or '礼貌、专业'}
只输出回复内容。
"""
return await self.llm.generate(prompt)
邮件摘要
class EmailSummarizer:
"""邮件摘要"""
async def summarize_thread(self, thread_id: str) -> dict:
"""总结邮件线程"""
emails = await self.email_api.get_thread(thread_id)
prompt = f"""
总结以下邮件往来:
{json.dumps(emails, ensure_ascii=False, indent=2)}
生成:
1. 主题总结(一句话)
2. 关键信息(列表)
3. 待办事项(如有)
4. 建议回复
"""
summary = await self.llm.generate(prompt)
return {
"thread_id": thread_id,
"email_count": len(emails),
"summary": summary
}
五、任务管理Agent
智能任务处理
class TaskAgent:
"""任务管理Agent"""
async def add_task(self, description: str) -> dict:
"""添加任务"""
# 解析任务
task_info = await self._parse_task(description)
# 创建任务
task = await self.task_api.create_task(
title=task_info['title'],
due_date=task_info.get('due_date'),
priority=task_info.get('priority', 'medium'),
tags=task_info.get('tags', [])
)
# 智能建议
suggestions = await self._generate_suggestions(task_info)
return {
"task": task,
"suggestions": suggestions
}
async def _parse_task(self, description: str) -> dict:
"""解析任务描述"""
prompt = f"""
解析任务描述:
"{description}"
提取:
- 任务标题
- 截止日期(如有)
- 优先级(高/中/低)
- 标签
- 预估时长
输出JSON。
"""
response = await self.llm.generate(prompt)
return json.loads(response)
async def daily_planning(self) -> dict:
"""每日任务规划"""
# 获取待办任务
tasks = await self.task_api.get_pending_tasks()
# 获取今日日程
events = await self.calendar.get_today_events()
# 智能规划
plan = await self._create_daily_plan(tasks, events)
return plan
async def _create_daily_plan(self, tasks: list, events: list) -> dict:
"""创建每日计划"""
prompt = f"""
创建今日工作计划:
待办任务:
{json.dumps(tasks, ensure_ascii=False)}
今日日程:
{json.dumps(events, ensure_ascii=False)}
要求:
1. 合理分配任务到时间段
2. 重要任务优先安排
3. 预留缓冲时间
4. 考虑日程冲突
输出时间表格式。
"""
response = await self.llm.generate(prompt)
return self._parse_plan(response)
任务追踪
class TaskTracker:
"""任务追踪"""
async def get_progress_report(self) -> dict:
"""获取进度报告"""
# 本周任务
weekly_tasks = await self.task_api.get_weekly_tasks()
# 计算统计
completed = [t for t in weekly_tasks if t['status'] == 'completed']
pending = [t for t in weekly_tasks if t['status'] == 'pending']
overdue = [t for t in weekly_tasks if self._is_overdue(t)]
return {
"total": len(weekly_tasks),
"completed": len(completed),
"pending": len(pending),
"overdue": len(overdue),
"completion_rate": len(completed) / len(weekly_tasks) * 100,
"overdue_tasks": overdue
}
六、信息检索Agent
个人知识库
class KnowledgeAgent:
"""个人信息检索Agent"""
def __init__(self, llm, vector_store):
self.llm = llm
self.vector_store = vector_store
async def index_document(self, doc_type: str, content: str,
metadata: dict = None):
"""索引文档"""
# 分段
chunks = self._split_content(content)
# 向量化存储
for i, chunk in enumerate(chunks):
await self.vector_store.add(
text=chunk,
metadata={
**(metadata or {}),
"doc_type": doc_type,
"chunk_index": i
}
)
async def search(self, query: str, top_k: int = 5) -> list:
"""搜索"""
results = await self.vector_store.search(query, top_k)
# 重排序
ranked = await self._rerank_results(query, results)
return ranked
async def answer_question(self, question: str) -> dict:
"""回答问题"""
# 检索相关内容
relevant = await self.search(question)
if not relevant:
return {
"answer": "抱歉,没有找到相关信息。",
"sources": []
}
# 生成回答
context = "nn".join([r['text'] for r in relevant])
prompt = f"""
基于以下信息回答问题:
{context}
问题:{question}
要求:
1. 基于提供的信息回答
2. 如果信息不足,明确说明
3. 引用来源
"""
answer = await self.llm.generate(prompt)
return {
"answer": answer,
"sources": [r['metadata'] for r in relevant[:3]]
}
笔记管理
class NoteAgent:
"""笔记管理Agent"""
async def create_note(self, content: str, auto_tag: bool = True) -> dict:
"""创建笔记"""
# 提取标题
title = await self._extract_title(content)
# 自动标签
tags = []
if auto_tag:
tags = await self._generate_tags(content)
# 创建笔记
note = await self.note_api.create(
title=title,
content=content,
tags=tags
)
# 索引到知识库
await self.knowledge_agent.index_document(
"note",
content,
{"note_id": note['id'], "title": title}
)
return note
async def _extract_title(self, content: str) -> str:
"""提取标题"""
prompt = f"""
为以下笔记提取或生成一个简洁的标题(10字以内):
{content[:200]}
只输出标题。
"""
return (await self.llm.generate(prompt)).strip()
async def _generate_tags(self, content: str) -> list:
"""生成标签"""
prompt = f"""
为以下笔记生成3-5个标签:
{content[:500]}
只输出标签,用逗号分隔。
"""
response = await self.llm.generate(prompt)
return [t.strip() for t in response.split(',')]
七、日报周报Agent
自动生成报告
class ReportAgent:
"""报告生成Agent"""
async def generate_daily_report(self) -> dict:
"""生成日报"""
# 收集信息
tasks = await self.task_agent.get_today_tasks()
events = await self.calendar.get_today_events()
emails = await self.email_agent.get_today_emails()
# 生成报告
report = await self._compose_report({
"tasks": tasks,
"events": events,
"emails": emails,
"date": datetime.now().strftime('%Y-%m-%d')
})
return report
async def generate_weekly_report(self) -> dict:
"""生成周报"""
# 收集本周数据
tasks = await self.task_agent.get_weekly_tasks()
events = await self.calendar.get_weekly_events()
emails = await self.email_agent.get_weekly_stats()
# 生成报告
report = await self._compose_weekly_report({
"tasks": tasks,
"events": events,
"emails": emails,
"week": datetime.now().strftime('%Y年第%W周')
})
return report
async def _compose_report(self, data: dict) -> dict:
"""撰写报告"""
prompt = f"""
基于以下数据生成工作日报:
日期:{data['date']}
完成任务:{json.dumps(data['tasks']['completed'], ensure_ascii=False)}
待办任务:{json.dumps(data['tasks']['pending'], ensure_ascii=False)}
会议:{json.dumps(data['events'], ensure_ascii=False)}
邮件统计:{json.dumps(data['emails'], ensure_ascii=False)}
要求:
1. 总结今日工作
2. 列出完成事项
3. 说明待办进度
4. 明日计划
"""
content = await self.llm.generate(prompt)
return {
"date": data['date'],
"content": content,
"stats": {
"tasks_completed": len(data['tasks']['completed']),
"tasks_pending": len(data['tasks']['pending']),
"meetings": len(data['events'])
}
}
八、最佳实践
多Agent协作
class PersonalAssistantOrchestrator:
"""个人助理编排"""
def __init__(self):
self.schedule_agent = ScheduleAgent()
self.email_agent = EmailAgent()
self.task_agent = TaskAgent()
self.knowledge_agent = KnowledgeAgent()
async def handle_request(self, user_input: str) -> dict:
"""处理用户请求"""
# 1. 理解意图
intent = await self._understand_intent(user_input)
# 2. 路由到对应Agent
agent_map = {
"schedule": self.schedule_agent,
"email": self.email_agent,
"task": self.task_agent,
"knowledge": self.knowledge_agent
}
agent = agent_map.get(intent['type'])
if not agent:
return {"error": "无法理解的请求"}
# 3. 执行
result = await agent.execute(intent['action'], intent['params'])
return result
async def morning_briefing(self) -> dict:
"""早安简报"""
# 并行获取信息
schedule, emails, tasks = await asyncio.gather(
self.schedule_agent.get_today_schedule(),
self.email_agent.get_urgent_emails(),
self.task_agent.get_today_tasks()
)
# 生成简报
briefing = await self._generate_briefing(schedule, emails, tasks)
return briefing
技能对比
| 功能 | 传统方式 | AI Agent |
|---|---|---|
| 日程安排 | 手动查找时间 | 自动推荐最佳时间 |
| 邮件处理 | 逐封阅读 | 智能分类+草拟回复 |
| 任务管理 | 列表记录 | 智能规划+提醒 |
| 信息检索 | 手动翻找 | 语义搜索+问答 |
| 日报撰写 | 30分钟 | 自动生成1分钟 |
九、总结
效率提升
- 日程管理效率提升:80%
- 邮件处理效率提升:70%
- 任务完成率提升:40%
- 信息检索效率提升:90%
下期预告
明天聊聊AI Agent智能运维——让系统自己照顾自己!
往期回顾
正文完