在哪些网站上发外链好,互联网app网站建设方案模板下载,网页编辑实训报告,电商网站设计系列#x1f4dd; LangChain.js 是一个快速开发大模型应用的框架#xff0c;它提供了一系列强大的功能和工具#xff0c;使得开发者能够更加高效地构建复杂的应用程序。LangChain.js 实战系列文章将介绍在实际项目中使用 LangChain.js 时的一些方法和技巧。 LangChain.js 是一个… LangChain.js 是一个快速开发大模型应用的框架它提供了一系列强大的功能和工具使得开发者能够更加高效地构建复杂的应用程序。LangChain.js 实战系列文章将介绍在实际项目中使用 LangChain.js 时的一些方法和技巧。 LangChain.js 是一个快速构建 AI 应用的库它提供了一系列的工具可以帮助你快速构建一个 AI 应用。
LangChain.js 目前还在快速迭代中这是由于 AI 技术自身也正在快速迭代中所以很多功能可能很快就被废弃掉比如 generate() 方法。
使用 LangChain.js 的好处有挺多比如
封装了大量的模型比如 OpenAI、Azure OpenAI、Claude、文心一言等等填入响应的 API Key 等参数即可调用提供了大量方便的方法比如链式调用、对话管理、回钩子等等和 LangSmith 结合对 AI 应用可以很好地进行调试开发
LangChain.js 的基本使用
调用模型
LangChain.js 新改版区分了两种调用方式一种是LLM一种是ChatModel不过这两种调用方式本质都一样最终都是调用模型一般我们使用后者。
实例化 ChatModel
import { ChatOpenAI } from langchain/chat_models/openai;const chatModel new ChatOpenAI({openAIApiKey: ...,
});这里 openAIApiKey 可以在实例化的时候传入也可以放置在环境变量 OPENAI_API_KEY 中这样就不用每次都传入了LangChain 会自动从 process.env 读取。如果是 Azure OpenAI那对应的就是 AZURE_OPENAI_API_KEY、AZURE_OPENAI_API_INSTANCE_NAME、AZURE_OPENAI_API_DEPLOYMENT_NAME 等等。
接着就可以调用模型
import { HumanMessage, SystemMessage } from langchain/chat_models/messages;const messages [new SystemMessage(你是一位语言模型专家),new HumanMessage(模型正则化的目的是什么),
];这里的 SystemMessage 和 HumanMessage 都是 LangChain.js 提供的消息类分别表示系统消息和用户消息。用户消息好理解系统消息的话可以看作是针对 AI 模型的一个高级指令instruction比如 SystemMessage(你是一位语言模型专家) 就是告诉 AI 模型你是一位语言模型专家这样 AI 模型就会以这个身份来回答你的问题SystemMessage 是可选的。
await chatModel.invoke(messages);这里的 invoke() 方法就是调用模型它会返回一个 Promise这个 Promise 的结果就是 AI 模型的回复比如
AIMessage { content: The purpose of model regularization is to prevent overfitting in machine learning models. Overfitting occurs when a model becomes too complex and starts to fit the noise in the training data, leading to poor generalization on unseen data. Regularization techniques introduce additional constraints or penalties to the models objective function, discouraging it from becoming overly complex and promoting simpler and more generalizable models. Regularization helps to strike a balance between fitting the training data well and avoiding overfitting, leading to better performance on new, unseen data. }流式传输
流式传输是一个基本功能了一开始 LangChain 仅支持使用回调函数的方式来实现比如
const chat new ChatOpenAI({streaming: true,
});const response await chat.call([new HumanMessage(讲个笑话)], {callbacks: [{handleLLMNewToken(token: string) {console.log({ token });},},],
});这样每当模型返回的时候都会触发 handleLLMNewToken 回调函数新版 LangChain.js 更加灵活使用 .stream() 方法可以实现同样的功能
const stream await chat.stream([new HumanMessage(讲个笑话)]);for await (const chunk of stream) {console.log(chunk);
}这里的 stream 是一个 AsyncIterableIterator可以使用 for await 来遍历每当模型返回的时候就会触发 for await 中的代码。
JSON Mode
JSON Mode 是 OpenAI 新版的能力它可以让你更好地控制 AI 模型的输出比如
const jsonModeModel new ChatOpenAI({modelName: gpt-4-1106-preview,
}).bind({response_format: {type: json_object,},
});注意目前仅 gpt-4-1106-preview 模型支持 JSON Mode另外还有一个强制性的要求就是 SystemMessage 必须包含 JSON 字眼
const res await jsonModeModel.invoke([[system, Only return JSON],[human, Hi there!],
]);后续 GPT 迭代 JSON Mode 应该就会变成通用能力之语 SystemMessage 的规则不知道后续会不会改变。
函数调用
函数调用Function Calling是 OpenAI 的一个重点能力也就是目前 AI 应用和程序的一个重要交互协议。函数调用其实很简单就是先让 AI 去选择调用哪个函数然后在程序中调用真正的函数。
最常见的场景就是联网回答你提供了「联网搜索」的函数当用户提问「今天的重点新闻是什么」的时候AI 会先调用「联网搜索」函数然后根据函数执行得到的信息最终再回答用户的问题。
OpenAI 使用 JSON Schema 来定义函数调用的协议比如定义一个提取字段的函数
const extractionFunctionSchema {// 定义函数的名字name: extractor,// 定义函数的描述description: Extracts fields from the input.,// 定义函数的入参有哪些parameters: {type: object,properties: {tone: {type: string,enum: [positive, negative],description: The overall tone of the input,},word_count: {type: number,description: The number of words in the input,},chat_response: {type: string,description: A response to the humans input,},},required: [tone, word_count, chat_response],},
};也可以使用 zod 这个库写起来更方便
import { z } from zod;
import { zodToJsonSchema } from zod-to-json-schema;const extractionFunctionSchema {name: extractor,description: Extracts fields from the input.,parameters: zodToJsonSchema(z.object({tone: z.enum([positive, negative]).describe(The overall tone of the input),entity: z.string().describe(The entity mentioned in the input),word_count: z.number().describe(The number of words in the input),chat_response: z.string().describe(A response to the humans input),final_punctuation: z.optional(z.string()).describe(The final punctuation mark in the input, if any.),})),
};调用函数
const model new ChatOpenAI({modelName: gpt-4,
}).bind({functions: [extractionFunctionSchema],function_call: { name: extractor },
});const result await model.invoke([new HumanMessage(What a beautiful day!)]);console.log(result);
/*
AIMessage {//...additional_kwargs: {function_call: {name: extractor,arguments: {\n tone: positive,\n entity: day,\n word_count: 4,\n chat_response: Im glad youre enjoying the day!,\n final_punctuation: !\n }}}
}
*/最后
推荐一些好用的资源 StarFlow.tech 一个集聊天、工作流和知识库的 AI 平台。在这里你可以免费使用 ChatGPT3.5 和 3.5 16K还有 GPT-4 Vision、DELL·E3、Midjourney 等多种模型可供选择。这个平台就像一个小型工作室助力个人效率 Max OpenAI 官方提示词指南 专门面向中文的提示词工程指南该教程是 OpenAI 官方出版主要包括了六大策略轻松学习提示词技巧。