【GoLang】调用llm时提示词prompt的介绍以及使用方式

介绍

提示词是一种与大模型交互的对话格式,它以 JSON 格式定义了一个消息列表(messages),包含了系统消息和用户消息。

我们向AI提问时,其实发给AI的都是提示词,别看我们只是简单输入了一句话,但大模型内部其实自动帮我们把这句话转换为提示词的形式了。

但是我们现在如何手动来设置提示词呢?请看下文

设置提示词

总的流程就是:声明 chatTemplate 表示提示词模板,声明 input 用于填充 chatTemplate 模板中的占位符,最终二者结合得到prompt。

package mainimport ("context""fmt""github.com/tmc/langchaingo/llms""github.com/tmc/langchaingo/llms/openai""github.com/tmc/langchaingo/prompts"
)func main() {// 初始化大模型llmllm, _ := openai.New(openai.WithModel("deepseek-reasoner"),openai.WithToken("sk-2c4e9ad917cf48d8ad834dc5b98e7e01"),openai.WithBaseURL("https://api.deepseek.com"),)// 什么提示词模板chatTemplate := prompts.NewChatPromptTemplate([]prompts.MessageFormatter{prompts.NewSystemMessagePromptTemplate("你是一个有帮助的助手,擅长回答天气相关问题。", nil),prompts.NewHumanMessagePromptTemplate("{{.greeting}}!今天{{.city}}的天气怎么样?", []string{"greeting", "city"}),})// input 用于填充 chatTemplate 模板中的占位符变量input := map[string]interface{}{"greeting": "早上好","city":     "北京",}// 根据模板和变量生成为最终的提示词prompt, _ := chatTemplate.Format(input)// 通过大模型llm调用APIctx := context.Background()completion, _ := llms.GenerateFromSinglePrompt(ctx,llm,prompt,)// 输出大模型生成的答复fmt.Println(completion)
}

使用提示词的好处

好处1. 支持对话上下文

messages 数组允许你提供多轮对话的历史记录,模型可以根据之前的消息生成更符合上下文的回复。

"messages": [{"role": "system", "content": "You are a helpful assistant."}, // 开启对话时生成的{"role": "user", "content": "What is the capital of France?"}, // 用户生成的{"role": "assistant", "content": "The capital of France is Paris."}, // ai生成的{"role": "user", "content": "What about Spain?"}    // 用户生成的
]

在这个例子中,模型知道用户之前问了法国的首都,现在问西班牙的首都,可以直接回答:“The capital of Spain is Madrid.”,而不需要重复澄清。

好处2. 区分角色

通过 role 字段,模型可以区分不同身份(系统、用户、AI)发送消息,从而采取不同的处理方式。

  • role: "system":设置模型的全局行为或角色,通常只在对话开始时提供一次。
  • role: "user":表示用户的输入,模型会直接回应。
  • role: "assistant":表示模型的回复,通常由模型生成,但也可以手动添加以模拟对话历史。

好处3. 兼容性和标准化

这种 messages 格式是 OpenAI 的 Chat API 标准格式(Chat Completions API),被广泛采用。

许多 LLM 提供商(如 DeepSeek、Anthropic)都兼容这种格式,因为它已经成为行业标准。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内核编程十二:打印task_struct中的数据

在Linux内核中,current 是一个宏,用于获取当前正在执行的进程的 task_struct 结构体指针。current 宏返回一个指向当前正在运行的进程的 task_struct 结构体的指针。通过这个指针,内核代码可以访问和修改当前进程的各种属性和状态。 打印单个…

区间端点(java)(贪心问题————区间问题)

deepseek给了一种超级简单的做法 我是真的想不到 贪心的思路是 局部最优——>全局最优 这种我是真的没有想到,这样的好处就是后面便利的时候可以通过foreach循环直接便利qu的子元素也就是对应的某一个区间, 将一个二维数组变成一维数组,每一个一维…

Qt事件处理(处理鼠标事件、键盘事件、定时器事件、窗口移动和大小变化事件)

事件处理 事件是应用程序内部或者外部产生的事情或者动作的统称。 在 Qt 中,事件是用一个对象来管理一个事件的。所有的事件对象都继承自抽象类 QEvent 。事件包括鼠标事件、键盘事件等,发出自 Qt 或操作系统本身。 处理事件一般通过重写相关的 Event 函…

Apache Hive:基于Hadoop的分布式数据仓库

Apache Hive 是一个基于 Apache Hadoop 构建的开源分布式数据仓库系统,支持使用 SQL 执行 PB 级大规模数据分析与查询。 主要功能 Apache Hive 提供的主要功能如下。 HiveServer2 HiveServer2 服务用于支持接收客户端连接和查询请求。 HiveServer2 支持多客户端…

利用 @eslint/eslintrc 实现 ESLint9的适配

深度解析:利用 eslint/eslintrc 实现 ESLint 的高效配置管理 在前端开发领域,代码质量和一致性是至关重要的。ESLint 作为一款流行的代码检查工具,帮助开发者发现代码中的潜在问题并保持代码风格的一致性。而随着项目的复杂度增加和团队规模…

