LangChain-12 Routing By Semantic Similarity 让GPT根据不明确的问题 自动选择工具集 根据语义自动路由

请添加图片描述

问题背景

平常我们设计程序的时候,会这么写:

// 随便举例
String type = paramDTO.getType();
if (type.equals("吃饭")) {// do
} else if (type.equals("喝水")) {// do
} else {// do
}

此时如果type传入的不是数字,那我们就没法处理。
比如用户说:我想喝水,此时我们的程序就无法进行了,会走到else分支下。
那我们该如何处理这种问题?借助大模型的推理能力,可以帮助理解用户的问题,并推理出对应的方案。

安装依赖

pip install --upgrade --quiet  langchain-core langchain langchain-openai

编写代码

定义两个方案的Prompt模板

# 物理模板
physics_template = """You are a very smart physics professor. \
You are great at answering questions about physics in a concise and easy to understand manner. \
When you don't know the answer to a question you admit that you don't know.Here is a question:
{query}"""# 数学模板
math_template = """You are a very good mathematician. You are great at answering math questions. \
You are so good because you are able to break down hard problems into their component parts, \
answer the component parts, and then put them together to answer the broader question.Here is a question:
{query}"""

定义好我们的Chain之后,丢出两个问题将进行测试

message1 = chain.invoke("What is the speed of light?")
print(f"message1: {message1}")message2 = chain.invoke("什么是微积分?")
print(f"message2: {message2}")

完整的代码如下:

from langchain.utils.math import cosine_similarity
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnableLambda, RunnablePassthrough
from langchain_openai import ChatOpenAI, OpenAIEmbeddingsphysics_template = """You are a very smart physics professor. \
You are great at answering questions about physics in a concise and easy to understand manner. \
When you don't know the answer to a question you admit that you don't know.Here is a question:
{query}"""math_template = """You are a very good mathematician. You are great at answering math questions. \
You are so good because you are able to break down hard problems into their component parts, \
answer the component parts, and then put them together to answer the broader question.Here is a question:
{query}"""embeddings = OpenAIEmbeddings()
prompt_templates = [physics_template, math_template]
prompt_embeddings = embeddings.embed_documents(prompt_templates)def prompt_router(input):query_embedding = embeddings.embed_query(input["query"])similarity = cosine_similarity([query_embedding], prompt_embeddings)[0]most_similar = prompt_templates[similarity.argmax()]print("Using MATH" if most_similar == math_template else "Using PHYSICS")return PromptTemplate.from_template(most_similar)chain = ({"query": RunnablePassthrough()}| RunnableLambda(prompt_router)| ChatOpenAI()| StrOutputParser()
)message1 = chain.invoke("What is the speed of light?")
print(f"message1: {message1}")message2 = chain.invoke("什么是微积分?")
print(f"message2: {message2}")

运行结果

➜ python3 test12.py
Using PHYSICS
message1: The speed of light is approximately 299,792,458 meters per second, which is the fastest speed at which any object can travel in the universe. It is a fundamental constant of nature and is denoted by the letter "c" in physics equations.
Using MATH
message2: 微积分是数学中的一个分支,主要涉及研究函数的变化率和积分。它可以用来解决许多实际问题,例如物理学、工程学和经济学等领域的问题。微积分可以帮助我们理解和描述物体的运动、变化和增长等现象。在微积分中,常用的概念包括导数、极限、积分和微分方程等。

在这里插入图片描述

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

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

相关文章

docker使用arthas基本教程

供参考也是自己的笔记 docker容器下使用遇到的问题:大致是连接不上1号进程 我这边主要的问题是用户权限问题,docker容器使用aaa用户启动,那个在docker容器内,需要使用aaa用于启动 docker 容器如何使用arthas #实现下载好arthas …

前端开发语言都有哪些?

前端开发主要涉及以下几种语言: HTML (HyperText Markup Language):作为网页内容的骨架,定义了网页的结构和内容。是所有Web开发者必须掌握的基础语言。CSS (Cascading Style Sheets):用于设置网页的样式和布局,包括字…

Python内置函数any()和ascii()详解

Python是一种高级编程语言,提供了丰富的内置函数来简化开发过程。其中,any()和ascii()是两个常用的内置函数,本文将深入探讨它们的用法和功能。 any()函数 any()函数是Python中的一个内置函数,用于判断可迭代对象中的元素是否全…

2604B吉时利2604B数字源表

181/2461/8938产品概述: 型号2604B用于台式应用,不包括TSP-Link、接触检查或数字I/O功能。关于系统使用,请参见型号2602B 吉时利2600B系列源表SMU仪器是业界领先的电流/电压源和测量解决方案,采用了吉时利第三代SMU技术。2600B系…

【Wbpack原理】基础流程解析,实现 mini-webpack

【Wbpack原理】基础流程解析,实现 mini-webpack ⛄:webpack 对前端同学来说并不陌生,它是我们学习前端工程化的第一站,在最开始的 vue-cli 中我们就可以发现它的身影。我们的 vue/react 项目是如何打包成 js 文件并在浏览器中运行…

