LangChain提示词工程,终于有人一次性讲清楚了

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]))

     

     如何学习AI大模型?

    我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

    我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

    第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

    第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

    第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

    第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

    第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

    第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

    第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。


    👉学会后的收获:👈
    • 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

    • 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

    • 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

    • 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。


    1.AI大模型学习路线图
    2.100套AI大模型商业化落地方案
    3.100集大模型视频教程
    4.200本大模型PDF书籍
    5.LLM面试题合集
    6.AI产品经理资源合集

    👉获取方式:
    😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

    ### 关于LangChain中的提示词工程 #### 什么是提示词工程提示词工程是一种通过精心设计输入文本的方式,引导大型语言模型(LLM)生成期望输出的技术。这种技术的核心在于构建高质量的提示词(Prompt),从而让模型能够理解上下文并给出符合需求的结果。 #### 如何使用LangChain进行提示词工程LangChain是一个强大的工具库,它提供了多种方法来帮助开发者更高效地管理提示词。以下是几种常见的应用场景及其对应的实现方式: --- #### **1. 基础提示词模板** LangChain允许用户定义简单的提示词模板,用于标准化输入格式。以下是一个基础示例: ```python from langchain import PromptTemplate template = "问题:{question}\n回答:" prompt = PromptTemplate(input_variables=["question"], template=template) formatted_prompt = prompt.format(question="世界上最高的山是什么?") print(formatted_prompt) ``` 此代码创建了一个基本的提示词模板,并将其应用于具体问题[^1]。 --- #### **2. 少量示例提示词(Few-Shot Learning)** 当需要向模型展示一些示例以提高其推理能力时,可以使用`FewShotPromptTemplate`。这种方法通过提供少量已知问答对作为参考,使模型更好地理解和预测新问题的答案。 下面是一段基于固定示例集的代码示例: ```python from langchain.prompts.example_selectors.base import BaseExampleSelector from langchain.prompts.few_shot import FewShotPromptTemplate from langchain.prompts.prompt import PromptTemplate examples = [ {"input": "北京是中国的首都吗?", "output": "是的,北京是中国的首都。"}, {"input": "太阳为什么东升西落?", "output": "因为地球自西向东自转。"} ] example_template = """ 问题:{input} 回答:{output} """ example_prompt = PromptTemplate( input_variables=["input", "output"], template=example_template, ) few_shot_prompt = FewShotPromptTemplate( examples=examples, example_prompt=example_prompt, prefix="这是一个问答系统的训练数据。", suffix="现在轮到你了。\n问题:{new_input}", input_variables=["new_input"], example_separator="\n---\n", ) final_prompt = few_shot_prompt.format(new_input="水的沸点是多少度?") print(final_prompt) ``` 这段代码展示了如何设置固定的几组问答对,并将它们嵌入到最终提示词中[^3]。 --- #### **3. 动态示例选择器** 如果希望根据当前查询动态调整所选示例,则可采用语义相似性选择器(SemanticSimilarityExampleSelector)。该功能会自动挑选最接近当前提问的相关实例。 下面是结合动态选择器的一个简单案例: ```python from langchain.prompts.example_selectors.semantic_similarity import SemanticSimilarityExampleSelector from langchain.vectorstores import FAISS from langchain.embeddings import OpenAIEmbeddings # 创建向量存储和嵌入函数 vectorstore = FAISS.from_texts([ex["input"] for ex in examples], embedding=OpenAIEmbeddings()) selector = SemanticSimilarityExampleSelector(vectorstore=vectorstore, k=1) dynamic_few_shot_prompt = FewShotPromptTemplate( example_selector=selector, example_prompt=example_prompt, prefix="这是从数据库中提取的最佳匹配样本。", suffix="尝试解决这个问题吧!\n问题:{query}", input_variables=["query"] ) generated_prompt = dynamic_few_shot_prompt.format(query="月球绕地球旋转的方向是什么?") print(generated_prompt) ``` 在此处,我们引入了FAISS矢量化索引来支持高效的近邻检索操作[^4]。 --- #### **4. 高级组合技巧** 为了进一步优化提示词效果,还可以考虑混合不同类型的模块或者调优参数配置。例如,在实际项目开发过程中可能涉及如下方面: - 调整前缀、后缀文字描述; - 自定义分隔符样式; - 控制每条记录的最大长度限制等。 更多细节请参阅官方文档链接[^2]。 --- ### 总结 以上介绍了四种常见场景下的LangChain提示词工程技术方案——从简易模板构造到复杂动态筛选机制均有覆盖。无论是初学者还是资深工程师都能从中找到适合自己需求的内容。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值