在本教程中,我们将学习如何使用chatgpt在云功能中构建拼写检查器。
OpenAI的大型语言模型Chapgpt不仅仅是聊天界面。它是针对一系列任务的强大工具,包括翻译,代码生成以及我们将在下面看到的,甚至拼写检查。通过其REST API,Chatgpt提供了一种简单而极其有效的方法,可以在项目中添加AI语言分析和发电能力。 >您可以在github上找到本教程的所有代码。>
钥匙要点此打字稿功能将成为AWS lambda的处理程序,接受HTTP请求作为输入并返回HTTP响应。在上面的示例中,我们正在从传入的HTTP请求中解构身体字段,将其解析给JSON并从请求正文中读取属性TextToCheck。
openai软件包<span>// Entry point for AWS Lambda. </span><span>export async function spellcheck({ body }: { body: string }) { </span> <span>// Read the text from the request body. </span> <span>const { textToCheck } = <{ textToCheck: string }>JSON.parse(body); </span> <span>//... perform spellchecking </span> <span>// Return an HTTP OK response </span> <span>return { </span> statusCode<span>: 200, </span> body<span>: JSON.stringify(...) </span> <span>}; </span><span>} </span>
>要实现SpellChecker函数,我们将将TextTocheck发送到OpenAI,并要求AI模型为我们纠正任何拼写错误。为了简化这一点,我们可以在NPM上使用OpenAI包。该软件包由Openai保留为OpenAI REST API周围的方便的JavaScript/Typescript包装器。它包括我们需要的所有打字稿类型,并使调用Chatgpt变得轻而易举。
>然后,我们可以在函数处理程序中导入并创建OpenAI类的实例,并传递OpenAI API密钥,在此示例中,该键存储在称为OpenAI_KEY的环境变量中。 (登录OpenAi后,您可以在用户设置中找到API密钥。)
>示例文本
<span>npm install --save openai </span>
>最后,我们想要一些带有拼写错误的示例文本来对其进行测试,还有什么比询问chatgpt本身更好的地方!
>本文是对我们的拼写检查员的良好测试,因为它包含明显的错误串行,例如“ Essense”,但也包含一些更复杂的语法错误,例如“原理”而不是“ principt”。这样的错误将测试我们的拼写检查器,超出了仅查找字典中没有出现的单词的领域。 principle
我们将需要两个提示。第一个是指示Chatgpt检查拼写错误的用户提示
在以下文本中,更正拼写和语法错误 我们还需要一个系统提示
,这将指导模型仅返回校正的文本。>
您是一个纠正文本的复制编辑器,您总是只用更正的文本,无解释或其他说明回复。
>系统提示对于给模型一些初始上下文很有用,并指示其为所有后续用户提示以某种方式行事。在此处的系统提示中,我们指示Chatgpt仅返回
校正文本,而不是用描述或其他领先的文本打扮。我们可以在OpenAI Playground中测试系统和用户提示。
>对于API调用,我们将在OpenAI类中使用OpenAi.C.COREATE.CREATE({...})方法,我们在上面实例化并返回响应消息。 将所有内容汇总在一起,以下代码将将这两个提示以及输入文本一起发送到OpenAi.chat.completions.create({...})openai api上的端点。还请注意,我们正在指定该模型将其用作GPT-3.5-Turbo。我们可以为此使用任何OpenAI模型,包括GPT-4:>
>文本,json out
> 到目前为止,我们已经编写了一个AWS lambda云功能,该功能将发送一些文本到chatgpt并返回文本的更正版本,并删除了拼写错误。但是OpenAI包使我们可以做更多的事情。从我们的功能中返回一些结构化的数据真的不好,这些数据实际上列出了文本中所做的替代品吗?这将使将此云功能与前端用户界面集成到更加容易。幸运的是,OpenAI在API上提供了可以实现此功能的功能:函数调用。
>函数调用是> OpenAI模型中的一个功能,该模型允许Chatgpt使用一些结构化的JSON响应而不是简单的消息。通过指示AI模型调用函数,并提供可以调用的功能的详细信息(包括所有参数),我们可以从API中收到更有用的JSON响应。
>要使用函数调用,我们在聊天完成创建选项中填充函数数组。在这里,我们告诉chatgpt,存在一个称为makecorrections的函数,它可以用一个称为替换的参数来调用:
<span>// Entry point for AWS Lambda. </span><span>export async function spellcheck({ body }: { body: string }) { </span> <span>// Read the text from the request body. </span> <span>const { textToCheck } = <{ textToCheck: string }>JSON.parse(body); </span> <span>//... perform spellchecking </span> <span>// Return an HTTP OK response </span> <span>return { </span> statusCode<span>: 200, </span> body<span>: JSON.stringify(...) </span> <span>}; </span><span>} </span>>在这里对函数和所有参数的描述都很重要,因为Chatgpt无法访问我们的任何代码,因此它知道该功能的所有信息都包含在我们提供的描述中。参数属性描述了Chatgpt可以调用的函数签名,它遵循JSON模式来描述参数的数据结构。
上面的函数具有一个称为替换的单个参数,该参数与以下打字稿类型对齐:
在JSON模式中定义此类型将确保我们从Chatgpt返回的JSON适合此可预测的形状,并且我们可以使用JSON.PARSE()将其验证为此类对象:
><span>npm install --save openai </span>
将它们全部放在一起
<span>// Import the OpenAI package </span><span>import OpenAI from "openai"; </span> <span>export async function spellcheck({ body }: { body: string }) { </span> <span>const { textToCheck }: { textToCheck: string } = JSON.parse(body); </span> <span>// Create a new instance of OpenAI... </span> <span>const openai = new OpenAI({ apiKey: process.env.OPENAI_KEY }); </span> <span>//... perform spellchecking </span> <span>return { </span> statusCode<span>: 200, </span> body<span>: JSON.stringify(...) </span> <span>}; </span><span>} </span>>这是我们AWS lambda函数的最终代码。它调用chatgpt并将校正的
>在这里要注意的几个额外的事情。如前所述,只有几个OpenAI模型支持功能调用。这些模型之一是GPT-3.5-Turbo-0613,因此已在“完成端点”的呼叫中指定了这一点。我们还添加了function_call:{name:'makeCorrections'}到呼叫。该属性是对模型的指令,我们希望它能返回调用我们的makecorrections函数所需的参数,并且我们不希望它返回聊天消息:>
此功能可以部署到AWS lambda,并使用以下请求主体通过HTTP来调用:>它将以这样的JSON数组的形式返回更正的列表:
<span>// Import the OpenAI package </span><span>import OpenAI from "openai"; </span> <span>export async function spellcheck({ body }: { body: string }) { </span> <span>const { textToCheck }: { textToCheck: string } = JSON.parse(body); </span> <span>// Create a new instance of OpenAI. </span> <span>const openai = new OpenAI({ apiKey: process.env.OPENAI_KEY }); </span> <span>const userPrompt = 'Correct the spelling and grammatical errors in the following text:\n\n'; </span> <span>const gptResponse = await openai.chat.completions.create({ </span> model<span>: "gpt-3.5-turbo", </span> messages<span>: [ </span> <span>{ </span> role<span>: "system", </span> content<span>: "You are a copy editor that corrects pieces of text, you always reply with just the corrected text, no explanations or other description" </span> <span>}, </span> <span>{ </span> role<span>: "user", </span> content<span>: userPrompt + textToCheck </span> <span>} </span> <span>] </span> <span>}); </span> <span>// The message.content will contain the corrected text... </span> <span>const correctedText = gptResponse.choices[0].message.content; </span> <span>return { </span> statusCode<span>: 200, </span> body<span>: correctedText </span> <span>}; </span><span>} </span>>
结论
<span>const gptResponse = await openai.chat.completions.create({ </span> model<span>: "gpt-3.5-turbo-0613", </span> messages<span>: [ ... ], </span> functions<span>: [ </span> <span>{ </span> name<span>: "makeCorrections", </span> description<span>: "Makes spelling or grammar corrections to a body of text", </span> parameters<span>: { </span> type<span>: "object", </span> properties<span>: { </span> replacements<span>: { </span> type<span>: "array", </span> description<span>: "Array of corrections", </span> items<span>: { </span> type<span>: "object", </span> properties<span>: { </span> changeFrom<span>: { </span> type<span>: "string", </span> description<span>: "The word or phrase to change" </span> <span>}, </span> changeTo<span>: { </span> type<span>: "string", </span> description<span>: "The new word or phrase to replace it with" </span> <span>}, </span> reason<span>: { </span> type<span>: "string", </span> description<span>: "The reason this change is being made", </span> <span>enum: ["Grammar", "Spelling"] </span> <span>} </span> <span>} </span> <span>} </span> <span>} </span> <span>} </span> <span>} </span> <span>} </span> <span>], }); </span>通过利用OpenAI API和一个云功能,您可以创建不仅识别拼写错误而且还了解上下文的应用程序,从而捕获典型的拼写检查员可能会忽略的复杂语法细微差别。本教程为基础提供了基础,但是ChatGpt在语言分析和更正中的潜在应用是广泛的。随着AI的继续发展,此类工具的功能也将如此。 >您可以在github上找到本教程的所有代码。
<span>type ReplacementsArgType = { </span> changeFrom<span>: string, </span> changeTo<span>: string, </span> reason<span>: "Grammar" | "Spelling" </span><span>}[] </span>
>
以上是如何使用Chatgpt构建简单的拼写检查程序的详细内容。更多信息请关注PHP中文网其他相关文章!