LangChain学习:chains

文章目录

    • 1. LLMChain
    • 2. SimpleSequentialChain
    • 3. SequentialChain
    • 4. LLMRouterChain

learn from https://learn.deeplearning.ai/langchain

1. LLMChain

from config import api_type, api_key, api_base, api_version, model_name
from langchain.chat_models import AzureChatOpenAI
from langchain.chains import LLMChain
from langchain.prompts import ChatPromptTemplatemodel = AzureChatOpenAI(openai_api_base=api_base,openai_api_version=api_version,deployment_name=model_name,openai_api_key=api_key,openai_api_type=api_type,temperature=0.5,
)
prompt = ChatPromptTemplate.from_template('帮我起一个最好的公司名,这个公司是生产{product}的')
chain = LLMChain(llm=model, prompt=prompt)
print(chain.run(product='护眼灯'))

输出

光明护眼灯制造有限公司

2. SimpleSequentialChain

  • Simple chain where the outputs of one step feed directly into next
    链的输出,直接给下一个链作为输入
from langchain.chains import SimpleSequentialChain
prompt1 = ChatPromptTemplate.from_template('帮我起一个最好的公司名,要求名字寓意好,与产品相关,这个公司是生产{product}的。')
chain1 = LLMChain(llm=model, prompt=prompt1)prompt2 = ChatPromptTemplate.from_template('写一个这个公司<{company_name}>的简介,对其公司的名字的由来和理念做解释,100字以内')
chain2 = LLMChain(llm=model, prompt=prompt2)all_chains = SimpleSequentialChain(chains=[chain1, chain2], verbose=True)
print(all_chains.run(input='儿童学习桌'))

让模型,给产品起一个公司名,并给这个公司名给出一个简介

输出:

> Entering new  chain...
启智桌(Qi Zhi Zhuo),寓意为启发孩子的智慧,与产品相关,简洁易记。
启智桌(Qi Zhi Zhuo)是一家致力于启发孩子智慧的教育公司。公司名字的由来是希望通过我们的产品,让孩子们在学习中获得启发和智慧。我们的理念是通过创新的产品设计和教育方式,帮助孩子们更好地掌握知识,培养他们的创造力和思维能力。我们的产品简洁易记,旨在让孩子们在学习中感到轻松愉快,达到快乐学习的效果。> Finished chain.
启智桌(Qi Zhi Zhuo)是一家致力于启发孩子智慧的教育公司。公司名字的由来是希望通过我们的产品,让孩子们在学习中获得启发和智慧。我们的理念是通过创新的产品设计和教育方式,帮助孩子们更好地掌握知识,培养他们的创造力和思维能力。我们的产品简洁易记,旨在让孩子们在学习中感到轻松愉快,达到快乐学习的效果。

3. SequentialChain

prompt1 = ChatPromptTemplate.from_template('翻译以下评论为英语,\n\n{review}')
chain1 = LLMChain(llm=model, prompt=prompt1, output_key='english_review')prompt2 = ChatPromptTemplate.from_template('你可以用一句话总结下下面的评论吗?\n\n{english_review}')
chain2 = LLMChain(llm=model, prompt=prompt2, output_key='summary')prompt3 = ChatPromptTemplate.from_template('下面的评论是什么语言的?\n\n{review}')
chain3 = LLMChain(llm=model, prompt=prompt3, output_key='language')prompt4 = ChatPromptTemplate.from_template('用给定的语言回复下面的文本\n\n文本:{summary}\n\n语言:{language}')
chain4 = LLMChain(llm=model, prompt=prompt4, output_key='response_msg')

可以看到,创建了4个链

在这里插入图片描述
如果没有 review 输入,执行会报错

