前言

提示:本文适用于新手观看,快速上手langchain:

本文主要介绍通过提示词模版,如何接收输入,并组装提示词


一、概念同步

一个应用的通俗概念: 一个应用与用户的交互,就是接收用户的信息输入,交由应用处理后,返回结果给客户展示

用户输入
应用/黑盒
输出

上篇文章03.AI应用搭建–初识langchain框架中,我们将AI、用户的对话文本固定后,交由大模型进行输出。
这种固定输入的方法明显无法服务实际业务场景,故本文引入提示词模版解决这个问题

二、认识提示词模版PromptTemplate、ChatPromptTemplate

1.PromptTemplate介绍

PromptTemplate主要用于创建具有占位符的提示词,将用户输入放入占位符即可生成最终要用的提示词。

举个列子:

prompt_promptTemplate = PromptTemplate(
    # 声明模板中使用的变量
    input_variables=["xingge"],  
    # 模板字符串。若模版内有多个占位变量,则input_variables也需要添加多个变量,如:["xingge","年龄"]
    template="我是一个{xingge}的人,生成一段100字内的夸奖文本。"  
)

该例子中:
template:为模版内容
input_variables:为输入变量列表。其中的值需要确保与template中的占位变量的名称一致

2.ChatPromptTemplate的介绍

ChatPromptTemplate主要用于创建具有角色的占位符的提示词,除了重构用户的提示词,还能对ai添加设定,让其输出不同内容。

举个列子:

prompt_chatPromptTemplate = ChatPromptTemplate.from_messages([
    ('system', '你是一个问答机器人,会生产与用户提问{shezhi}的答案'),
    ('human', '我是一个很{xingge}的人,请对夸奖我,要求使用3个以上的成语')
])

该例子中:
system、human:分别代表AI和用户。使用ai、user也行但是为了避开python的关键字,所以一般这么写
shezhi、xingge:为需要用户输入的变量列表。分别接收不同的内容

三、PromptTemplate、ChatPromptTemplate的使用

请提前导入PromptTemplate 国内镜像地址:

pip3 install langchain_core -i https://pypi.tuna.tsinghua.edu.cn/simple

1.代码:

import os
# 引入chatopenai,用于使用外部大模型(如deepseek、通义千问模型)
from langchain_openai import ChatOpenAI
# 引用PromptTemplate进行提示词模版化(本质上就是:将用户输入的值填入模版中对应的占位符,形成完成的提示词)
from langchain_core .prompts import PromptTemplate,ChatPromptTemplate

#大模型的api key、模型、base_url
MODULE_API_KEY=os.getenv("DASHSCOPE_API_KEY")
MODULE_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
MODULE_NAME="qwen-plus"

#1、使用PromptTemplate创建个模版
template= '我是一个很{xingge}的人,请对我进行夸奖,要求使用3个以上的成语'
#使用PromptTemplate创建个模版
prompts=PromptTemplate(input_variables=['xingge'],template=template)

print(prompts.format(xingge='开朗'))

#使用ChatPromptTemplate创建个模版
messages2 = [
    ('system', '你是一个问答机器人,会生产与用户提问{shezhi}的答案'),
    ('human', '我是一个很{xingge}的人,请对夸奖我,要求使用3个以上的成语')
]
prompts2 = ChatPromptTemplate.from_messages(messages2)

try:
    # 引入ChatOpenAI,链接外部大模型。我这里用的qwen-plus
    client = ChatOpenAI(api_key=MODULE_API_KEY,model=MODULE_NAME,base_url=MODULE_BASE_URL)
    # invoke 调用大模型能力,返回提问结果
    res_msg = client.invoke(prompts.format(xingge='开朗'))
    res_msg2 = client.invoke(prompts2.format_messages(shezhi='相同',xingge='开朗'))
    res_msg3 = client.invoke(prompts2.format_messages(shezhi='相反',xingge='开朗'))
    # 大模型返回的结果有很多内容,可自选要用的内容
    print(res_msg.content)
    print(res_msg2.content)
    print(res_msg3.content)
except Exception as e:
    print(f"错误信息:{e}")
    print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")

2.运行结果:

在这里插入图片描述
三种结果。可以看到使用ChatPromptTemplate对ai进行回答设置后,用户相同的提问,确生成了相反的结果

总结

这里对文章进行总结:

1、目前主流使用的就是PromptTemplate、ChatPromptTemplate这两个模版,其他模版有兴趣的可以自行去了解下

2、PromptTemplate适用于直接对用户输入内容进行重新组装(或者叫增强)

3、ChatPromptTemplate适用于需要对ai进行增强和设定的场景

最后,提示词模版就一句话:接收用户输入,并进行增强,形成最终的提示词内容

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