软件测试/人工智能|一文告诉你LangChain核心模块chains原理

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 软件测试/人工智能|一文告诉你LangChain核心模块chains原理

image.png

简介

Chain是LangChain的核心模块之一,它将每个零散的逻辑串联成一整个业务流程,相当于是所有复杂逻辑的基础,由此可见chain的重要性非比寻常。本文就来给大家介绍一下Chain模块的原理。

下面是chain的各种类型

image.png

设计思路

LangChain 能火爆的主要原因之一就是Chain 的设计非常巧妙,它的设计思路如下图:

image.png

如图所示,Chain可以根据需求,将各种能力拼接整合,因此,Chain可以包含多个模块;当然,我们也可以定制只使用 Prompt 和 LLM 模块的LLMChain。

运用实践

Chains主要包含以下几个模块,在我们的实践演练中,将会演示这几个模块的使用。

image.png

LLMChain

LLMChain是一个整合语言模型和提示模板的最简单链,如下图:

image.png

代码如下:


# LangChain相关模块的导入
from langchain import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

# 加载个人的OpenAI Token
key = 'open_ai_key'
# 创建OpenAI调用实例
# 本示例中为了让结果更具有创造性,temperature设置为0.9
llm = ChatOpenAI(temperature=0.9, openai_api_key=key)
# 根据prompt模板生成prompt实例
prompt = ChatPromptTemplate.from_template(
    "请给生产: {product} 的工厂起一个恰当的厂名,并给出一句广告语。"
)
# 组合大模型实例和prompt实例,生成LLMChain实例,将结构固定,方便复用
chain = LLMChain(
    # 大模型实例
    llm=llm,
    # prompt实例
    prompt=prompt,
    # 开启详细模式,会将大模型调用细节输出到控制台
    verbose=True
)
# 通过run方法,传入模版中需要的参数,调用大模型获取结果
product = "Huawei Mate60 Pro"
res = chain.run(product)
print(res)

--------------
输出结果如下:
厂名:华夏技术有限公司
广告语:轻舟已过万重山

SimpleSequentialChain

串联式调用语言模型链的一种,简单的串联每个步骤(Chain 实例),每个步骤都有单一的输入/输出,并且一个步骤的输入是下一个步骤的输出。


# LangChain相关模块的导入
from langchain import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import SimpleSequentialChain
# 加载个人的OpenAI Token
key = 'open_ai_key'


# 创建OpenAI调用实例
# temperature用来设置大模型返回数据的随机性和创造性,较低的数值返回的数据就更贴近现实。
llm = ChatOpenAI(temperature=0.9, openai_api_key=key)
# 第一个LLM请求的prompt模板
first_prompt = ChatPromptTemplate.from_template(
    "请给生产 {product} 的工厂起一个恰当的厂名"
)
# 第一个Chain,接收外部输入,根据模版请求大模型获取输出,作为第二个Chain的输入
chain_one = LLMChain(llm=llm, prompt=first_prompt, verbose=True)
# 第二个大模型请求的prompt模版
second_prompt = ChatPromptTemplate.from_template(
    "为厂名写一段广告语: {company_name}"
)
# 第二个Chain,接收第一个Chain的输出,根据模版请求大模型获取输出
chain_two = LLMChain(llm=llm, prompt=second_prompt, verbose=True)
# 将请求拆分成两个Chain,可以针对每段请求细化相应的prompt内容,得到更准确更合理的结果,并且也可以复用其中的每个Chain实例
# 使用SimpleSequentialChain将两个Chain串联起来,其中每个Chain都只支持一个输入和一个输出,根据chains列表中的顺序,将前一个Chain的输出作为下一个Chain的输入
overall_simple_chain = SimpleSequentialChain(
    chains=[chain_one, chain_two],
    verbose=True
)
# 第一个Chain需要的输入
product = "比亚迪 秦plus dmi"
# 通过run方法,传入参数,逐个运行整个Chain后,获取最终的结果
res = overall_simple_chain.run(product)
print(res)

-----------
输出结果如下:
比亚迪汽车有限公司

比亚迪,传统汽车颠覆者

SequentialChain

串联式调用语言模型链的一种,序列中的每个 Chain 实例都支持多个输入和输出,最终 SequentialChain 运行时根据 Chains 参数和每个 Chain 示例中设定的参数,分析每个实例所需的参数并按需传递。代码示例:


import langchain
# LangChain相关模块的导入
from langchain import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import SequentialChain

# 在全局范围开启详细模式,能将调用大模型时发送的数据打印到控制台,绿色文本
langchain.verbose = True

key = 'open_ai_key'

# 本示例中为了让结果更具有创造性,temperature设置为0.9
llm = ChatOpenAI(temperature=0.9, openai_api_key=key)

