首页 > 其他分享 >LLM开发模板:小白必看

LLM开发模板:小白必看

时间:2024-11-23 10:58:59浏览次数:9  
标签:const 小白必 messages API OpenAI LLM prompt response 模板

在开发基于LLM的应用时,遵循一定的项目结构和流程可以提升开发效率和代码质量。以下是一个简单的项目,接下来我将从0开始手把手带你搭建这样一个LLM项目。

import OpenAI from "openai";
import dotenv from "dotenv";

dotenv.config()

const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL:process.env.OPENAI_BASE_URL
})
const getCompletion =  async (prompt, model="gpt-4o") => {
  const messages = [{
    role: 'user',
    content: prompt
  }];

  const response = await client.chat.completions.create({
    model: model,
    messages: messages,
    temperature: 0.9
  }) 
  return response.choices[0].message.content
}

const main = async () => {
  const prod_review = `
  我女儿生日时买了这个熊猫毛绒玩具,她很喜欢,到处都带着。
  它柔软、超级可爱,脸看起来很友好。
  不过,相对于我付的价格来说,它有点小。
  我想,同样的价格,也许还有其他更大的选择。
  它比预期早到了一天,所以我有机会自己玩了一会儿,然后才把它送给她。
  `;

  const prompt =`
  你的任务是生成来自电子商务网站的产品评论有关时间运输的简短摘要。
  以便向运输部门提供相关时间的反馈。
  总结下面用三个反引号分隔的产品评论,最多30字。
  只关注任何提及产品运输方面的内容
  评论:'''${prod_review}'''
  `;
  const response = await getCompletion(prompt)
  console.log(response);
}
main()

1. 初始化项目

npm init -y

这条命令会创建一个新的Node.js项目,并自动生成package.json文件,其中包含了项目的初始配置。

1.1 安装依赖

  • 将所需的依赖项列表复制到package.json中的dependencies部分。如OpenAI,dotenv…
  • 使用npm i命令安装这些依赖项。

1.2 运行后端项目

  • 确保所有必要的依赖都已安装。
  • 使用node命令启动你的后端项目。

2. 导入模块

import OpenAI from "openai";
import dotenv from "dotenv";
  • OpenAI:这是 OpenAI 的官方客户端库,用于与 OpenAI 的 API 进行交互。通过这个库,我们可以轻松地发送请求并处理响应。
  • dotenv:这是一个用于加载环境变量的库,通常从 .env 文件中加载。这样可以避免在代码中硬编码敏感信息,如 API 密钥。

3. 加载环境变量

dotenv.config();
  • dotenv.config() :这个方法会读取项目根目录下的 .env 文件,并将其中的环境变量加载到 process.env 对象中。例如,如果你的 .env 文件中有 OPENAI_API_KEY=your_api_key,那么 process.env.OPENAI_API_KEY 就会等于 your_api_key

4. 初始化 OpenAI 客户端

const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: process.env.OPENAI_BASE_URL
});
  • apiKey:从环境变量中获取 OpenAI API 的密钥。这是调用 API 所必需的认证信息。
  • baseURL:从环境变量中获取 OpenAI API 的基础 URL。默认情况下,OpenAI 的基础 URL 是 https://api.openai.com/v1,但有时你可能需要使用自定义的 URL。

5. 定义 getCompletion 函数

const getCompletion = async (prompt, model = "gpt-4o") => {
  const messages = [{
    role: 'user',
    content: prompt
  }];

  const response = await client.chat.completions.create({
    model: model,
    messages: messages,
    temperature: 0.9
  });

  return response.choices[0].message.content;
};

5.1 函数定义

