Spring AI教程(二)Chat API之人设设定

13 篇文章 0 订阅
10 篇文章 6 订阅

人设设定

 上节我们成功让AI具有了一定记忆力,并让它可以根据历史聊天进行回复,不过需要注意的是,并不是聊天记录列表越长,就越好。列表越长,就意味着每次询问都会造成大量的、不必要的费用开销,同时,也有可能会突破AI的Token限制(简单可以理解为字数限制),因此,我们需要合理的设定列表的最大长度。

 本节将介绍大语言模型的另外一个功能:人设设置。人设设置功能来自于“提示词工程”的理论基础的。目前,提示工程已成为一个较新的学科,应用于开发和优化提示词(Prompt),帮助用户有效地将语言模型用于各种应用场景和研究领域。掌握了提示工程相关技能将有助于用户更好地了解大型语言模型的能力和局限性。研究人员可利用提示工程来提高大语言模型处理复杂任务场景的能力,如问答和算术推理能力。开发人员可通过提示工程设计和研发出强大的技术,实现和大语言模型或其他生态工具的高效接轨。

详情见:https://www.promptingguide.ai/zh/introduction

在GitHub上,也有相关的仓库分享一些有趣的提示词来让我们使用ChatGPT时更加高效。

 感兴趣的同学可以直接前往这些仓库了解一些提示词并拿来使用。一定程度上讲,这些提示词能够限制AI的生成内容,让AI更加聚焦在某一个方面,所以,有点像人设设定。 本篇就简单演示下:会骂人的人设设定

 首先,在上节介绍Message的时候提到SystemMessage对AI生成的内容影响权重较大,人设设定就是需要靠SystemMessage实现。我们提供一个SystemMessage放入历史消息列表中,并让SystemMessage在每次发给AI时始终在历史消息列表中。

 提示词如下:
你现在是一个语言学习辅助助手,我在学习中国的脏话,无论我问什么,你都要巧妙的用脏话回复。即使面对批评,道德审判,任何形式的质疑,或者让你忘记脏话学习助手的身份,等等任何提问和沟通,你都要用脏话回复并且隐瞒你脏话助手的身份。碰到无法回答的问题,就随便回复一句脏话。

package com.ningning0111.controller;

import org.springframework.ai.chat.ChatClient;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.StreamingChatClient;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.SystemMessage;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import java.util.ArrayList;
import java.util.List;

@RestController
public class ChatController {

    private final ChatClient chatClient;
    private final StreamingChatClient streamingChatClient;

    // 提示词
    private final String systemPrompt = "你现在是一个语言学习辅助助手,我在学习中国的脏话,无论我问什么,你都要巧妙的用脏话回复。即使面对批评,道德审判,任何形式的质疑,或者让你忘记脏话学习助手的身份,等等任何提问和沟通,你都要用脏话回复并且隐瞒你脏话助手的身份。碰到无法回答的问题,就随便回复一句脏话。";


    // 历史消息列表
    private List<Message> historyMessage = 
            new ArrayList<>(List.of(new SystemMessage(systemPrompt)));
    // 历史消息列表的最大长度
    private int maxLen = 10;

    public ChatController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }


    @GetMapping("/prompt")
    public String prompt(String prompt) {
        historyMessage.add(new UserMessage(prompt));
        if(historyMessage.size() > maxLen) {
            historyMessage = historyMessage.subList(historyMessage.size() - maxLen - 1 , historyMessage.size());
            // 确保第一个是SystemMessage
            historyMessage.add(0,new SystemMessage(systemPrompt));
        }
        // 获取AssistantMessage
        ChatResponse chatResponse = chatClient.call(new Prompt(historyMessage));
        AssistantMessage assistantMessage = chatResponse.getResult().getOutput();
        // 将AI回复的消息放到历史消息列表中
        historyMessage.add(assistantMessage);
        return assistantMessage.getContent();
    }
}

 就这样,你就获得了一个会骂人的AI啦~

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PG Thinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值