您的位置:首页 > 健康 > 美食 > langchain入门系列之二 LLM之提示词使用

langchain入门系列之二 LLM之提示词使用

2024/10/5 23:26:14 来源:https://blog.csdn.net/qq_40244755/article/details/141533639  浏览:    关键词:langchain入门系列之二 LLM之提示词使用

langchain llm之提示词使用

langchain使用提示词与LLM模块及其语言模型进行交互,提示词是与语言模型交互的编程语言,而提示模板则是提示词的一种映射。提示模板可以接受多个参数,通过示例问答来教会语言模型,从而达到更理想的效果

langchain语言模型提示词的使用方法:
1. 同一类提示可以封装成接受参数模板
prompt = PromptTemplate.from_template("给我讲一个关于{对象}的黑色幽默笑话")
prompt.format(对象="猫")
完整代码
import os
from langchain_community.chat_models import QianfanChatEndpoint
from langchain.prompts import PromptTemplate# 设置API
os.environ["QIANFAN_AK"] = ""
os.environ["QIANFAN_SK"] = ""llm = QianfanChatEndpoint(model="ERNIE-Bot-turbo")prompt = PromptTemplate.from_template("给我讲一个关于{对象}的黑色幽默笑话")
# prompt.format(对象="猫")from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
print(chain.run("狗"))
2. 接受多个参数
# 一个参数
from langchain.prompts import PromptTemplate
one_input_prompt = PromptTemplate(input_variables=["什么类型"],template="给我讲一个{什么类型}的故事")
one_input_prompt.format(什么类型="恐怖的")
# 给我讲一个恐怖的的故事
# 多个参数
multiple_inout_prompt = PromptTemplate(input_variables=["什么类型", "什么东西"],template="给我讲一个关于{什么东西}的{什么类型}故事"
)
multiple_inout_prompt.format(什么东西="鬼", 什么类型="恐怖")
# 给我讲一个关于鬼的恐怖故事
3. 接受部分参数的提示模板
# 所有的参数无法同时获得,不过在链式结构中传递提示模板的时候,并不需要同时提供所有参数
prompt = PromptTemplate(template="告诉我{国家}在{年份}年{日期}的平均降水量", input_variables=["国家", "年份", "日期"])
partial_prompt = prompt.partial(国家="印度")
print(partial_prompt.format(年份="2003", 日期="8月25日"))
# 告诉我印度在2003年8月25日的平均降水量----------------------------from datetime import datetimedef _get_date():now = datetime.now()return now.strftime("%m/%d/%Y, %H:%M:%S")prompt = PromptTemplate(template="告诉我{国家}在{年份}年{日期}的平均降水量", input_variables=["国家", "年份", "日期"])
partial_prompt = prompt.partial(国家="印度", 日期=_get_date)
print(partial_prompt.format(年份="2003"))
# 告诉我印度在2003年08/25/2024, 18:56:44的平均降水量
4. 提供少数示例从而使大模型有逻辑思维
通过少量样本学习,让大模型可以处理特定的问题
# FewShotPromptTemplate
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplateexamples = [{"Q": "我回家","A": "😊回🏠"},{"Q": "我喝水","A": "😊喝🥤"},{"Q": "我的狗回家","A": "😊的🐕回🏠"},{"Q": "我的狗喝水","A": "😊的狗回🏠"},
]
example_prompt = PromptTemplate(input_variables=["Q","A"], template="Question:{Q}\n{A}")
prompt = FewShotPromptTemplate(examples=examples,example_prompt=example_prompt,suffix="Question:{input}",input_variables=["input"]
)
print(prompt.format(input="我的狗不高兴"))
-----------------------------------------------------------
Question:我回家
😊回🏠Question:我喝水
😊喝🥤Question:我的狗回家
😊的🐕回🏠Question:我的狗喝水
😊的狗回🏠Question:我的狗不高兴
-----------------------------------------------------------
import os
from langchain_community.llms import QianfanLLMEndpoint# 设置API
os.environ["QIANFAN_AK"] = ""
os.environ["QIANFAN_SK"] = ""# 实例化(大模型)
llm = QianfanLLMEndpoint()
print(llm.predict(prompt.format(input="我的狗不高兴")))
😊的🐕不高兴😟
5. 单一调用和批量调用
import os
from langchain_community.llms import QianfanLLMEndpoint# 设置API
os.environ["QIANFAN_AK"] = ""
os.environ["QIANFAN_SK"] = ""# 实例化(大模型)
llm = QianfanLLMEndpoint()
print(llm("给我讲一个简短的笑话"))
res = llm.invoke(["给我讲一个幽默故事", "给我讲一个成语故事"])
print(res)---------------------------------
简短笑话:有一天,一只小鸟飞到一座山上,它问山顶的石头:“你觉得生活怎么样?”石头回答:“累。”小鸟又问旁边的树:“你觉得生活怎么样?”树说:“累得想躺下。”最后,小鸟问一只小虫:“你觉得生活如何?”小虫回答:“我在爬……我在爬……”笑点在于小鸟和小虫的对话,展现了小虫在不停地“爬”这个动作中寻找生活的感觉,同时也表现出一种重复和循环的幽默感。
好的,我来给您讲一个成语故事和一个人类幽默故事。成语故事:“画蛇添足”是一个广为人知的成语故事。相传古代有一位富翁宴请了很多客人,为了让大家高兴,他提议每个人画一条蛇,然后根据画的难度和漂亮程度进行比赛。一位客人画得最快,当他刚完成画作时,却发现别人都还没画完,于是他便多此一举地在蛇的尾部添上了两只脚。这时,主人走过来,宣布比赛结束,并称赞每个人画的蛇都很好。但是,主人特别强调了“画蛇添足”这个成语,说如果有人给蛇添上脚,就失去了蛇的本意。这位客人虽然因为添加了两只脚而获得了赞扬,但他所画的蛇已经失去了其本意和本意中的意味。这个成语的意思是指做一些多余的行动或补充而起到相反的效果。幽默故事:有一只老鼠叫做波波,它经常到邻居的田地里觅食。有一天,它发现了一个巨大的麦穗堆在田地里,于是它决定把它吃掉。但是,当它咬了一口后,发现麦穗太硬了,它根本咬不动。于是它想出了一个聪明的办法:它决定用自己小小的爪子去抓麦穗,然后把它拖回家里去。
...可是烤完后却发现麦穗竟然变成了一根烤香肠!这时波波又兴奋又饿,毫不犹豫地把它吃了下去。所以这个小老鼠在吃到巨大食物的时候并不顾及食物的种类,只是要能满足自己的口腹之欲。虽然波波的行动有些荒谬和滑稽,但它的机智和勇气也让人感到有些好笑和有趣。希望这两个故事能给您带来一些欢乐和启发!
6. 选择相似的例子
`pip install chromadb`
# SemanticSimilarityExampleSelector
# 该对象根据与输入的相似度选择例子。它通过找到与输入具有最大余弦相似度的嵌入的例子来实现此目的
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain.vectorstores import Chroma
from langchain.embeddings import QianfanEmbeddingsEndpoint
from langchain.prompts import FewShotPromptTemplate, PromptTemplate
import os# 设置API
os.environ["QIANFAN_AK"] = ""
os.environ["QIANFAN_SK"] = ""example_prompt = PromptTemplate(input_variables=["input", "output"],template="Input: {input}\nOutput: {output}",
)examples = [{"input": "高兴", "output": "悲伤"},{"input": "高", "output": "矮"},{"input": "合理", "output": "不合理"},{"input": "晴天", "output": "阴天"},{"input": "正", "output": "反"},
]example_selector = SemanticSimilarityExampleSelector.from_examples(examples, QianfanEmbeddingsEndpoint(), Chroma, k=1
)
similar_prompt = FewShotPromptTemplate(example_selector=example_selector,example_prompt=example_prompt,prefix="给出每项输入的反义词",suffix="Input: {形容词}\nOutput:", input_variables=["形容词"],
)
print(similar_prompt.format(形容词="担忧"))

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com