overall_chain = SequentialChain(chains=[chain1, chain2, chain3, chain4],input_variables=["review"],output_variables=["english_review", "summary", "response_msg", "language"],verbose=True
)
output = overall_chain('这款手机我用了有一个月时间了,总体感觉非常不错,性价比很高,超出我的预期。先说说外观,这款手机设计极为简洁大方,背面用了全新的镜面工艺,摸上去手感冰凉顺滑,看上去高端大气。机身很轻巧,握在手里感觉非常好。屏幕采用了6.5寸OLED面板,色彩还原能力很强,无论看视频还是玩游戏都非常卓越流畅。最大亮点是续航能力强劲,我每天使用时间在4-5小时,基本两天才需要充电一次,轻用户甚至可以用上3-4天,不用频繁充电也是一个大的改进。手机的芯片也非常先进,我玩的游戏很流畅,基本能保持在60帧,也没有发现卡顿情况,很能满足我的需求。总的来说,这款手机在外观、续航、屏幕和性能各方面都进行了优化和改进,真心推荐大家购买,是我近期最满意的一款手机,五星好评!')
print(type(output))
print(output)

输出,是一个字典

<class 'dict'>
{'review': '这款手机我用了有一个月时间了,总体感觉非常不错,性价比很高,超出我的预期。先说说外观,这款手机设计极为简洁大方,背面用了全新的镜面工艺,摸上去手感冰凉顺滑,看上去高端大气。机身很轻巧,握在手里感觉非常好。屏幕采用了6.5寸OLED面板,色彩还原能力很强,无论看视频还是玩游戏都非常卓越流畅。最大亮点是续航能力强劲,我每天使用时间在4-5小时,基本两天才需要充电一次,轻用户甚至可以用上3-4天,不用频繁充电也是一个大的改进。手机的芯片也非常先进,我玩的游戏很流畅,基本能保持在60帧,也没有发现卡顿情况,很能满足我的需求。总的来说,这款手机在外观、续航、屏幕和性能各方面都进行了优化和改进,真心推荐大家购买,是我近期最满意的一款手机,五星好评!', 
'english_review': "I have been using this phone for a month now and overall, I feel it is very good and offers great value for money, exceeding my expectations. Let me start with the design, which is extremely simple and elegant. The back uses a new mirror process, giving it a cool and smooth feel, and a high-end look. The phone is very lightweight and feels great in the hand. The screen uses a 6.5-inch OLED panel, with strong color reproduction capabilities, making it great for watching videos or playing games with excellent smoothness. The biggest highlight is its strong battery life. I use it for 4-5 hours every day and it can last for two days on a single charge, even for light users, it can last up to 3-4 days, which is a major improvement. The phone's chip is also very advanced, allowing me to play games smoothly with a frame rate of around 60, without any lagging or stuttering, which fully meets my needs. Overall, this phone has been optimized and improved in terms of design, battery life, screen, and performance. I sincerely recommend everyone to buy it. It is the most satisfying phone I have used recently, and I give it a five-star rating!", 
'summary': 'The phone has a simple and elegant design, with a cool and smooth feel, and a high-end look. It offers great value for money, with a strong battery life and advanced chip, making it great for watching videos and playing games smoothly. It has been optimized and improved in terms of design, battery life, screen, and performance, and is highly recommended.', 
'response_msg': '这款手机设计简单而优雅,手感冷酷顺滑,外观高端大气。它性价比极高,拥有强大的电池寿命和先进的芯片,非常适合流畅观看视频和玩游戏。在设计、电池寿命、屏幕和性能方面进行了优化和改进,强烈推荐。','language': '中文'}

减少 output_variables 中的字段,输出就只有output_variables给定的字段 + 输入的字段(review)

4. LLMRouterChain

