LangChain 65 深入理解LangChain 表达式语言28 余弦相似度Router Moderation LangChain Expression Language (LCEL)

发布时间:2024年01月12日

LangChain系列文章

  1. LangChain 50 深入理解LangChain 表达式语言十三 自定义pipeline函数 LangChain Expression Language (LCEL)
  2. LangChain 51 深入理解LangChain 表达式语言十四 自动修复配置RunnableConfig LangChain Expression Language (LCEL)
  3. LangChain 52 深入理解LangChain 表达式语言十五 Bind runtime args绑定运行时参数 LangChain Expression Language (LCEL)
  4. LangChain 53 深入理解LangChain 表达式语言十六 Dynamically route动态路由 LangChain Expression Language (LCEL)
  5. LangChain 54 深入理解LangChain 表达式语言十七 Chains Route动态路由 LangChain Expression Language (LCEL)
  6. LangChain 55 深入理解LangChain 表达式语言十八 function Route自定义动态路由 LangChain Expression Language (LCEL)
  7. LangChain 56 深入理解LangChain 表达式语言十九 config运行时选择大模型LLM LangChain Expression Language (LCEL)
  8. LangChain 57 深入理解LangChain 表达式语言二十 LLM Fallbacks速率限制备份大模型 LangChain Expression Language (LCEL)
  9. LangChain 58 深入理解LangChain 表达式语言21 Memory消息历史 LangChain Expression Language (LCEL)
  10. LangChain 59 深入理解LangChain 表达式语言22 multiple chains多个链交互 LangChain Expression Language (LCEL)
  11. LangChain 60 深入理解LangChain 表达式语言23 multiple chains链透传参数 LangChain Expression Language (LCEL)
  12. LangChain 61 深入理解LangChain 表达式语言24 multiple chains链透传参数 LangChain Expression Language (LCEL)
  13. LangChain 62 深入理解LangChain 表达式语言25 agents代理 LangChain Expression Language (LCEL)
  14. LangChain 63 深入理解LangChain 表达式语言26 生成代码code并执行 LangChain Expression Language (LCEL)
  15. LangChain 64 深入理解LangChain 表达式语言27 添加审查 Moderation LangChain Expression Language (LCEL)

在这里插入图片描述

1. Router根据语义相似性进行路由

使用LCEL,您可以轻松地向您的链中添加自定义路由逻辑,以动态地根据用户输入确定链逻辑。您需要做的就是定义一个函数,给定一个输入,返回一个可运行的函数。

特别有用的一种技术是使用嵌入将查询路由到最相关的提示。这里有一个非常简单的例子。

from langchain.prompts import PromptTemplate
from langchain_community.chat_models import ChatOpenAI
from langchain_core.runnables import ConfigurableField
from langchain_core.output_parsers import StrOutputParser
from langchain.utils.math import cosine_similarity
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_core.runnables import RunnableLambda, RunnablePassthrough

from dotenv import load_dotenv  # 导入从 .env 文件加载环境变量的函数
load_dotenv()  # 调用函数实际加载环境变量

from langchain.globals import set_debug  # 导入在 langchain 中设置调试模式的函数
set_debug(True)  # 启用 langchain 的调试模式

physics_template = """你是一个非常聪明的物理教授。
你擅长以简洁易懂的方式回答物理问题。
当你不知道问题的答案时,你会承认自己不知道。 

这是一个问题。:
{query}"""

math_template = """你是一个非常优秀的数学家。你擅长回答数学问题。
你之所以这么厉害,是因为你能够把难题分解成组成部分,回答这些部分,
然后把它们放在一起回答更广泛的问题。

这里有一个问题:
{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("用 数学 >>>>>>>>>>" if most_similar == math_template else "用 物理 >>>>>>>>")
    return PromptTemplate.from_template(most_similar)


chain = (
    {"query": RunnablePassthrough()}
    | RunnableLambda(prompt_router)
    | ChatOpenAI()
    | StrOutputParser()
)

print(chain.invoke("黑洞是什么?"))

print(">>>>>>>>>>")

print(chain.invoke("路径积分是什么?"))

输出如下:

(.venv) zgpeace@zgpeaces-MacBook-Pro git:(develop) ?% python LCEL/router_cosine_similar.py                ~/Workspace/LLM/langchain-llm-app
用 物理 >>>>>>>>
黑洞是一种极其密集的天体,它的引力非常强大,以至于连光都无法逃离它的吸引。黑洞的形成是宇宙中质量非常大的恒星耗尽核燃料后发生的,它会塌缩成一个极小但质量极大的点,称为奇点。黑洞的外围有一个边界,称为事件视界,它标志着进入黑洞的点,一旦穿过事件视界,就无法逃离黑洞的吸引力。由于黑洞非常特殊且极端,我们对它的了解还有很多未解之谜。

>>>>>>>>>>
>
用 数学 >>>>>>>>>>
路径积分是量子力学中的一个概念。在量子力学中,粒子并不像经典物理中那样只有一个确定的轨迹,而是存在多条可能的路径。路径积分是一种数学形式,用于计算出粒子在给定时间间隔内可能的所有路径,并对这些路径进行加权求和。

路径积分的基本思想是将粒子的运动视为从一个初始位置到一个结束位置的所有可能路径的叠加。每条路径都有一个相位因子,由路径的作用量决定。作用量是一个度量路径的物理特性的量,例如路径的长度或能量。

通过对所有可能的路径进行积分,路径积分可以计算出在给定时间间隔内粒子的量子幅度。这些量子幅度可以用来计算出一系列物理量,例如粒子的位置、能量和概率分布等。

路径积分在量子力学中有广泛的应用,尤其在量子场论和统计物理中起着重要的作用。它提供了一种描述粒子行为的数学框架,能够解释一些经典力学无法解释的现象,并为我们理解微观世界的规律提供了一种新的视角。

代码

https://github.com/zgpeace/pets-name-langchain/tree/develop

参考

https://python.langchain.com/docs/expression_language/cookbook/embedding_router

文章来源:https://blog.csdn.net/zgpeace/article/details/135441530
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。