import asyncio from typing import List, Dict, Any from app.repository.milvus.intent_classification_repository import IntentClassificationRepository from app.client.embedding_client_manager import embedding_client INTENT_DATA = { "课程内容": [ "课程针对零基础,涵盖动作设计、场景建模等方向,推荐游戏动画方向,并建议考虑场景建模以规避美术基础劣势。", "UE5相关有3门课(场景建模地编、UE特效、UE开发),但'人物动起来'属于动作课,不使用虚幻,用3dmax/Maya,仅线下班,周期6个月,学费31800元。" ], "其他": [ "课程覆盖游戏设计全流程,特效线上课8-10个月,每周2-3次直播(晚7:30-9:30),提供录播和答疑,费用11800元。特效行业需求大,薪资6000-9000元起,需自身具备制作能力,AI是工具而非替代,可推荐就业。", "UE5相关有3门课(场景建模地编、UE特效、UE开发),但'人物动起来'属于动作课,不使用虚幻,用3dmax/Maya,仅线下班,周期6个月,学费31800元。" ], "就业支持": [ "课程周期8-10个月,当前班级(5月14日开课)预计12月结业。内推渠道包括公司自留岗位和合作企业,就业老师会按学历、技术、城市、薪资匹配,测试流程3-5个工作日,并提供面试辅导。", "有专门就业老师负责对接,提供内推服务。" ], "开班时间": [ "销售邀请用户于6月1日前入班学习,新班将于6.1开课,用户可据此安排时间。", "人满即止,七月份班已有两三人。" ], "费用咨询": [ "第九联盟(点晴科技)提供线上课程11800元/8-10个月和线下课程33800元/6个月全日制,大学生可线上+寒暑假线下结合(按线下收费)。支持包括3年回放和答疑、重读机会,以及简历辅导、模拟面试、测试指导、校招群内推等服务。", "课程方案有:31800元/7个月全日制;11800元/8-10个月。" ], "校区地址": [ "西安有分校区授课;上海总部授课;武汉校区仅做项目(不授课),并非关闭;青岛、厦门、合肥、漯河分公司也仅做项目。", "机构名称为第九联盟,地址在漕河泾,是点晴科技旗下品牌,主营游戏动漫美术人才孵化。" ], "退款政策": ['原画对新人要求高,需原创和设计能力,建议造型能力强者考虑角色建模。退款政策:7天无理由全额退款,8-30天退一半,超过30天不退,可休学。', '7天无理由退全款,30天内退一半,之后不退。', '5月27日起7天内可无理由全额退款。'], "优惠活动": [ "是的,如果尾款不连续交满6个月则没有优惠,需补尾款19800元(原价31800元减去已付12000元)。", "报名线下班会额外赠送一套线上正式课程,线上课程可让学生在校提前打基础,寒暑假可集中线下学习直接入班。该课程也可以结合线上内容赶时间进度。" ], "报名流程": [ "两种模式:先线上后补差价转线下,或直接全款预留线下位置。线上课程8-10个月,学费11800元,含直播(每周三次,19:30-21:30)、录播、老师答疑及就业辅导。", "需要填写姓名、学历、学校、城市、出生日期、学习目的、联系方式等信息。" ], "报到时间": [ "建议与家人确定后尽早来。" ], "住宿咨询": [ "合作宿舍约1000元/月,4/6人间,按空房分配。", "不需要,上海有宿舍可选,分4人间和6人间,费用约1000元/月;也可以自行租房,单间费用约2000-3000元/月。" ], "上课方式": ['可寒暑假线下累积学习(7-8个月),在校期间免费开通线上班辅助', '可寒暑假线下累积学习(7-8个月),在校期间免费开通线上班辅助'], "职业方向": [ "动画特效岗适合基础;地编需综合能力,可从模型岗转;TA难度大需美术+代码。课程为6个月线下周一至周五上课,就业方向以游戏行业为主,有学生入职腾讯、网易、米哈游的案例。" ], "课程建议": [ "动画特效岗适合基础;地编需综合能力,可从模型岗转;TA难度大需美术+代码。课程为6个月线下周一至周五上课,就业方向以游戏行业为主,有学生入职腾讯、网易、米哈游的案例。" ] } async def insert_intent_data(): """ 将意图分类数据入库到Milvus """ repo = IntentClassificationRepository() repo.create_collection() all_data = [] all_contents = [] for category, contents in INTENT_DATA.items(): for content in contents: all_data.append({ "intent_category": category, "content": content }) all_contents.append(content) print(f"开始向量化 {len(all_contents)} 条内容...") vectors = await embedding_client.aembed_documents(all_contents) print(f"向量化完成") for i, item in enumerate(all_data): item["content_vector"] = vectors[i] ids = await repo.save_intent_data(all_data) print(f"入库成功,插入 {len(ids)} 条记录") return ids async def query_by_category(category: str): """ 根据意图类别查询 """ repo = IntentClassificationRepository() results = await repo.search_by_intent_category(category) print(f"\n查询 '{category}' 结果:") for i, item in enumerate(results): print(f" {i+1}. {item.get('content', '')[:50]}...") async def main(): print("=== 意图分类数据入库 ===") await insert_intent_data() # print("\n=== 查询测试 ===") # await query_by_category("课程内容") # await query_by_category("就业支持") # await query_by_category("费用咨询") if __name__ == "__main__": asyncio.run(main())