Spring AI (三) 提示词对象Prompt

news2024/11/24 11:25:16

3.提示词对象Prompt

3.1.Prompt

Prompt类的作用是创建结构化提示词, 实现了ModelRequest<List<Message>>接口

  • Prompt(String contents):创建一个包含指定内容的Prompt对象。

  • Prompt(String contents, ChatOptions modelOptions):创建一个包含指定内容和模型选项的Prompt对象。

  • Prompt(List<Message> messages):创建一个包含指定消息列表的Prompt对象。

  • Prompt(List<Message> messages, ChatOptions modelOptions):创建一个包含指定消息列表和模型选项的Prompt对象。

  • Prompt(Message message):创建一个包含指定消息的Prompt对象。

  • Prompt(Message message, ChatOptions modelOptions):创建一个包含指定消息和模型选项的Prompt对象。

代码实例

    @GetMapping("/chat/completion")
    public String completion(
            @RequestParam(value = "message", defaultValue = "中国的首都是哪里?")
            String message
    ) {
        // 创建用户消息对象,封装外部传入的消息内容
        UserMessage msg = new UserMessage(message);

        // 根据用户消息创建提示对象,为对话提供上下文
        Prompt prompt = new Prompt(msg);

        // 调用聊天客户端的呼叫方法,传入提示对象,发起对话请求
        ChatResponse call = chatClient.call(prompt);

        // 从对话响应中获取生成结果,即机器人的回答内容
        Generation result = call.getResult();

        // 从生成结果中提取输出消息,为最终展示给用户的消息内容
        AssistantMessage output = result.getOutput();

        // 提取输出消息的内容,准备进行后续处理或展示
        String content = output.getContent();

        return content;
    }

测试

###
GET http://localhost:8080/chat/simpleChat?message=什么是AI

3.2.模板PromptTemplate

PromptTemplate类的作用是创建结构化提示词,它是Spring AI提示词工程中的关键组件。该类实现了三个接口,

分别是PromptTemplateStringActionsPromptTemplateActionsPromptTemplateMessageActions,这些接口的主要功能如下:

在这里插入图片描述

  • PromptTemplateStringActions:主要用于创建和渲染提示词字符串,接口的返回值类型均是String类型,这是提示词的基本形式。
  • PromptTemplateActions:主要用于创建Prompt对象,该对象可直接传递给ChatClient以生成响应。
  • PromptTemplateMessageActions:主要用于创建Message对象,这允许针对Message对象进行其他的相关操作。

代码实现

    @GetMapping("/chat/forTemplates")
    public String forTemplates(
            @RequestParam(value = "message", defaultValue = "中国")
            String message
    ) {

//        PromptTemplate promptTemplate = new PromptTemplate( "{message}的首都是哪里?." );
//        Prompt prompt = promptTemplate.create(Map.of("message", message ));
        PromptTemplate promptTemplate = new PromptTemplate("{message}的首都是哪里?.", Map.of("message", message));
        Prompt prompt = promptTemplate.create();


        return chatClient.call(prompt).getResult().getOutput().getContent();

    }

测试

###
GET http://localhost:8080/chat/forTemplates?message=美国

3.3.通过Resource构造PromptTemplate

我们除了可以通过定义String字符串加载Template以外,我们还可以以Resource的形式加载Template,

.ts Resource文件

在 resouces下创建 prompts/code.st (文件后缀名合理即可)

使用 {language} 编写一段实现 {description} 的程序。

代码实现

    @Value("classpath:prompts/code.st")
    private Resource codeTemplate;


    @GetMapping("/chat/forTemplatesByResource")
    public String forTemplatesByResource(@RequestParam String description, @RequestParam String language) {

        PromptTemplate promptTemplate = new PromptTemplate(codeTemplate);
        Prompt prompt = promptTemplate.create(
                Map.of("description", description, "language", language)
        );
        return chatClient.call(prompt).getResult().getOutput().getContent();
    }

测试

###
GET http://localhost:8080/chat/forTemplatesByResource?description=冒泡排序&language=java

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

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

相关文章

Github 2024-07-26 Java开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9HTML项目1TypeScript项目1非开发语言项目1JavaGuide - Java 程序员学习和面试指南 创建周期:2118 天开发语言:Java协议类型:Apache…

【C++】初识C++基础篇·一(命名空间,函数重载,缺省参数,引用);

文章目录 前言1.输入与输出输出输入cin和scanf的对比 2.命名空间2.1namespace存在的意义2.2namespace的使用3.缺省参数4.函数重载重载函数的调用规则 5.引用 前言 我们先通过一段简单的代码来拉开C的序幕&#xff1b; //text.cpp #include<iostream> #include<stdio…

C++知识点总结:3.C++引用(自用)

C引用 1. 引用定义2. 引用的本质3. 引用和指针的不同之处补充指针常量和常量指针 4. 引用不能指代临时变量5. const引用&#xff08;常引用&#xff09;可以绑定临时数据6. const引用与转换类型 引用&#xff1a; [1]C语言中文网 [2]偶尔e网事,【C基础之二】常量指针和指针常量…

学习记录:ESP32控制舵机 FREERTOS BLE

控制舵机 PWM信号 PWM信号是一种周期性变化的方波信号&#xff0c;它有两个关键参数&#xff1a; 周期&#xff08;Period&#xff09;&#xff1a;一个完整的PWM信号的时间长度&#xff0c;通常用秒&#xff08;s&#xff09;或毫秒&#xff08;ms&#xff09;表示。占空比…

MQ消息队列+Lua 脚本实现异步处理下单流程

