经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
LangChain和Hub的前世今生
来源:cnblogs  作者:程序员半支烟  时间:2024/6/26 8:52:18  对本文有异议

作为LLM(大模型)开发框架的宠儿,LangChain在短短几年内迅速崛起,成为开发者们不可或缺的工具。本文将带你探讨LangChain和LangChainHub的发展历程。

1. LLM开发框架的宠儿

这两年人工智能领域发展迅猛,LLM(大模型)的出现功不可没。LLM的发展将整个人工智能领域往前推进了一大步,将人工智能这道狭窄的门撑宽了不少,让我们这些平凡的普通人也有机会挤进人工智能的发展中。

普通开发者在人工智能领域能做什么呢?目前可以发力的领域是:开发基于LLM的App。开发LLM的App有多种实现方式,LangChain是比较流行的一种。

伴随着人工智能的发展,这两年LangChain发展迅猛,GitHub上的star数飙升,近期更是成功融资2亿美刀,足见其受欢迎程度。

早期的LangChain只是作为一个工具或者胶水,集成了多个LLM和多种外部组件(比如记忆、检索、向量数据库、工具集等等),方便开发者快速开发基于LLM的App。

我估计,当时LangChain的创始人对LangChain的定位也不是很清晰,只是觉得AI应用开发是个不错的风口,先搞了再说,这也很符合创业和商业逻辑。

2. 现在的LangChain

随着LLM的发展,一切逐步走向确定性(业内一致认为LLM App是未来的方向),而且可能伴随着商业化的要求,LangChain对自己的定位发生了一些改变。

早期的LangChain可能只是想抓住一波LLM的风口,对于自身的定位也不是很清晰,随着LLM领域更多的发力点在构建基于LLM的App上,LangChain也赶紧调整了自身的定位。

不再定位在:胶水、工具集合等等理念了。更多的强调自己是:构建LLM App的最大社区,基于LangChain可以开发出可推理的应用程序。

调整了定位,生态也自然做了调整,同时软件架构也随之变化,比如:软件包上做了很多重构和重组,核心能力 和 周边社区生态 的边界越发清晰。

同时,还加入了LangSmith用于监控LLM应用,还有LangServe用于部署LLM应用。一切的步伐都在朝着商业化发展。

至此LangChain调整为以下几个核心模块:

  • LangChain-Core:抽象LangChain的内核 和 LangChain 表达式语言。

  • LangChain-Community:集成的各种第三方部件。

  • LangChain:构成LLM应用程序需要的 链、代理和检索等。

  • LangSmith:开发者平台,可让 调试、测试、评估和监控 基于任何 LLM 框架上构建的链,并与 LangChain 无缝集成。

  • LangServe:用于将 LangChain 的应用 部署为 REST API。

这几点我们从官网的架构图清晰可见。也可以认为此时的LangChain变成了一个SAAS化的开发者平台。而它提供的组件、工具、监控、部署等生态,也都是为了让开发者方便的开发出LLM App,然后部署到这个平台上。

LangChain是一个优秀的LLM开源框架,也无法避免走上常规的开源软件商业化的套路。

3. 早期的LangChainHub

LangChain早期推出的各种组件中LangChainHub是其中一个比较有意思的项目。

早期LangChainHub对自己的定位如下:LangChainHub 受 Hugging Face Hub 启发,是一个用于发现和提交常用的 提示、链、代理等的平台。早期,LangChainHub以Prompt集合为起点,然后很快扩展到 链 和 代理。

这个定位我们从之前的LangChainHub在github仓库上的目录可见一斑。

此时的LangChainHub 可以理解为LangChain 工具包 或者说 组件中心,里面提供了高质量的组件方便开发者使用。确确实实是一个分享和探索Prompt、链 和Agent的地方。

比如,我们要基于reAct机制实现一个Agent,如果自己写一堆Prompt(提示词)那就太费劲了。此时,在LangChainHub就有许多现成可用的Prompt模板,使用简单又省事,所以LangChainHub迅速流行开。

4. 现在的LangChainHub

那现在的LangChainHub在新的LangChain架构图的哪里呢?我也觉得挺奇怪的,LangChainHub也是算生态里较为重要的版块,架构图里居然没提。

后来发现,LangChainHub被放到了LangSmith里。这个从新版的官方文档也是清晰可见。

这也算合情合理吧,毕竟LangSmith是一个开发者平台,用于调试、测试、评估、监控基于LLM框架的链,在这个平台上,可以使用和创建Prompt。

