程序员视角:从人类需求拆解智能体应用场景与落地代码
本文探讨了智能体(Agent)如何通过模拟人类行为模式解决实际问题。文章聚焦三类典型应用场景: 个人助理智能体:通过自然语言理解、任务优先级排序和自动化执行,解决时间管理碎片化问题。代码示例展示了基于ChatGLM-6B的日程管理智能体实现,支持自然语言指令解析和冲突检测。 协作型智能体:模拟团队分工模式,通过多角色智能体(需求分析师、开发者、审查员)协同完成项目。代码实现了任务拆解、角色分配和结
智能体(Agent)的核心价值,在于 “模拟人类行为模式解决实际问题”—— 无论是帮人管理日程的个人助理,还是替代团队协作的协同智能体,本质都是通过技术复刻人类的 “决策 - 执行” 逻辑。作为程序员,开发智能体需先理解 “人需要什么”,再用代码实现 “智能体能做什么”。本文结合三类典型应用场景,通过可运行的代码示例,拆解智能体如何适配人类在日常效率、团队协作、专业领域的核心需求。
个人助理智能体:适配人类日常效率需求
现代人常面临 “信息过载、事务繁杂” 的困扰:待办事项记不全、日程冲突难协调、重复操作耗时间。个人助理智能体的设计核心,是 “复刻人类的时间管理逻辑”—— 通过自然语言理解拆解任务、按优先级排序事务、自动执行重复性操作,成为人的 “数字分身”。
核心功能与技术选型
- 任务解析:用 LLM(如 ChatGLM-6B)理解自然语言指令,提取任务类型(日程 / 待办 / 提醒)、时间、优先级等关键信息;
- 日程管理:对接本地日历(如 macOS Calendar、Windows 日历)或云日历 API,实现日程创建与冲突检测;
- 自动化执行:通过 Python 调用系统接口,完成邮件发送、文件整理等重复性工作。
代码实战:日程管理与待办提醒智能体
以下代码实现一个基础个人助理智能体,支持通过自然语言添加日程、设置待办提醒,并自动检测日程冲突:
import datetime
import json
from typing import List, Dict
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
# 1. 初始化LLM任务解析器(用于理解自然语言指令)
def init_task_parser(model_name: str = "THUDM/chatglm-6b-int4"):
"""加载轻量化LLM,解析用户自然语言指令中的任务信息"""
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_name,
trust_remote_code=True,
device_map="auto"
).eval()
def parse_task(user_input: str) -> Dict:
"""
解析用户输入,提取任务信息
返回格式:{"type": "schedule/todo", "content": str, "time": datetime, "priority": "high/mid/low"}
"""
prompt = f"""
请从用户输入中提取任务信息,严格按照以下规则输出JSON:
1. 任务类型(type):若包含具体时间(如"明天3点")则为"schedule",否则为"todo";
2. 内容(content):任务的核心描述,去除时间等冗余信息;
3. 时间(time):若为schedule,格式为"YYYY-MM-DD HH:MM",否则为null;
4. 优先级(priority):含"紧急""必须"为"high",含"抽空""有空"为"low",默认"mid"。
用户输入:{user_input}
输出JSON(无需其他内容):
"""
response = model.generate(
tokenizer.build_chat_input(prompt, history=[]),
max_new_tokens=200,
temperature=0.1 # 降低随机性,确保输出格式稳定
)
task_json = tokenizer.decode(response[0], skip_special_tokens=True).split("输出JSON(无需其他内容):")[-1]
return json.loads(task_json)
return parse_task
# 2. 日程管理核心逻辑(含冲突检测)
class PersonalAssistant:
def __init__(self):
self.schedules: List[Dict] = [] # 存储日程:[{"content": str, "time": datetime, "priority": str}]
self.todos: List[Dict] = [] # 存储待办:[{"content": str, "priority": str, "done": bool}]
self.task_parser = init_task_parser() # 初始化任务解析器
def add_task(self, user_input: str) -> str:
"""添加任务(日程/待办),并返回执行结果"""
try:
task = self.task_parser(user_input)
# 处理日程任务
if task["type"] == "schedule":
task_time = datetime.datetime.strptime(task["time"], "%Y-%m-%d %H:%M")
# 检测日程冲突(前后30分钟内已有日程)
conflict = any(
abs((sch["time"] - task_time).total_seconds()) < 1800
for sch in self.schedules
)
if conflict:
return f"⚠️ 日程冲突:{task_time.strftime('%m-%d %H:%M')}前后30分钟已有其他安排"
self.schedules.append({
"content": task["content"],
"time": task_time,
"priority": task["priority"]
})
# 按时间排序日程
self.schedules.sort(key=lambda x: x["time"])
return f"✅ 已添加日程:{task_time.strftime('%m-%d %H:%M')} - {task['content']}(优先级:{task['priority']})"
# 处理待办任务
elif task["type"] == "todo":
self.todos.append({
"content": task["content"],
"priority": task["priority"],
"done": False
})
# 按优先级排序待办(high > mid > low)
self.todos.sort(key=lambda x: {"high": 0, "mid": 1, "low": 2}[x["priority"]])
return f"✅ 已添加待办:{task['content']}(优先级:{task['priority']})"
except Exception as e:
return f"❌ 添加失败:{str(e)}"
def show_tasks(self, task_type: str = "all") -> str:
"""展示任务列表(all/schedule/todo)"""
result = []
if task_type in ["all", "schedule"]:
result.append("📅 近期日程:")
if not self.schedules:
result.append(" 暂无日程安排")
else:
for i, sch in enumerate(self.schedules[:5], 1): # 只显示前5条
time_str = sch["time"].strftime("%m-%d %H:%M")
result.append(f" {i}. {time_str} - {sch['content']}({sch['priority']})")
if task_type in ["all", "todo"]:
result.append("\n✅ 待办任务:")
if not self.todos:
result.append(" 暂无待办任务")
else:
for i, todo in enumerate(self.todos[:5], 1):
status = "✅" if todo["done"] else "❌"
result.append(f" {i}. {status} {todo['content']}({todo['priority']})")
return "\n".join(result)
# 3. 测试个人助理智能体
if __name__ == "__main__":
assistant = PersonalAssistant()
# 模拟用户交互
print("🤖 个人助理智能体(输入'退出'结束)")
while True:
user_input = input("你:")
if user_input == "退出":
print("🤖 再见!")
break
elif user_input in ["查看任务", "任务列表"]:
print(f"🤖 {assistant.show_tasks()}")
else:
response = assistant.add_task(user_input)
print(f"🤖 {response}")
落地场景与人类需求适配
该智能体完美解决人类 “时间管理碎片化” 的痛点:用户只需用自然语言(如 “明天下午 2 点开项目会,紧急”“抽空整理报销单”)下达指令,智能体自动完成任务分类、冲突检测、优先级排序,无需手动操作日历或待办 APP。在实际应用中,还可扩展对接邮件 API(自动发送会议邀请)、闹钟接口(时间到点提醒),进一步贴合人类 “少操作、高效率” 的核心需求。
协作型智能体:模拟人类团队协作模式
在工作场景中,人类团队的高效协作依赖 “分工明确、沟通顺畅、成果对齐”—— 如产品经理写需求文档、开发写代码、测试做验证。协作型智能体的设计思路,是 “用多智能体系统复刻团队协作流程”:为每个智能体分配专属角色,定义角色间的交互规则,让系统自主完成复杂项目,减少人类的协调成本。
核心功能与技术选型
- 角色定义:为每个智能体绑定 “专业技能”(如文档撰写、代码生成、质量检查);
- 任务分配:用 “调度智能体” 拆解项目任务,按角色能力分配给对应执行智能体;
- 结果协同:通过共享知识库(如向量数据库)实现智能体间的信息同步,确保成果一致性。
代码实战:多角色协作项目开发智能体
以下代码实现一个简化的协作型智能体系统,包含 “需求分析师”“Python 开发”“代码审查员” 三个角色,协同完成简单功能的开发任务:
import json
from typing import List, Dict
from transformers import pipeline
# 1. 定义智能体角色与技能
class AgentRole:
"""智能体角色类,封装角色名称、技能与LLM推理逻辑"""
def __init__(self, role_name: str, skill: str, model_name: str = "gpt2-medium"):
self.role_name = role_name
self.skill = skill
# 初始化文本生成管道(模拟角色的专业能力)
self.generator = pipeline(
"text-generation",
model=model_name,
device=-1 # CPU运行,GPU可设为0
)
def execute(self, task: str, context: str = "") -> str:
"""执行任务,结合上下文生成结果"""
prompt = f"""
你是一名专业的{self.role_name},擅长{self.skill}。
请根据以下任务和上下文完成工作,输出专业、完整的结果:
上下文(可选):{context}
任务:{task}
{self.role_name}的输出:
"""
result = self.generator(
prompt,
max_length=500,
temperature=0.7,
top_p=0.9,
repetition_penalty=1.1 # 避免重复
)
# 提取角色输出内容
return result[0]["generated_text"].split(f"{self.role_name}的输出:")[-1].strip()
# 2. 调度智能体:负责任务拆解与分配
class CoordinatorAgent:
def __init__(self, roles: List[AgentRole]):
self.roles = {role.role_name: role for role in roles} # 角色映射
# 初始化任务拆解器
self.task_splitter = pipeline(
"text-generation",
model="gpt2-medium",
device=-1
)
def split_task(self, project_task: str) -> List[Dict]:
"""拆解项目任务为角色可执行的子任务"""
prompt = f"""
请将项目任务拆分为适合以下角色执行的子任务,输出JSON列表:
角色包括:需求分析师(输出需求文档)、Python开发(编写代码)、代码审查员(检查代码质量)。
每个子任务需包含"role"(角色名)和"task"(子任务描述)。
项目任务:{project_task}
JSON列表(无需其他内容):
"""
response = self.task_splitter(
prompt,
max_length=300,
temperature=0.2
)
tasks_json = response[0]["generated_text"].split("JSON列表(无需其他内容):")[-1]
return json.loads(tasks_json)
def run_project(self, project_task: str) -> Dict:
"""执行整个项目:拆解任务→分配执行→汇总结果"""
print(f"📋 项目任务:{project_task}")
print("🔄 开始拆解任务...")
# 1. 拆解任务
sub_tasks = self.split_task(project_task)
print(f"✅ 任务拆解完成,共{len(sub_tasks)}个子任务")
# 2. 执行子任务(按顺序执行,后一个任务依赖前一个的结果)
project_result = {}
context = "" # 传递上下文(前序任务结果)
for i, sub_task in enumerate(sub_tasks, 1):
role_name = sub_task["role"]
task_content = sub_task["task"]
if role_name not in self.roles:
project_result[f"子任务{i}"] = f"❌ 无{role_name}角色,任务无法执行"
continue
print(f"\n🚀 执行子任务{i}:{role_name} - {task_content}")
role = self.roles[role_name]
result = role.execute(task_content, context)
project_result[f"子任务{i}"] = {
"role": role_name,
"task": task_content,
"result": result
}
# 更新上下文(将当前结果传递给下一个任务)
context += f"\n{role_name}的工作成果:{result[:200]}..." # 截取前200字符避免过长
# 3. 生成项目总结
print("\n📊 项目执行完成,生成总结...")
summary = self.generate_summary(project_result)
project_result["项目总结"] = summary
return project_result
def generate_summary(self, project_result: Dict) -> str:
"""生成项目执行总结"""
summary_prompt = f"""
请根据以下项目执行结果,生成简洁的总结报告,包含完成的任务、各角色贡献和最终成果:
项目执行结果:{json.dumps(project_result, ensure_ascii=False, indent=2)[:500]}...
总结报告:
"""
response = self.task_splitter(
summary_prompt,
max_length=300,
temperature=0.5
)
return response[0]["generated_text"].split("总结报告:")[-1].strip()
# 3. 初始化协作型智能体系统并测试
if __name__ == "__main__":
# 1. 创建各角色智能体
roles = [
AgentRole(
role_name="需求分析师",
skill="撰写清晰、详细的软件需求文档(含功能描述、输入输出、使用场景)"
),
AgentRole(
role_name="Python开发",
skill="根据需求文档编写可运行的Python代码,包含函数定义、注释和示例调用"
),
AgentRole(
role_name="代码审查员",
skill="检查Python代码的语法正确性、逻辑完整性、命名规范和性能优化建议"
)
]
# 2. 创建调度智能体
coordinator = CoordinatorAgent(roles)
# 3. 执行项目任务
project_task = "开发一个Python函数,实现对列表中数字的排序功能,支持升序和降序切换"
project_result = coordinator.run_project(project_task)
# 4. 输出项目结果
print("\n" + "="*50)
print("🎯 项目最终结果")
print("="*50)
for key, value in project_result.items():
if key == "项目总结":
</doubaocanvas>
更多推荐
所有评论(0)