LangChain实战

前言

LangChain好理解,Lang代表大语言模型,OpenAI还是Gemini,或是国产大模型,都OK。我也是在学习一段时间的OpenAI后,投入到LangChain的怀抱,有了LangChain,LLM是可拔插的,也让我们更好的投入到AI产品业务中,LangChain提供了Models 模块统一封装,并做了解耦。

Chain是链的意思,它肯定是LangChain的核心。这篇文章,我们一起来动用实践链式调用一些组件,完成相应功能。

Chain

在学到Chain这个核心模块的时候,让我老想到那句口头禅,还要什么自行车。下图是LangChain的架构图,里面包含各大功能模块,连线的意思是这些模块相互关联,相互合作,一起完成AI任务,Chains链接这些组件的功能。

image.png

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不链起来,模块化感觉缺失。

  1. 提示词
# 引入Prompt 模板
from langchain import PromptTemplte
# 定义字符串模板
template = "{food}的食疗效果是?"
#实例化模板
prompt_temp = PromptTemplate.from_template(template)
# 根据模板生成提示词
prompt = prompt_temp.format(food="鸡汤炖海带")
print(prompt)


  1. 调用模型
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大模型资料包,需要的小伙伴文末免费领取哦,无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图

整个学习分为7个阶段
在这里插入图片描述

二、AI大模型实战案例

涵盖AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,皆可用。
在这里插入图片描述

三、视频和书籍PDF合集

从入门到进阶这里都有,跟着老师学习事半功倍。
在这里插入图片描述

在这里插入图片描述

如果二维码失效,可以点击下方链接,一样的哦
【CSDN大礼包】最新AI大模型资源包,这里全都有!无偿分享!!!

😝朋友们如果有需要的话,可以V扫描下方二维码联系领取~
在这里插入图片描述

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值