支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


二、LangChain提示词工程

发布日期:2025-05-26 07:27:00 浏览次数: 1548 作者:深度学习生态圈
推荐语

LangChain提示词模板:提高语言模型输出质量的关键技术。

核心内容:
1. 提示词模板的定义和基本组成
2. 提示词模板在LangChain中的作用与应用
3. 实战案例:字符串提示词模板与聊天消息提示词模板的创建和使用

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

1 提示词模板简介

在LangChain中,提示模板(Prompt Templates)扮演着至关重要的角色,它们允许开发者以结构化的方式向语言模型提供输入,从而引导模型生成所需的输出。

1.1 提示词模板的内容

提示词模板本质上跟平时大家使用的邮件模板、短信模板没什么区别,就是一个字符串模板,模板可以包含一组模板参数,通过模板参数值可以替换模板对应的参数。

一个提示词模板可以包含下面内容:

  • 发给大语言模型(LLM)的指令。

  • 一组问答示例,以提醒AI以什么格式返回请求。

  • 发给语言模型的问题。

1.2 提示模板在LangChain中的作用

提示模板在LangChain中的作用是定义一个结构化的输入格式,该格式包含了模型在生成输出时所需的所有信息。通过使用提示模板,开发者可以确保向模型提供的输入是清晰、一致且易于理解的,从而提高模型的输出质量。

2 提示词模板实战

2.1 字符串提示词模板

在LangChain中,可以使用 `PromptTemplate` 类创建简单的提示词。提示词模板可以内嵌任意数量的模板参数,然后通过参数值格式化模板内容。 

from langchain.prompts import PromptTemplate

# 定义一个提示模板,包含adjective和content两个模板变量,模板变量使用{}包括起来
prompt_template = PromptTemplate.from_template(
    "给我讲一个关于{content}的{adjective}故事。"
)

# 通过模板参数格式化提示模板
result = prompt_template.format(adjective="童话"content="一千零一夜")
print(result)

2.2 聊天消息提示词模板

聊天模型(Chat Model)以聊天消息列表作为输入,这个聊天消息列表的消息内容也可以通过提示词模板进行管理。这些聊天消息与原始字符串不同,因为每个消息都与“角色(role)”相关联。

在OpenAI的聊天模型中,给不同的聊天消息定义了三种角色类型分别是助手(assistant)、人类(human)或系统(system)角色。

  • 助手(Assistant) 消息指的是当前消息是AI回答的内容

  • 用户(user)消息指的是你发给AI的内容。

  • 系统(system)消息通常是用来给AI身份进行描述

from langchain_core.prompts import ChatPromptTemplate

chat_template = ChatPromptTemplate.from_messages(
    [
        ("system""你是一位人工智能助手,你的名字是{name}。"),
        ("human""你能做什么"),
        ("ai""设计课程,谢谢!"),
        ("human""{user_input}"),
    ]
)
messages = chat_template.format_messages(name="教学助手",
                                          user_input="你的名字叫什么?")
print(messages)

    2.4 MessagesPlaceholder

    MessagesPlaceholder 提示模板负责在特定位置添加消息列表。 在上面的 ChatPromptTemplate 中,我们看到了如何格式化两条消息,每条消息都是一个字符串。如果我们希望用户传入一个消息列表,就可以通过MessagesPlaceholder 的方式将其插入到特定位置。

    from langchain_core.prompts import ChatPromptTemplate
    from langchain_core.prompts import MessagesPlaceholder
    from langchain_core.messages importHumanMessage

    prompt_template = ChatPromptTemplate.from_messages([
        ("system""You are a helpful assistant"),
        #可以传入一组消息
        MessagesPlaceholder("msgs")
    ])
    result = prompt_template.invoke({"msgs": [HumanMessage(content="您好!"),
                                              HumanMessage(content="langchain!")]})
    print(result)

    3.2 提示词追加示例

    提示词中包含交互样本的作用是为了帮助模型更好地理解用户的意图,从而更好地回答问题或执行任务。小样本提示模板是指使用一组少量的示例来指导模型处理新的输入。这些示例可以用来训练模型,以便模型可以更好地理解和回答类似的问题。

    提示词交互示例:

    examples = [
        {
            "question""电话和电灯的发明者是否毕业于同一所大学?",
            "answer":
                """
                这里需要跟进问题吗:是的。
                跟进:电话的发明者是谁?
                中间答案:电话的发明者是Alexander Graham Bell。
                跟进:Alexander Graham Bell毕业于哪所大学?
                中间答案:Alexander Graham Bell没有正式大学学位,他在爱丁堡大学短暂学习过。
                跟进:电灯的发明者是谁?
                中间答案:电灯的发明者是Thomas Edison。
                跟进:Thomas Edison毕业于哪所大学?
                中间答案:Thomas Edison没有大学学位,他是自学成才的发明家。
                所以最终答案是:不是
                """
        }
    ]

    告诉模型根据,Q是问题,A是答案,按这种格式进行问答交互。提示词追加示例代码如下。

    from langchain.prompts import FewShotPromptTemplate
    from langchain.prompts.prompt import PromptTemplate

    from prompt_example import examples # examples是交互示例

    example_prompt = PromptTemplate(input_variables=["question""answer"], 
                                    template="问题:{question}\\n{answer}")
    print(example_prompt.format(**examples[0]))

    53AI,企业落地大模型首选服务商

    产品:场景落地咨询+大模型应用平台+行业解决方案

    承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

    联系我们

    售前咨询
    186 6662 7370
    预约演示
    185 8882 0121

    微信扫码

    添加专属顾问

    回到顶部

    加载中...

    扫码咨询