【LLM】LangChain聊天模型
上周,OpenAI发布了一个ChatGPT端点。它在上市时有几个大的改进,最显著的是便宜了10倍,速度也快了很多。但它也附带了一个全新的API端点。我们能够快速为这个端点编写一个包装器,让用户像使用LangChain中的任何普通LLM一样使用它,但这并没有充分利用新的基于消息的API。在这篇博客文章中,我们介绍了新的API模式,以及我们如何调整LangChain以适应ChatGPT以及所有未来基于聊天的模型。
关键环节:
为什么是新的抽象概念?
所以OpenAI发布了一个新的API——有什么大不了的?为什么甚至需要新的抽象?
【Langchain】Langchain 代理工具包
今天,我们宣布了代理工具包,这是一种新的抽象,允许开发人员创建为特定用例设计的代理(例如,与关系数据库交互或与OpenAPI规范交互)。我们希望继续开发不同的工具包,使特工能够做出惊人的壮举。Python和TypeScript都支持工具包。
代理
快速复习:我们所说的代理是什么意思?为什么要使用它们?
我们所说的代理是指一个使用LLM来决定以重复的方式采取什么行动的系统,其中未来的决定是基于对先前行动结果的观察。这种方法有几个好处。首先,它允许将LLM与外部知识或计算来源(工具本身)相结合。其次,它允许迭代规划和采取行动,这对于有一系列事情要做的更复杂的任务很有用。最后,它允许以一种稳健的方式进行错误处理,因为代理可以观察某个操作是否引发了错误并尝试纠正它。这些好处在下面的示例中显而易见。
工具程序
工具包允许您对共享特定资源(如数据库连接或json对象)的一组工具进行逻辑分组和初始化。它们可以用于为特定的用例构建代理。以下是使用它们创建的工具包和代理的一些示例:
SQL数据库代理
该代理基于SQLDatabaseChain构建,能够回答有关数据库的一般问题,在执行查询之前仔细检查查询,并从错误中恢复。
【LangChain】LangChain中的流支持
我们很高兴宣布在LangChain中提供流媒体支持。有很多关于LLM应用程序最佳用户体验的讨论,我们相信流媒体是其核心。我们还更新了chat langchain repo,以包括流和异步执行。我们希望这个回购可以作为开发人员构建一流聊天和问答应用程序的模板。
动机
开发人员在尝试构建有用的LLM应用程序时讨论的最大痛点之一是延迟;这些应用程序经常对LLM API进行多次调用,每次调用需要几秒钟的时间。盯着一个加载微调器看几秒钟以上可能会让用户感到非常沮丧。
流式处理通过逐个令牌而不是一次性返回LLM令牌的输出,有助于减少这种感知的延迟。在聊天应用程序的上下文中,当LLM生成令牌时,它可以立即提供给用户。虽然这不会改变从问题提交到完全响应的端到端执行时间,但它通过向用户显示LLM正在取得进展,大大减少了感知到的延迟。ChatGPT是利用LLM流的应用程序的一个很好的例子。我们构建了一个示例聊天机器人应用程序,该应用程序与ChatGPT一样使用流媒体(更多详细信息如下):
https://www.loom.com/share/a64b1def314a4884ab0526bf77d9fa65
【ChatGPT】使用ChatGPT API评估ChatGPT API
OpenAI昨天发布了一个新的ChatGPT API。很多人都很兴奋尝试它。但它与现有的API相比究竟如何?要有一个明确的答案还需要一段时间,但这里有一些初步的想法。因为我很懒,我还注册了ChatGPT API本身的帮助来帮助进行此评估。困惑的别这样,我们进去吧。
相关链接:
【LLM】LangChain TypeScript支持
终于到了。。。LangChain的TypeScript支持。
这是什么意思?这意味着所有您喜欢的提示、链和代理都可以在TypeScript中本地重新创建。Python版本和TypeScript版本都使用相同的可序列化格式,这意味着工件可以在语言之间无缝共享。作为使用它的一个例子,我们还使用TypeScript重新创建了ChatLangChain。
非常感谢社区的帮助。
重要链接:
【LangChain】LangChain和原生矢量存储Chroma
今天,我们宣布LangChain与Chroma的集成,这是迈向现代A.I Stack的第一步。
LangChain-人工智能原生开发者工具包
我们启动LangChain的目的是建立一个模块化和灵活的框架,用于开发a.I原生应用程序。一些立即浮现在脑海中的用例是聊天机器人、问答服务和代理。成千上万的开发人员现在正在使用LangChain灵活、易于使用的框架进行黑客攻击、修补和构建各种LLM驱动的应用程序。
应用程序的关键组件之一是嵌入,以及保存和使用这些嵌入的向量存储。
我们注意到许多现有向量存储的一个痛点是,它们通常涉及连接到存储嵌入的外部服务器。虽然这对于将应用程序投入生产来说很好,但在本地轻松地原型化应用程序确实有点棘手。
我们为本地矢量存储提供的最佳解决方案是使用FAISS,许多社区成员指出,FAISS存在一些棘手的依赖关系,导致安装问题。
Chroma-人工智能原生矢量存储
Chroma的成立是为了构建利用嵌入功能的工具。嵌入是表示任何类型数据的人工智能原生方式,使其非常适合使用各种人工智能工具和算法。
【LangChain】LangChain中的异步支持
我们很高兴能够利用asyncio库在LangChain中推出最初的异步支持。Asyncio使用协程和事件循环来执行非阻塞I/O操作;这些协同程序能够在等待最终结果时“暂停”(等待),并在此期间让其他例程运行。要了解更多关于asyncio的信息,以及它与多线程和多处理的比较,请查看这个很棒的教程。
动机
由于LangChain应用程序往往是相当I/O和网络绑定的(调用LLM API并与数据存储交互),asyncio通过允许您同时运行LLM、链和代理提供了显著的优势:当一个代理正在等待LLM调用或工具完成时,另一个代理可以继续取得进展。LangChain中的异步支持还允许您将异步链和代理更无缝地集成到支持异步的框架中,例如FastAPI。
特别查看异步代理文档,看看并发执行可以在多大程度上加快速度!
用法
作为起点,我们已经实现了对以下各项的异步支持:
LLM
via agenerate
(see docs):
【LLM】用你的数据聊天挑战
ChatGPT席卷全球。数以百万计的人在使用它。但尽管它对通用知识很有帮助,但它只知道自己接受过哪些培训的信息,即2021年之前普遍可用的互联网数据。它不知道你的私人数据,也不知道最近的数据来源。
如果真的这样做了,那不是很有用吗?这就是LangChain的用武之地。
LangChain的目标是让每个人都更容易开发语言模型应用程序。我们最近在这里发布了一份关于如何通过您的数据创建自己的ChatGPT的指南。其中包括一个示例GitHub repo,用于启动和自定义。但即便如此,仍有一长串数据源需要集成和编写提示。我们在发出呼吁,看看什么是最有趣的集成,并得到了压倒性的回应后意识到了这一点。
在“Chat Your Data”挑战中,我们将发起为期一周的挑战,通过您的数据源创建ChatGPT。
动机
一如既往,这样做的动机是让每个人都更容易开发语言模型应用程序。特别是,我们认为示例对于帮助人们做到这一点至关重要。因此,我们希望为各种数据源提供尽可能多的示例(数据加载程序+提示)。
然后,我们将把数据加载逻辑放在LangChain中,把提示放在LangChainHub中,并把示例放在LangChain文档中,使其他人尽可能容易地开始。
【ChatGPT】教程:通过数据ChatGPT
Note: See the accompanying GitHub repo for this blogpost here.
ChatGPT席卷全球。数以百万计的人在使用它。但尽管它对通用知识很有帮助,但它只知道自己接受过哪些培训的信息,即2021年之前普遍可用的互联网数据。它不知道你的私人数据,也不知道最近的数据来源。
如果真的这样做了,那不是很有用吗?