1. 这不是“学AI”的入门,是“用AI解决问题”的起点
很多人点开“AI Agent 入门”这个标题,心里想的是:是不是该装个LangChain、跑通一个AutoGen demo、把Llama3本地跑起来?结果三天后卡在环境配置里,五天后对着一堆抽象概念发呆,七天后默默关掉终端——不是人不行,是路走反了。我带过二十多个从行政、教培、财务、设计转行过来的学员,几乎所有人踩的第一个坑,就是把“AI Agent”当成一门新编程语言来学。它根本不是。它是一套问题拆解+工具调度+反馈闭环的思维操作系统,底层可以是Python,也可以是Excel宏,甚至是一张手写的流程图。你不需要先背熟ReAct、Plan-and-Execute、Tool Calling这些词,就像你不会为了学会点外卖,先去研究TCP三次握手和CDN节点分布。真正卡住新手的,从来不是技术深度,而是任务颗粒度错位:一上来就想做个“能自动写周报+查竞品+订会议室+生成PPT”的全能Agent,结果连“把钉钉群里的会议纪要提取出待办事项”这一步都跑不通。关键词里那个“别一上来就啃框架”,说的就是这个——框架是别人把路修好后立的路标,而你现在需要的,是亲手摸清哪条土路能通到河边、哪块石头能垫脚够到树上的果子。这篇文章不讲任何框架API,不贴一行config.yaml,只讲三件事:第一,你手头正在做的哪类重复性工作,天然适合被Agent化;第二,用最原始的“人工模拟Agent”方式,三天内验证出这件事到底值不值得自动化;第三,当确认有价值后,用最低成本、最小代码量,把它变成一个可运行的最小闭环。它适合两类人:一类是每天被周报、数据整理、客户信息同步压得喘不过气的职场人,另一类是已经写过几段Python但总觉得自己“没入门”的转行者。你不需要懂Transformer,但得清楚自己上周五下午三点干了什么、为什么非得干、有没有可能让机器替你干其中70%的机械动作。
2. 内容整体设计与思路拆解:从“人工代理”到“数字代理”的渐进路径
2.1 为什么必须跳过框架,先做“人工代理”模拟?
我见过太多人花两周时间配好Ollama+LangChain+Chroma,最后发现核心卡点根本不在技术:他们连“会议纪要里哪些字段算‘待办事项’”都没定义清楚。比如一句“请市场部下周跟进用户反馈”,是待办吗?如果是,负责人是谁?截止时间怎么定?要不要关联到Jira?这些不是模型能猜出来的,是你作为业务方必须拍板的规则。所以我的教学路径是倒着来的:先当三天“人肉Agent”,再决定要不要造一台机器来替代自己。具体操作很简单——拿一张A4纸,左边列“输入”,右边列“输出”,中间画箭头,箭头旁边手写每一步你大脑里实际在做的判断。比如处理销售日报邮件:
- 输入:一封标题为【销售日报-20240520】的邮件,正文含表格(日期、客户名、金额、状态)
- 你大脑实际动作:
- 扫一眼发件人,确认是销售总监发的(过滤垃圾邮件)
- 定位到表格区域(视觉聚焦)
- 检查“状态”列是否含“已签约”(关键词匹配)
- 对每个“已签约”行,提取“客户名”和“金额”(结构化抽取)
- 把所有提取结果粘贴到飞书多维表格“本周签约”页签(动作执行)
这个过程里,真正消耗你精力的,是第1、3、4步的模式识别和规则判断,而不是第5步的复制粘贴。而AI Agent最擅长的,恰恰是1/3/4——它不擅长第2步(你得告诉它表格在哪),更不擅长第5步(你得告诉它飞书API怎么调)。所以框架的价值,永远是“帮你把已知规则,翻译成机器可执行的指令”,而不是“帮你发现规则”。跳过人工模拟直接上框架,等于让一个没开过车的人,先背熟发动机原理图,再坐进驾驶座——方向盘往哪打,他根本不知道。
2.2 为什么选“任务闭环”而非“技术模块”作为学习单元?
市面上90%的AI Agent教程,按技术栈分章节:LLM基础→Prompt工程→Tool Calling→Memory管理→Orchestration。这就像教人做饭,先讲淀粉酶分解原理、再讲美拉德反应温度曲线、最后教切菜。结果学员学会了所有理论,却做不出一碗蛋炒饭。真实世界里,没人因为“想学Tool Calling”而去写Agent,都是因为“每周三要手动汇总12个渠道的投诉数据,太耗时”。所以我的内容设计完全按真实任务流组织:从“识别可自动化任务”开始,到“人工模拟验证”,再到“最小代码闭环”,最后才谈“如何扩展能力”。每一个环节都绑定一个具体场景,比如:
- 场景A:从微信客服聊天记录中提取客户手机号和问题关键词
- 场景B:根据飞书日历中的会议标题,自动生成待办事项并分配给对应同事
- 场景C:监控指定网页的“价格”字段变化,触发企业微信通知
这些场景的共同点是:输入源固定(微信导出文本/飞书日历API/网页HTML)、输出目标明确(结构化数据/待办事项/通知消息)、规则相对清晰(手机号正则/标题关键词映射/价格XPath定位)。它们不需要大模型理解哲学,只需要稳定、准确、可预测地执行确定性规则。而框架的本质,就是把这类确定性规则,封装成可复用的“积木”。所以学习顺序必须是:先亲手搭一次积木(人工模拟),再看别人怎么设计积木模具(框架原理),最后学怎么批量生产积木(工程化部署)。否则,你永远在调试别人的模具,却不知道自己要造什么家具。
2.3 为什么强调“最小闭环”而非“功能完整”?
很多转行者有个执念:我的Agent必须能“思考”“规划”“反思”。结果写了一千行代码,连“把PDF里的文字转成Excel”都跑不通。我带过一个做HR的学员,她的真实需求是:“每天早上9点,自动把招聘系统导出的候选人名单,按岗位分类发给对应部门负责人”。她花了三天试图用AutoGen实现“智能推荐面试官”,最后发现:系统里早有“岗位-负责人”映射表,根本不需要推荐,只要查表+发邮件就行。于是我们砍掉所有“智能”模块,用12行Python+1个定时任务,完成了闭环:
# 伪代码示意,实际用pandas+schedule+smtp import pandas as pd import schedule import time def send_dept_emails(): candidates = pd.read_csv("recruitment_export.csv") dept_map = {"前端开发": "zhang@company.com", "UI设计": "li@company.com"} for dept, emails in dept_map.items(): dept_candidates = candidates[candidates["岗位"] == dept] send_email(to=emails, subject=f"{dept}候选人名单", body=dept_candidates.to_string()) schedule.every().day.at("09:00").do(send_dept_emails) while True: schedule.run_pending() time.sleep(60)这个脚本没有用任何LLM,没有RAG,没有记忆模块,但它解决了80%的痛点。更重要的是,它让学员第一次体会到“Agent”的本质:不是拟人化,而是责任移交。当她看到邮箱里准时收到分类名单时,那种“这事终于不用我操心了”的轻松感,比跑通十个LangChain demo都实在。所以我的设计原则很粗暴:每个学习单元,必须产出一个可运行、可验证、可交付的最小闭环。它可能只有30行代码,但它必须能解决一个真实存在的、让你皱眉的具体问题。框架只是加速器,不是起动机。没有起动机,加速器再快也没用。
3. 核心细节解析与实操要点:从人工模拟到代码落地的三道关卡
3.1 关卡一:精准定义你的“可自动化任务”(人工模拟阶段)
这不是技术活,是业务洞察力测试。很多人失败,是因为把“看起来能自动化”的事,当成了“值得自动化”的事。判断标准只有三个,缺一不可:
- 高频重复:同一类操作,每周发生≥3次,且单次耗时≥10分钟;
- 规则明确:判断逻辑能用“如果…那么…”句式写清楚,不依赖主观经验;
- 输入可控:数据源格式稳定(如固定字段的CSV、有规律的邮件标题、结构化的网页)。
举个反例:某运营同学想自动化“分析小红书爆款笔记”。她认为这是高频(每天看50篇)、规则明确(找点赞>1w的)、输入可控(小红书APP)。但实际卡在第二条——“为什么这篇爆了”涉及文案情绪、封面构图、发布时间等多重模糊因素,无法用确定性规则描述。这就是典型的“伪可自动化”。再看一个正例:某电商公司的“每日库存预警”。规则是:“当SKU的库存量<安全库存阈值时,邮件通知采购负责人”。输入是ERP系统导出的CSV(含SKU、当前库存、安全库存三列),输出是固定格式邮件。它完美符合三条标准,且人工模拟只需两步:打开CSV → 逐行检查库存<阈值 → 发邮件。这种任务,就是Agent的黄金切入点。
提示:别急着写代码,先用Excel验证规则。把你的输入数据扔进Excel,用FILTER+IF函数模拟判断逻辑。如果Excel能跑通,代码就一定没问题。我让所有学员第一步必须交一份“Excel模拟截图”,里面要有原始数据、公式栏、结果列。这比写一百行代码更能暴露问题。
3.2 关卡二:拆解“人工代理”的决策链条(规则提炼阶段)
人工模拟不是照搬操作步骤,而是逆向工程你的大脑CPU。重点抓三个节点:
- 入口过滤器:你如何确认这条数据“属于我管”?(如邮件标题含“日报”、微信消息来自“客服群”、文件名含“月结”)
- 核心判断器:你依据什么规则做出关键决策?(如“状态=已签约”、“问题关键词包含‘退款’”、“价格数字比上月低5%”)
- 出口执行器:你最终把结果“塞”到哪里?(如飞书多维表格某页签、企业微信某群、指定邮箱)
以“微信客服消息提取”为例,人工模拟时,我会让学员录屏自己处理过程,然后逐帧回放,标注每一秒在做什么:
| 时间 | 动作 | 对应节点 |
|---|---|---|
| 0:00-0:05 | 点开微信,切换到“VIP客服群” | 入口过滤器(群名称匹配) |
| 0:05-0:12 | 滑动查找最新一条含“?”的消息 | 入口过滤器(消息特征匹配) |
| 0:12-0:18 | 点开消息,看发送人昵称是否为“张三” | 入口过滤器(发送人匹配) |
| 0:18-0:25 | 扫描消息正文,找“手机号”“问题”字样 | 核心判断器(关键词定位) |
| 0:25-0:32 | 手动复制手机号和问题描述 | 核心判断器(信息抽取) |
| 0:32-0:40 | 粘贴到CRM系统“新建线索”表单 | 出口执行器(目标系统对接) |
你会发现,真正需要AI介入的,只有0:18-0:32这14秒——其余全是环境准备和系统操作。而0:18-0:32的规则,完全可以写成:if "手机号" in message_text: extract phone by regex r'1[3-9]\d{9}'if "问题" in message_text: extract next 30 chars after "问题:"
注意:别追求100%准确率。人工处理也有漏看的时候。初期目标是“比人工快30%,准确率85%”。等跑通闭环,再迭代优化。我见过太多人卡在“正则必须匹配所有手机号格式”,结果三个月没迈出第一步。记住:Agent是帮你减负的,不是给你加考题的。
3.3 关卡三:选择“最小技术栈”实现闭环(代码落地阶段)
一旦规则清晰,技术选型就变得极其简单。原则就一条:能用Excel公式解决的,绝不写Python;能用Python脚本解决的,绝不上框架;能用现成API的,绝不自己爬虫。以下是针对不同场景的“最小技术栈”推荐表:
| 任务类型 | 推荐工具 | 为什么是最小? | 实操要点 |
|---|---|---|---|
| 结构化数据处理(CSV/Excel/数据库) | pandas + openpyxl | 单文件安装,语法接近Excel函数,学习曲线平缓 | df.query("status == '已签约'")比写SQL直观十倍;df.to_excel()一键导出 |
| 网页内容提取(固定结构) | requests + BeautifulSoup | 不需JS渲染,纯HTML解析,5行代码搞定 | 先用浏览器F12复制XPath,再用soup.select_one("div.price")验证 |
| 邮件/消息收发 | smtplib + imaplib(邮件) / 企业微信Webhook(消息) | 无需登录态管理,无第三方依赖,配置即用 | 邮箱密码用App Password,企业微信Webhook地址存在环境变量里 |
| 定时触发 | schedule(轻量)或系统cron(Linux/macOS) | 零学习成本,schedule.every().day.at("09:00").do(job)直观易懂 | Windows用户用任务计划程序,比装APScheduler更稳妥 |
特别提醒:永远不要在第一个项目里碰LLM。90%的初级任务,用规则引擎(正则、条件判断、查表)就能覆盖。比如“提取会议纪要待办”,与其调用大模型理解语义,不如直接匹配“请.完成.”“需.*于.*前”这类句式。我让所有学员的第一个Agent,必须满足:不调用任何llm.invoke(),不引入langchain包,纯Python标准库+1个领域库(pandas/bs4等)。这样做的好处是:当代码跑不通时,你能100%确定是逻辑错误,而不是模型幻觉或token超限。
4. 实操过程与核心环节实现:以“飞书日历会议→待办事项”为例的全流程拆解
4.1 第一步:人工模拟三天,固化规则(耗时:2小时)
目标:把飞书日历中“标题含‘客户拜访’的会议”,自动转为“待办事项”,指派给对应销售,并设置截止时间为会议开始前1天。
我让学员连续三天,手动执行以下流程:
- 打开飞书日历,筛选“今天+未来7天”的会议;
- 找出标题含“客户拜访”的会议(如“客户拜访-上海XX科技-王总”);
- 从标题中提取客户名(“上海XX科技”)和联系人(“王总”);
- 查销售分工表(Excel),找到负责“上海XX科技”的销售姓名(如“李四”);
- 在飞书多维表格“销售待办”页签,新增一行:事项=“准备XX科技拜访材料”,负责人=“李四”,截止时间=会议开始时间-1天;
- 复制会议链接,粘贴到待办事项“备注”栏。
三天后,她交来一份《人工操作日志》,里面记录了12次会议的处理过程,并总结出关键规则:
- 入口过滤器:会议标题正则
r'客户拜访-(.+?)-(.+?)$'(客户名在第一个-后,联系人在第二个-后) - 核心判断器:销售分工表字段为“客户名”“销售姓名”,需VLOOKUP匹配
- 出口执行器:多维表格API需传参:
{"fields": {"事项": "...", "负责人": "...", "截止时间": "...", "备注": "..."}}
实操心得:人工模拟时,一定要用手机录屏。回放时会发现很多“我以为自己知道”的隐性规则。比如她原以为“王总”就是联系人,结果回放发现:她其实是看会议详情里的“参会人”列表,找头像旁标“客户”的那位。这种细节,不录屏根本想不起来。
4.2 第二步:用Excel验证规则(耗时:1小时)
把飞书日历导出的ICS文件转成CSV(用在线工具),再导入Excel。用三列模拟整个流程:
- A列(原始标题):
客户拜访-上海XX科技-王总 - B列(客户名):
=TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",100)),100,100))(取第一个-后的字符串) - C列(销售姓名):
=VLOOKUP(B1,销售分工表!A:B,2,FALSE)(查表匹配)
当B列/C列全部正确填充,且无#N/A错误时,规则验证通过。这一步排除了80%的逻辑漏洞——比如发现“客户拜访-北京YY集团(张总)”这种带括号的标题,原正则会失效,需升级为r'客户拜访-(.+?)-(.+?)[(\()]'。
4.3 第三步:Python最小闭环实现(耗时:3小时)
技术栈:requests(调飞书API)+pandas(数据处理)+schedule(定时)+ 飞书开放平台(获取access_token)
核心代码逻辑(已脱敏,保留真实结构):
import requests import pandas as pd import schedule import time from datetime import datetime, timedelta import os # 1. 配置参数(从环境变量读取,避免硬编码) FEISHU_APP_ID = os.getenv("FEISHU_APP_ID") FEISHU_APP_SECRET = os.getenv("FEISHU_APP_SECRET") MULTI_TABLE_TOKEN = os.getenv("MULTI_TABLE_TOKEN") # 2. 获取飞书access_token(简化版,实际需token刷新) def get_access_token(): url = "https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal/" payload = {"app_id": FEISHU_APP_ID, "app_secret": FEISHU_APP_SECRET} res = requests.post(url, json=payload) return res.json()["app_access_token"] # 3. 获取未来7天会议(飞书日历API) def fetch_meetings(access_token): url = "https://open.feishu.cn/open-apis/calendar/v4/calendars/me/events" headers = {"Authorization": f"Bearer {access_token}"} # 参数:start_time=今天, end_time=7天后,type="all" params = { "start_time": int(datetime.now().timestamp()), "end_time": int((datetime.now() + timedelta(days=7)).timestamp()), "type": "all" } res = requests.get(url, headers=headers, params=params) return res.json()["data"]["items"] # 4. 解析会议标题,提取客户名、联系人(核心规则) def parse_title(title): import re pattern = r'客户拜访-(.+?)-(.+?)(?:[(\()]|$)' # 兼容带括号情况 match = re.search(pattern, title) if match: return {"customer": match.group(1).strip(), "contact": match.group(2).strip()} return None # 5. 查销售分工表(本地CSV) def get_sales_person(customer_name): df = pd.read_csv("sales_assignment.csv") # 列:客户名, 销售姓名 result = df[df["客户名"] == customer_name]["销售姓名"] return result.iloc[0] if len(result) > 0 else "未知" # 6. 创建待办事项(多维表格API) def create_todo(customer, contact, sales_person, meeting_start): deadline = (datetime.fromtimestamp(meeting_start) - timedelta(days=1)).strftime("%Y-%m-%d") url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{MULTI_TABLE_TOKEN}/tables/tbl_xxx/records" headers = {"Authorization": f"Bearer {get_access_token()}"} payload = { "fields": { "事项": f"准备{customer}拜访材料", "负责人": sales_person, "截止时间": deadline, "备注": f"会议链接:{meeting_link}" } } requests.post(url, headers=headers, json=payload) # 7. 主流程 def main(): token = get_access_token() meetings = fetch_meetings(token) for meeting in meetings: if "客户拜访" not in meeting["summary"]: continue parsed = parse_title(meeting["summary"]) if not parsed: continue sales = get_sales_person(parsed["customer"]) create_todo( customer=parsed["customer"], contact=parsed["contact"], sales_person=sales, meeting_start=meeting["start_time"]["timestamp"] ) # 8. 每天上午8点执行 schedule.every().day.at("08:00").do(main) while True: schedule.run_pending() time.sleep(60)实操心得:这段代码里,最耗时的不是写逻辑,而是调试API权限。飞书API要求:1)应用需开通“日历”和“多维表格”权限;2)管理员需在后台给应用授权;3)access_token有2小时有效期,需加刷新逻辑(初学者可先用长时效token应付)。我建议新人直接用飞书“机器人”功能:在群聊里@机器人,让它自动创建待办。这样连API都不用调,用飞书自带的“自动化流程”就能实现。技术是手段,不是目的。
4.4 第四步:部署与监控(耗时:30分钟)
- 部署:Windows用户用“任务计划程序”,Linux用户用
crontab -e添加0 8 * * * cd /path/to/script && python main.py; - 监控:在代码末尾加日志
print(f"[{datetime.now()}] 成功创建{count}条待办"),输出重定向到文件; - 告警:当
create_todo返回HTTP非200时,用企业微信Webhook发通知:“待办创建失败,请检查多维表格权限”。
上线第一天,她收到3条待办,全部正确。第二天,她发现一条“客户拜访-深圳ZZ公司(李经理)”没被识别——因为正则没覆盖括号。她立刻修改pattern,重新部署。整个过程,从发现问题到修复,不到10分钟。这种“小步快跑”的掌控感,是啃框架永远给不了的。
5. 常见问题与排查技巧实录:那些没人告诉你的“坑”
5.1 问题一:人工模拟时,总觉得规则“说不清”,怎么办?
这是最普遍的卡点。根源在于:你把“业务模糊性”当成了“技术难点”。比如销售同学说:“我知道哪个客户该归谁管,但我说不出规则。”其实规则一直都在——只是藏在她的大脑皮层下。破解方法:强制用‘小学生能听懂的语言’描述。让她对录音笔说:“假设你是刚入职的实习生,我教你处理这条消息:第一步,打开微信,找到叫‘VIP客服群’的聊天窗口;第二步,往上翻,找到最新一条带问号的消息;第三步,点开它,看发送人是不是‘张三’……” 说到第三步,她突然停住:“等等,张三是谁?哦,是我们组的销售代表,他的微信昵称是‘张三-销售’。” ——看,规则出来了:发送人昵称含“-销售”。
排查技巧:当卡在“说不清规则”时,立刻停止,拿出白板,画一个输入→输出的黑盒,然后问自己:“如果这个黑盒是台傻瓜机器,我得给它下几条绝对命令,它才能不犯错?” 每条命令必须是“如果A,那么B”格式。写满5条,基本就覆盖80%场景。
5.2 问题二:代码跑通了,但结果总差一点(比如手机号少一位、客户名多空格)
这是正则和字符串处理的“经典陷阱”。根本原因:你把人工眼力当成了机器能力。人眼看“13812345678”,自动忽略前后空格;机器看到\n 13812345678 \t,就只会原样返回。解决方案分三步:
- 先看原始数据长什么样:用
print(repr(raw_text))代替print(raw_text),显示所有隐藏字符; - 清洗再处理:所有字符串操作前,先
strip()去空格,replace("\n", " ")换行转空格; - 正则加边界符:匹配手机号别用
r'1[3-9]\d{9}',改用r'(?<!\d)1[3-9]\d{9}(?!\d)',确保前后不是数字(防138123456789匹配出两个号)。
我让学员在所有extract函数开头加一行:text = text.strip().replace("\n", " ").replace("\r", " ")。这行代码,解决了70%的“结果差一点”问题。
5.3 问题三:框架教程里的Demo都能跑,但一换自己的数据就报错
这是框架学习者的“幻觉破灭时刻”。根本原因:教程用的是理想数据(干净、格式统一、无缺失值),而你的数据是“野生”的。比如LangChain的PDF Loader,教程用的是LaTeX生成的PDF,字体嵌入完美;你的销售合同PDF,是扫描件转的,全是图片,Loader直接返回空字符串。破解方法:永远先用最笨的办法验证数据可处理性。
- 如果是PDF:先用Adobe Acrobat“导出为文本”,看能否提取出文字;不能,则说明是图片PDF,需上OCR(如PaddleOCR);
- 如果是网页:用浏览器打开,右键“查看网页源代码”,搜索关键词,确认是否在HTML里;不在,则是JS渲染,需用Selenium;
- 如果是邮件:用Outlook导出为MSG,用
extract-msg库读取,别信“邮件API万能论”。
独家避坑技巧:在代码最前面加数据探针。比如处理CSV前,先打印
df.info()和df.head();处理API返回JSON前,先print(json.dumps(res.json(), indent=2)[:500])。宁可多花10秒看数据,也不要花2小时调一个不存在的bug。
5.4 问题四:明明规则很简单,但写出来的Agent总“过度发挥”
典型表现:你只想让它提取“客户名”,它却把整段对话都总结成报告;你让它“发邮件”,它非要加一段“尊敬的领导,您好!”的寒暄。这是LLM的“礼貌幻觉”在作祟。解决方案:用System Prompt强行锁死行为边界。不要写“你是一个专业的助理”,要写:
你是一个严格的字段提取器,只做三件事: 1. 从输入文本中,用正则 r'客户拜访-(.+?)-' 提取客户名; 2. 如果没匹配到,返回空字符串; 3. 绝对不添加任何解释、问候语、总结句。 输出仅限客户名,无引号,无换行。实测下来,加了这段System Prompt,大模型的“发挥欲”下降90%。记住:Agent不是要取代你思考,而是把你思考后的确定性结论,变成机器可执行的动作。
5.5 问题五:上线后一切正常,但老板问“它到底准不准”,没法回答
这是职场落地的最大障碍。技术人总想证明“准确率99.5%”,但老板只关心“我昨天漏了几个待办”。解决方案:用业务指标代替技术指标。在日志里加一行统计:
# 每次运行后,记录本次处理了多少会议、成功创建多少待办、失败多少 log_data = { "date": today, "total_meetings": len(meetings), "created_todos": count_success, "failed": count_fail, "failure_rate": f"{count_fail/len(meetings)*100:.1f}%" } with open("agent_log.csv", "a") as f: f.write(f"{log_data}\n")每周导出agent_log.csv,做成折线图:横轴是日期,纵轴是“失败率”。当老板问效果,直接给他看图——连续三周失败率<1%,比说一百句“模型很准”都有力。这才是职场人该有的交付物。
6. 最后分享一个小技巧:用“失败日志”反向训练你的Agent
我让所有学员,在Agent代码里加一个“失败捕获器”:
try: create_todo(...) except Exception as e: # 记录原始输入、报错信息、时间戳 with open("failures.log", "a") as f: f.write(f"[{datetime.now()}] Input: {meeting['summary']}, Error: {str(e)}\n")运行两周后,收集到23条失败记录。我们逐条分析:
- 12条:客户名含特殊符号“&”,导致SQL注入式报错 → 加
customer.replace("&", "and")清洗; - 7条:会议标题是“客户拜访-广州AA公司(张总-技术总监)”,原正则只取到“张总” → 升级正则;
- 4条:销售分工表里没有“广州AA公司”,需人工补充 → 设置默认负责人“销售主管”。
你看,这23条失败,就是你Agent最真实的“成长养分”。它比任何教程都告诉你:你的业务数据,到底长什么样。所以别怕失败,把每次报错,当成数据在给你写作业。等你填完这23个空,你的Agent,才算真正“入职”了。