在人工智能的浪潮中,大型语言模型(LLM)逐渐成为推动科技进步的重要力量。而LangChain,作为一个专为LLM应用开发设计的框架,凭借其模块化和高效性,受到了广泛关注。本文将深入浅出地讲解LangChain中的四个基础组件:PromptTemplate、LLMs、Chain和OutputParser,帮助入门者快速上手。
一、PromptTemplate
PromptTemplate是LangChain中用于生成提示(Prompt)的可重复方式。它包含一个文本字符串模板,可以接受来自最终用户的一组参数并生成提示。这极大地简化了针对不同情况同类型问题的Prompt设计。
示例1:使用PromptTemplate
from langchain_core.prompts import PromptTemplate template = "您是新公司的命名顾问。生产{product}的公司起什么好名字?"
prompt_template = PromptTemplate.from_template(template)
prompt = prompt_template.format(product="彩色袜子")
print(prompt) # 输出: 您是新公司的命名顾问。一家生产彩色袜子的公司起什么名字好呢?
示例2:使用FewShotPromptTemplate
FewShotPromptTemplate是在PromptTemplate基础上,增加了few-shot examples,帮助语言模型生成更好的响应。
from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate # 创建few-shot examples
examples = [ {"word": "happy", "antonym": "sad"}, {"word": "tall", "antonym": "short"},
] # 定义模板
example_formatter_template = "Word: {word} Antonym: {antonym}\n"
example_prompt = PromptTemplate(input_variables=["word", "antonym"], template=example_formatter_template) # 创建FewShotPromptTemplate
few_shot_prompt_template = FewShotPromptTemplate(prompt_template=example_prompt, examples=examples)
formatted_prompt = few_shot_prompt_template.format(word="big", antonym="small")
print(formatted_prompt)
# 输出:
# Word: happy Antonym: sad
# Word: tall Antonym: short
# Word: big Antonym: small
二、LLMs
LLMs(Large Language Models)是LangChain的核心组件之一。LangChain提供了一个标准接口来调用不同的LLM,例如OpenAI的GPT系列。
示例:LLM
from langchain.chat_models import ChatOpenAI # 初始化ChatOpenAI模型
model = ChatOpenAI(model="gpt-3.5-turbo", openai_api_key="你的API_KEY", openai_api_base="你的API_BASE") # 发送请求
response = model.invoke([{"content": "Translate this sentence from English to French: I love programming."}])
print(response)
更完整的例子
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
import os # 设置OpenAI API密钥
os.environ["OPENAI_API_KEY"] = 'your_openai_api_key' # 创建PromptTemplate
prompt_template = PromptTemplate.from_template("请写一篇关于{topic}的文章") # 创建LLMChain,并指定使用的LLM和PromptTemplate
llm = ChatOpenAI(model_name='gpt-3.5-turbo', temperature=0.7)
chain = LLMChain(llm=llm, prompt=prompt_template) # 使用LLMChain生成文章
generated_text = chain.run(input_data={"topic": "人工智能的未来"})
print(generated_text)
三、Chain
Chain在LangChain中代表一系列按顺序执行的任务或操作。这些任务通常涉及与语言模型的交互,可以看作处理输入、执行一系列决策和操作,最终产生输出的流程。。Chain可以嵌套和组合,以构建复杂的流程
示例1:简单顺序链(SimpleSequentialChain)
简单顺序链适用于顺序执行的任务,即上一条链的输出自动作为下一条链的输入。
from langchain.chains import SimpleSequentialChain, LLMChain
from langchain.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatOpenAI # 创建两个LLMChain
prompt_1 = ChatPromptTemplate.from_template("请描述一个{product}的特点")
chain_1 = LLMChain(llm=ChatOpenAI(model_name='gpt-3.5-turbo'), prompt=prompt_1) prompt_2 = ChatPromptTemplate.from_template("根据上述特点,为{product}写一个广告词")
chain_2 = LLMChain(llm=ChatOpenAI(model_name='gpt-3.5-turbo'), prompt=prompt_2) # 创建SimpleSequentialChain
chain_ss = SimpleSequentialChain(chains=[chain_1, chain_2], verbose=True) # 使用SimpleSequentialChain
output = chain_ss.run(input_data={"product": "智能手机"})
print(output)
示例2:一般顺序链(SequentialChain)
from langchain.chains import SequentialChain, LLMChain
from langchain.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatOpenAI # 创建多个LLMChain,并指定输出变量名
prompt_1 = ChatPromptTemplate.from_template("请将以下评论翻译成中文:\n\n{Review}")
chain_1 = LLMChain(llm=ChatOpenAI(model_name='gpt-3.5-turbo'), prompt=prompt_1, output_key='中文_评论') prompt_2 = ChatPromptTemplate.from_template("请用一句话总结这篇中文评论:\n\n{中文_评论}")
chain_2 = LLMChain(llm=ChatOpenAI(model_name='gpt-3.5-turbo'), prompt=prompt_2, output_key='中文_总结') # 创建SequentialChain,并指定输入和输出变量
chain_seq = SequentialChain(chains=[chain_1, chain_2], input_variables=['Review'], output_variables=['中文_评论', '中文_总结']) # 使用SequentialChain
review = "This is a great product!"
output = chain_seq.run(input_data={"Review": review})
print(output)
一般顺序链用于处理稍微复杂一些的情况,即可能有多个输入及输出。
示例3:使用|构建Chain
LangChain提供了多种方式将Chain组合起来,其中使用管道符|是一种既方便书写又表达力强劲的方式。
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate model = ChatOpenAI(model="gpt-4o-mini")
prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
chain = prompt | model | StrOutputParser()
chain.invoke({"topic": "bears"})
四、OutputParser
在LangChain中,OutputParser用于解析LLM或其他组件生成的输出。OutputParser可以根据应用需求进行自定义,以提取有用的信息或进行进一步的处理。
示例1:使用CommaSeparatedListOutputParser
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI # 定义Prompt
prompt = ChatPromptTemplate.from_messages([ ("system", "{parser_instructions}"), ("human", "列出{cityName}的{viewPointNum}个著名景点。")
]) # 初始化OutputParser
output_parser = CommaSeparatedListOutputParser()
parser_instructions = output_parser.get_format_instructions() # 生成最终Prompt并执行
final_prompt = prompt.invoke({"cityName": "南京", "viewPointNum": 3, "parser_instructions": parser_instructions})
model = ChatOpenAI(model="gpt-3.5-turbo", openai_api_key="你的API_KEY", openai_api_base="你的API_BASE")
response = model.invoke(final_prompt)
parsed_output = output_parser.invoke(response)
print(parsed_output) # 输出格式化的景点列表
示例2:使用PydanticOutputParser
from langchain.output_parsers import PydanticOutputParser
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field # 定义数据结构类
class BookInfo(BaseModel): book_name: str = Field(description="书籍的名字") author_name: str = Field(description="书籍的作者") genres: list = Field(description="书籍的体裁") # 初始化OutputParser
output_parser = PydanticOutputParser(pydantic_object=BookInfo)
parser_instructions = output_parser.get_format_instructions() # 定义Prompt并执行
prompt = ChatPromptTemplate.from_messages([ ("system", "{parser_instructions} 你输出的结果请使用中文。"), ("human", "请你帮我从书籍的概述中,提取书名、作者,以及书籍的体裁。书籍概述如下:#{book_introduction}#")
])
book_introduction = "《朝花夕拾》原名《旧事重提》..." # 书籍概述内容
final_prompt = prompt.invoke({"book_introduction": book_introduction, "parser_instructions": parser_instructions})
model = ChatOpenAI(model="gpt-3.5-turbo", openai_api_key="你的API_KEY", openai_api_base="你的API_BASE")
response = model.invoke(final_prompt)
parsed_output = output_parser.invoke(response)
print(parsed_output) # 输出格式化的书籍信息
五、结语
LangChain是一个强大的框架,它通过将LLM、Prompt、Chain和OutputParser等组件结合在一起,为开发者提供了一个灵活、可扩展的平台来构建和管理LLM应用。
从Prompt的设计到LLM的选择,再到Chain的构建和OutputParser的使用,LangChain的每个组件都扮演着重要的角色。通过学习和掌握这些概念,开发者可以更加高效地利用LangChain来构建复杂、智能的应用。
希望这篇Blog能帮助大家更好地理解和使用LangChain框架。如果你对LangChain或大型语言有任何模型疑问或想法,欢迎在评论区留言与我交流!
在大模型时代,我们如何有效的去学习大模型?
现如今大模型岗位需求越来越大,但是相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
掌握大模型技术你还能拥有更多可能性:
• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;
• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;
• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;
• 更优质的项目可以为未来创新创业提供基石。
可能大家都想学习AI大模型技术,也_想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把都打包整理好,希望能够真正帮助到大家_。
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈
一、AGI大模型系统学习路线
很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,下面是我整理好的一套完整的学习路线,希望能够帮助到你们学习AI大模型。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF书籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型各大场景实战案例
结语
【一一AGI大模型学习 所有资源获取处(无偿领取)一一】
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