# Chain1 语言转换,产生英文产品名
prompt1 = ChatPromptTemplate.from_template(
    "将以下文本翻译成英文: {product_name}"
)
chain1 = LLMChain(
    # 使用的大模型实例
    llm=llm,
    # prompt模板
    prompt=prompt1,
    # 输出数据变量名
    output_key="english_product_name",
)
# Chain2 根据英文产品名,生成一段英文介绍文本
prompt2 = ChatPromptTemplate.from_template(
    "Based on the following product, give an introduction text about 100 words: {english_product_name}"
)
chain2 = LLMChain(
    llm=llm,
    prompt=prompt2,
    output_key="english_introduce"
)
# Chain3 找到产品名所属的语言
prompt3 = ChatPromptTemplate.from_template(
    "下列文本使用的语言是什么?: {product_name}"
)
chain3 = LLMChain(
    llm=llm,
    prompt=prompt3,
    output_key="language"
)
# Chain4 根据Chain2生成的英文介绍,使用产品名称原本的语言生成一段概述
prompt4 = ChatPromptTemplate.from_template(
    "使用语言类型为: {language} ,为下列文本写一段不多于50字的概述: {english_introduce}"
)
chain4 = LLMChain(
    llm=llm,
    prompt=prompt4,
    output_key="summary"
)
# 标准版的序列Chain,SequentialChain,其中每个chain都支持多个输入和输出,
# 根据chains中每个独立chain对象,和chains中的顺序,决定参数的传递,获取最终的输出结果
overall_chain = SequentialChain(
    chains=[chain1, chain2, chain3, chain4],
    input_variables=["product_name"],
    output_variables=["english_product_name", "english_introduce", "language", "summary"],
    verbose=True
)
product_name = "黄油啤酒"
res = overall_chain(product_name)
print(res)

LLMRouteChain

以下是一段非常简单的 Python 代码。实现的主要是分支判断的作用。


if a == 1:
    print("我爱踢足球")
elif b == 1:
    print("我爱打篮球")
else:
    print("我爱打游戏")

而 LLMRouteChain 的主要作用是能根据提示词的不同而选择不同的Chain进行执行。而实现这一需求,需要以下3个模块结合完成,也是MultiPromptChain的三个参数,以下内容是摘取的部分源码:
class MultiPromptChain(MultiRouteChain):
"""A multi-route chain that uses an LLM router chain to choose amongst prompts."""

    router_chain: RouterChain
"""Chain for deciding a destination chain and the input to it."""
    destination_chains: Mapping[str, LLMChain]
"""Map of name to candidate chains that inputs can be routed to."""
    default_chain: LLMChain
"""Default chain to use when router doesn't map input to one of the destinations."""

总结

本文主要介绍了LangChain核心模块Chain的原理以及一些基础的应用,希望本文能够帮助到大家。

image.png

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
3天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的2FSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的2FSK调制解调系统,包含高斯信道、误码率统计模块及testbench。系统增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同SNR下的硬件测试,并提供操作视频指导。理论部分涵盖频移键控(FSK)原理,包括相位连续与不连续FSK信号的特点及功率谱密度特性。Verilog代码实现了FSK调制解调的核心功能,支持在不同开发板上移植。硬件测试结果展示了不同SNR下的性能表现。
23 6
|
23天前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法与应用
探索人工智能中的强化学习:原理、算法与应用
|
2月前
|
安全 Java 数据库
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
这篇文章是关于Apache Shiro权限管理框架的详细学习指南,涵盖了Shiro的基本概念、认证与授权流程,并通过Spring Boot测试模块演示了Shiro在单应用环境下的使用,包括与IniRealm、JdbcRealm的集成以及自定义Realm的实现。
49 3
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
|
23天前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法及应用
探索人工智能中的强化学习:原理、算法及应用
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
软件测试中的人工智能:改变游戏规则的革新
在这篇技术性文章中,我们将深入探讨人工智能(AI)如何彻底改变了软件测试领域。从自动化测试到智能缺陷检测,AI不仅提高了测试的效率和准确性,还为软件开发团队提供了前所未有的洞察力。通过具体案例,本文揭示了AI在软件测试中应用的现状、挑战及未来趋势,强调了技术创新在提升软件质量与开发效率中的关键作用。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
软件测试中的人工智能:提升效率与准确性的新途径
在当今快速发展的技术领域,人工智能(AI)正成为软件测试的重要工具。本文将探讨AI在软件测试中的应用,如何通过智能化手段提高测试的效率和准确性。从自动化测试到缺陷预测,我们将深入了解AI如何改变传统的软件测试方式,为软件开发流程带来革命性的变化。
|
2月前
|
计算机视觉
目标检测笔记(二):测试YOLOv5各模块的推理速度
这篇文章是关于如何测试YOLOv5中不同模块(如SPP和SPPF)的推理速度,并通过代码示例展示了如何进行性能分析。
122 3
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
软件测试中的人工智能:现状与未来
【10月更文挑战第6天】 本文探讨了人工智能在软件测试中的应用,包括自动化测试、智能缺陷分析以及测试用例生成等方面。通过案例分析和未来趋势预测,文章展示了AI如何提高软件测试的效率和准确性,并指出了当前面临的挑战和未来的发展方向。
50 1
|
2月前
|
机器学习/深度学习 人工智能 监控
软件测试中的人工智能革命
本文探讨了人工智能在软件测试中的应用及其带来的变革。通过分析AI如何提高测试效率、准确性,并减少人工干预,本文揭示了软件测试领域的未来趋势。
|
2月前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
38 0
下一篇
DataWorks