开源模型应用落地-LangChain实用小技巧-ChatPromptTemplate的partial方法(一)

一、前言

在当今的自然语言处理领域,LangChain 框架因其强大的功能和灵活性而备受关注。掌握一些实用的小技巧,能够让您在使用 LangChain 框架时更加得心应手,从而更高效地开发出优质的自然语言处理应用。


二、术语

**2.1.**LangChain

是一个全方位的、基于大语言模型这种预测能力的应用开发工具。LangChain的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。对于希望进行更深入工作的开发者,LangChain 提供的模块化组件则允许你根据自己的需求定制和创建应用中的功能链条。

LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些 API,搭建起来的一些框架、模块和接口。

LangChain的主要特性:

1.可以连接多种数据源,比如网页链接、本地PDF文件、向量数据库等

2.允许语言模型与其环境交互

3.封装了Model I/O(输入/输出)、Retrieval(检索器)、Memory(记忆)、Agents(决策和调度)等核心组件

4.可以使用链的方式组装这些组件,以便最好地完成特定用例。

5.围绕以上设计原则,LangChain解决了现在开发人工智能应用的一些切实痛点。

**2.2.**ChatPromptTemplate

是 LangChain 框架中用于创建聊天模型提示的类。

2.3.partial方法

用于创建一个部分格式化的提示模板。它允许在创建提示模板时只传入部分变量值,而不需要等待所有变量值都准备好。


三、前提条件

3.1. 基础环境

  1. 操作系统:不限

3.2. 安装虚拟环境

bash 复制代码
conda create --name langchain python=3.10
conda activate langchain
pip install langchain langchain-openai langchain-community

四、技术实现

4.1.partial方法示例

partial方法用于创建一个部分格式化的提示模板。它允许在创建提示模板时,先传入部分变量的值,而不需要等待所有变量值都准备好。这样可以在链式处理中,当某些变量值先获取到,而其他变量值稍后才可用时,使用部分格式化的提示模板继续进行处理。

python 复制代码
import os

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

if __name__ == '__main__':
    chat = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.1, max_tokens=256)
    template = '''
        {region}有哪些重点的{advantage}?
        '''
    prompt_template = ChatPromptTemplate.from_template(template)
    prompt_template = prompt_template.partial(region="广东",)
    print(prompt_template)

    chain = prompt_template | chat | StrOutputParser()
    print(chain.invoke({"advantage":"名牌大学"}))

调用结果:

4.2.format方法示例

format方法则用于将提示模板中的占位符替换为具体的变量值,以得到完整的提示字符串。它需要传入所有未被部分格式化的变量的值。

python 复制代码
import os

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

if __name__ == '__main__':

    chat = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.1, max_tokens=256)
    template = '''
           {region}有哪些重点的{advantage}?
           '''
    prompt_template = ChatPromptTemplate.from_template(template)
    prompt = prompt_template.format(region="广东",advantage="名牌大学")
    print(prompt)
    print(chat.invoke(prompt).content)

调用结果:

4.3.partial+format方法示例

python 复制代码
import os

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

if __name__ == '__main__':

    chat = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.1, max_tokens=256)
    template = '''
              {region}有哪些重点的{advantage}?
              '''
    prompt_template = ChatPromptTemplate.from_template(template)
    prompt_template = prompt_template.partial(region="广东")
    prompt = prompt_template.format(advantage="名牌大学")
    print(prompt)

    print(chat.invoke(prompt).content)

调用结果:


五、附带说明

5.1. 总结

partial方法用于部分地预先设置提示模板中的变量,而format方法用于最终完成提示模板的格式化,得到完整的提示内容。

相关推荐
Watermelo617几秒前
从DeepSeek大爆发看AI革命困局:大模型如何突破算力囚笼与信任危机?
人工智能·深度学习·神经网络·机器学习·ai·语言模型·自然语言处理
Donvink2 分钟前
【DeepSeek-R1背后的技术】系列九:MLA(Multi-Head Latent Attention,多头潜在注意力)
人工智能·深度学习·语言模型·transformer
计算机软件程序设计8 分钟前
深度学习在图像识别中的应用-以花卉分类系统为例
人工智能·深度学习·分类
鸟哥大大1 小时前
【Python】pypinyin-汉字拼音转换工具
python·自然语言处理
AC使者3 小时前
介绍 TensorFlow 的基本概念和使用场景。
开发语言·自然语言处理·sqlite·github
終不似少年遊*4 小时前
词向量与词嵌入
人工智能·深度学习·nlp·机器翻译·词嵌入
夏莉莉iy6 小时前
[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction
人工智能·笔记·深度学习·机器学习·语言模型·自然语言处理·transformer
pchmi7 小时前
CNN常用卷积核
深度学习·神经网络·机器学习·cnn·c#
pzx_0017 小时前
【机器学习】K折交叉验证(K-Fold Cross-Validation)
人工智能·深度学习·算法·机器学习
伊一大数据&人工智能学习日志8 小时前
自然语言处理NLP 04案例——苏宁易购优质评论与差评分析
人工智能·python·机器学习·自然语言处理·数据挖掘