🪪 AI CV 和信息提取 API
1 IC每页
此API处理简历(CV)文档(PDF、JPG、PNG)并提取结构化信息,包括个人详细信息、教育背景、工作经验和技能。
求职者专区
无需编程即可评估您的简历?试试我们的 免费简历评估工具 - 无需API密钥,即时获得分数明细、ATS兼容性检查和改进建议。
v2.0 新功能 - AI简历评估
我们新增了全面的简历评估功能,帮助求职者改进简历:
- 综合评分(0-100)按部分细分
- ATS兼容性检查 - 确保您的简历通过招聘系统筛选
- 优势和劣势分析
- 优先级改进建议带示例
- 建议关键词提高职位匹配度
- 行业适配建议
试用 API 演示
使用此交互式演示测试API。选择您的API密钥,上传简历文档,查看原始JSON响应。
如何获取 API 密钥?
请访问 API 密钥管理 页面查看您现有的 API 密钥或申请新密钥。
API 端点
| 端点 | 方法 | 描述 | 费用 |
|---|---|---|---|
/v3/store/ocr/curriculum-vitae/ocr/cv, /ocr/cv-port | POST | 从简历中提取结构化数据 | 每页 1 IC |
代码示例
简历样本
请求:
curl -X POST https://api.iapp.co.th/ocr/cv
-H "apikey: YOUR_API_KEY"
-F "file=@/path/to/sample_cv_2.jpg"
响应:
{
"personalInformation": {
"name": "นางสาวอุไรวรรณ เจียมบุญศรี",
"address": "317 ถ.นครวรรค์ แขวงวัดโสมนัส เขตป้อมปราศัตรูพ่าย กทม. 10100",
"phoneNumbers": ["082-996-5168"],
"email": "uraiwan91790@gmail.com",
"religion": "พุทธ",
"nationality": "ไทย",
"age": "43"
},
"education": [
{
"school": "โรงเรียนราชวินิต มัธยม",
"level": "มัธยมศึกษาปีที่ 6",
"year": "2538-2540"
}
],
"workExperience": [
{
"title": "Recruitment officer",
"company": "Apex medical center",
"startDate": "May 2022",
"endDate": "December 2022",
"roles": ["สรรหาพนักงานตำแหน่ง consultant, beauty therapist, nurse"]
},
{
"title": "Recruitment officer",
"company": "GMI Market",
"startDate": "April 2022",
"endDate": "June 2022",
"roles": ["สรรหาบุคลากร ตำแหน่ง sale เกี่ยวกับการเทรดเดอร์"]
},
{
"title": "Senior recruitment",
"company": "บริษัท รักษาความปลอดภัย RGH",
"startDate": "January 2022",
"endDate": "March 2022",
"roles": ["สรรหาพนักงานตำแหน่ง รปภ.,แม่บ้าน"]
}
],
"skillsAndQualifications": {
"languages": {
"english": "พูด เขียน สื่อสาร ภาษาอังกฤษได้เป็นอย่างดี"
},
"computerSkills": ["สามารถใช้โปรแกนมคอมพิวเตอร์"],
"communicationSkills": []
},
"possibleSkillAndQualificationsByAI": [
"Recruiting",
"Applicant Tracking Systems (ATS)",
"Interviewing",
"Talent Acquisition",
"Onboarding",
"HRIS",
"Performance Management",
"Employee Relations",
"Sales",
"Trading",
"Security",
"Customer Service",
"Teamwork",
"Communication"
],
"additionalInformation": {
"customerServiceSkills": null,
"assessment": null
}
}
功能
-
简历处理: 从简历中提取结构化信息,包括个人详细信息、教育、工作经验、技能以及 AI 建议的潜在技能。
-
AI评估(新功能): 提供全面的简历分析:
- 综合评分和分项评分
- ATS(招聘系统)兼容性检查
- 识别优势和劣势
- 优先级改进建议带示例
- 提高职位匹配度的建议关键词
- 行业适配建议
-
支持的格式: 支持 PDF、JPG、PNG 和 JPEG 文件。
简历评估响应
API现在返回包含详细分析的 evaluation 对象:
评分类别
| 类别 | 描述 |
|---|---|
| overall | 简历整体质量评分(0-100) |
| personalInfo | 联系信息完整性 |
| education | 教育背景展示 |
| workExperience | 带成就的工作经历 |
| skills | 技能组织和相关性 |
评估字段
{
"evaluation": {
"scores": {
"overall": 72,
"personalInfo": { "score": 85, "feedback": "..." },
"education": { "score": 70, "feedback": "..." },
"workExperience": { "score": 65, "feedback": "..." },
"skills": { "score": 75, "feedback": "..." }
},
"experienceLevel": "mid",
"totalYearsOfExperience": 6,
"atsCompatibility": {
"score": 70,
"issues": ["缺少职位相关关键词", "..."],
"suggestions": ["添加行业特定关键词", "..."]
},
"strengths": ["清晰的职业发展", "..."],
"weaknesses": ["缺乏可量化的成就", "..."],
"missingSections": ["职业摘要", "证书", "..."],
"improvements": [
{
"section": "workExperience",
"priority": "high",
"issue": "工作描述缺乏可量化的成就",
"suggestion": "添加具体数字和百分比",
"example": "带领8人团队,完成季度目标的125%"
}
],
"suggestedKeywords": ["收入增长", "pipeline管理", "..."],
"industryFitSuggestions": ["销售管理", "业务开发", "..."],
"executiveSummary": "这份简历展示了一位中级专业人士..."
}
}
代码示例
Curl
curl -X POST https://api.iapp.co.th/v3/store/ocr/curriculum-vitae \
-H "apikey: YOUR_API_KEY" \
-F "file=@/path/to/file.jpg"
Python
import requests
url = "https://api.iapp.co.th/ocr/cv"
payload = {}
files=[
('file',('sample_cv_2.jpg',open('sample_cv_2.jpg','rb'),'application/pdf'))
]
headers = {"apikey": "YOUR_API_KEY"}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)
JavaScript
const axios = require("axios")
const FormData = require("form-data")
const fs = require("fs")
let data = new FormData()
data.append("file", fs.createReadStream("sample_cv_2.jpg"))
let config = {
method: "post",
maxBodyLength: Infinity,
url: "https://api.iapp.co.th/ocr/cv",
headers: {
apikey: "YOUR_API_KEY",
...data.getHeaders(),
},
data: data,
}
axios
.request(config)
.then((response) => {
console.log(JSON.stringify(response.data))
})
.catch((error) => {
console.log(error)
})
PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.iapp.co.th/ocr/cv',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('file'=> new CURLFILE('sample_cv_2.jpg')),
CURLOPT_HTTPHEADER => array(
'apikey: YOUR_API_KEY'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Swift
let parameters = [
[
"key": "file",
"src": "sample_cv_2.jpg",
"type": "file"
]] as [[String: Any]]
let boundary = "Boundary-\(UUID().uuidString)"
var body = Data()
var error: Error? = nil
for param in parameters {
if param["disabled"] != nil { continue }
let paramName = param["key"]!
body += Data("--\(boundary)\r\n".utf8)
body += Data("Content-Disposition:form-data; name=\"\(paramName)\"".utf8)
if param["contentType"] != nil {
body += Data("\r\nContent-Type: \(param["contentType"] as! String)".utf8)
}
let paramType = param["type"] as! String
if paramType == "text" {
let paramValue = param["value"] as! String
body += Data("\r\n\r\n\(paramValue)\r\n".utf8)
} else {
let paramSrc = param["src"] as! String
let fileURL = URL(fileURLWithPath: paramSrc)
if let fileContent = try? Data(contentsOf: fileURL) {
body += Data("; filename=\"\(paramSrc)\"\r\n".utf8)
body += Data("Content-Type: \"content-type header\"\r\n".utf8)
body += Data("\r\n".utf8)
body += fileContent
body += Data("\r\n".utf8)
}
}
}
body += Data("--\(boundary)--\r\n".utf8);
let postData = body
var request = URLRequest(url: URL(string: "https://api.iapp.co.th/ocr/cv")!,timeoutInterval: Double.infinity)
request.addValue("YOUR_API_KEY", forHTTPHeaderField: "apikey")
request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = postData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String(data: data, encoding: .utf8)!)
}
task.resume()
Kotlin
val client = OkHttpClient()
val mediaType = "text/plain".toMediaType()
val body = MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file","sample_cv_2.jpg",
File("sample_cv_2.jpg").asRequestBody("application/octet-stream".toMediaType()))
.build()
val request = Request.Builder()
.url("https://api.iapp.co.th/ocr/cv")
.post(body)
.addHeader("apikey", "YOUR_API_KEY")
.build()
val response = client.newCall(request).execute()
Java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file","sample_cv_2.jpg",
RequestBody.create(MediaType.parse("application/octet-stream"),
new File("sample_cv_2.jpg")))
.build();
Request request = new Request.Builder()
.url("https://api.iapp.co.th/ocr/cv")
.method("POST", body)
.addHeader("apikey", "YOUR_API_KEY")
.build();
Response response = client.newCall(request).execute();
Dart
var headers = {
'apikey': 'YOUR_API_KEY'
};
var request = http.MultipartRequest('POST', Uri.parse('https://api.iapp.co.th/ocr/cv'));
request.files.add(await http.MultipartFile.fromPath('file', 'sample_cv_2.jpg'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
定价
| AI API 服务名称 | 端点 | 每页 IC | 本地部署 |
|---|---|---|---|
| AI CV OCR 和信息提取 API | iapp_cv_ocr | 1 IC/页 | 联系我们 |