早期的时候LangChainHub有Prompt、Chain、Agent,现在也只有Prompt了。我个人对LangChainHub的定位多少觉得有些悲凉了,LangChainHub沦为了Prompt模板仓库。

我认为这背后存在两种可能的原因:

  • 可能是商业化的要求吧,将常用的Prompt模板挪到开发者平台LangSmith里,毕竟LangSmith是有各种付费计划的。

  • 可能是官方对于LangChainHub里的内容开始做收缩,聚焦于Prompt,毕竟Prompt比较独立 而且易于交付。而Chains 和 Agents 相对来说,交付难度高一些,变动性也低,所以官方直接将 Chains 和 Agents 沉淀到自己的核心库里,这样也能保证Chains 和 Agents 的质量,保证自己的口碑。

LangChainHub真的是始于Prompt,终于Prompt!!!当然啦,以后的LangChainHub怎么发展就不得而知了。

庆幸的是,我们大部分场景还是使用Prompt模板居多,此时的LangChainHub里依旧能找到大咖们贡献的复杂常用的Prompt模板,降低了我们使用ReAct、Tool的门槛。

5. LangChainHub的使用

下面我们通过一个示例,来看看如何使用LangChainHub。

5.1. 拆解LangChainHub的Prompt

比如:要实现一个reAct机制,如果我们自己写提示词,那太复杂了。但是LangChainHub上已经有大佬定义好了相关提示词。

比如:structured-chat-agenthttps://smith.langchain.com/hub/hwchase17/structured-chat-agent),提示词写的还是有点复杂的,大致意思就是:告诉LLM,它可以使用一堆什么格式的工具,然后先推理,选择合适的工具,执行之后,进行观察,观察完了之后,继续推理,如果有答案了,就回复用户。

具体内容如下:

5.2. 使用LangChainHub

使用LangChainHub上的Prompt就2步:

  1. 导入LangChainHub库

  2. 从Hub上拉取对应的提示词

接下来举个例子,比如,LLM在直接计算浮点数加减时会出现错误,我要做一个基于reAct框架的AI Agent,让这个Agent帮我精准计算浮点数。这里使用LangChainHub里的structured-chat-agent来简化我的流程。

具体代码如下:

  1. from langchain import hub
  2. from langchain.agents import create_structured_chat_agent, AgentExecutor, tool
  3. from langchain.memory import ConversationBufferMemory
  4. from langchain.schema import HumanMessage
  5. from langchain.tools import BaseTool
  6. from langchain_openai import ChatOpenAI
  7.  
  8. model = ChatOpenAI(
  9.     model="gpt-3.5-turbo",
  10.     openai_api_key="sk-xnAKVC6V0LzBwqGK9fE59cFcBc3f40DcBf96C135112dFb63",
  11.     openai_api_base="https://api.aigc369.com/v1",
  12. )
  13.  
  14.  
  15. # 定义工具
  16. class SumNumberTool(BaseTool):
  17.     name = "数字相加计算工具"
  18.     description = "当你被要求计算2个数字相加时,使用此工具"
  19.  
  20.     def _run(self, a, b):
  21.         return a["title"] + b["title"]
  22.  
  23.  
  24. # 加入到工具合集
  25. tools = [SumNumberTool()]
  26.  
  27. # 使用reAct的提示词
  28. prompt = hub.pull("hwchase17/structured-chat-agent")
  29.  
  30. # 创建Agent
  31. agent = create_structured_chat_agent(llm=model, tools=tools, prompt=prompt)
  32.  
  33. # 创建记忆组件
  34. memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
  35.  
  36. # 创建Agent执行器
  37. agent_executor = AgentExecutor.from_agent_and_tools(
  38.     agent=agent, tools=tools, memory=memory, verbose=True, handle_parsing_errors=True
  39. )
  40.  
  41. agent_executor.invoke({"input": "你帮我算下 3.941592623412424 + 4.3434532535353的结果"})

6. 总结

本文主要聊了LangChain和LangChainHub的发展变迁,还介绍了LangChainHub的使用,希望对你有帮助!

=====>>>>>> 关于我 <<<<<<=====

本篇完结!欢迎点赞 关注 收藏!!!

原文链接:https://mp.weixin.qq.com/s/lpv3q4y34m1VSmR0AEN6Rw

原文链接:https://www.cnblogs.com/mangod/p/18268167

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号