用 NodeJS 10分钟快速实现基于 ChatGPT 的简历智能解析 Agent

用 NodeJS 10分钟快速实现基于 ChatGPT 的简历智能解析 Agent

ReAct 及其局限性

AutoGPT 和 LangChain 都是通过 ReAct(ReAct: Synergizing Reasoning and Acting in Language Models)来实现让大语言模型进行行动规划(例如让语言模型调用外部的工具或数据就是一种典型行动)的能力。

无论是对于工具(外部数据源、API 或函数)的功能描述还是对于语言模型整体输出内容的结构性描述都是使用自然语言进行的,因此很难保证可靠性,会有概率出现不符合预期的输出。

整个过程还涉及到与语言模型的多个轮次的交互,且语言模型还会把完整的用自然语言表述的思考过程也一并输出,因此需要占用大量的 Token。无论是从对模型的最大 Token Window 的限制来看,还是从大多数 MaaS 形态的模型按 Token 计费的商业模式来看都是极其不经济的。

关于 Flappy

Flappy 受到了 ReWOO 论文( Binfeng Xu, Zhiyuan Peng, Bowen Lei, Subhabrata Mukherjee, Yuchen Liu, & Dongkuan Xu. (2023). ReWOO: Decoupling Reasoning from Observations for Efficient Augmented Language Models.) 的启发,将行动计划的规划阶段和执行阶段拆开来实现。

例如同样的场景下,Flappy 可以语言模型生成 1 个执行计划(这个执行计划里已经一次性规划好了,每一步需要执行的操作)。 接着 Flappy 会根据每一步的具体需求调用对应的外部接口或语言模型来完成计划的执行。从而减少了每个步骤都需要语言模型参与的局限性。

另一方面,这样的设计还有 1 个好处是,可以使用不同能力的模型来分别进行任何规划和落地执行。 例如在任务规划阶段使用 GPT-4,具体的数据结构化任务的执行则可以交给 7B 的开源模型来做。从而最优化生产环境下的成本问题。

GitHub 仓库:https://github.com/pleisto/flappy

文档地址:https://flappy.pleisto.com/

Node.js 案例

现在我们尝试用 Flappy 来做一个简历筛选的 Node.js 应用,帮助 HR 快速筛选和整理简历信息。

需求分析

筛选简历的关键,在于提炼简历信息。有了结构化的简历信息后,我们只需提供合适的筛选方法供使用者调用即可。

因此应用需要做的事情包括:

  • 读取所有简历文件。
  • 分析每一份简历文件,生成结构化的简历数据集。
  • 提供便于使用者调用的简历筛选方法。

现在假设我们的数据库中有几份不同格式的简历,我们希望能提取出简历中的关键数据,包括:

  • 应聘者名称(name)
  • 职位(profession)
  • 工作年限(experienceYears)
  • 工作技能(skills)
  • 教育程度(education)
    • 学位(degree)
    • 专业(fieldOfStudy)
    • 大学(university)
    • 毕业年份(year)

筛选目的则是:获取所有工作年限大于7年的应聘者简历。

那我们就朝这个目标开始吧。

新建项目

下面我将创建一个 TypeScript Node.js 项目来完成这个案例。我将把完整的创建过程用到的命令和代码都贴在文章中,你也可以按照相同的方式来玩一下。

# 新建项目
mkdir resume-assistant
cd resuem-assistant

# yarn 或者 npm 初始化项目
yarn init
yarn add typescript ts-node --dev

# 初始化 typescript 项目配置
yarn tsc --init

# 添加 node-flappy 依赖
yarn add @pleisto/node-flappy@next

# 创建入口文件
touch index.ts

创建 Flappy 实例

import {
  createFlappyAgent,
  ChatGPT,
} from '@pleisto/node-flappy'

const gpt35 = new ChatGPT(
  new OpenAI({
    apiKey: process.env.OPENAI_API_KEY!,
    baseURL: process.env.OPENAI_API_BASE!
  }),
  'gpt-3.5-turbo'
)

const resumeAssistant = createFlappyAgent({
  llm: gpt35,
  functions: [
  ]
})

创建实例时,需要提供一个 LLM 模块给 flappy agent 使用。flappy 内置了对 ChatGPT,以及 Baichuan 的支持。这里以 ChatGPT 为例,当然我们建议不要将 apiKey 直接暴露在代码里,此处是通过环境变量引入。至于 functions 变量,将在下文做详细介绍。

运行文件,如果一切配置正常,将不会报错。

export OPENAI_API_KEY=xxx
export OPENAI_API_BASE=xxx
<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值