cfca 申请国密证书流程

之前给某银行开发项目,需要用到cfca国密双证证书,证书类型为企业双证的作为接口加密的密钥。 因为是第一次对接,其中走了不少的弯路,现将申请的流程发布出来做下记录 1、需要找到cfca的相关人员进行测试证书的申请 2、大概1天的…

基于Spring Boot的乡村养老服务管理系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

数字孪生技术如何为制造业开辟新天地?

1. 数字孪生在制造业的崛起背景 1.1 数字孪生的概念演进 “数字孪生”(Digital Twin)一词最早由美国密歇根大学Michael Grieves博士在2002年提出,但当时并未称之为“数字孪生”,而是以“信息镜像模型”描述数字世界与物理世界的映射关系。直到2010年前后,美军、NASA等在…

学一个前端 UI 框架,要学些什么内容?

假如你现在要自学 React/Vue 框架,怎么学? 绝大部分同学可能是这样学的: 直接去看官方文档,或者是找一些视频看一遍,学会这个框架的一些基础语法,特性功能等等参考一些例子上手编写 demo,简单…

asp.net core mvc模块化开发

razor类库 新建PluginController using Microsoft.AspNetCore.Mvc;namespace RazorClassLibrary1.Controllers {public class PluginController : Controller{public IActionResult Index(){return View();}} }Views下Plugin下新建Index.cshtml {ViewBag.Title "插件页…

2024年MathorCup数学建模C题物流网络分拣中心货量预测及人员排班解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛 C题 物流网络分拣中心货量预测及人员排班 原题再现: 电商物流网络在订单履约中由多个环节组成,图1是一个简化的物流网络示意图。其中,分拣中心作为网络的中间环节,需要将包按照不同流…

鸿蒙Flutter开发故事:不,你不需要鸿蒙化

在华为牵头下,Flutter 鸿蒙化如火如荼进行,当第一次看到一份上百个插件的Excel 列表时,我也感到震惊,排名前 100 的插件赫然在列,这无疑是一次大规模的军团作战。 然后,参战团队鱼龙混杂,难免有…

Unity音频混合器如何暴露参数

音频混合器是Unity推荐管理音效混音的工具,那么如何使用代码对它进行管理呢? 首先我在AudioMixer的Master组中创建了BGM和SFX的分组,你也可以直接用Master没有问题。 这里我以BGM为例,如果要在代码中进行使用就需要将参数暴露出去…

Vue项目与云管平台Nginx部署笔记

Vue项目与云管平台Nginx部署笔记 一、项目架构说明 footAdmin云管前端 Vue2 Webpack 构建,部署路径:/usr/share/nginx/html/footAdmin 使用npm run build生成/dist目录,然后将dist目录下面的所有文件,上传到虚拟机/usr/share/n…

java常用数据转换

1. List与数组互转 ArrayList<String> list new ArrayList<>(); String[] array list.stream().toArray(String[]::new); String[] array1 {"apple", "banana", "orange"}; List<String> list1 Arrays.stre…

JAVA学习--java数组--打印稀疏数组和稀疏数组的还原

1.题目描述 2.代码实现 打印二维数组 public class test04 {public static void main(String args[]){//1.创建一个二维数组11*11&#xff0c;0代表没有棋子&#xff0c;1代表黑&#xff0c;2代表白棋int[][] array1new int[11][11];array1[1][2]1;array1[2][3]2;//输出原…

Java 标准注解(内置注解+元注解)的详细说明及使用场景

以下是 Java 标准注解&#xff08;内置注解&#xff09;的详细说明及使用场景&#xff1a; 1. 核心标准注解 (1) Override 用途&#xff1a;标记一个方法覆盖父类的方法或实现接口的抽象方法。约束&#xff1a; 若方法未正确覆盖/实现&#xff0c;编译器会报错。不能用于字段…

使用Python调用Jenkins Api之获取构建日志使用说明文档

简介 通过 Python 脚本自动化获取 Jenkins 构建日志&#xff0c;可以实现日志分析、错误监控、报告生成等功能。本文档将介绍以下方法&#xff1a; Python-Jenkins 库&#xff1a;官方推荐的 Python 客户端库 日志分页与流式处理&#xff1a;应对大日志文件场景 准备工作 …

Day20-前端Web案例——部门管理

目录 部门管理1. 前后端分离开发2. 准备工作2.1 创建Vue项目2.2 安装依赖2.3 精简项目 3. 页面布局3.1 介绍3.2 整体布局3.3 左侧菜单 4. Vue Router4.1 介绍4.2 入门4.3 案例4.4 首页制作 5. 部门管理5.1部门列表5.1.1. 基本布局5.1.2 加载数据5.1.3 程序优化 5.2 新增部门5.3…

Android java 设计封装增强型WebView组件

Android java 设计封装增强型WebView组件&#xff08;兼容Android 4.4&#xff09; * 特性&#xff1a; * 1. 全生命周期管理 * 2. 智能硬件加速 * 3. 链式配置API * 4. 安全下载管理 * 5. 全屏视频支持 public class EnhancedWebView extends WebView {private CustomWebChrom…