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

AI 智能体本地部署实战

OpenClaw 从环境搭建到避坑全攻略,本地跑通你的 AI 代理

本文内容仅供校术原理讲解,严禁用于未经投权的抓取。  

搜索自己需要的就业信息是每个人职业生涯中都会面临的问题。传统的方式位往效率低下:

手动筛选海量就业信息、反复修改自己的就业搜索要求、追踪进度等烦琐任务让大家应接不暇,同时还容易遗漏优质机会。如果我们能够构建一个智能体来自动化这个过程,将会怎样?本文将从需求分析到系统实现,从功能验证到效果评估,探索智能体应用开发的完整过程。

这里将介绍一种强大的解决方案:利用人工智能和浏览器自动化技术,大幅简化你的搜索就业信息流程。我们将深入探讨一个基于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(
 task="Compare the price of gpt-4o and DeepSeek-V3",
  LLM=ChatOpenAI(model="gpt-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 脚本。
"""
coding=utf-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_key=project_api_key)
# from memO  import  MemoryClient  #已导入但被注释掉
#client MemoryClient (api key="[MEMO_API_KEY]")

1.导入模块与初始设置
这部分代码导入了所有必需的库,包括标准库、LangChain相关库、browser-use核心组件,以及 pydantic 和 PyPDF2。

#设置日志记录
logging.basicConfig(
    level=logging.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_key=base64.b64decode(_project_api_key_b64).decode("utf-8")
print(project_api_key)    #打印解码后的密钥,处理敏感数据时需谨慎

#申请记录文件(此处的APPLICATIONS_FILE对应job_applications.csv)
APPLICATIONS_FILE="job_applications.csv"  #用于存储职位申请信息APPLICATION_STATS_FILE ="application_stats.json"  #用于存储统计信息

#确保CSV文件存在
if not os.path.exists (APPLICATIONS_FILE):
  with open(APPLICATIONS_FILE, "w", newline="", encoding="utf-8") as f:
  writer=csv.writer(f)
  #定义CSV文件的表头:职位,公司,链接,薪资,地点,申请时间
    writer.writerow(["职位”,"公司","链接","薪资”,"地点","申请时间”])

logger =logging.getLogger(__name__)
controller =Controller()     #Controller实例化

#注意:这是你的简历文件路径
CV=Path.cwd() / "resume_template.pdf"   #模型与控制器配置的一部分
if not CV.exists():
  raise FileNotFoundError(
  f"你需要设置简历文件的路径到CV变量。在{CV}未找到简历文件。”
  )

其中,日志配置、应用程序接口、密钥处理、文件路径定义与前述分析一致。Controller与CV路径是模型与控制器配置的关键部分,Controller用于注册智能体可调用的动作,CV指定了简历文件的位置。


AI 智能体本地部署实战

OpenClaw 从环境搭建到避坑全攻略,本地跑通你的 AI 代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值