api
这是一个非常典型的AI驱动的招聘数据抓取、解析与结构化处理系统。工作流涵盖了从非结构化数据(图片、长文本)输入,到通过多种大语言模型(LLMs)进行信息抽取与标准化,最后将数据同步至云端数据库的完整闭环。
一、 核心大模型(LLM)解析模块
系统集成了多家大模型API,这通常是为了高可用性(容灾)、成本控制或针对不同任务利用不同模型的优势。
- doubao_api / doubao_api_new (字节跳动豆包):这是目前看起来最核心、业务逻辑最重的模块。
- 应用场景:处理具体的“职位信息”(Corporate Job /
cjob),提取多达20-30个维度的精细字段(如是否蓝领、是否需要穿防护服、每周实习天数等)。 - 技术亮点 (
doubao_api_new.py):引入了**Prompt Caching(提示词缓存)**机制。由于提取指令非常长(包含庞大的“职位类别表”和复杂的提取规则),将这部分作为System Prompt进行缓存(过期时间设为70小时),能够极大地降低Token消耗和API延迟。同时,代码中还对Token使用量进行了精细化统计(区分了input、caching、output和thinking)。
- 应用场景:处理具体的“职位信息”(Corporate Job /
- openai4o_api / openai4o_api_0 (Azure OpenAI):
- 应用场景:处理“招聘公告”(Announcement /
ann)这种篇幅较长、结构相对松散的宏观信息。用于提取公司基本信息、网申时间、招聘岗位列表以及简历投递规则等。 - 版本控制:保留了旧版(依赖
openai==0.28)和新版(AzureOpenAI客户端),说明系统经历过SDK的重构升级。
- 应用场景:处理“招聘公告”(Announcement /
- qwen_api (阿里通义千问) & deepseek_api (深度求索):目前看似作为备用模型或实验性接口存在,使用了 OpenAI 兼容的调用方式。
二、 图像识别(OCR)模块
- ocr_api:利用
PaddleOCR处理长图、海报或PDF扫描件中的文字。- 技术亮点:为了解决超长图片直接OCR识别率下降和内存溢出的问题,开发者手写了一个非常精妙的智能切图算法 (
img_cut)。它通过 OpenCV 的connectedComponents(连通组件检测)来判断切片边缘是否切到了文字,如果切到了文字,切线会智能上移,确保文字的完整性。同时,还加入了针对 GIF 动图转取第一帧(或PNG格式)的处理逻辑。
- 技术亮点:为了解决超长图片直接OCR识别率下降和内存溢出的问题,开发者手写了一个非常精妙的智能切图算法 (
三、 存储与中间件模块
- hwcloud_api (华为云 OBS):用于处理多媒体文件的持久化存储。招聘海报、公司Logo或相关文档通过该模块上传至华为云对象存储 (
quanfile桶) 中,并返回公共可访问的 URL。
四、 数据同步与业务检验模块
- quanzhi_api:负责将经过 LLM 结构化后的 JSON 数据入库,并与内部核心业务系统交互。
- 数据清洗:在上传前,会对日期格式进行二次校验和修复 (
fix_upload_cloud,如OnlineStartDate,CutDate等)。 - 重复与风控检测:提供
check_cloud等接口,利用内部系统的返回码(如301公告过期、302包含黑名单、303全文重复、304链接重复)在数据入库前进行拦截,极大地减轻了数据库的脏数据压力。
- 数据清洗:在上传前,会对日期格式进行二次校验和修复 (
总结与建议
这是一个架构清晰、高度定制化的RPA/数据管道应用。Prompt Engineering 做得很扎实(包含了中文数字转阿拉伯数字、薪资范围最大最小值合并等标准化规则)。
潜在的优化空间:
- 异常重试机制:目前大部分 API 遇到异常只是打印日志和发邮件,缺乏自动的重试机制(Retry机制,比如遇到并发限流时的退避重试)。
- 异步化处理:无论是 OCR 还是调用大模型,都属于高耗时 IO 操作。如果在爬虫抓取后直接同步调用这些接口,效率会很低。建议引入如 Celery 或 Kafka 这样的消息队列进行异步解耦处理。
项目分区导航:picc_data_proc_api ⬅️ | 00-api | ➡️ deepseek_api
💬 评论