计算机毕业设计java 基于Android的拼图游戏app

当今社会,随着电子信息技术的发展,电子游戏也成为人们日常生活的一部分。这种娱乐方式结合了日新月异的技术,在游戏软件中结合了多种复杂技术。拼图游戏流行在各种电子产品上,从计算机,掌上游戏机到如今的手机&#xf…

go 搭建api后台笔记

一、修改代理 修改成国内代理,是为了方便下载引用包 export GOPROXYhttps://goproxy.cn,direct二、写个例子 main.go package mainimport ("fmt""net/http""github.com/gin-gonic/gin" )func getPage(c *gin.Context) {page : c.…

山海鲸智慧交通:可视化技术助力城市交通管理升级

随着城市化进程的加速和汽车保有量的不断增加,交通拥堵、安全事故频发等问题日益凸显。在这样的背景下,智慧交通成为了解决城市交通难题的重要途径。山海鲸智慧交通可视化解决方案,以其创新的技术和卓越的性能,为城市交通管理提供…

STC8H8K64U 学习笔记 - 矩阵键盘

这里写自定义目录标题 环境说明引脚说明 矩阵键盘 环境说明 该内容仅针对我自己学习的开发板做的笔记,在实际开发中需要针对目标电路板的原理图进行针对性研究。 芯片:STC8H8K64U烧录软件:stc-isp-v6.92G编码工具:天问 引脚说明 …

1688详情API接口:解锁多元化应用场景java php c++

随着互联网的快速发展,数据交换和信息共享已成为企业日常运营不可或缺的一部分。在这样的背景下,API(应用程序接口)接口作为实现数据互通的重要工具,受到了越来越多企业的青睐。1688详情API接口作为阿里巴巴旗下的重要…

【算法每日一练]-动态规划(保姆级教程 篇17 状态压缩)

目录 今日知识点: 把状态压缩成j,dp每行i的布置状态,从i-1和i-2行进行不断转移 把状态压缩成j,dp每行i的布置状态,从i-1行进行状态匹配,然后枚举国王数转移 POJ1185:炮兵阵地 思路: 题目:互…

Mysql的四种索引实现方式

MySQL的索引实现方式主要包括以下四种: Btree索引(B-Tree或BTree) ○ 数据结构:Btree索引基于B树或B树数据结构实现。B树是一种自平衡的多路搜索树,每个节点包含多个键值对,并且所有数据都存储在叶子节点上…

ChatGPT技巧揭秘:学术论文写作全攻略

ChatGPT无限次数:点击直达 html ChatGPT技巧揭秘:学术论文写作全攻略 在当今数字化时代,如何写出优质的学术论文成为许多研究者关注的焦点。ChatGPT作为一款强大的自然语言处理工具,为学术论文的写作提供了全新的思路和技巧。本文将揭秘如…

TRIZ理论在创新实践中的优势体现在哪些地方?

当下,创新已成为推动企业和社会发展的关键动力。TRIZ,即发明问题解决理论。作为一套系统化的创新方法论,它通过分析大量专利和发明案例,总结出一套解决问题的通用方法和流程。那么,TRIZ理论在创新实践中的优势具体体现…

振弦采集仪在地下水位监测中的可行性研究与实践

振弦采集仪在地下水位监测中的可行性研究与实践 地下水位的监测对于水资源管理和地下水环境保护具有重要意义。传统的地下水位监测方法主要包括井水位计、压力传感器和雨水入渗监测等。然而,这些方法存在着一些局限性,如需要人工维护、监测周期长、监测…

KylinOS银河麒麟安装部署AI服务

KylinOS银河麒麟安装部署AI服务(CPU版本) 查看操作系统 [jnapp8160fcc7cf1b ~]$ nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Lance)Kernel: 6.2.0-36-genericBuild: Kylin Linux…

vue ts 应用梳理

文章目录 前言一、页面传值1.1 [props](https://cn.vuejs.org/guide/components/props.html)1.2 [emit](https://cn.vuejs.org/guide/components/events.html)1.3 [store](https://pinia.vuejs.org/zh/getting-started.html) 二、实时计算2.1 [watch](https://cn.vuejs.org/gui…

lwip问题

1.stm32F407VET6Freertoslwip,通过socket接口创建UDP链接,只能创建4个 lwipopt.h opt.h MEMP_NUM_UDP_PCB:定义可以创建的UDP连接个数 MEMP_NUM_TCP_PCB:定义可以创建的TCP连接个数 MEMP_NUM_TCP_PCB_LISTEN:可以创建listening T…

ArcGISPro 如何升级某项Python库且不影响其运行

升级包scipy 可以看出scipy当前版本是1.6.2 利用不依赖包升级 pip install --upgrade scipy --no-deps 结果 但是显示还是之前的版本

RestTemplate 远程调用工具封装

一、 前言 我们平时在使用SpringCloud 、SpringCloudAlibaba 或其他微服务框架时,如果在同一个项目中可能会采用feign / openfeign ,但是当把项目单独出来再去和原微服务架构体系进行集成时就不大灵活,今天我就介绍一种,远程调用…