首页 > 其他分享 >基于LangChain的Prompt模板

基于LangChain的Prompt模板

时间:2024-05-22 12:22:52浏览次数:26  
标签:Prompt language AI text LangChain input 模板

1. 简述LangChain

LangChain是一个开源库,它致力于让开发基于LLM的AI应用更简单,它是一个AI开发领域的万能适配器。

它抽象化了与大语言模型(如OpenAI模型、文心模型等等)交互的复杂性,以及集成了周边的各种工具生态,让开发者可以专注于实现AI应用的逻辑和功能。LangChain提供了一系列易于使用的工具和抽象,使得与大语言模型的交互变得尽可能的简单明了。

使用之前,先安装LangChain:

pip install langchain

2. LangChain使用OpenAI模型

LangChain与各种AI大模型都做了适配,下面以OpenAI的模型为例,可以简单地通过LangChain来调用它。当然国内使用原生的OpenAI会有些障碍,本文主要使用代理模式,比如https://api.aigc369.com/v1

2.1、使用OpenAI的接口

from openai import OpenAI

# 实例化OpenAI模型
client = OpenAI(api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                base_url="https://api.aigc369.com/v1")

# 使用LangChain的接口与模型交互
messages = [
    {
        "role": "system",
        "content": "请你作为我的生活小助手。"
    },
    {
        "role": "user",
        "content": "胳膊上起了红疹子怎么办?"
    }
]
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages= messages
)
content = response.choices[0].message.content
print(content)

2.2、使用LangChain的接口调用OpenAI的模型

from langchain_openai import ChatOpenAI

# 实例化OpenAI模型
model = ChatOpenAI(model="gpt-3.5-turbo",
                   openai_api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                   openai_api_base="https://api.aigc369.com/v1")

# 使用LangChain的接口与模型交互
from langchain.schema.messages import HumanMessage, SystemMessage, AIMessage

messages = [
    SystemMessage(content="请你作为我的生活小助手。"),
    HumanMessage(content="胳膊上起了红疹子怎么办?"),
]
response = model.invoke(messages)
print(response.content)

3. 什么是提示词模板

在上一篇《Prompt提示词助力AI写作》里已经聊过Prompt提示词的概念,提示词的主要作用是为了更好的与AI对话,帮助引导AI产生更精确、更相关的文本。所以要尽可能的给AI讲清楚任务、背景、任务等核心要素。

**那Prompt提示词模板是啥呢?**Prompt提示词模板是在LangChain中使用,LangChain 中通过提示模板来构建最终的 Prompt。提示模板是 LangChain 的核心功能之一。

4. 怎么使用提示词模板

设想一下,如果你想让AI帮你把一段中文翻译成多种语言。那你可能要写多条类似的提示词,让AI一个个的去执行任务。或者你想让AI帮你批量的生成一些固定的邮件,只是中间的人名不同,你肯定也不想写多条类似的提示词。

此时使用提示词模板是最合适的。接下来举个例子,让AI将中文按照我们的要求翻译成多种语言:

from langchain_openai import ChatOpenAI
from langchain.prompts import (
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)

system_template_text = "你是一位专业的翻译,能够将{input_language}翻译成{output_language}。请只输出翻译后的文本,不要有任何其它内容。"
system_prompt_template = SystemMessagePromptTemplate.from_template(system_template_text)

human_template_text = "文本:{text}"
human_prompt_template = HumanMessagePromptTemplate.from_template(human_template_text)

model = ChatOpenAI(model="gpt-3.5-turbo",
                   openai_api_key="sk-BuQK7SGbqCZP2i2z7fF267AeD0004eF095AbC78d2f79E019",
                   openai_api_base="https://api.aigc369.com/v1")

prompt_input_variables = [
    {
        "input_language": "中文",
        "output_language": "英语",
        "text": "我今天去超级买衣服",
    },
    {
        "input_language": "中文",
        "output_language": "法语",
        "text": "我今天去超级买衣服",
    },
    {
        "input_language": "中文",
        "output_language": "俄语",
        "text": "我今天去超级买衣服",
    },
    {
        "input_language": "中文",
        "output_language": "日语",
        "text": "我今天去超级买衣服",
    },
    {
        "input_language": "中文",
        "output_language": "韩语",
        "text": "我今天去超级买衣服",
    },
    {
        "input_language": "中文",
        "output_language": "意大利语",
        "text": "我今天去超级买衣服",
    }
]

for input in prompt_input_variables:
    response = model.invoke([
        system_prompt_template.format(input_language=input["input_language"], output_language=input["output_language"]),
        human_prompt_template.format(text=input["text"])])
    print(response.content)


SystemMessagePromptTemplate代码系统模板,HumanMessagePromptTemplate代表是用户消息模板。{input_language}{output_language}{text}是变量,最终通过format方法,替换成实际的值来生成最终的Prompt。最终使用LangChain的大模型类执行Prompt即可。

执行结果如下:

5. 什么是LangChainHub

如果碰到复杂场景,需要模型接入各种工具时,就要写复杂的提示词了,比如类似这样这个链接里的提示词模板。这么复杂的提示词写起来就有点尴尬了,幸好有LangChainHub。https://smith.langchain.com/hub/hwchase17/structured-chat-agent?organizationId=6e7cb68e-d5eb-56c1-8a8a-5a32467e2996

