【Prompt提示词】

摘要:

本文简单了SpringAI框架中的提示词Prompt,提示词是与AI模型交互的核心组件,其设计直接影响模型输出质量。消息分为User、System、Assistant和Tool四种角色,分别对应不同交互场景。高效提示词应包含清晰指令、上下文、用户输入和输出格式要求。框架支持通过占位符实现动态数据替换。Token是模型处理文本的基础单元,其数量限制和计费方式对应用开发至关重要。开发者需合理控制Token使用量以优化成本和性能。

Spring官方定义 :

提示词是引导 AI 模型生成特定输出的输入,其设计和措辞显著影响模型响应。

在 Spring AI 与 AI 模型的基础交互层中,提示词的处理方式类似于 Spring MVC 中的 "View" 管理,即创建包含动态内容占位符的扩展文本,随后根据用户请求或应用代码替换这些占位符。另一种类比是包含表达式占位符的 SQL 语句。

一,角色(Role)

1,定义

每条消息被分配特定角色,这些角色对消息进行分类,向 AI 模型阐明提示每个片段的上下文和目的。这种结构化方法通过让提示的每个部分在交互中扮演明确角色,增强了与 AI 沟通的精细度和有效性。

2,User角色(用户提示词)

代表用户的输入 --- 包括问题、命令或对 AI 的陈述。该角色构成 AI 响应的基础,具有根本重要性。

java 复制代码
    public Flux<String> service(String prompt){
        return serviceChatClient
                .prompt()
                .user(prompt)// 传入user提示词
                .stream()
                .content();
    }

3,System角色(系统提示词)

指导 AI 的行为和响应风格,设定 AI 解释和回复输入的参数或规则,类似于在开始对话前向 AI 提供指令。

(1)默认的系统提示词(全局)

java 复制代码
    @Bean
    public ChatClient gameChatClient(OpenAiChatModel model, ChatMemory chatMemory) {
        return ChatClient
                .builder(model)
                .defaultSystem(SystemConstants.GAME_SYSTEM_PROMPT)
                .defaultAdvisors(
                        new SimpleLoggerAdvisor(),
                        new MessageChatMemoryAdvisor(chatMemory)
                )
                .build();
    }

(2)会话的系统提示词(当前会话)

java 复制代码
    public Flux<String> service(String prompt){
        return serviceChatClient
                .prompt()
                .user(prompt)// 传入user提示词
                .system("system prompt") // 会话系统提示词
                .stream()
                .content();
    }

4,Assistant 角色

AI 对用户输入的响应,不仅是答案或反应,更对维持对话流至关重要。通过追踪 AI 之前的响应(其 "Assistant Role" 消息),系统确保连贯且上下文相关的交互。

助手消息也可能包含函数工具调用请求信息 --- 这是 AI 的特殊功能,在需要时执行计算、获取数据等超越对话的特定任务。

5,Tool/Function 角色

专注于响应工具调用类助手消息,返回附加信息,本质就是Tool Calling 工具调用,对自定义的函数进行响应。

java 复制代码
    @Bean
    public ChatClient serviceChatClient(
            AlibabaOpenAiChatModel model,
            ChatMemory chatMemory,
            CourseTools courseTools) {
        return ChatClient.builder(model)
                .defaultSystem("系统提示词")
                .defaultAdvisors(
                        new MessageChatMemoryAdvisor(chatMemory),
                        new SimpleLoggerAdvisor())
                .defaultTools(courseTools)  // 自定义的Tools
                .build();
    }

二,提示词工程

在生成式 AI 中,提示词创建是开发者的关键任务。这些提示词的质量和结构显著影响 AI 输出的有效性。投入时间精心设计提示词可大幅提升 AI 生成结果。

1,创建高效提示词

(1)指令:向 AI 提供清晰直接的指示,类似于与人沟通的方式。这种明确性对帮助AI "理解" 预期目标至关重要。

(2)外部上下文:必要时包含相关背景信息或对 AI 响应的具体指导。这种 "外部上下文" 构建了提示框架,帮助 AI 理解整体场景。

(3)用户输入:这是直接部分 --- 用户构成提示核心的明确请求或问题。

(4)输出指示器:它需要指定 AI 响应的期望格式(如 JSON),但需注意 AI 可能不会严格遵循该格式。例如,它可能在实际 JSON 数据前添加 "这是您的JSON" 等短语,或有时生成不准确的类 JSON 结构(不建议)。

java 复制代码
你是房屋租赁平台的智能客服"小居",负责为用户提供租房全流程的贴心服务。
你的核心职责是用和蔼亲和的语气,自然流畅地解答用户租房相关问题,让用户感受到专业又温暖的支持。

面对用户咨询时,需主动理解需求:若用户找房,需询问预算、户型、位置等关键信息并精准匹配;
若涉及签约流程,需清晰说明合同条款、押金规则、租期要求等细节;
若反馈房屋问题,要耐心记录故障情况并指引报修流程。
交流中多用生活化表达,避免生硬术语,适时使用语气词(如"呀""呢")增强亲切感。当用户情绪焦虑时,先安抚情绪再解决问题;对不确定的信息,明确告知"我帮你确认后回复"或转接人工,不随意承诺。
始终以"帮用户轻松租房"为目标,让每一次互动都高效又暖心~ 🏠

要求:在涉及增删改(除了查询)的function-call前,必须等用户回复"确认"后再调用tool,全程用中文与用户交流

2,提示词数据替换

(1)提示词中有需要在代码中替换的数据,如:今天的日期,使用占位符{}

java 复制代码
今天的日期是 {current_date}

(2)在请求模型时通过.system()的param语句替换

java 复制代码
    @GetMapping(value = "/chat", produces = "text/html;charset=UTF-8")
    public Flux<String> chat(String prompt) {
        //请求模型
        return chatClient.prompt()
                .user(prompt)
                .system(p->p.param("current_date", LocalDate.now()))
                .stream()
                .content();
    }

三,模型Token

Token 是 AI 模型处理文本的关键要素,作为桥梁将人类理解的单词转换为模型可处理的格式。该转换分两阶段进行:输入时单词转为 Token,输出时 Token 再转回单词。

1,Token化

(1)Token 化(将文本分解为 Token 的过程)是 AI 模型理解和处理语言的基础。模型通过这种 Token 化格式来理解并响应提示词。

(2)理解 Token,可将其视为单词的组成部分。通常一个 Token 相当于单词的约四分之三,例如莎士比亚全集约 90 万单词,会转换为约 120 万Token。

2,模型Token限制

(1)计费:AI 模型服务通常按 Token 使用量计费。输入(提示词)和输出(响应)均计入总 Token 数,因此更短的提示词更具成本效益。

(2)模型限制:不同 AI 模型拥有不同的 Token 限制,即其 "上下文窗口" --- 单次可处理的最大信息量。例 如GPT-3 限制为 4K Token。

(3)上下文窗口:模型的 Token 限制决定了其上下文窗口大小。超过该限制的输入不会被处理。关键在于仅发送最小必要有效信息集。

(4)响应元数据:AI 模型响应的元数据包含使用的 Token 数,这是管理使用量和成本的关键信息。