您的位置:首页 > 科技 > IT业 > 企业门户下载_怎么建立国外网站_如何设计网站步骤_河南网站推广多少钱

企业门户下载_怎么建立国外网站_如何设计网站步骤_河南网站推广多少钱

2025/2/28 1:58:19 来源:https://blog.csdn.net/forevercui/article/details/145600154  浏览:    关键词:企业门户下载_怎么建立国外网站_如何设计网站步骤_河南网站推广多少钱
企业门户下载_怎么建立国外网站_如何设计网站步骤_河南网站推广多少钱

导读

环境:OpenEuler、Windows 11、WSL 2、Python 3.12.3 langchain 0.3

背景:前期忙碌的开发阶段结束,需要沉淀自己的应用知识,过一遍LangChain

时间:20250212

说明:技术梳理

提示词模板理论说明

提示模板将用户输入和参数转换为语言模型的指令,以此来实现模型的响应,帮助它理解上下文并生成相关且连贯的基于语言的输出。其接受一个字典作为输入,其中每个键代表提示模板中要填充的一个变量。它会输出一个PromptValue,这个参数值可以传递给LLM或ChatModel,也可以转换为字符串或消息列表,存在此值的原因是为了便于在字符串和消息之间切换。

提示下模板的分类

字符串模板   

用于格式化单个字符串,通常用于更简单的输入,该模板由字符串模板组成。它接受用户提供的参数集,可用于生成语言模型的提示。模板可以使用f-strings(默认)、jinja2或mustache语法进行格式化,建议使用f-string方式(安全方面考虑)

from langchain_core.prompts import PromptTemplateprompt_template = PromptTemplate.from_template("Tell me a joke about {topic}")prompt_template.invoke({"topic": "cats"})

聊天工具模板

用于格式化消息列表。这些“模板”由模板本身的列表组成 

from langchain_core.prompts import ChatPromptTemplateprompt_template = ChatPromptTemplate([("system", "You are a helpful assistant"),("user", "Tell me a joke about {topic}")
])prompt_template.invoke({"topic": "cats"})

在上面的例子中,这个ChatListTemplate在被调用时将构造两条消息。第一个是系统消息,它没有要格式化的变量。第二个是HumanMessage,它将由用户传入的topic变量格式化。

信息占位符

用于在特定位置添加消息列表

在上面的聊天模板中,我们看到了如何格式化两条消息,每条消息都是一个字符串。但是,如果我们希望用户传递一个消息列表,并将其插入特定的位置,这时需要使用MessagesPlaceholder的方式

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessageprompt_template = ChatPromptTemplate([("system", "You are a helpful assistant"),MessagesPlaceholder("msgs")
])prompt_template.invoke({"msgs": [HumanMessage(content="hi!")]})

这将产生两条消息的列表,第一条是系统消息,第二条是我们传入的HumanMessage。如果我们传入了5条消息,那么它总共会产生6条消息(系统消息加上传入的5条消息)。这对于将消息列表插入特定位置非常有用

上述示例为显式使用,下面为隐式使用

prompt_template = ChatPromptTemplate([("system", "You are a helpful assistant"),("placeholder", "{msgs}") # <-- This is the changed part
])

实战演示

PromptTemplate

from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser# 调用一个大模型,qwen的开源,可以自己获取
translate_llm = ChatOpenAI(base_url="https://llm.xxx.xxxx.com/v1/",openai_api_key="sk-xxxxxxxxxx",model_name="qwen2.5-instruct")# 创建一个提示词模板,变量即为用户输入的英文
translate_prompt = PromptTemplate.from_template("请将英文翻译为中文, 问题:{input}")
print("translate_prompt:", translate_prompt)
# 构造链,最终以字符串格式输出
model = translate_prompt | translate_llm | StrOutputParser()# 调用链
response = model.invoke({"input":"hello"})
print("response:", response)

# 输出打印内容
(venv) jack@desktop-legion-7000k:~/lang_test$ python translate_tt.py
translate_prompt: input_variables=['input'] input_types={} partial_variables={} template='请将英文翻译为中文, 问题:{input}'
response: 翻译:你好

以上示例可以成功执行,由此可以看出:translate_prompt是一个对象,其属性template为自定义的字符串

from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser# 调用一个大模型,qwen的开源,可以自己获取
translate_llm = ChatOpenAI(base_url="https://llm.ams.lenovo.com/v1/",openai_api_key="sk-Vie3w5wRtkawW",model_name="qwen2.5-instruct")# 创建一个提示词模板,变量即为用户输入的英文
translate_prompt = PromptTemplate.from_template("请将英文翻译为中文, 问题:{input}")# 调用链
response = translate_prompt.invoke({"input":"hello"})
print("response:", response)# 输出内容
response: text='请将英文翻译为中文, 问题:hello'

