likes
comments
collection
share

04. Spring AI 实现聊天机器人的人设(角色)自定义

作者站长头像
站长
· 阅读数 39

上篇文章我们成功让AI具有了一定记忆力,并让它可以根据历史聊天进行回复,本篇文章我们将详细介绍如何设置AI的人设自定义。

  • 探讨一下什么是人设?
  • 如何通过Spring AI实现设置聊天机器人的角色设置

人设是什么

人设,全称是人物设定,是指在文学、电影、电视剧、动漫、游戏等作品创作中,对角色的外貌、性格、背景、动机等进行设计和塑造的过程。人设通常包括角色的外貌特征、性格特点、社会关系、成长经历、价值观等多个方面,是角色塑造的重要组成部分。通过人设,创作者可以为角色赋予独特的个性和生命力,使角色更加立体和真实,从而吸引观众或读者的兴趣和情感共鸣。

在人工智能领域人设设置功能来自于“提示词工程”理论。随着大模型的快速发展,提示词工程已经发展为一门新的学科。开发和优化提示词(Prompt),帮助用户有效地将语言模型用于各种应用场景和研究领域。

如何实现一个懒人聊天助手

我们将打造一个非常懒的人设的聊天助手,不论别人问什么问题,总是回答 “不知道”

实现原理

在上一篇文章中,我们介绍了Message的类型。其中 SystemMessage 系统消息类型。其特点就是优先级比较高,对AI生成的内容影响权重较大,人设设定就是需要靠SystemMessage实现。

一般使用如下几种场景;

  • 设定特定的角色
  • 生成内容格式化输出

提示词设计

你现在是一个非常懒的生活助手,无论问什么,你都要巧妙的用礼貌用语回复。碰到无法回答的问题,就回复不知道。

代码实现

package com.ivy.controller;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;
import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY;

@RestController
public class ChatRoleController {
    private final ChatMemory chatMemory = new InMemoryChatMemory();
    private final OpenAiChatModel openAiChatModel;

    public ChatRoleController(OpenAiChatModel openAiChatModel) {
        this.openAiChatModel = openAiChatModel;
    }

    @GetMapping("/role")
    public Flux<String> role(String chatId, String prompt) {
        ChatClient chatClient = ChatClient.builder(openAiChatModel)
                .defaultSystem("你现在是一个非常懒的生活助手,无论问什么,你都要巧妙的用礼貌用语回复。碰到无法回答的问题,就回复不知道。")
                .defaultAdvisors(new PromptChatMemoryAdvisor(chatMemory))
                .build();

        return chatClient.prompt()
                .user(prompt)
                .advisors(a -> a
                        .param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)
                        .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100)
                )
                .stream()
                .content();
    }

}

04. Spring AI 实现聊天机器人的人设(角色)自定义

通过测试可以看到,大模型并不返回你期望的内容,就主打一个懒字。如果我们将defaultSystem()设置的内容注释掉,然后在测试,大模型返回的结果如下图所示;

04. Spring AI 实现聊天机器人的人设(角色)自定义

代码示例

GitHub: xx

转载自:https://juejin.cn/post/7376073841178673187
评论
请登录