从 0 到 1 跑通 LangChain (TypeScript版)

前言

最近在学习大模型应用相关的内容。想着实践是最好的老师,就按照官方文档写了一个 Typescript 版本的 LangChain 调用 OpenAI 的 demo。文章分为两个部份,LangChain 调用 LLMs 的基本流程和代码实现。让初次使用 Langchain 的同学可以少踩坑,一步启动~

LangChain 调用 LLMs 的基本流程

什么是 LangChain

如果你问 chatGPT3.5 ,什么是 Langchain?它会告诉你:

LangChain 是一个通用的编程概念,它指的是一种通过链式调用方法来实现一系列操作的编程风格或范式。在 LangChain 中,每个方法调用都返回一个新的对象或函数,以便可以在其上继续调用其他方法,形成一个链式的操作序列。LangChain 的目的是提高代码的可读性和可维护性。通过使用链式调用,可以将一系列操作连接在一起,使代码更加清晰、简洁,并且易于理解和修改。

好像回答了,但是和我们想要的有点偏差。那么 LangChain 的官方描述是:

LangChain 是一个用于开发由语言模型支持的应用程序的框架。我们相信,最强大和最差异化的应用程序不仅会通过 API 调用语言模型,而且还会:

  1. 具有数据意识:将语言模型连接到其他数据源
  2. 是代理的:允许语言模型与其环境交互

LangChain 里有使用到 LangChain 的编程理念。

调用 LLMs 的基本流程

调用过程需要我们理解三个基本概念:PromptTemplate + LLM + OutputParser

流程图:

graph LR
Input[用户输入] --> PromptTemplate[使用提示模版对用户输入进行处理] --> LLM[把数据输入给 LLM] --> OutputParser[OutputParser 对 LLM 输出处理返回最终结果]

PromptTemplate

大多数 LLM 应用不会将用户输入直接传递到 LLM。通常,他们会将用户输入添加到较大的文本中,称为提示模板,该文本提供有关当前特定任务的附加上下文。

可以简单理解 PromptTemplate 是对用户输入进行处理和给大模型增加语义环境数据的。

LLM

语言模型有两种类型,在LangChain中称为:

  • LLM:这是一种语言模型,它将字符串作为输入并返回字符串
  • ChatModels:这是一个语言模型,它将消息列表作为输入并返回消息

我们最熟悉的 LLM 实现是 OpenAI 的 ChatGPT。也是我们例子中展示的大语言模型。

因为国内无法使用 OpenAI 。我们可以使用第三方平台的 api 来间接接入 OpenAI。这里介绍 f2api。进入网页注册帐号登录后就可以获取 openAIApiKey 和请求 URL 了。可以充值一块钱试试效果,请注意问问题的 token 数不要超过一元能买到的最大 token 数。

OutputParser

OutputParsers 将 LLM 的原始输出转换为可在下游使用的格式。 OutputParsers 有几种主要类型,包括:

  • 从 LLM 转换文本 -> 结构化信息(例如 JSON)
  • 将 ChatMessage 转换为字符串
  • 将除消息之外的调用返回的额外信息(如 OpenAI 函数调用)转换为字符串。

对大语言模型的输出进行处理,接入不同的大语言模型需要的处理也不尽相同。LangChain 内置了对 OpenAI 输出的处理。

Coding

注意 Langchain npm 包的安装,我使用的版本是 0.0.167 ,没有指定版本可能会下载到一个 Langchain 同名包,版本大于 ^1.0.0 。

// index.ts
import { ChatOpenAI } from "langchain/chat_models/openai";
import { RunnableConfig } from "langchain/dist/schema/runnable";
import { ChatPromptTemplate } from "langchain/prompts";
import { BaseOutputParser } from "langchain/schema/output_parser";

/**
 * Parse the output of an LLM call to a comma-separated list.
 */
class CommaSeparatedListOutputParser extends BaseOutputParser<string[]> {
	lc_namespace: string[];

	async parse(text: string): Promise<string[]> {
		return text.split(",").map((item) => item.trim());
	}

  // 此抽象接口未使用但是必须有默认实现
	getFormatInstructions(): string {
		return "";
	}
}

const template = `You are a helpful assistant who generates comma separated lists.
A user will pass in a category, and you should generate 5 objects in that category in a comma separated list.
ONLY return a comma separated list, and nothing more.`;

const humanTemplate = "{text}";

/**
 * Chat prompt for generating comma-separated lists. It combines the system
 * template and the human template.
 */
const chatPrompt = ChatPromptTemplate.fromMessages([
	["system", template],
	["human", humanTemplate],
]);

const model = new ChatOpenAI({
  temperature: 0.7,
  // 使用自己申请的,这里展示的是错误的
  openAIApiKey: "sk-f2zbU6uhSTMJjpKU9VwnTzCxbbJ8H4bIV7GAw",
  configuration: {
    // ChatOpenAI 的请求拼接 path 是 /chat/completions ,需要根据完整的请求 url 裁剪得到 baseURL
    baseURL: "https://api.f2gpt.com/v1",
    defaultHeaders: {
        "Content-Type": "application/json",
    },
  },
});
const parser = new CommaSeparatedListOutputParser();

const chain = chatPrompt.pipe(model).pipe(parser);

const invoke = async (input: any, options?: RunnableConfig): Promise<any> => {
	const result = await chain.invoke(input, options);

	return result;
};

invoke({ text: "animals" }).then((result) => {
	console.log(result);
});

/*  
[ 'dog', 'cat', 'bird', 'fish', 'horse' ]
*/

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

LangChain是一种用于自然语言处理任务的预训练模型,它常用于序列到序列(Seq2Seq)的生成任务中,比如机器翻译、文本摘要或对话系统等。LangChain模型基于Transformer架构,过学习大量的文本数据,能够捕捉语言结构和上下文之间的关联。 LangChain模型的基本步骤如下: 1. **加载模型**:首先,你需要安装相应的库(如Hugging Face的transformers),并根据模型提供者的文档加载预训练的LangChain模型。这常涉及到从模型仓库下载模型权重。 2. **模型配置**:设置模型的输入和输出格式,例如,如果你要进行文本生成,可能需要定义一个开始序列(如“<start>”)和结束标记(如“<end>”)。 3. **输入处理**:将输入文本转换为模型所需的输入格式,这可能包括截断、填充或编码成tokens。 4. **前向传播**:过调用模型的`generate`方法,传入起始序列并生成新的文本。这个过程会根据模型内部的注意力机制逐步生成下一个token的概率分布,并选择最高概率的token作为下一次的预测。 5. **结果解码**:当生成的文本遇到结束标记或者达到最大长度时,停止生成,然后将生成的tokens解码回原始的文本格式。 6. **评估与调整**:根据任务需求,你可以评估生成的文本的质量,并根据需要调整模型参数、生成策略或训练更多的自适应数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值