Files
011-ai-interview/backend/insert_mock_full.py
2026-01-23 13:57:48 +08:00

124 lines
6.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
插入完整模拟面试数据8 条候选人 + 对话记录)
"""
import asyncio
import httpx
import json
import uuid
COZE_API_BASE = "https://api.coze.cn"
COZE_PAT_TOKEN = "pat_nd1wU47WyPS9GCIyJ1clnH8h1WOQXGrYELX8w73TnSZaYbFdYD4swIhzcETBUbfT"
WORKFLOW_ID = "7597376294612107318"
# 候选人数据
CANDIDATES = [
{"name": "张小美", "skill": 85, "concept": 82, "comp": 88, "status": "completed", "risk": ""},
{"name": "李明辉", "skill": 72, "concept": 70, "comp": 75, "status": "completed", "risk": ""},
{"name": "王晓丽", "skill": 92, "concept": 90, "comp": 95, "status": "completed", "risk": ""},
{"name": "陈建国", "skill": 65, "concept": 60, "comp": 68, "status": "completed", "risk": "面试中表现紧张,需关注"},
{"name": "刘芳芳", "skill": 78, "concept": 75, "comp": 80, "status": "completed", "risk": ""},
{"name": "赵大伟", "skill": 55, "concept": 52, "comp": 58, "status": "completed", "risk": "销售经验不足,需重点培训"},
{"name": "孙婷婷", "skill": 88, "concept": 85, "comp": 90, "status": "in_progress", "risk": ""},
{"name": "周志强", "skill": 45, "concept": 42, "comp": 48, "status": "completed", "risk": "不建议录用,综合能力较弱"},
]
# 简历模板
RESUMES = [
"3年销售经验曾在某知名医美机构担任销售顾问业绩连续12个月达成率超过120%",
"5年美容行业从业经验持有高级美容师证书。性格开朗沟通能力强。",
"应届毕业生,市场营销专业,在校期间有丰富的社团活动经验。对医美行业充满热情。",
"2年电商销售经验熟悉线上运营和客户服务。希望转型到线下医美销售领域。",
]
# 对话模板
DIALOGUES = [
("开场", "你好,请先做个自我介绍", "面试官您好,我是{name},很高兴参加这次面试。我之前有销售相关经验,对轻医美行业很感兴趣。"),
("技能", "请介绍你常用的销售技巧", "我主要采用顾问式销售方法,先通过沟通了解客户的真实需求,然后针对性地推荐适合的产品或服务。"),
("技能", "遇到客户异议时如何处理", "首先我会认真倾听客户的顾虑,表示理解。然后用专业知识解答疑问,必要时提供案例或数据支持。"),
("观念", "你如何看待销售这份工作", "我认为销售不仅是卖产品,更是帮助客户解决问题。好的销售是客户的顾问和朋友。"),
("素质", "你的职业规划是什么", "短期希望成为一名优秀的销售顾问,中期目标是带领团队,长期希望在医美行业有深入发展。"),
]
async def execute_sql(sql: str, table: str) -> dict:
headers = {
"Authorization": f"Bearer {COZE_PAT_TOKEN}",
"Content-Type": "application/json"
}
input_json = json.dumps({"table": table, "sql": sql}, ensure_ascii=False)
async with httpx.AsyncClient(timeout=30.0) as client:
response = await client.post(
f"{COZE_API_BASE}/v1/workflow/run",
headers=headers,
json={"workflow_id": WORKFLOW_ID, "parameters": {"input": input_json}}
)
return response.json()
def escape(s):
"""转义 SQL 特殊字符"""
return s.replace("'", "''") if s else ""
async def main():
print("=" * 60)
print("插入完整模拟数据 (8 条候选人)")
print("=" * 60)
for idx, c in enumerate(CANDIDATES):
session_id = f"MOCK_{uuid.uuid4().hex[:8].upper()}"
resume = RESUMES[idx % len(RESUMES)]
# 生成报告
skill_report = f"销售技能评估:候选人在产品介绍和需求挖掘方面{'表现出色' if c['skill'] >= 80 else '有待提升'}。得分:{c['skill']}"
concept_report = f"销售观念评估:对销售工作{'有正确认知' if c['concept'] >= 70 else '认识不够深入'}。得分:{c['concept']}"
comp_report = f"综合素质评估:学习能力{'' if c['comp'] >= 80 else '一般'},抗压能力{'' if c['comp'] >= 75 else '需加强'}。得分:{c['comp']}"
# 1. 插入 Assessment
sql1 = f"""INSERT INTO ci_interview_assessments (
session_id, candidate_name, resume_text, current_stage,
sales_skill_score, sales_concept_score, competency_score,
sales_skill_report, sales_concept_report, competency_report,
motivation_summary, risk_warning, growth_plan, ref_check_list
) VALUES (
'{session_id}', '{c["name"]}', '{escape(resume)}', '{c["status"]}',
'{c["skill"]}', '{c["concept"]}', '{c["comp"]}',
'{escape(skill_report)}', '{escape(concept_report)}', '{escape(comp_report)}',
'候选人对轻医美行业表现出兴趣,希望长期发展。',
'{escape(c["risk"])}',
'建议入职后进行系统培训,由资深顾问带教。',
'建议背调:确认任职时间、业绩数据、离职原因。'
)"""
print(f"\n[{idx+1}/8] {c['name']} (session: {session_id})")
result = await execute_sql(sql1, "assessments")
if result.get('code') != 0:
print(f" ❌ Assessment 失败: {result.get('msg')}")
continue
print(f" ✅ Assessment: {c['skill']}/{c['concept']}/{c['comp']}")
# 2. 插入对话记录
for d_idx, (stage, q, a) in enumerate(DIALOGUES, 1):
log_id = f"LOG_{session_id}_{d_idx:02d}"
answer = a.replace("{name}", c["name"])
sql2 = f"""INSERT INTO ci_interview_logs (
log_id, session_id, stage, round, ai_question, user_answer, log_type
) VALUES (
'{log_id}', '{session_id}', '{stage}', '{d_idx}',
'{escape(q)}', '{escape(answer)}', 'interview'
)"""
result = await execute_sql(sql2, "logs")
if result.get('code') != 0:
print(f" ⚠️ 对话{d_idx}: {result.get('msg')[:30]}")
print(f" ✅ 对话: {len(DIALOGUES)}")
print("\n" + "=" * 60)
print("✅ 完成!共插入 8 条候选人 + 40 条对话记录")
print("=" * 60)
if __name__ == "__main__":
asyncio.run(main())