
本文介绍了一个生成式AI简历筛选器的解决方案,我们在DataRobot和AWS Hackathon 2023比赛中获得了第三名。
DataRobot和AWS Hackathon
跳转到内容 2023年10月25日 东部标准时间下午1点 DataRobot和AWS邀请您和您的团队展示…
www.datarobot.com
技术栈
- DataRobot工作台
- AWS Bedrock
- Streamlit
解决方案架构

DataRobot和AWS Bedrock是解决方案设计的一部分。DataRobot提供了一个工作台,用于通过Jupyter Notebook构建数据科学原型。您还可以在笔记本实例上设置环境变量,如AWS访问密钥等。

AWS Bedrock是AWS上用于基础模型的托管服务平台。它是一组基础模型的编排,例如Anthropic Claude,Stable Diffusion等。您还可以通过微调基础模型并创建自己的模型端点来创建自定义模型。

我们在解决方案中使用了Anthropic Claude 2。我们调用该模型的方式非常直接。AWS Bedrock提供了一个名为Boto3的Python SDK。
Boto3参考资料—Boto3 1.28.75文档
您对改进此网站或Boto3有任何建议吗?给我们反馈意见。
boto3.amazonaws.com
import boto3, json, os# 您应该在环境变量中保存AWS访问密钥id和密钥os.environ["AWS_ACCESS_KEY_ID"] = AWS_ACCESS_KEY_IDos.environ["AWS_SECRET_ACCESS_KEY"] = AWS_SECRET_ACCESS_KEY# 初始化bedrock客户端/运行时try: bedrock_runtime = boto3.client('bedrock-runtime','us-east-1',endpoint_url='https://bedrock-runtime.us-east-1.amazonaws.com')except Exception as e: print({"error": f"{e.__class__.__name__}: {str(e)}"})llm_prompt = """Your llm prompt here"""# 向AWS Bedrock发送REST API请求try: body = json.dumps({"prompt": llm_prompt, "max_tokens_to_sample": 100000,"temperature":0}) modelId = "anthropic.claude-v2" accept = 'application/json' contentType = 'application/json' response = bedrock_runtime.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType) rv = response.get('body').read()except Exception as e: rv = {"error": f"{e.__class__.__name__}: {str(e)}"}
DataRobot提供了一些额外的工作好处,就像LLMOps平台一样。
- 部署后的模型监控
- 预测环境(根据您的生产脚本自动创建Docker镜像)
- 模型注册表