此处没有使用模型以及chain,输出内容为替换后的字符串

ChatPromptTemplate

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser# 调用一个大模型,qwen的开源,可以自己获取
translate_llm = ChatOpenAI(base_url="https://llm.xxxxxx.com/v1/",openai_api_key="sk-xxxxxxxx",model_name="qwen2.5-instruct")# 创建一个提示词模板,变量即为用户输入的英文
translate_prompt = ChatPromptTemplate.from_messages([("system", "你是一个专业的翻译助手,将用户输入的英文翻译为中文"), ("human", "{input}")]
)
print("translate_prompt:", type(translate_prompt))
print("translate_prompt:", translate_prompt)
# 构造链,最终以字符串格式输出
model = translate_prompt | translate_llm | StrOutputParser()# 调用链
response = model.invoke({"input":"hello"})
print("response:", response)
# 输出内容
translate_prompt: <class 'langchain_core.prompts.chat.ChatPromptTemplate'>
translate_prompt: input_variables=['input'] input_types={} partial_variables={} messages=[SystemMessagePromptTemplate(prompt=PromptTemplate(input_variables=[], input_types={}, partial_variables={}, template='你是一个专业的翻译助手,将用户输入的英文翻译为中文'), additional_kwargs={}), HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['input'], input_types={}, partial_variables={}, template='{input}'), additional_kwargs={})]
response: 你好

从上述打印的translate_prompt中的

[SystemMessagePromptTemplate(prompt=PromptTemplate(input_variables=[], input_types={}, partial_variables={}, template='你是一个专业的翻译助手,将用户输入的英文翻译为中文'), additional_kwargs={}), HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['input']

可以看出:属性messages是一个模板列表,分别是系统和用户模板

LangChain的信息类型分为:system、user、assistant、tool、function 

MessagesPlaceholder

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.output_parsers import StrOutputParser
from langchain_core.messages import HumanMessage# 调用一个大模型,qwen的开源,可以自己获取
translate_llm = ChatOpenAI(base_url="https://llm.xxxxxx.com/v1/",openai_api_key="sk-xxxxxxxx",model_name="qwen2.5-instruct")
# 创建一个提示词模板,变量即为用户输入的英文
translate_prompt = ChatPromptTemplate.from_messages([("system", "你是一个专业的翻译助手,将用户输入的英文翻译为中文"), MessagesPlaceholder("input")]
)
print("translate_prompt:", type(translate_prompt))
print("translate_prompt:", translate_prompt)
# 构造链,最终以字符串格式输出
model = translate_prompt | translate_llm | StrOutputParser()# 调用链
response = model.invoke({"input":[HumanMessage(content="hi!")]})
print("response:", response)
# 输出内容translate_prompt: <class 'langchain_core.prompts.chat.ChatPromptTemplate'>
translate_prompt: input_variables=['input'] input_types={'input': list[typing.Annotated[typing.Union[typing.Annotated[langchain_core.messages.ai.AIMessage, Tag(tag='ai')], typing.Annotated[langchain_core.messages.human.HumanMessage, Tag(tag='human')], typing.Annotated[langchain_core.messages.chat.ChatMessage, Tag(tag='chat')], typing.Annotated[langchain_core.messages.system.SystemMessage, Tag(tag='system')], typing.Annotated[langchain_core.messages.function.FunctionMessage, Tag(tag='function')], typing.Annotated[langchain_core.messages.tool.ToolMessage, Tag(tag='tool')], typing.Annotated[langchain_core.messages.ai.AIMessageChunk, Tag(tag='AIMessageChunk')], typing.Annotated[langchain_core.messages.human.HumanMessageChunk, Tag(tag='HumanMessageChunk')], typing.Annotated[langchain_core.messages.chat.ChatMessageChunk, Tag(tag='ChatMessageChunk')], typing.Annotated[langchain_core.messages.system.SystemMessageChunk, Tag(tag='SystemMessageChunk')], typing.Annotated[langchain_core.messages.function.FunctionMessageChunk, Tag(tag='FunctionMessageChunk')], typing.Annotated[langchain_core.messages.tool.ToolMessageChunk, Tag(tag='ToolMessageChunk')]], FieldInfo(annotation=NoneType, required=True, discriminator=Discriminator(discriminator=<function _get_type at 0x7fba0c05d440>, custom_error_type=None, custom_error_message=None, custom_error_context=None))]]} partial_variables={} messages=[SystemMessagePromptTemplate(prompt=PromptTemplate(input_variables=[], input_types={}, partial_variables={}, template='你是一个专业的翻译助手,将用户输入的英文翻译为中文'), additional_kwargs={}), MessagesPlaceholder(variable_name='input')]
response: 你好!

与之前相比:属性messages是一个模板列表,分别是系统和信息占位符模板

关于提示词模板不止这三个,但是主要就这三类

版权声明:

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

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