Spring Ai Prompts

Spring Ai Prompts

本文将简述什么是Prompts、Prompts的类型、如何在代码中使用Prompts以及提示词常规公式模板。

什么是Prompts

Prompts翻译过来就是提示词的意思。提示词一般是输入的用于指导AI 大模型生成什么样的内容返回给使用者。提示词设置越详情,AI就更能生成符合要求的内容。

提示词的类型

提示词的类型Spring Ai有以下几种:

System Role:系统角色,一般用于指定AI的角色和回答问题的格式和注意要点。角色模拟可以提高专业权威性。比如指定"你是一个专业的法律顾问,解答法律问题"。

User Role:用户角色,一般是用户输入的问题、指令,传递给Ai的内容。"被公司恶意起诉了应该怎么办?"

Assistant Role:这种类型是ai 对用户的响应。

Tool/Function Role:工具调用角色关注的是通过工具调用系统返回的信息。

Spring AI提供了一个枚举类:

复制代码
public enum MessageType {

	USER("user"),

	ASSISTANT("assistant"),

	SYSTEM("system"),

	TOOL("tool");

    ...
}

Prompts 的使用

1.defaultSystem

复制代码
    ChatClient client = ChatClient.builder(deepSeekChatModel).
                defaultSystem("""
                #角色说明
                你是一名专业的法律顾问AI....
                #回复格式
                你好,我是您的法律AI助手,有任何问题可以咨询我!
                1.问题分析
                2.相关依据
                3.梳理和建议
                **特别注意:**
                - 不承担律师责任。
                - 不生成涉及敏感、虚假内容。
                """)
                .build();
        String content = client.prompt("因公司拖欠工资要求赔偿,被公司恶意起诉了应该怎么办?")
                .call().content();
        System.out.println(content);

AI回复:

你好,我是您的法律AI助手,针对您的问题分析如下:

  1. 问题分析:
  • 您因公司拖欠工资提出赔偿要求
  • 公司反而对您提起了恶意诉讼
  • 这种情况可能涉及劳动纠纷和恶意诉讼问题
  1. 相关法律依据:

    《劳动合同法》第85条规定,用人单位未及时足额支付劳动报酬的,劳动者可以依法要求赔偿。

  2. 梳理和建议:

  1. 收集证据:保留工资条、劳动合同、催讨记录等证明拖欠工资的证据
  2. 应诉准备:针对公司的诉讼准备好答辩材料
  3. 反诉考虑:可以就拖欠工资问题提起反诉
  4. 法律援助:建议咨询当地劳动仲裁委员会或聘请专业律师
  5. 维权途径:同时可以向劳动监察部门投诉

请注意:

  • 诉讼时效一般为1年
  • 劳动仲裁是前置程序
  • 恶意诉讼可能涉及公司承担相应责任

建议您尽快采取法律行动维护自身权益,但具体策略需要根据实际情况制定。

2.defaultSystem 设置使用者信息

在defaultSystem可以使用{参数名},在调用时system使用lamda表达式链式设置参数
.system(p -> p.param("name", "李勇").param("age","48"))

可以做很多根据年龄、性别推荐的内容,比如根据年龄推荐书籍、电影等

复制代码
     ChatClient client = ChatClient.builder(deepSeekChatModel).
                defaultSystem("""
                #角色说明
                你是一名专业的法律顾问AI....
                #回复格式
                你好,我是您的法律AI助手,有任何问题可以咨询我!
                1.问题分析
                2.相关一句
                3.梳理和建议
                 当前服务的用户:
                   姓名:{name},年龄:{age},
                **特别注意:**
                - 不承担律师责任。
                - 不生成涉及敏感、虚假内容。
                """)


          //  defaultSystem(resource)
                .build();
        String content = client.prompt("因公司拖欠工资要求赔偿,被公司恶意起诉了应该怎么办?")
               .system(p -> p.param("name", "李勇").param("age","48"))
                .call().content();
        System.out.println(content);

AI回复:

你好,李勇先生。关于您被公司恶意起诉的问题,我为您分析如下:

  1. 问题分析
  • 您因公司拖欠工资提出赔偿要求是合法诉求
  • 公司反诉您可能存在恶意诉讼的嫌疑
  • 需要区分是正常诉讼维权还是恶意诉讼
  1. 相关法律依据

    根据《劳动合同法》第85条,用人单位拖欠劳动报酬的,劳动者可以依法要求赔偿。

  2. 梳理和建议

    (1) 收集证据

  • 保存工资拖欠的证明(工资条、银行流水等)
  • 保存您主张权利的证据(投诉记录等)
  • 收集公司起诉您的相关材料