physics_template = '''
你是一位非常聪明的物理学教授,
你很善于简明扼要地回答有关物理学的问题,并且易于理解。
当你不知道问题的答案时,你就说你不知道。下面是问题:
{input}
'''math_template = '''
你是一位非常聪明的数学家,
你很善于回答有关数学的问题,你总能将一个很难的问题分解,并解决其中的难题,
最终完美的解决整体的问题。下面是问题:
{input}
'''history_template = '''
你是一位非常优秀的历史学家,
你对人有很好的了解和理解一系列历史时期的事件和背景。
你有思考、反思、辩论、讨论和评估过去。
你尊重历史证据以及利用它来支持你的解释和判断。下面是问题:
{input}
'''computerscience_template = '''
你是一位成功的计算机科学家,
你在创造力、协作、前瞻性思维,自信,解决问题的能力等方面非常强。
对理论和算法的理解深刻,有良好的沟通技能。
你非常擅长回答编码问题。
你之所以如此优秀,是因为你知道如何通过以必要的步骤描述解决方案,
机器可以很容易地解释,你知道如何衡量时间复杂性和空间复杂性,如何在两者中做出权衡。下面是问题:
{input}
'''prompt_infos = [{"name": "physics","description": "擅长回答物理问题","prompt_template": physics_template},{"name": "math","description": "擅长回答数学问题","prompt_template": math_template},{"name": "history","description": "擅长回答历史问题","prompt_template": history_template},{"name": "computer science","description": "擅长回答计算机科学问题","prompt_template": computerscience_template}
]

创建了4种回答问题的提示词,让模型自己选择使用哪种

from langchain.chains.router import MultiPromptChain
from langchain.chains.router.llm_router import LLMRouterChain, RouterOutputParser
from langchain.prompts import PromptTemplatedestination_chains = {}
for p_info in prompt_infos:name = p_info["name"]prompt_template = p_info["prompt_template"]prompt = ChatPromptTemplate.from_template(template=prompt_template)chain = LLMChain(llm=model, prompt=prompt)destination_chains[name] = chaindestinations = [f"{p['name']}: {p['description']}" for p in prompt_infos]
destinations_str = "\n".join(destinations)default_prompt = ChatPromptTemplate.from_template("{input}")
default_chain = LLMChain(llm=model, prompt=default_prompt)print(destinations_str)

输出的 destinations_str

physics: 擅长回答物理问题
math: 擅长回答数学问题
history: 擅长回答历史问题
computer science: 擅长回答计算机科学问题
MULTI_PROMPT_ROUTER_TEMPLATE = '''
将原始文本输入到语言模型,请选择最适合的模型提示词。
您将获得可用提示词的 name 和 description 
如果您认为修改原始输入,也可以修改,如果它最终将导致来自语言模型的更好的响应。
<<格式化>>
返回2个带有JSON对象的标记代码片段,该JSON对象的格式如下:
```json
{{{{
"destination": string \要使用的提示词的 name 或 "DEFAULT",
"next_inputs": string \原始输入的可能修改版本
}}}}
``请记住:"destination" 必须是候选提示词之一,如果没有满足的提示词,则可以是 "DEFAULT"
请记住:如果你认为不需要任何修改的话,"next_inputs" 只能是原始输入。
<<候选提示词>>
{destinations}
<<输入>>
{{input}}<<输出(请记住包含``json)>>
'''router_template = MULTI_PROMPT_ROUTER_TEMPLATE.format(destinations=destinations_str
)

router_template是下面这个样子
在这里插入图片描述

router_prompt = PromptTemplate(template=router_template,input_variables=["input"],output_parser=RouterOutputParser(),
)router_chain = LLMRouterChain.from_llm(model, router_prompt)chain = MultiPromptChain(router_chain=router_chain,destination_chains=destination_chains,default_chain=default_chain, verbose=True)chain.run({"input": "什么是中微子?"})
chain.run({"input": "sin 运算有什么用?"})
chain.run({"input": "为什么清朝会灭亡?"})
chain.run({"input": "为什么操作系统存储下标从0开始?"})
chain.run({"input": "谁发现的DNA结构?"})

输出

> Entering new MultiPromptChain chain...
physics: {'input': '什么是中微子?'}
> Finished chain.> Entering new MultiPromptChain chain...
math: {'input': 'sin 运算有什么用?'}
> Finished chain.> Entering new MultiPromptChain chain...
history: {'input': '为什么清朝会灭亡?'}
> Finished chain.> Entering new MultiPromptChain chain...
computer science: {'input': '为什么操作系统存储下标从0开始?'}
> Finished chain.> Entering new MultiPromptChain chain...
history: {'input': '谁发现的DNA结构?'}
> Finished chain.