const getCompletion = async (prompt, model="gpt-4o") => {
  • 这里定义了一个异步函数 getCompletion,它接受两个参数:

    • prompt:这是用户提供的文本提示,模型将基于这个提示生成响应。
    • model:这是模型的名字,默认值为 "gpt-4o"。这个参数指定了将要使用的语言模型。

5.2 消息构建

const messages = [{
  role: 'user',
  content: prompt
}];
  • 这里创建了一个消息数组 messages,其中包含一个对象,该对象模拟了用户的提问。

    • role: 'user' 表示这是一个来自用户的消息。
    • content: prompt 是消息的具体内容,即用户输入的提示。

5.3 调用API

const response = await client.chat.completions.create({
  model: model,
  messages: messages,
  temperature: 0.9
});
  • 这行代码使用 await 关键字等待 client.chat.completions.create 方法返回结果。client 对象应该是预先配置好的,用于与特定的语言模型API进行通信。

    • model: model 指定了要使用的模型名称。
    • messages: messages 将之前构建的消息数组传递给API,作为请求的一部分。
    • temperature: 0.9 设置了生成文本的随机程度。随机值越高,生成的文本越随机;随机值越低,生成的文本越确定。这里的值为 0.9,意味着输出会有一定的创造性或多样性。

5.4 返回结果

return response.choices[0].message.content;
  • 这行代码从API返回的响应中提取出第一个选择的文本内容,并将其作为函数的返回值。

    • response.choices 是一个数组,包含了API生成的所有可能的回答。
    • [0] 选择了第一个元素,即最有可能的回应。
    • .message.content 获取了这条消息的实际内容,也就是模型生成的文本。

6. 定义 main 函数

const main = async () => {
  const prod_review = `
  我女儿生日时买了这个熊猫毛绒玩具,她很喜欢,到处都带着。
  它柔软、超级可爱,脸看起来很友好。
  不过,相对于我付的价格来说,它有点小。
  我想,同样的价格,也许还有其他更大的选择。
  它比预期早到了一天,所以我有机会自己玩了一会儿,然后才把它送给她。
  `;

  const prompt = `
  你的任务是生成来自电子商务网站的产品评论有关时间运输的简短摘要。
  以便向运输部门提供相关时间的反馈。
  总结下面用三个反引号分隔的产品评论,最多30字。
  只关注任何提及产品运输方面的内容
  评论:'''${prod_review}'''
  `;

  const response = await getCompletion(prompt);
  console.log(response);
};
  • main:这是一个异步函数,包含主要的业务逻辑。

    • prod_review:这是一个字符串,包含产品的评论。这个评论将作为输入,用于生成摘要。

    • prompt:这是一个字符串,构建了一个提示,告诉模型生成一个关于运输时间的简短摘要。

      • 任务描述:明确告知模型任务的目标,即生成关于运输时间的简短摘要。
      • 摘要要求:要求摘要最多30字,并且只关注运输时间相关的部分。
      • 评论内容:使用三个反引号包裹的 prod_review 作为输入评论。
    • response:调用 getCompletion 函数,传入构建好的提示,并等待返回的摘要。

    • console.log(response) :打印生成的摘要,以便查看结果。

7. 调用 main 函数

main();
  • main() :调用 main 函数,启动整个流程。由于 main 是一个异步函数,调用它会立即返回一个 Promise,但不会阻塞主程序的执行。

8. 总结

综上所述,在构建AI应用时,特别是那些依赖于LLM的应用,设计出有效的prompt模板是至关重要的。一个好的prompt应该清晰地传达用户的需求,并且能够引导LLM产生准确、相关和有用的输出。

标签:const,小白必,messages,API,OpenAI,LLM,prompt,response,模板
From: https://blog.csdn.net/Cwayhome/article/details/143988854

相关文章

  • 快读快写模板 Pro Max
    模板namespaceQuickIO{template<typenameT>inlinevoidread(T&x){x=0;signedop=1;charch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')op=-1;for(;isdigit(ch);ch=getchar()......
  • 实验4 类的组合、继承、模板类、标准库
     1、实验任务2GradeCalc.hpp1#include<iostream>2#include<vector>3#include<string>4#include<algorithm>5#include<numeric>6#include<iomanip>78usingstd::vector;9usingstd::string;10usings......
  • gofiber: 模板: 分页功能模块
    一,代码1,模块packagepageimport"fmt"typePagestruct{ //定义分页的struct Totalint`json:"total"` TotalPageint`json:"totalpage"` CurrentPageint`json:"currentpage"` PrevPageint`json:"prevpage"` N......
  • 基于STL的自定义栈与队列实现:灵活选择底层容器的模板设计
    文章目录代码模板设计主要成员函数底层容器的选择模板设计底层容器的选择关于stack的示例代码关于queue的示例代码前言:在本文中,我们将分析一个模拟C++标准模板库(STL)栈的自定义实现以及模仿C++标准模板库(STL)队列的自定义实现。该stack类模板允许在底层容器的选择......
  • 浅拷贝与深拷贝 以及嵌套和递归使用模板类
     1.浅拷贝和深拷贝——对象和类浅拷贝浅拷贝只复制对象的基本属性,而不复制引用类型的属性指向的对象,即只复制引用而不复制引用指向的对象在浅拷贝中,新对象与原始对象共享引用类型的属性指向的对象,即它们指向同一个对象。编译器提供的拷贝构造函数是浅拷贝,当一个对象修......
  • node根据模板生成pdf,并在pdf中插入文本信息,水印,签章。
    要求通过node生成司机小程序需要的pdf,并在pdf插入信息,用户签章,公司签章,水印等。第三方插件#pdf-lib版本1.17.1。读取pdf模板,插入信息,签章,水印。#@pdf-lib/fontkit版本1.1.1。加载pdf插入信息时所需的字体文件ttf。#canvas版本2.11.2。根据用户名形成用户签章(文字......
  • 开源5款可用于LLMs的爬虫工具/方案
    大家好,我是一颗甜苞谷,今天来分享5款可用于LLMs的爬虫工具/方案1、Crawl4AI功能:提取语义标记的数据块为JSON格式,提供干净的HTML和Markdown文件。用途:适用于RAG(检索增强生成)、微调以及AI聊天机器人的开发。特点:高效数据提取,支持LLM格式,多URL支持,易于集成和Docker容器化......
  • 一文读懂RAG和LLM微调,教你结合业务场景落地LLM应用
    随着大家对大型语言模型(LLM)的兴趣激增,许多开发者也在构建基于LLM的应用。当直接使用Prompt驱动的LLM表现不如预期时,问题就出现了:如何提高LLM应用的可用性。这时我们需要权衡:是选择检索增强生成(Retrieval-AugmentedGeneration缩写RAG)还是模型微调来改善结果?01在深入探......
  • 使用 Ollama 部署本地 LLM:构建 AI REST API 的简易指南
    最近已有不少大厂都在秋招宣讲,也有一些已在Offer发放阶段了。节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了深入的讨论。总结链......
  • acwing第三章算法模板
    29、树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b,b->a。因此我们可以只考虑有向图的存储。(1)邻接矩阵:g[a][b]存储边a->b(2)邻接表://对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int......