首页 > 其他分享 >langchain更新初体验

langchain更新初体验

时间:2024-10-13 23:21:35浏览次数:8  
标签:初体验 Chain self 更新 api langchain key top

文章目录

前言

上一篇文章中(已同步到博客langchain更新初体验),探讨了langchain在 0.2.1 0.2.1 0.2.1版本中的使用,现在更新到了langchain的 0.3.3 0.3.3 0.3.3版本,到底有哪些变化呢?

本文将以一个最基本的案例,展现当前所取消的、增加的内容。

P.S.:虽然说有删有减,但是废弃方法可能需要一段时间才能真正移除,所以短时间内也无需太在意。

目前源码已更新到了我的GitHub上,本文对应的是functions目录下的availability.py文件。

写一个基本的demo

要写的东西很简单,其实就是给一串提示词,然后提一个问题,等待一个回答就好了。

那么就还是老样子,用streamlit配置。

配置文件.streamlit/secrets.toml

由于我们还是沿用langchain+qwen的结构,因此还是需要一个qwenapi-key,这里就不多说了。

DASHSCOPE_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

反正也是最简单的demo罢了,就配这个就好。

获得大模型对象

为了实现多种大模型的兼容,这里采用了工厂模式。

先来一个抽象工厂。

class BaseLLMFactory(ABC):
  @abstractmethod
  def build(self):
    ...

然后构建通义千问的工厂类:

class TongyiFactory(BaseLLMFactory):
  def __init__(self, api_key: str = st.secrets["DASHSCOPE_API_KEY"], model_name: str = "qwen-max", top_p: float = 0.7):
    self.api_key = api_key
    self.model_name = model_name
    self.top_p = top_p

  def build(self):
    from langchain_community.llms import Tongyi
    llm = Tongyi(model = self.model_name, top_p = self.top_p, api_key = self.api_key)
    return llm

这样的话,我们如果需要获得一个通义千问的大模型对象,只需要这样调用:

llm = TongyiFactory().build()

或者也可以自定义:

llm = TongyiFactory(
  api_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  model_name = "qwen-turbo",
  top_p = 0.9
).build()

由于并不会对大模型的能力要求很高,所以参数也只设置这些。后续再考虑高阶的参数,甚至tokenizer

甚至,你觉得build()这个调用太累赘了,在Python中也就直接用魔法函数直接解决掉:

def __call__(self):
  from langchain_community.llms import Tongyi
  llm = Tongyi(model = self.model_name, top_p = self.top_p, api_key = self.api_key)
  return llm 

这样,我们就可以直接使用TongyiFactory构建通义千问的大模型对象了。

Chain退场,上场的是Runnable

首先,相对于以前,也就是在 0.1.7 0.1.7 0.1.7版本就已经标记要废弃的,就包括LLMChainConversationChain等在内的各种Chain

先回顾一下:

  • 为了将PromptTemplate输入大模型进行处理,我们首先需要利用LLMChain构建一个基本的Chain
  • 在此基础上,为了进一步读取网络上爬取的信息,需要另外构建一个StuffDocumentChain对象用于处理网络爬取的信息。

这也就导致,如果一个应用越来越大,功能越来越多,那么所需要实例化的对象就越来越多,所需要构建的Chain对象就越来越多,代码也会越来越复杂。

那么,我们用什么呢?也就是langchain现在利用Runnable提供的各种代理类。

回到我们现在的项目中。我们刚刚自定义了一些工厂,构建了一个通义千问的大模型对象,那么,我们构建的到底是什么?

我们可以在langchain_community.llms中找到Tongyi,后来发现,其实是langchain_community.llms.tongyi的别名。没事,继续找,在langchain_community.llms.tongyi中,主要的类是继承自BaseLLMTongyi类。继续找,发现BaseLLMRunnable的子类。

虽然在功能上,TongyiRunnable这两个类已经差别太大了,但是,在使用过程中,两者还是一样的。

于是,直接调用代理方法:

result = llm.invoke("你好,我不是小娜,我没办法帮你。")

于是就可以获取到一个回答了:

你好!看来可能有些误会。
作为AI助手,我的目标是尽可能帮助所有用户。
无论您是不是小娜,如果您有任何问题或需要协助的地方,请随时告诉我,
我会竭尽全力为您提供帮助。无论是技术问题、知识查询还是日常生活的疑问,
我都愿意尝试为您解答。请随时告诉我您的需求。

P.S.:原输出没有换行,我换行纯粹是为了方便看。

这就是最基本的使用。

总结

直到目前为止,其实可以发现,除了即将删除的Chain以及Chain都有的run方法被取代掉了,其他的也都还在,所以也没有很奇怪。

不过,接下来,为了更丰富的体验,以及弥补即将删除的Chain所对应的空白,langchain提供了一个很有意思的过程,这个就在以后单独用一篇文章讲。

标签:初体验,Chain,self,更新,api,langchain,key,top
From: https://blog.csdn.net/ordinary_brony/article/details/142906387

相关文章

  • 实验1 现代c++编程初体验
    任务1:task1.cpp//现代C++标准库、算法库体验//本例用到以下内容://1.字符串string,动态数组容器类vector、迭代器//2.算法库:反转元素次序、旋转元素//3.函数模板、const引用作为形参#include<iostream>#include<string>#include<vector>#include<algorithm>......
  • Github和git的学习(不定期更新)
    学习GitHub和Git可以使用GitHub和Git来开展工作协作。[官方文档直达]([GitHub入门文档-GitHub文档](关于Git-GitHub文档))关于GitHubGitHub是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。通过将代码存储在GitHub上的“存储库”中,你将可以:“展......
  • 实验1 现代c++编程初体验
    实验任务一task1.cpp1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参6#include<iostream>7#include<string>8#includ......
  • rsa基本攻击手法总结大全(还在更新中)
    一些关于分解n的常用手法:1.最简单的就是直接使用yafu分解2.费马分解然后我们令p=a+b,q=a-b,此时n=\(a^{2}-b^{2}\),那么\(b^2=a^2-n\),那么\(b=\sqrt{a^2-n}\),我们就让a=\(\sqrt{n}\)开始然后慢慢加1开始遍历,直到找到能够使得\(a^2-n\)能够为一个平方数即可得到我们的b,那么我......
  • 实验1现代c++初体验
    实验1:1#include<iostream>2#include<string>3#include<vector>4#include<algorithm>56usingnamespacestd;78template<typenameT>9voidoutput(constT&c);1011voidtest1();12voidtest2();13......
  • 实验1 现代C++编程初体验
    task1:代码:1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>9#inc......
  • 实验1 现代C++编程初体验
    实验一:1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参6#include<iostream>7#include<string>8#include<vector>9......
  • 【Azure Cloud Service】使用RESTAPI更新Cloud Service(Extended Support) 中所配置的
    问题描述当根据CloudService(ExtendedSupport)文档更新证书(https://docs.azure.cn/zh-cn/cloud-services-extended-support/certificates-and-key-vault)时,如果遇见旧的证书(如中间证书,根证书)信息保存在KeyVaultSecret中,而更新的时候,只能从KeyVault证书中匹配到服务......
  • 实验1 现代C++编程初体验
    Task1code1.cpp1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>......
  • 实验1 现代C++编程初体验
    实验任务1:代码:1#include<iostream>2#include<string>3#include<vector>4#include<algorithm>56usingnamespacestd;7template<typenameT>8voidoutput(constT&c);9voidtest1();10voidtest2();11vo......