赞
踩
本文将基于上一篇文章的结果进行开发,主要内容为:
帮助读者快速构建RAG应用,并部署在阿里云服务器上;
与LLM API
原生调用方法不同,在LangChain
中,LLM调用过程高度抽象,其由模型(Model) 、提示词模版(Prompt Template) 、 输出解析器(Output parser) 组成;如上图所示:
提示词模版
:将用户输入添加到一个提示词模板中,这个提示词模版提供有关当前特定任务的附加上下文,构建出适用于特定任务的提示词;模型
:LangChain
集成的各大平台模型,如ChatGPT、Claude、Mistral、ChatGLM;输出解析器
:OutputParsers
将LLM的原始输出转换为可以在下游使用的格式,如json
;具体内容如下:
作者在本系列的第一篇文章中就强调:提示词工程是LLM开发者重要的知识基础和必备技能,而此处的提示词模版就是提示词工程的一个应用载体
;通过构建提示词模版,我们可以减少开发过程中的输入,优化用户体验,提高RAG应用处理速度;
ini
复制代码
# 原生构建提示词模版
template = """请你将由三个反引号分割的文本翻译成英文!\
text: ```{text}```
"""
# 用户输入
text = "Babylon是一个开源的JavaScript解析器和代码转换工具,用于分析和转换JavaScript代码。它是由Microsoft开发的,旨在提供一个高性能、可扩展和可靠的解析器,用于支持各种JavaScript工具和框架。"
# prompt打包
prompt = template.format(text=text)
print(prompt)
运行查看结果:
ini 复制代码 # LangChain实现 from langchain.prompts.chat import ChatPromptTemplate # system prompt template template = "你当前是一个翻译助手,请将 {input_language} 翻译成 {output_language}." human_template = "翻译内容:{text}" chat_prompt = ChatPromptTemplate.from_messages([ ("system", template), ("human", human_template), ]) text = "Babylon是一个开源的JavaScript解析器和代码转换工具,用于分析和转换JavaScript代码。" messages = chat_prompt.format_messages(input_language="中文", output_language="英文", text=text) print(messages) print("---------") print(messages[0].content)
运行查看结果:
可以看到,在LangChain
中,ChatPromptTemplate
不仅支持用户输入HumanMessage
的提示词模版,也支持系统提示system prompt
的提示词模版;通过区分系统提示词和用户输入提示词,可以在进行重复性任务时,固定system prompt
,只改变用户输入以降低工作量和时间成本;
Langchain中,一个
ChatPromptTemplate
是一个ChatMessageTemplate
的列表。
ChatMessageTemplate
系统提示词模版,ChatMessageTemplate
用户输入提示词模版
我们将打包好的提示词输入给LLM输出一下:
ini 复制代码 # 运行测试 import os import openai from dotenv import load_dotenv, find_dotenv from langchain_mistralai.chat_models import ChatMistralAI # 读取本地/项目的环境变量。 # find_dotenv()寻找并定位.env文件的路径 # load_dotenv()读取该.env文件,并将其中的环境变量加载到当前的运行环境中 _ = load_dotenv(find_dotenv()); # 如果环境变量是全局的,这行代码可以省略 # 获取环境变量 OPENAI_API_KEY api_key = os.environ['MISTRAL_API_KEY'] # 实例化一个ChatMistralAI类:然后设置其Mistral API_KEY; llm = ChatMistralAI(api_key=api_key) print(llm) # 做一个输出 output = llm.invoke(messages) print(output.content) # 其返回结果也是一个Message对象
可以看到,内容已经成功翻译;
在过去的文章中,作者说明了LLM是RAG应用的核心,而LangChain
提供了对于多种大模型的封装,基于 LangChain
的接口可以便捷地调用 LLM
并将其集成在以 LangChain
为基础框架搭建的RAG个人应用中 本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/972413
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。