LangChain实战:开一家食疗干货店
LangChain好理解,Lang代表大语言模型,OpenAI还是Gemini,或是国产大模型,都OK。我也是在学习一段时间的OpenAI后,投入到LangChain的怀抱,有了LangChainLLM是可拔插的,也让我们更好的投入到AI产品业务中,LangChain提供了Models 模块统一封装,并做了解耦。Chain是链的意思,它肯定是LangChain的核心。这篇文章,我们一起来动用实践链
前言
LangChain
好理解,Lang
代表大语言模型,OpenAI
还是Gemini
,或是国产大模型,都OK。我也是在学习一段时间的OpenAI
后,投入到LangChain
的怀抱,有了LangChain
,LLM
是可拔插的,也让我们更好的投入到AI产品业务中,LangChain
提供了Models 模块统一封装,并做了解耦。
Chain
是链的意思,它肯定是LangChain
的核心。这篇文章,我们一起来动用实践链式调用一些组件,完成相应功能。
Chain
在学到Chain
这个核心模块的时候,让我老想到那句口头禅,还要什么自行车。下图是LangChain
的架构图,里面包含各大功能模块,连线的意思是这些模块相互关联,相互合作,一起完成AI任务,Chains
链接这些组件的功能。
Chain
的意义就在于简单,与开发工作流贴合,使其它模块更加模块化,又由Chain
组合成一个整体,即应用。LangChain
的这个设计确实很优秀,特别适合Web开发同学快速迁移到AI应用开发中,调试、维护应用程序因为Chain
好上手,项目更好理解。
- 链的用法
LangChain
为常用业务准备好了特定的业务链,比如LLMChain
,将链起用户输入、PromptTemplate、然后调用相应大模型,整个与LLm交流的过程都由LLMChain
打理,如丝般的顺滑。
单个链整合单个业务逻辑(内部),多条链(外部)串起整个应用,这就是LangChain
的链式思想,也让Chain
成为了AI应用开发的基本功能单元。
除了LLMChain,还有SequentialChain
(顺序链)、TransformChain
(转换链)、RouterChain
(路由链)等。接下来,我们来看一些Chain的介绍,大家也可以结合文档看看。
LLMChain
LLmChain
以目前最为主流的OpenAI为范型,基于AIGC的推理和完成特性,整合了PromptTemplate、语言模型或Chat模型、还有前几篇文章介绍的输出解释器(比如JSON格式输出),全部齐活。
我们可以这样理解,我们可以单独调用OpenAI,并根据其文档完成Completion或Chat的开发。LangChain
的职责是框架,职责是封装LLM的底层,让应用开发更流畅更优雅。Chain
模块做到了。
- 不使用Chain的代码
即LLM 和 Prompt不链起来,模块化感觉缺失。
- 提示词
# 引入Prompt 模板
from langchain import PromptTemplte
# 定义字符串模板
template = "{food}的食疗效果是?"
#实例化模板
prompt_temp = PromptTemplate.from_template(template)
# 根据模板生成提示词
prompt = prompt_temp.format(food="鸡汤炖海带")
print(prompt)
- 调用模型
from langchain import OpenAI
model = OpenAI(temperature=0)
result = model(prompt)
print(result)
输出:
鸡汤炖海带的食疗效果是? 可以补充体力,增加免疫力。特别是对于体质虚弱、消化不良、便秘等人群,更有明显的食疗效果
- 使用链
不使用链的时候,Prompt和LLM两个功能,感觉像两个孤岛,独立调用,与调用OpenAI接口相比,没什么高明。如果使用链,代码更具模块化,更好理解和组织代码,离开低级AI接口,上AI应用开发高速,LangChain
帮做好了基建。
# 导入PromptTemplate OpenAI LLMChain,链模块来了
from langchain import PromptTemplate, OpenAI, LLMChain
# 字符串模板
template = "{food}的食疗效果是?"
# 模型实例
llm = OpenAI(temperature=0)
# 实例化LLMChain llm和prompt合体
llm_chain = LLMChain(
llm=llm,
prompt=PromptTemplate.from_template(template))
# 调用LLMChain,返回结果
result = llm_chain("鸡汤炖海带")
print(result)
输出:
{‘food’: ‘鸡汤炖海带’, ‘text’: ‘\n\n可以补充体力,增加免疫力。特别是对于体质虚弱、消化不良、便秘等人群,更有明显的食疗效果。’}
链的调用方式
- 直接调用
llm_chain = LLMChain(llm=llm, prompt=prompt)
llm_chain({...})
将链对象,以函数的方式直接调用,是可以的。实际上,它调用的是该对象内部的__call__
方法。
- 通过run方法调用
也是调用该对象内部的__call__
方法。
- 通过predict方法调用
类似于run 方法,区别是给prompt的参数不是字典
result = llm_chain.predict(flower="鸡汤炖海带")
print(result)
- 通过apply 方法被调用
可以一次性给chain 提供多个输入,得到批量结果。
# apply允许您针对输入列表运行链
input_list = [
{"food": "鸡汤炖海带"},
{"food": "胡萝卜炒虾仁"},
{"flower": "药膳炖牛脚"}
]
result = llm_chain.apply(input_list)
print(result)
- 通过generate方法
类似于apply, 支持批量输入,但是返回的是LLMResult,而不是字符串。它会包含比apply更丰富的信息,让我们了解LLM工作的细节。在这里我们略过,大家可以看文档。
SequentialChain
小时候看圣斗士星矢的时候,被星云锁链美到了。最近几年,又有闪电五连鞭…,接下来,让我们用SequentialChain将各个链链起来,双节棍甩起来…
我们要开发一个这样的应用,假设你要为老喻干货店做一个AI应用,向我们的客户兜售一些有食疗效果的食材。首先,我们给定食疗的一些知识。接着,我们让模型假设是一位医生,对刚刚Chain生成的内容进行评价和指导,最后再基于这两份内容,让大模型写一篇运营软文,以便发到公众号。
# OpenAI 环境变量设置
import os
os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
# 引入相应的库
from langchain.llms import OpenAI
# 会用到多次
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# 链起多个链
from langchain.chains import SequentialChain
调用LLMChain, 生成食疗说明。
llm = OpenAI(temperature=.3)
template = """
你是一个食疗大厨。给定菜名,你需要为这种菜的食疗效果写一个300字左右的介绍。
菜名: {name}
大厨: 这是关于上述菜食疗效果的介绍:"""
prompt_template = PromptTemplate(input_variables=["name"], template=template)
introduction_chain = LLMChain(llm=llm, prompt=prompt_template, output_key="introduction")
接着,添加第二个 LLMChain,根据食谱的说明生成评论及指导意见。
llm = OpenAI(temperature=.5)
template = """
你是一位老中医。给定一种菜的食疗效果,你需要为这种食疗效果写一篇300字左右的评论,并给出指导意见。
食疗效果介绍:
{introduction}
大夫人对上述食疗效果的评论和指导意见:"""
prompt_template = PromptTemplate(input_variables=["introduction"], template=template)
review_chain = LLMChain(llm=llm, prompt=prompt_template, output_key="review")
接着,添加第三个 LLMChain,根据菜的介绍和评论写一篇自文章。
template = """
你是一家食疗干货店的社交媒体经理。给定一种菜的食疗效果介绍和评论,你需要为这种菜写一篇社交媒体的文章,500字。
菜的食疗效果介绍:
{introduction}
大夫对菜的评论:
{review}
社交媒体帖子:
"""
prompt_template = PromptTemplate(input_variables=["introduction", "review"], template=template)
social_post_chain = LLMChain(llm=llm, prompt=prompt_template, output_key="social_post_text")
最后 SequentialChain
把前面三个Chain链串起来,完成工作。
# ,我们按顺序串起这三个链
overall_chain = SequentialChain(
chains=[introduction_chain, review_chain, social_post_chain],
input_variables=["name"],
output_variables=["introduction","review","social_post_text"],
verbose=True)
# 运行链,并打印结果
result = overall_chain({"name":"鸡汤炖海带"})
print(result)
结果
> Entering new SequentialChain chain... > Finished chain. {'name': '鸡汤炖海带', 'introduction': '\n\n鸡汤炖海带是一道营养丰富的食疗菜,它可以帮助改善身体健康。鸡汤中含有丰富的蛋白质,可以帮助身体增强免疫力,改善消化系统,并有助于排毒。海带中含有大量的钙质,可以帮助身体保持健康的骨骼和牙齿,并有助于血液循环。此外,海带中还含', 'review': '\n\n鸡汤炖海带是一道营养丰富的食疗菜,可以帮助改善身体健康。鸡汤中含有丰富的蛋白质,可以帮助身体增强免疫力,改善消化系统,并有助于排毒。此外,海带中含有大量的钙质,可以帮助身体保持健康的骨骼和牙齿,并有助于血液循环。总的来说,', 'social_post_text': '\n刚刚烹饪完成的鸡汤炖海带,看起来可口,更重要的是,它是一道营养丰富的食疗菜,可以帮助改善身体健康!鸡汤中含有丰富的蛋白质,可以帮助身体增强免疫力,改善消化系统,并有助于排毒。海带中含有大量的钙质,可以帮助身体保持健康的骨骼'}
总结
- 了解了
LangChain
的链式魅力, - 实战各种链, 并使用SequntialChain把链再链起来,完成更复杂效果。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)