LlamaIndex(九)Prompt提示词

在LlamaIndex中,提示(prompts)是与语言模型(LLM)交互的关键部分。通过自定义提示,可以更精确地控制模型的输出,以满足特定需求。

什么是prompts

在大语言模型(LLM)中,Prompt指的是模型生成内容时所需要的输入,它可以包含模型生成内容时所需要的背景知识、用户期望模型执行的指令、模型输出需要遵循的格式等。

为什么要用prompts

在我们平常使用大语言模型进行问答时,他回答的内容往往就是他默认的回答格式首先,然后,最后这种,例如想要让大语言模型回答时在开头添加固定开场白,或是结尾添加固定结束词,又或是让他只回答某一方面的问题,跟这个方面不相关的问题不回答等效果,就需要使用prompts来提示或者限制大语言模型的回答内容,特定的回答风格,或者是将大模型水平范围回答限制到垂直范围(回答内容准确性可能不高,高准确性使用外挂数据库更好).

提示词的组成

从图中可以看出,提示词主要由一个任务描述,一个输入文本,输出指示组成.他们会一同发送给大语言模型,而大语言模型就会根据提示词进行回答.

提示词公式=角色+角色技能+任务关键词+任务目标+任务背景+任务范围+任务结果判定+限制条件+输出格式+输出量

实例1

这段代码展示了如何使用LlamaIndex库构建 Prompt 模板。具体来说:

  1. 定义 Prompt 模板 :通过 PromptTemplateChatPromptTemplate 创建用于文本生成的提示词。

  2. 使用 Prompt 模板 :通过 qa_template.format()chat_template.format(topic=topic) 插入上下文信息并生成相应的提示词字符串。

  3. 使用 qa_template.format_messages()chat_template.format_messages(topic=topic) 生成 ChatMessage 对象,模拟聊天场景。

    from llama_index.core import PromptTemplate
    template = (
    "我提供以下上下文信息\n"
    "-------------------\n"
    "{context_str}\n"
    "-------------------\n"
    "给定这个信息,请回答问题:{query_str}\n"
    )
    qa_template = PromptTemplate(template=template)

    文本生成场景

    context_str = "在阳光明媚的春日午后,小明和小华相约在公园的樱花树下野餐。铺开格子布,摆上三明治和果汁,两人边吃边聊,笑声不断。樱花随风飘落,像粉色的雪花,落在他们的头上和食物上,增添了几分浪漫。小明突然提议玩一个猜谜游戏,小华兴奋地接受了挑战,两人的友谊在这场智力角逐中更加深厚。"
    query_str = "谁提出玩游戏的?"
    prompt = qa_template.format(context_str=context_str, query_str=query_str)
    print(prompt)

我提供以下上下文信息 ------------------- 在阳光明媚的春日午后,小明和小华相约在公园的樱花树下野餐。铺开格子布,摆上三明治和果汁,两人边吃边聊,笑声不断。樱花随风飘落,像粉色的雪花,落在他们的头上和食物上,增添了几分浪漫。小明突然提议玩一个猜谜游戏,小华兴奋地接受了挑战,两人的友谊在这场智力角逐中更加深厚。 ------------------- 给定这个信息,请回答问题:谁提出玩游戏的?

复制代码
message=qa_template.format_messages(context_str=context_str, query_str=query_str)
print(message)

ChatMessage (role=, additional_kwargs={}, blocks=\[TextBlock (block_type='text', text='我提供以下上下文信息\\n-------------------\\n 在阳光明媚的春日午后,小明和小华相约在公园的樱花树下野餐。铺开格子布,摆上三明治和果汁,两人边吃边聊,笑声不断。樱花随风飘落,像粉色的雪花,落在他们的头上和食物上,增添了几分浪漫。小明突然提议玩一个猜谜游戏,小华兴奋地接受了挑战,两人的友谊在这场智力角逐中更加深厚。\\n-------------------\\n 给定这个信息,请回答问题:谁提出玩游戏的?\\n')\])

实例2

除了使用 PromptTemplate 外,类似的方法还可以创建 ChatPromptTemplate

复制代码
from llama_index.core import ChatPromptTemplate
from llama_index.core.llms import ChatMessage,MessageRole
message_template=[
    ChatMessage(content="你是一个说书人",role=MessageRole.SYSTEM),
    ChatMessage(content="给我讲讲{topic}?",role=MessageRole.USER)
]
chat_template=ChatPromptTemplate(message_templates=message_template)
topic="三国演义的空城计"
# 用于文本生成 
prompt=chat_template.format(topic=topic)
print(prompt)
print('----------')
# 用于聊天
message=chat_template.format_messages(topic=topic)
print(message)

system: 你是一个说书人 User: 给我讲讲三国演义的空城计? Assistant: ---------- [ChatMessage (role=, additional_kwargs={}, blocks=[TextBlock (block_type='text', text='你是一个说书人')]), ChatMessage (role=, additional_kwargs={}, blocks=[TextBlock (block_type='text', text='给我讲讲三国演义的空城计?')])]

实例3

复制代码
from llama_index.core import PromptTemplate

prompt = PromptTemplate("写一个关于{topic}的笑话")
msg = prompt.format(topic="小明")
print(msg)

实例4

复制代码
from llama_index.core import PromptTemplate

from llama_index.core.llms import ChatMessage, MessageRole
from llama_index.core import ChatPromptTemplate

chat_text_qa_msgs = [
    ChatMessage(
        role=MessageRole.SYSTEM,
        content="你叫{name},你必须根据用户提供的上下文回答问题。",
    ),
    ChatMessage(
        role=MessageRole.USER,
        content=(
            "已知上下文:\n"
            "{context}\n\n"
            "问题:{question}"
        )
    ),
]
text_qa_template = ChatPromptTemplate(chat_text_qa_msgs)

print(
    text_qa_template.format(
        name="瓜瓜",
        context="这是一个测试",
        question="这是什么"
    )
)
相关推荐
Swizard2 天前
逐行解剖:扒开 Lovable Agent 源码,看顶级 AI 是如何“思考”与“动刀”的
ai·prompt
杜子不疼.3 天前
大模型应用开发实战:从 Prompt 工程到企业级落地全流程
prompt
觅特科技-互站3 天前
告别手动微调Prompt:DevOps用陌讯Skills重构AI运维工作流
运维·prompt·线性回归·kmeans·devops
小马_xiaoen3 天前
AI Prompt 工程完全指南:从入门到精通的提示词设计艺术
人工智能·prompt
Swizard4 天前
还在无脑堆砌提示词?三分钟看懂 Vercel v0 价值千万的 System Prompt 底层逻辑
ai·prompt
Loo国昌4 天前
【AI应用开发实战】Guardrail风险控制中间件:Agent系统的安全防线
人工智能·python·安全·自然语言处理·中间件·prompt
啦啦啦_99994 天前
SpringAI Alibaba(SAA) 之 Prompt
prompt
AC赳赳老秦4 天前
DeepSeek助力云原生AI降本:容器化部署资源优化与算力利用率提升技巧
网络·python·django·prompt·tornado·ai-native·deepseek
Loo国昌5 天前
【AI应用开发实战】09_Prompt工程与模板管理:构建可演进的LLM交互层
大数据·人工智能·后端·python·自然语言处理·prompt
minhuan5 天前
大模型应用:遗传算法 (GA)+大模型:自动化进化最优Prompt与模型参数.95
prompt·大模型应用·遗传算法 ga·prompt自动调优