具体实现和代码可参考我以前做过的笔记&#xff1a;《黑马点评》异步秒杀优化|消息队列 回顾一下下单流程&#xff1a; 用户发起请求 会先请求Nginx,Nginx反向代理到Tomcat&#xff0c;而Tomcat中的程序&#xff0c;会进行串行工作&#xff0c; 分为以下几个操作&#xff1…

昇思25天学习打卡营第25天|基于 MindSpore 实现 BERT 对话情绪识别

基于 MindSpore 实现 BERT 对话情绪识别 模型概述 BERT&#xff08;双向编码器表征量&#xff09;是Google于2018年发布的一种先进语言模型&#xff0c;基于Transformer架构&#xff0c;具备双向上下文理解功能。BERT的预训练方法创新性地结合了两种任务&#xff1a; Masked …

高级网页爬虫开发:Scrapy和BeautifulSoup的深度整合

引言 在互联网时代&#xff0c;数据的价值日益凸显。网页爬虫作为一种自动化获取网页内容的工具&#xff0c;广泛应用于数据挖掘、市场分析、内容聚合等领域。Scrapy是一个强大的网页爬虫框架&#xff0c;而BeautifulSoup则是一个灵活的HTML和XML文档解析库。本文将探讨如何将…

凸优化笔记-基本概念

原文 文章目录 最小二乘问题 仿射affine hullaffine dimension 凸集锥集超平面和半空间单纯形整半定锥保凸性的操作透视函数 凸函数的条件1阶判定条件2阶判定条件 Epigraph 外图 m i n i m i z e f 0 ( x ) minimize\ \ \ f_0(x) minimize f0​(x) s u b j e c t t o f i ( …

Python 爬虫入门(一):从零开始学爬虫 「详细介绍」

Python 爬虫入门&#xff08;一&#xff09;&#xff1a;从零开始学爬虫 「详细介绍」 前言1.爬虫概念1.1 什么是爬虫&#xff1f;1.2 爬虫的工作原理 2. HTTP 简述2.1 什么是 HTTP&#xff1f;2.2 HTTP 请求2.3 HTTP 响应2.4 常见的 HTTP 方法 3. 网页的组成3.1 HTML3.1.1 HTM…

Debug下载与安装(Windows11)

前言 在安装配置前我们先下载一下我们需要用的文件 下载debug 百度网盘下载 下载DOSBox DOSBox 两个文件下载好后我们就开始安装和配置了 第一步&#xff1a;安装DOSBox 第二步&#xff1a;安装好后找到安装路径找到Options.bat文件并打开 第三步&#xff1a;在文件最下…

图片变色,背景方向渐变web

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>图片变色</title> <script src"03.JS\3.8JS案例加强\JQuery.js"></script> <style> .image-filter…

nvm 安装和遇到的问题

环境 win 11 安装 下载安装包 访问 https://github.com/coreybutler/nvm-windows/releases 选择需要的版本继续下载安装基本是可以下一步下一步的啦&#x1f92d; 安装 node 我这里需要16.x.x的node&#xff0c;执行以下命令 nvm install 16使用 node nvm use 16问题 …

苹果CMS V10萌芽采集插件Pro v10.7.3

苹果CMS V10萌芽采集插件Pro v10.7.3 插件下载:萌芽采集插件Pro v10.7.3.zip 使用说明: 将addons文件和static文件放到你苹果cms程序的根目录并覆盖&#xff0c; 在登录后台在应用-应用市场启用。http://你的域名/admin.php/admin/mycj/union.html

卷积的意义及其派生(一)

1.卷积的意义 1.1从LTI的角度看 卷积最开始其实是信号处理中用来描述线性移不变系统Linear time-invariant systems的。线性&#xff0c;表明可以叠加&#xff0c;信号可以拆分成脉冲的响应&#xff1b;时不变&#xff0c;指信号不随着时间的迁移改变&#xff0c;意味着能量守…

计算机网络(Wrong Question)

一、计算机网络体系结构 1.1 计算机网络概述 D 注&#xff1a;计算机的三大主要功能是数据通信、资源共享、分布式处理。&#xff08;负载均衡、提高可靠性&#xff09; 注&#xff1a;几段链路就是几段流水。 C 注&#xff1a;记住一个基本计算公式&#xff1a;若n个分组&a…

C语言程序设计(二)

四.找素数 素数&#xff1a;除了1和它本身不再有其他因数的自然数。换句话说&#xff1a;一个大于1的自然数 &#xff0c;如果只能被1和它本身整除&#xff0c;那就是素数&#xff08;质数&#xff09;。 在打印中遇到的问题就是&#xff0c;知道怎么写却总是运行不起来。主要…

苦学Opencv的第十一天:图像的形态学操作

Python OpenCV从入门到精通学习日记&#xff1a;图像的形态学操作 前言 图像形态学是图像处理中的一个重要分支&#xff0c;主要关注图像中物体的形状和结构。通过形态学操作&#xff0c;我们可以对图像进行有效的分析和处理&#xff0c;例如图像的腐蚀与膨胀、开运算与闭运算…

Java 并发编程:一文了解 Java 内存模型(处理器优化、指令重排序与内存屏障的深层解析)

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 022 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

VIN解析汽车详情|阿里云实现调用API接口

介绍&#xff1a; 本次解析通过阿里云云市场的云服务来实现通过17位车架号来自动识别车型的详细信息&#xff0c;首先需要准备选择一家可以提供查询的商品。 https://market.aliyun.com/apimarket/detail/cmapi00065864#skuyuncode5986400001 步骤1: 选择商品 如图点击免费…

【微软蓝屏】微软Windows蓝屏问题汇总与应对解决策略

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…