ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

搜索自动化智能体建设的思路

搜索自动化智能体建设的思路 搜索自己需要的就业信息是每个人职业生涯中都会面临的问题。传统的方式位往效率低下 手动筛选海量就业信息、反复修改自己的就业搜索要求、追踪进度等烦琐任务让大家应接不暇同时还容易遗漏优质机会。如果我们能够构建一个智能体来自动化这个过程将会怎样本文将从需求分析到系统实现从功能验证到效果评估探索智能体应用开发的完整过程。 这里将介绍一种强大的解决方案利用人工智能和浏览器自动化技术大幅简化你的搜索就业信息流程。我们将深入探讨一个基于browser-use库构建的Python脚本打造一个可自动搜索、分析、记录就业信息并辅助上传简历的智能体。这个智能体能够根据你的指令浏览网站、提取关键信息甚至与网页元素进行交互而这一切都由大语言模型驱动。主要目标如下自动化搜索和筛选数据分析相关职位。智能提取职位信息和技术要求。自动上传简历并填写申请表单。生成技术栈思维导图和求职分析报告。提高求职效率减少重复性工作。 技术框架 browser-use是本项目的核心组件它是一个专为智能体浏览器交互而设计的Python库。根据其GitHub页面的介绍该库通过集成大语言模型来实现智能化的网页操作。其核心特性如下。智能网页理解基于视觉和文本双重分析准确理解网页结构和内容语义。自然语言交互支持使用自然语言指令直接控制浏览器操作降低使用门槛。多模态感知融合视觉信息和文本内容实现更准确的页面元素识别和操作决策。动态适应性具备处理不同网站布局和交互模式的能力适应性强。智能容错内置异常处理和重试机制提高任务执行的稳定性和成功率。 除了核心的browser-use库该智能体还集成了以下主要组件。 LangChain:大语言模型集成框架负责对话管理和任务编排。 Google Gemini API:提供强大的自然语言理解和成能力。 PyPDF2:PDF文档处理库用于解析简历文件内容。 Pydantic:数据验证和序列化框架确保数据类型安全。 Playwright:底层浏览器控制引擎提供跨平台浏览器操作。 项目准备 前置准备与环境配置 要成功运行本章的演示脚本并进行后续开发你需要准备以下环境和工具。 1.browser-use快速开始 版本要求基于browser-use0.1.40版本 使用pip安装(Python≥3.11)。 pip install browser-use 安装浏览器。 playwright install chromium --with-deps -no-shell 启动智能体 import asyncio from dotenv import load_dotenv load_dotenv() from browser_use import Agent from browser_use.LLM import ChatOpenAI async def main(): agent Agent( taskCompare the price of gpt-4o and DeepSeek-V3, LLMChatOpenAI(modelgpt-4o), ) await agent.run() asyncio.run(main()) API密钥配置将提供商的API密钥添加到.env文件中。 OPENAI_API_KEY ANTHROPIC_API_KEY AZURE_OPENAI_ENDPOINT AZURE_OPENAI_KEY GOOGLE_API_KEY DEEPSEEK_API_KEY GROK_API_KEY NOVITA_API_KEY 2.环境配置详细说明 在使用browser-use之前需要配置相应的大语言模型API密钥。脚本展示了Google Gemini 和OpenAI的配置示例需要获取计划使用的大语言模型的应用程序接口密钥。为安全起见强烈建议通过环境变量的方式设置这些密钥而不是直接将它们写入代码中。 确保项目目录包含必要的文件如简历PDF文件、配置文件等。 如果您想对browser-use项目本身进行开发那么可能会用到以下命令通常使用uv 或pip 管理依赖和运行任务)。 #尝试运行browser-use库中的示例具体命令取决于项目结构 #uv run examples/simple.py #格式化代码以ruff为例 #uv run ruff format path/to/your_script.py #运行测试以pytest为例 #uv run pytest #构建项目如果适用 #uv build 这里主要关注如何正确安装依赖并运行脚本。 代码详解求职自动化脚本 现在让我们分析这个Python 脚本。 codingutf-8 Try demos in the example library with uv run examples/simple.py Run the linter/formatter with uv run ruff format examples/some/file.py Run tests with uv run pytest Build the package with uv build import asyncio import csv import logging import os import base64 import sys import json from datetime import datetime from pathlib import Path from langchain_openai import AzureChatOpenAI, ChatOpenAI #from langchain_ollama import ChatOllama #在最终的大语言模型设置中未使用 #from langchain_deepseek import ChatDeepSeek #未使用 from langchain_anthropic import ChatAnthropic #已导入但在大语言模型设置中未使用 from patchright.async_api import async_playwright #底层的playwright访问 from langchain_google_genai import ChatGoogleGenerativeAI from browser_user.agent.memory.views import MemoryConfig #用于记忆功能 from browser_use.agent.views import( REQUIRED_LLM_API_ENV_VARS, ActionResult, AgentError, AgentHistory, AgentHistoryList, Agentoutput, AgentSettings, Agentstate, AgentstepInfo, StepMetadata, ToolCallingMethod, ) sys.path.append(os.path.dirname (os.path.dirname (os.path.abspath(__file__)) ) ) from pydantic import BaseModel, Secretstr from PyPDF2 import PdfReader from browser_use import ActionResult,Agent,Controller #browser-use核心组件 from browser_use.browser.browser import Browser, BrowserConfig from browser_use.browser.context import BrowserContext #from lmnr import Laminar #已导入但被注释掉 #Laminar.initialize(project_api_keyproject_api_key) # from memO import MemoryClient #已导入但被注释掉 #client MemoryClient (api key[MEMO_API_KEY]) 1.导入模块与初始设置 这部分代码导入了所有必需的库包括标准库、LangChain相关库、browser-use核心组件以及 pydantic 和 PyPDF2。 #设置日志记录 logging.basicConfig( levellogging.INFO, format%(asctime)s -%(name)s -%(levelname)s - %(message)s, handlers[logging.FileHandler (job_search.log),logging.StreamHandler()], ) #一个服务的API密钥根据注释掉的代码可能是Laminar) _project_api_key_b64 ( PROJECT_API_KEY_BASE64_PART1] PROJECT_API_KEY_BASE64_PART2] project_api_keybase64.b64decode(_project_api_key_b64).decode(utf-8) print(project_api_key) #打印解码后的密钥处理敏感数据时需谨慎 #申请记录文件此处的APPLICATIONS_FILE对应job_applications.csv) APPLICATIONS_FILEjob_applications.csv #用于存储职位申请信息APPLICATION_STATS_FILE application_stats.json #用于存储统计信息 #确保CSV文件存在 if not os.path.exists (APPLICATIONS_FILE): with open(APPLICATIONS_FILE, w, newline, encodingutf-8) as f: writercsv.writer(f) #定义CSV文件的表头职位公司链接薪资地点申请时间 writer.writerow([职位”公司链接薪资”地点申请时间”]) logger logging.getLogger(__name__) controller Controller() #Controller实例化 #注意这是你的简历文件路径 CVPath.cwd() / resume_template.pdf #模型与控制器配置的一部分 if not CV.exists(): raise FileNotFoundError( f你需要设置简历文件的路径到CV变量。在{CV}未找到简历文件。” ) 其中日志配置、应用程序接口、密钥处理、文件路径定义与前述分析一致。Controller与CV路径是模型与控制器配置的关键部分Controller用于注册智能体可调用的动作CV指定了简历文件的位置。
返回列表