
1. 项目背景当Agent技术遇上API地狱最近朋友圈和各大技术社区突然被养龙虾这个梗刷屏了不明真相的群众可能以为水产养殖业发生了什么技术革命。实际上这是开发者圈对Agent技术的一种戏称——就像养龙虾需要耐心投喂一样训练一个可靠的AI Agent也需要持续投喂数据和调试。但今天我们要聊的不是段子而是如何用国产技术栈打造真正能解决实际问题的Agent。我在过去三个月里用PythonSelenium国产大模型构建了一个ERP系统自动化Agent成功将公司采购部门的日报表处理时间从4小时压缩到9分钟。这个过程中最深的体会是现成的API调用演示就是那些漂亮的PPT和真实业务场景之间隔着一整个API地狱——包括但不限于接口文档不全、字段映射混乱、鉴权机制奇葩、响应结构突变等问题。2. Agent技术选型为什么是PythonSelenium2.1 放弃纯API路线的三个理由最初我也尝试过纯API对接方案但在实际测试中发现了致命问题接口稳定性陷阱某主流ERP系统的订单查询API在不同时段返回的字段竟然会变化凌晨返回的JSON比白天少3个关键字段官方文档对此只字未提鉴权黑洞某供应链系统的OAuth2.0实现居然要求先获取临时token再用临时token换正式token而临时token的有效期只有17秒数据映射灾难两个系统的客户ID字段看似相同实则A系统用UTF-8编码而B系统用GBK直接对接会导致中文客户名全部乱码# 典型的多系统字段映射问题示例 def convert_encoding(data): try: return data.decode(gbk).encode(utf-8) except UnicodeError: # 捕获到的实际案例某系统返回的其实是Latin-1编码 return data.decode(latin1).encode(utf-8)2.2 Selenium的逆袭优势基于以上痛点最终选择用Selenium模拟人工操作核心优势在于绕过接口限制直接操作浏览器不受API变更影响视觉化调试可以实时看到操作过程比看日志直观10倍容错性强通过元素检测和重试机制处理页面加载延迟重要提示Chrome 115版本开始默认启用Headless模式的新特性会导致部分页面检测失效需要在启动参数中添加options.add_argument(--headlessnew)3. 硬核实战构建ERP自动化Agent3.1 系统架构设计整个Agent分为四个核心模块视觉操作引擎基于Selenium封装常用操作输入、点击、滚动等规则决策中心用YAML定义业务流程登录→查询→导出→转换异常处理器针对各类错误的恢复策略数据清洗管道处理编码/格式/单位转换graph TD A[用户指令] -- B(规则决策中心) B -- C[视觉操作引擎] C -- D{执行成功?} D --|是| E[数据清洗管道] D --|否| F[异常处理器] F -- C E -- G[输出结果]3.2 关键代码实现元素定位的终极方案经过多次迭代最终采用三级fallback定位策略def smart_find_element(driver, selector): # 第一级常规定位 try: return driver.find_element(By.CSS_SELECTOR, selector) except NoSuchElementException: pass # 第二级模糊匹配 try: return driver.find_element(By.XPATH, f//*[contains(text(), {selector})]) except NoSuchElementException: pass # 第三级视觉辅助 take_screenshot(driver) raise ElementNotFoundError(f元素定位失败: {selector})处理ERP分页查询的秘籍def pagination_handler(driver): results [] while True: # 先等数据加载 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, data-row)) ) # 处理当前页数据 results.extend(parse_current_page(driver)) # 检查下一页按钮状态 next_btn driver.find_element(By.CSS_SELECTOR, .next-page) if disabled in next_btn.get_attribute(class): break # 特殊处理某些ERP点击后会有二次确认 try: next_btn.click() confirm_btn driver.find_element(By.CSS_SELECTOR, .confirm-dialog button) confirm_btn.click() except NoSuchElementException: pass # 防检测等待 time.sleep(random.uniform(1.5, 3.2)) return results4. 避坑指南血泪换来的经验4.1 定时任务的黑魔法最初用crontab定时运行Agent直到某天发现凌晨3点的任务总是失败原因ERP系统在2:00-3:30进行每日维护解决方案在任务开始前增加系统状态检查def check_system_status(): try: driver.get(https://erp.example.com/status) status driver.find_element(By.ID, system-status).text return 正常 in status except Exception: return False4.2 验证码的六种破解姿势人工干预模式遇到验证码时暂停并弹出截图等待人工输入OCR识别使用ddddocr库实测准确率约72%缓存会话保持长连接避免重复验证接口绕过某些系统在特定IP段跳过验证时间差攻击在非高峰时段操作终极方案找IT部门申请白名单最稳定5. 性能优化从15分钟到90秒通过Chrome性能分析发现三个瓶颈点页面加载等待默认等待时间过长优化方案动态等待关键元素重复DOM查询同一元素多次定位优化方案元素缓存池无用的截图调试阶段遗留的截图代码优化方案环境变量控制优化前后的关键指标对比指标优化前优化后内存占用1.2GB680MB平均耗时15分90秒成功率83%99.7%CPU峰值使用率75%45%6. 国产技术栈的惊艳表现测试了三种国产大模型在指令理解方面的表现文心一言擅长处理中文业务术语把采购单按供应商分类 → 准确生成对应代码通义千问对复杂条件判断理解深刻如果金额大于1万且不是电子产品则... → 正确转换逻辑星火认知异常处理建议最实用当遇到元素不存在时给出的重试策略最合理# 国产大模型指令生成示例 def generate_script(prompt): response ernie_bot.chat( messages[{role: user, content: f 请将以下需求转换为Selenium代码{prompt} 要求使用显式等待添加异常处理输出执行日志}] ) return validate_code(response)7. 企业级部署方案7.1 安全防护三件套凭证管理使用Vault动态获取账号密码操作审计记录完整的操作录像可回放权限隔离不同业务使用独立Chrome实例7.2 监控告警体系心跳检测每5分钟上报状态异常熔断连续3次失败自动停止流量控制避免集中访问业务高峰# 使用Prometheus监控Agent状态 selenium_actions_total{typeclick} 1427 selenium_actions_failed{typeinput} 23 selenium_execution_time_seconds 89.38. 从自动化到智能化的进阶最新迭代版本加入了三个AI特性自适应流程根据页面变化自动调整操作顺序智能重试分析失败原因选择最佳重试策略语义校验核对结果是否符合业务语义而不只是格式正确比如当系统弹出该商品库存不足提示时传统自动化会直接报错而智能Agent能够识别提示内容查询替代商品自动发起调拨申请更新采购建议这背后的关键技术是视觉语言模型(VLM)的应用def analyze_screenshot(image): response qwen_vlm.chat( images[image], messages[{role: user, content: 这是什么类型的系统提示}] ) if 库存不足 in response: return stock_out elif 会话过期 in response: return session_expired else: return unknown9. 法律合规红线在开发过程中必须注意数据隐私敏感字段自动脱敏如身份证号、银行卡号操作合规避免在非工作时间操作除非特别授权审计追踪保留完整的操作日志和截图证据法律警示某公司因自动化脚本频繁查询导致系统瘫痪最终被判赔偿损失。建议添加随机延迟1-3秒控制并发数量避开业务高峰时段10. 未来演进方向当前正在试验的创新点多Agent协作采购Agent物流Agent财务Agent自动对账自我进化通过操作记录自动优化流程人类监督学习将人工干预转化为训练数据一个令我震惊的发现经过足够多的训练后Agent甚至能发现人工操作中的系统性错误。比如我们采购流程中某个下拉框的选择逻辑有问题三年来所有员工都按错误方式操作直到Agent指出其中的矛盾。最后分享一个实战技巧在Selenium中使用execute_cdp_cmd可以调用Chrome DevTools Protocol的强大功能比如# 禁止图片加载提升速度 driver.execute_cdp_cmd( Network.setBlockedURLs, {urls: [*.jpg, *.png, *.gif]} ) # 修改WebDriver属性避免检测 driver.execute_cdp_cmd( Page.addScriptToEvaluateOnNewDocument, {source: Object.defineProperty(navigator, webdriver, { get: () undefined }) } )开发这类工具最深的体会是真正的自动化不是简单替代人工操作而是要重构整个业务流程。当你的Agent能稳定运行后往往会发现现有流程中存在大量可以优化的冗余环节。这时候需要的不仅是技术能力更是推动业务流程变革的勇气和智慧。