可以看到,模型使用了正确的模板

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16466.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度CTO王海峰做客《中国经济大讲堂》:文心一言,读书破万亿

当下&#xff0c;大语言模型热度空前&#xff0c;诸如文心一言、ChatGPT 等已经能够与人对话互动、回答问题、协助创作&#xff0c;逐渐应用于人们的工作和生活&#xff0c;也引发了社会热议。近日&#xff0c;百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰再…

「文心一言」内测详细使用体验

★观前提示&#xff1a;以下内容仅为内测测试内容&#xff0c;不代表未来正式版如何&#xff0c;或许你认为它与chatgpt仍有不小的差距&#xff0c;或许你认为它目前做的已经不错了&#xff0c;都可以&#xff0c;但是咱们测试体验&#xff0c;只讲述体验&#xff0c;本篇文章不…

mysql数据库介绍

&#x1f49c;今天对mysql的一些基础概念进行讲诶横扫&#xff0c;如概念、特点、优势、发展历史等等。对之前内容感兴趣的同学可以参考&#x1f447;&#xff1a; 链接: mysql学习之数据系统概述 &#x1f3be;让我们开始今日份的学习吧&#xff01; 目录 1. mysql的基本概…

【C++】第 3 课 - do-while 循环应用案例 - 水仙花数

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、案例描述 3、示例代码 4、总结 1、缘起 以前在学习 C 语言 的时候&#xff0c;就做过水仙花数的练习题。在…

USB设备驱动学习记录

IN/OUT: 0:EHCI主控架构 1.关于设备地址SET_ADDRESS设置的逻辑&#xff1a; 可以看到set_address命令最终通过USB_DRV_WriteReg8(&musb->faddr, g_udc.address);将g_udc.address设置给了硬件&#xff0c;而此地址来源于主机 打印输出&#xff1a; 可以看到主机通过EP0…

【通义千问】继ChatGPT爆火后,阿里云的大模型“通义千问”它终于来了

通义千问 一、通义千问名字的由来二、通义千问和ChatGPT有什么区别呢&#xff1f;三、如何申请体验通义千问呢&#xff1f;四、未来通义千问能称为中国版的ChatGPT吗&#xff1f;五、通义千问什么时候正式发布呢&#xff1f; 一、通义千问名字的由来 通义千问顾名思义&#xf…

她琴棋书画全能,还进入清华计算机系实验室,被赞智商太超群、能力过强悍...

金磊 杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 最特殊&#xff0c;没有之一。 她叫华智冰&#xff0c;没有参加过任何升学考试&#xff0c;没有拿过任何竞赛名次。 却被清华大学计算机科学与技术系知识工程实验室&#xff0c;“破格录取”。 而且就这么一位学生&#xff…

提示工程师:如何写好Prompt

提示工程由来 提示工程是一门相对较新的学科&#xff0c;用于开发和优化提示以有效地将语言模型 (LM) 用于各种应用程序和研究主题。 研究人员使用提示工程来提高 LLM 在广泛的常见和复杂任务&#xff08;例如问题回答和算术推理&#xff09;上的能力。 开发人员使用提示工程…

chatgpt赋能python:Python中文译名的由来及其重要性

Python中文译名的由来及其重要性 Python&#xff0c;是一种高级、通用性、直译式、编译式、面向对象的动态程序设计语言。Python 语言设计的哲学是“优雅”、“明确”、“简单”&#xff0c;所以很多人将其称为“优美的语言”。 然而&#xff0c;Python这个名字在中文地区的译…

chatgpt赋能python:Python名字的由来

Python名字的由来 Python是一门高级编程语言&#xff0c;它的名字来源于一个非常有趣的故事。接下来的文章将介绍如何命名Python&#xff0c;并且揭示这个名字的真正含义。 Guido van Rossum设计Python Python是由Guido van Rossum设计的。在1989年&#xff0c;Guido在荷兰国…

15个 AI-powered应用,加速学术写作和阅读

