首页 > 其他分享 >软件测试/人工智能|一文告诉你LangChain核心模块chains原理

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

时间:2023-11-29 17:12:36浏览次数:47  
标签:key prompt Chain chain LangChain llm LLMChain chains 软件测试

简介

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

下面是chain的各种类型

设计思路

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

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

运用实践

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

LLMChain

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

代码如下:


# 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的原理以及一些基础的应用,希望本文能够帮助到大家。

获取更多技术资料,请点击!

在这里插入图片描述

标签:key,prompt,Chain,chain,LangChain,llm,LLMChain,chains,软件测试
From: https://www.cnblogs.com/hogwarts/p/17865327.html

相关文章

  • langchain中的chat models介绍和使用
    简介之前我们介绍了LLM模式,这种模式是就是文本输入,然后文本输出。chatmodels是基于LLM模式的更加高级的模式。他的输入和输出是格式化的chatmessages。一起来看看如何在langchain中使用cahtmodels吧。chatmodels的使用首先langchain对chatmodels下支持的模型就少很多了。一方......
  • 使用LangChain与ChatGLM实现本地知识库(一)
      本篇主要内容为介绍ChatGLM3的安装使用,后续才会涉及到使用LangChain实现本地知识库的内容;  ChatGLM为智谱与清华大学开源的一个大语言模型,支持多轮对话、内容创作等,ChatGLM3-6B为ChatGLM3系列中门槛相对较低的一个,本地部署提供兼容OpenAI的API;  LangChain用于快速开发基......
  • 软件测试/人工智能|基于录制的接口测试用例自动生成技术探究
    导言在现代软件开发中,接口测试是确保系统功能和性能的关键步骤。然而,手动编写接口测试用例往往耗费大量时间和资源。基于录制的接口测试用例自动生成技术通过简化这个流程,显著提高了测试效率和准确性。录制接口测试用例自动生成技术简介录制接口测试用例自动生成技术允许开发......
  • 软件测试/人工智能|使用 GraphWalker 实现自动化测试用例生成
    导言在软件开发中,测试是确保代码质量和稳定性的关键步骤之一。而自动生成测试用例可以大大提高测试效率和覆盖率。GraphWalker是一个基于模型的测试工具,能够帮助开发者通过定义和遍历图模型来自动生成高质量的测试用例。GraphWalker简介GraphWalker是一个开源的测试工具,它......
  • TS版LangChain实战:基于文档的增强检索(RAG)
    LangChainLangChain是一个以LLM(大语言模型)模型为核心的开发框架,LangChain的主要特性:可以连接多种数据源,比如网页链接、本地PDF文件、向量数据库等允许语言模型与其环境交互封装了ModelI/O(输入/输出)、Retrieval(检索器)、Memory(记忆)、Agents(决策和调度)等核心组件可以使用链......
  • 软件测试/人工智能|探究 LangChain 核心模块:PromptsModelsParsers
    简介LangChain是一种新兴的语言处理平台,其核心模块之一即PromptsModelsParsers。这一模块扮演着关键的角色,为LangChain的功能和性能提供了坚实的基础。在这篇文章中,我们将深入探讨PromptsModelsParsers模块的工作原理、功能和其对语言处理的重要性。什么是PromptsModels......
  • 软件测试/人工智能|什么是LangChain,这篇文章告诉你
    简介随着人工智能和自然语言处理技术的飞速发展,我们越来越依赖机器来理解、生成和处理语言。在这样的背景下,LangChain应运而生,它旨在构建一个高效、强大的语言处理生态系统,将人类语言与智能技术紧密相连。LangChain的核心概念LangChain是一个基于区块链技术的语言处理平台,它利用去......
  • 软件测试/人工智能|LangChain Memory模块:开启语言数据的存储与回忆之旅
    简介大多数大模型应用中都包含对话功能,而对话功能的基础就是参与者能够基于已经发生的对话和获取到的知识产生新的对话内容。更复杂一点的场景中对话者甚至需要具有一个完整的对世界的认知,再根据对话中的信息对认知不断的进行迭代更新。随着人工智能和自然语言处理技术的飞速发展,语......
  • 如何在langchain中对大模型的输出进行格式化
    简介我们知道在大语言模型中,不管模型的能力有多强大,他的输入和输出基本上都是文本格式的,文本格式的输入输出虽然对人来说非常的友好,但是如果我们想要进行一些结构化处理的话还是会有一点点的不方便。不用担心,langchain已经为我们想到了这个问题,并且提出了完满的解决方案。lan......
  • 建议学习软件测试吗?不建议!
    相比较大多数行业,IT行业薪资比较高。如果你问我,是否建议学习软件测试。我的回答是,不建议!学历太高不建议学习,你可以挑战天花板更高的软件开发行业;学历太低不建议学习,没有全日制专科以上学历基本找不到工作;年龄太大不建议学习,软件测试可能同样存在年龄歧视;不想编程不建议学习,......