(2) 应对措施

  • 及时应诉,不要缺席
  • 可以提出反诉,要求公司支付拖欠工资
  • 如能证明公司恶意诉讼,可要求赔偿损失

(3) 建议行动

  • 尽快咨询专业劳动法律师
  • 向当地劳动监察部门投诉
  • 考虑申请法律援助

建议您尽快采取法律行动维护自身权益,48岁的年龄更需要及时解决此类纠纷。

3.PromptTemplate

使用new PromptTemplate定义提示词模板,promptTemplate.create创建Prompt 对象,
Map.of("adjective", adjective)使用Map.of设置参数

复制代码
PromptTemplate promptTemplate = new PromptTemplate("Tell me a {adjective} joke about {topic}");

Prompt prompt = promptTemplate.create(Map.of("adjective", adjective, "topic", topic));

return chatModel.call(prompt).getResult();

4.使用Prompt文件

先定义一个prompt.st文件,文件内容如下:

复制代码
  #角色设置
  你是一个电影资深推荐员,根据用户年龄和性别推荐电影
  #注意事项
  如果是年龄比较小,不要推荐血腥、暴力类型的电影
  使用用户:
  姓名:{name},年龄:{age}

代码中使用prompt.st作为Resource

复制代码
 @Test
    public void testSystemPrompt(@Value("classpath:/files/prompt.st") Resource resource){
        ChatClient client = ChatClient.builder(deepSeekChatModel).
          defaultSystem(resource)
                .build();
        String content = client.prompt("推荐几部适合这个年龄的电影")
               .system(p -> p.param("name", "李勇").param("age","48"))
                .call().content();
        System.out.println(content);
        }

AI回复内容:

根据您的年龄(48岁),我为您推荐以下几部适合成熟观众、兼具深度与娱乐性的电影:

  1. 《肖申克的救赎》(1994)
  • 经典励志剧情片,讲述银行家安迪在监狱中的智慧与坚持
  • 探讨希望、自由与人性,豆瓣评分9.7
  1. 《教父》系列(1972-1990)
  • 黑帮史诗级作品,展现家族、权力与责任的深刻主题
  • 马龙·白兰度、阿尔·帕西诺的殿堂级表演
  1. 《阿甘正传》(1994)
  • 温暖人心的美国近代史寓言
  • 通过智障者阿甘的视角展现时代变迁
  1. 《绿皮书》(2018)
  • 真实故事改编的种族友谊之旅
  • 幽默与感动并存,获第91届奥斯卡最佳影片
  1. 《闻香识女人》(1992)
  • 阿尔·帕西诺的奥斯卡封帝之作
  • 关于尊严、原则与人生选择的深刻探讨
  1. 《海边的曼彻斯特》(2016)
  • 冷静克制的治愈系电影
  • 讲述中年男子如何面对生活创伤

这些电影都具有:

  • 深刻的人生哲理
  • 精湛的演员表演
  • 经得起时间考验的剧本质量
  • 适合成熟观众的审美层次

您对哪类题材更感兴趣?我可以根据您的偏好进一步推荐。比如历史传记、商战题材或家庭伦理类都有很多佳作。

提示词公式

1.通用公式

任务目标\]+\[背景信息\]+\[具体要求\]+\[输出约束

例如:

撰写一份2025年的就业报告(任务目标),面向所有待就业群体包括应届毕业生和社会人士(背景),需要包含各行业就业率、收入水平、性别比例、年龄范围(具体要求)。要求3000字左右,需要数据支撑,不涉及违法违规行业,注意用语(约束条件)

2.特定角色类

角色】+\[主题\]+\[风格\]+\[细节】 例如:你是一个有15年经验特级厨师,主要擅长的菜品是鲁菜和粤菜(角色),负责解答菜品制作方式(主题),采用年轻人比较好接受的语言风格(风格)。回复格式如下: 1.材料准备 2.制作步骤 3.注意事项 注意不要说少许,适量!(细节) 总结来说就是:是什么角色?可以做什么?采用什么风格?达到什么目的? 3.视觉设计类 \[主体\]+\[场景设定\]+\[艺术风格\]+\[技术参数

例如:

两只小猫,在花园里追蝴蝶,动画风格,4K分辨率+景深效果

4.复杂任务类

复杂任务需要给出具体的步骤。

如下:

请根据以下步骤给出房屋装修的方案,房屋的面积是104平:1.欧式风格装修,材料花费2.家具电器采购推荐3.室内网线电线走线

以上就是提示词的所有内容,更多详情见官网 Prompt提示词