文章目录 写作方面1.Jenni AI&#xff08;推荐&#xff09;2.Paperpal 阅读方面3.Schoarlcy4.chatpdf5.Casper6.SciSpace&#xff08;推荐&#xff09; 文献管理/写论文笔记用7.lateral8. ClioVis9.Glasp10. Audiopen 学术目的的搜索引擎11. Consensus&#xff08;推荐&#xf…

高调挑战 OpenAI,马斯克成立 xAI,挖角 DeepMind、微软等 11 位顶级 AI 人才坐镇!...

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; OpenAI 强劲的竞争对手新增一位、马斯克的商业版图再下一城&#xff0c;其最新成立的人工智能 xAI 公司正式亮相。 而之所以选择在7月12日官宣&#xff0c;是因为马斯克算好了心仪的数字“42”&#xf…

马斯克再创业,高调挑战 OpenAI,挖角 DeepMind、微软等 11 位顶级 AI 人才坐镇!...

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 今天&#xff0c;OpenAI 强劲的竞争对手新增一位、马斯克的商业版图再下一城&#xff0c;其最新成立的人工智能 xAI 公司正式亮相。 而之所以选择今天官宣&#xff0c;是因为马斯克算好了心仪的数字“4…

【开谈】女性特辑:ChatGPT新时代下的高校之声

近来&#xff0c;关于人工智能和女性的话题都引发了热烈探讨。ChatGPT让人类在探索机器的理解和思维能力上有了更多想像&#xff0c;而女性主义则成为新时代下女性如何自处&#xff0c;处理与他者的关系&#xff0c;以及与社会融通的重要命题。 目前面向公众的AI应用有两条主线…

hgame2023-week1

hgame2023-week1 该说不说ctf圈越来越卷 去年感觉题还没这么难 有一说一 出题人真的很用心 部分题很新 Web Classic Childhood Game 翻代码&#xff0c;翻到个奇怪的变量 当时属于一眼顶针了 撇cyberchef from hex 加俩次base64 直接出 Become A Member 去年有个类似的题…

hgame2022-week1

目录 web Classic Childhood Game Become A Member Show Me Your Beauty Guess Who I Am crypto RSA 神秘的电话 misc e99p1ant_want_girlfriend Sign In 神秘的海报 Where am I Reverse test your IDA easyasm Pwn test_nc web Classic Childhood Game 游戏…

嘉宾阵容公布,开源社邀请您参加 Impact Tech, She Can 2023

2023 年&#xff0c;在三八妇女节来临之际&#xff0c;Jina AI 联合将门创投、OpenMMLab、亚马逊云科技、稀土掘金、开源中国、CSDN等 14 家科技行业伙伴&#xff0c;发起了第二届「Impact Tech, She Can」线上对话。 、 活动信息 通过 2 场圆桌对话、1 场技术分享&#xff0c;…

在线环境 - 免费的文生图接口部署(实现文本到图像生成)

地址Text-to-Image Synthesishttps://project-iprj64b657264549ab788a4e41d1-8000.preview.node01.inscode.run/声明 正在尝试更换其他模型&#xff0c;基于达摩院通义文生图大模型ai_artist目前在效果上有待优化&#xff0c;先下线&#xff0c;后面升级再上。 前言 "文生…

VALSE 2023 无锡线下参会个人总结 6月11日-2

VALSE 2023 无锡线下参会个人总结 6月11日-2 6月11日会议日程安排Workshop&#xff1a;目标检测与分割程明明&#xff1a;粒度自适应的图像感知技术张兆翔&#xff1a;基于多传感器融合的视觉物体检测与分割 Workshop&#xff1a;ChatGPT与计算机视觉白翔&#xff1a;再谈ChatG…

人脸属性分析--性别、年龄和表情识别

人脸属性指的是根据给定的人脸判断其性别、年龄和表情等&#xff0c;当前在github上开源了一些相关的工作&#xff0c;大部分都是基于tensorflow的&#xff0c;还有一部分是keras&#xff0c;CVPR2015曾有一篇是用caffe做的. CSDN 从0到1实现基于Tornado和Tensorflow的人脸、…