为了能够部署模型,需要在Jupyter Notebook上指定两个函数,load_model()和score_unstructured()。您必须按照DataRobot文档中指定的确切格式进行操作。
Deploy – drx v0.1.19
部署任何模型到ML Ops 任何在DataRobot之外构建的模型都被视为“自定义模型”。 如果建立模型…
drx.datarobot.com
import osAWS_ACCESS_KEY_ID = os.environ["AWS_ACCESS_KEY_ID"]AWS_SECRET_ACCESS_KEY = os.environ["AWS_SECRET_ACCESS_KEY"]def load_model(): """用于加载知识库的自定义模型挂钩。""" import boto3, json, os, sys, io os.environ["AWS_ACCESS_KEY_ID"] = AWS_ACCESS_KEY_ID os.environ["AWS_SECRET_ACCESS_KEY"] = AWS_SECRET_ACCESS_KEY try: rv = boto3.client('bedrock-runtime','us-east-1',endpoint_url='https://bedrock-runtime.us-east-1.amazonaws.com') except Exception as e: rv = {"error": f"{e.__class__.__name__}: {str(e)}"} return rvdef score_unstructured(model, data, query, **kwargs): import boto3, json, os, sys, io """用于使用llm筛选简历的自定义模型挂钩。 传入具有以下头的数据字典 job_descript:职位广告的工作描述。它需要包括任何特定角色的要求 resume:从pdf中解析出的简历的纯文本(字符串) model:bedrock客户端对象 返回: -------- rv:str 具有键的Json字典: - 'completion'——来自Claud2模型的主要响应 - 'stop sequence'——将导致模型停止生成完成文本的序列 """ bedrock_runtime = model generation_prompt_template = """ \n\nHuman: 您是一家公司的虚拟招聘人员。您的任务是根据工作描述审查候选人的简历。您必须列出所有的工作描述要求,并从候选人的简历中找到相关经验,随后分配一个相关度评分(从0到1)。如果找不到相关经验,只需说没有相关经验,不要试图虚构答案。您必须包括工作描述中的所有要求。回应必须是一个带有要求、相关经验和相关度评分作为表头的html表格。 <job-description> {job_descript} </job-description> <candidate-resume> {resume} </candidate-resume> \n\nAssistant: """ data_dict = json.loads(data) llm_prompt = generation_prompt_template.format( job_descript=data_dict["job_descript"], resume=data_dict["resume"], ) try: body = json.dumps({"prompt": llm_prompt, "max_tokens_to_sample": 100000,"temperature":0}) modelId = "anthropic.claude-v2" accept = 'application/json' contentType = 'application/json' response = bedrock_runtime.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType) rv = response.get('body').read() except Exception as e: rv = {"error": f"{e.__class__.__name__}: {str(e)}"} return rv
最后,您可以运行部署功能将模型部署为一个端点。在这种情况下,它只是一个使用AWS Bedrock客户端作为底层的包装函数。
import datarobotx as drxdeployment = drx.deploy( "storage/deploy/", name="CV Screener Powered by LLM", hooks={"score_unstructured": score_unstructured, "load_model": load_model}, extra_requirements=["boto3", "botocore", "datarobotx[llm]", "pypdf","unstructured", "awscli>=1.29.57", "datarobot-drum"], # 如果要更改挂钩代码而不是要求,请重用现有环境 environment_id="653fbe55f1c59b93ae7b4a85", )# 启用存储预测数据,用于监控目的deployment.dr_deployment.update_predictions_data_collection_settings(enabled=True)
我们使用Streamlit构建了原型。

示例职位描述:
我们正在寻找具有出色工程能力和深入机器学习知识的人才,他们能够分析问题、设计前所未有的解决方案,并在我们的平台上实施以供实际应用。我们的工程师还依赖于提升团队的整体水平,并为组织内的每个工程师的卓越做出贡献。您将协助我们成为从深度学习和生成AI中提取价值的最佳平台。
职责:
编写可维护、可测试、生产级别的Python代码设计和构建基于机器学习和生成AI的端用户产品将机器学习算法与其他应用和服务集成自动化机器学习流程
主要要求:
推荐背景:6-8年的Python工程和机器学习经验 - 重点在深度学习上。具备深度学习库和框架的经验(如TensorFlow,Keras,PyTorch等)具备编写可维护、可测试、生产级别的Python代码的经验了解不同机器学习方法及其权衡擅长科学Python工具包(numpy,scipy,pandas,scikit-learn)了解数据科学应用的时间、RAM和I/O可扩展性方面(例如,CPU和GPU加速,稀疏数组上的操作,模型序列化和缓存)软件设计和同级代码审查技能在Python中具有自动化测试和测试驱动开发的经验具有Git + GitHub的经验熟悉基于Linux的操作系统
期望的技能:
具备大规模机器学习经验(100GB+数据集)具备竞争性机器学习经验(例如Kaggle)在生产环境中部署和维护机器学习模型的先前经验我们员工的才能和奉献精神是DataRobot成为标志性公司的核心。我们努力通过提供具有竞争力的薪酬和福利来吸引和留住最优秀的人才,致力于员工的福祉。以下是您可能根据所在地和当地法律要求的福利包括的内容:医疗、牙科和视力保险、灵活的休假计划、带薪假期、有薪育儿假、全球员工援助计划(EAP)等!
配有简历样本,这是由LLM筛选输出。

感谢您阅读我们的解决方案。以下是2分钟展示视频。希望您喜欢。如果您有任何问题,请随时与我们联系。