LangChainHub 是一个围绕 LangChain 生态系统构建的平台。它能够让开发者更轻松地发现、分享和利用其他人创建的工作流、模板和组件。它相当于是一个丰富的社区资源库。

在 LangChainHub,你可以找到:

  • 提示词模板库:这些模板可以帮助你快速开始一个特定任务,比如生成特定格式的文本,或者进行一些复杂的逻辑处理。
  • 可重复使用的流程:如果你有常见的工作流,你可以在LangChainHub上找到现成的流程,或者将你的工作流分享给社区。
  • 最佳实践的共享:在 LangChainHub 上,开发者可以分享他们的经验教训和解决方案,帮助其他开发者避坑。

比如,从 LangChainHub 寻找某个功能的提示词模板,可以直接这样搞:

from langchain import hub
prompt = hub.pull("hwchase17/structured-chat-agent")
print(prompt)

后续再继续详聊LangChainHub。

总结

本文主要聊了LangChain,还聊了如何使用LangChain与OpenAI模型进行提示词模板的交互。希望对你有帮助。

======>>>>>> 关于我 <<<<<<======

本篇完结!欢迎点赞 关注 收藏!!!

原文链接:http://www.mangod.top/articles/2024/05/22/1716345650148.htmlhttps://mp.weixin.qq.com/s/UoGYedgwkH-jgDncjXg4-g

标签:Prompt,language,AI,text,LangChain,input,模板
From: https://www.cnblogs.com/mangod/p/18205958

相关文章

  • Why the Pipe Character “|” Works in LangChain’s LCEL
    WhythePipeCharacter“|”WorksinLangChain’sLCELhttp://cncc.bingj.com/cache.aspx?q=python+pipe+operator&d=4965480815663428&mkt=en-US&setlang=en-US&w=ZTsip_Llmj7SCg1Xnjy71UfpBFEYqgVMIntroductionInLangChain,itisnowrecommendedto......
  • Semantic Kernel入门系列:利用YAML定义prompts functions
    引言在上一章节我们熟悉了promptsfunctions(提示函数)的创建,我们了解了PromptTemplateConfig中各个属性的简单使用。SemanticKernel允许我们利用多种方式去创建prompts包括nativefunctions,promptsfunctions或者也叫Semanticfunctions,和Yaml文件等。本章的我们将学习利......
  • thinkcmf 前台模板钩子 实现行为
    ThinkCMF中系统给前台模板内置很多钩子,但需要模板开发者在模板中正确位置增加相应钩子,插件才能在模板中正确使用。以下的所有钩子实现时都不用返回内容,都可以直接echo要显示的模板内容;示例比如我们要实现这个模板before_head_end行为:首先在event.php中新增 'BeforeHeadEnd'=>......
  • 深入学习Semantic Kernel:创建和配置prompts functions
    引言上一章我们熟悉了一下SemanticKernel的理论知识,Kernel创建以及简单的Sample熟悉了一下SK的基本使用。在SemanticKernel中的kernelfunctions由两部分组成第一部分是promptsfunctions(提示函数),第二部分Nativefunction(原生函数),kernelfunctions是构成插件(Plu......
  • LCA[模板]
    #include<bits/stdc++.h>#defineintlonglong#defineMAXN500010usingnamespacestd;structedge{intnxt,to;};edgee[MAXN*2];inth[MAXN],ei;voidadd(intx,inty){ei++;e[ei].to=y;e[ei].nxt=h[x];h[x]=ei;}intu[......
  • C++常用模板
    常用模板:1.组合数(注意\(N\)与\(mod\))点击查看代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstllN=1e3+10,mod=998244353;lln,a[N],jc[N],dp[N],ans;voidinit(){ jc[0]=1; for(inti=1;i<N;i++)jc[i]=jc[i-1]*i%mod;}llksm......
  • C123【模板】扩展域并查集 P1892 [BOI2003] 团伙
    视频链接:C123【模板】扩展域并查集P1892[BOI2003]团伙_哔哩哔哩_bilibili  P1892[BOI2003]团伙-洛谷|计算机科学教育新生态(luogu.com.cn)//扩展域并查集#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;intn,m,a,b,......
  • 信息安全事件应急处理报告模板
    目录一、概述1.1应急处理服务背景1.2应急处理服务目的1.3应急处理服务范围1.4应急处理服务依据1.4.1应用处理服务委托协议1.4.2基础标准与法律文件1.4.3参考文件二、应急处理服务流程三、应急处理服务内容和方法3.1准备阶段3.1.1准备阶段工作流程3.1.2准备阶段处理过程3......
  • ide创建maven项目时,选择哪个模板
    创建新的java项目时,选择maven框架比较节省时间,因为部分文件和目录都会给你建好,免得自己再费力创建。  我们常用的三个框架为:1、cocoon-22-archetype-webapp 【如果创建带有页面的项目,可以选择这个】目录结构: 2、maven-archetype-quickstart  【......
  • mybatis底层模板模型是什么
    mybatis底层模板模型是建造者模式和模板方法模式的结合。建造者模式用于创建SqlSessionFactory和SqlSession对象。模板方法模式用于执行SQL语句和处理结果集。mybatis是对JDBC的再一次封装,不管怎么进行包装,还是会有获取连接、preparedStatement、封装参数、执行这些步骤......