LLM 应用开发入门 - 实现 langchain.js ChatModel 接入火山引擎大模型和实现一个 CLI 聊天机器人(上)

前言

Langchain 是一个大语言模型(LLM)应用开发的框架,提供了 LLM 开发中各个阶段很多非常强大的辅助工具支持。对于进行 LLM 开发是必不可少的工具库。

本文将通过一个实际的开发例子来入门 LLM 开发基础工具链,并实现 langchain.js ChatModel 接入火山引擎大模型和基于 langchain 工具链实现一个简单的 CLI 聊天机器人

ChatModel & LLM

目前国内外有各种各样的大模型,而 langchain 作为一个通用 LLM 应用框架,它本身是和具体大模型无关的,是可以和任意模型进行交互的。要实现和模型的交互就要实例化使用相应的模型。

一个以 OpenAI 为例子则是安装相应的@langchain/openai和配置相应的 API key 进行使用即可

import {
    ChatOpenAI } from '@langchain/openai'
import {
    HumanMessage, SystemMessage } from '@langchain/core/messages'

const messages = [
  new SystemMessage('Translate the following from English into Italian'),
  new HumanMessage('hi!'),
]

const model = new ChatOpenAI({
    model: 'gpt-4' })

await model.invoke(messages)

由于 langchain 目前没有提供火山引擎模型的集成,这里我们需要实现一个对于火山引擎大模型的集成

在 langchain 中有两个组件都可以实现模型的对接分别是 ChatModelLLM

其中 LLM 实现由于只能接收字符串作为输入输出,对于新模型目前已经不再推荐使用。而是使用 ChatModel的实现来替代,ChatModel 是可以使用一系列消息作为输入并返回聊天消息作为输出的语言模型。支持将不同的角色分配给对话消息,有助于区分来自 AI、用户和系统消息等。

因此我们这里使用ChatModel来实现火山引擎的接入

火山引擎大模型开通

目前火山引擎对于每个大模型都提供了 50 万的白嫖 token 和部分模型的免费试用

创建接入点

完成相关基础的注册认证后,前往火山方舟在线推理新建接入点

记住我们的接入点ep-xxx作为下面初始化的 model参数

创建 API key

前往 API key 管理 创建 API key

实现自定义 ChatModel

要实现 langchan 中的大模型对接需要实现SimpleChatModel基类,主要实现以下 3 个方法

  • abstract _call(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: CallbackManagerForLLMRun): Promise<string>;

大模型调用,传入对话消息返回大模型返回的字符串

  • abstract _llmType(): string;

返回模型名称,便于在日志中打印调试

  • _streamResponseChunks(_messages: BaseMessage[], _options: this["ParsedCallOptions"], _runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;

大模型交互时流式输出支持,调用 model.stream等方法时会调用该实现

因此对接大模型的实现思路也是比较清晰,主要就是实现_call_streamResponseChunks根据接收的参数来根据火山引擎的 Open API 文档进行调用

主要实现

  • 参数和类型定义

我们对外导出ChatVolcengine类作为模型对接使用。按照火山引擎的文档将相关的模型参数作为构造类的入参

为了提供良好的用户使用体验,并将火山引擎的数据结构用相应的 ts 声明表示,详见

  • Open API 请求封装

一般大模型的接口返回都支持流式和非流式,这里我们实现request方法将和大模型 OpenApi 的非流式和流式调用作为统一的封装。将 langchain 的数据结构转化为火山引擎接收的数据结构并调用 Open API

  async _request(messages: BaseMessage[]</
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flytam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值