轻装上阵,加速商业化,LangChain 0.1 发布看点

LangChain 在 0.1 版本发生了重要变更,官方还专门发了一篇博客,总体看下来可以概括为聚焦核心,共建生态,轻装上阵,加速商业化,我也在第一时间向官方申请试用了商业化产品,本篇文章从 LangChain 变更情况解读,商业化产品试用,以及类 LangChain 的 LLM 应用开发框架的发展三部分来谈谈。

LangChain 生态全景图

LangChain (如果你还不了解,可以看我之前的系列文章)已经发展成一个涵盖大模型应用全生命周期的完整生态系统,在开发阶段,开发者可以基于 LangChain 进行应用编写,参考现有模板快速验证效果;部署阶段,通过 LangServe 将应用转化为 API 服务;生产阶段,则利用 LangSmith 进行应用的检查、调试和监控,实现应用的持续迭代,下面这张图是官方最新博客文章对其整个生态的全景图勾画。

LangChain 生态全景图

LangChain 变更

变更后的 LangChain 主要包括以下几个方面:

LangChain

首先将现有的LangChain包分成了三个独立的包,标志着从单一 Python 包到更模块化、可扩展框架的转变,整个深色部分包括三部分。

  • LangChain-Core :属于官方核心控制的部分,基本盘,主要是对用于组合各组件的 LCEL(全写 LangChain Expression Language,中文翻译 LangChain 表达式语言)维护,我们熟知的所有 LangChain 组件,底层其实都是基于 Runnable 协议的,然后 由 LCEL 串起来,这样才更易于与 LangSmith 无缝集成。 这也是官方文档很多案例都在用 LCEL 改写,逐渐放弃对原来的 Chains (链)那一套维护的原因。

  • Langchain-Community :包含所有第三方集成,未来还会将一些与 LangChain 本身耦合严重(比如前期大家吐槽最多的就是和 OpenAI 绑定的太深),但实际上属于第三方集成的包,比如langchain-openai,都分离到这个独立的包中,后续有来自合作伙伴接入需求的第三方集成也会纳入进这个模块。官方主要聚焦对核心对象进行维护,如语言模型接口、文档加载器、嵌入模型、向量存储、检索器等,保证抽象简单性和模块化,同时制定第三方集成的一系列规范,和社区参与者合作共建,做生态的思路。

  • LangChain :这部分包含用于特定用例的链、高级代理和检索策略,这些是来自社区的用于构建高级 LLM 应用的最佳实践,保证 LangChain 在技术理念和实践经验上的领先性。

不过上面的变更在未来一段时间均支持向后兼容性,为开发者提供时间窗口用于升级迁移。

LangChain 模板

其次是提供快速构建大模型应用的模板,类似于传统软件开发过程中封装的脚手架,这些模板是直接可以通过 LangServe 轻松部署的端到端 AI 应用,也可以作为应用开发的基础。

LangServe

LangServe 为部署 LangChain 应用提供便捷方式:

  • 部署 LangChain 应用:LangServe 使开发者能够将 LangChain 应用作为 REST API 部署,从而简化了应用的访问和集成。

  • 自动化推断输入输出模式:自动从 LangChain 对象推断输入和输出模式,并在每次 API 调用时强制执行,提供丰富的错误消息。

  • API 文档和 Swagger 支持:提供 API 文档页面,支持 JSONSchema 和 Swagger。

  • 高效的 API:支持直接调用(invoke)、批处理(batch)和流式(stream)多种方式的 API 调用,支持在单个服务器上处理多个并发请求。

  • 内置跟踪功能:可选的跟踪功能,通过添加 API 密钥即可实现。

LangSmith

LangSmith 是一个为 LLM 应用和代理提供调试、测试和监控功能的统一平台,旨在帮助开发者在将 LLM 应用推向生产环境时进行必要的定制和迭代,以保证产品质量,LangSmith 在以下情况下特别有用:

  • 快速调试新的链、代理或工具集。

  • 可视化组件(如链、LLM、检索器等)之间的关系及其使用方式。

  • 评估单个组件的使用不同提示和大模型的效果。

  • 在数据集上多次运行特定链,以确保其始终满足质量标准。

变更解读

变更的目的主要分为四个方面:首先是强化 LangChain 应用生态系统,推动更多用例的开发与优化;其次是积极和第三方厂商合作,同时对第三方集成方式进行规范化管理;三是为商业化做准备,当前 LangSmith 还处于内测阶段,当 LangSmith 推出时,使用 LCEL 封装应用的开发者,可以无缝接入服务;最后是核心开发团队的聚焦,只关注核心模块,周边能力下放给社区,释放了更多自由度。

商业化产品试用

LangSmith

LangSmith 作为 LLM 应用的监控中心,用于调试,记录链和代理运行的所有步骤,实现状态跟踪和运行时可观测性。

使用示例

  1. 在LangSmith 平台[1]创建账户并生成 API 密钥

  2. 配置环境变量

    设置LANGCHAIN_TRACING_V2环境变量为true,以告诉 LangChain 记录追踪信息。

    设置LANGCHAIN_PROJECT环境变量指定项目(如果未设置,记录到默认项目)。

  3. 创建 LangSmith 客户端

    使用 LangSmith 的 Python 客户端与 API 交互。

    arduino 复制代码
    from langsmith import Client
    client = Client()
  4. 创建并运行 LangChain 代理

    创建一个 ReAct 风格的代理,配置数学计算工具(如 llm-math),并将运行结果记录到 LangSmith 平台。

    ini 复制代码
    inputs = ["1+1等于几", "3+3等于几?"]
    # 创建代理
    llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
    tools = load_tools(["llm-math"], llm=llm)
    agent  = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
                              handle_parsing_errors=True)
    # 运行代理并记录结果
    results = agent.batch([{"input": x} for x in inputs], return_exceptions=True)
    print(results)
  5. 查看代理运行信息

    ini 复制代码
    # 打印代理运行信息
    project_name = f"runnable-agent-test-{unique_id}"
    runs = client.list_runs(project_name=project_name)
    for run in runs:
        print(run)

    也可以登录 LangSmith 平台查看,可以看到执行时间,延迟,token 消耗等多个信息,如下图

    LangSmith平台

  6. 评估代理

    使用 LangSmith 创建基准数据集,并运行 AI 辅助评估器对代理的输出进行评估。

    ini 复制代码
    # 创建基准数据集
    client = Client()
    outputs = ["2", "6"]
    dataset_name = f"agent-qa-{unique_id}"
    dataset = client.create_dataset(dataset_name, description="agent测试数据集")
    
    for query, answer in zip(inputs, outputs):
        client.create_example(inputs={"input": query}, outputs={"output": answer}, dataset_id=dataset.id)
    
    # 使用LangSmith评估代理
    evaluation_results = client.run_on_dataset(dataset_name, agent)
    print(evaluation_results)
  7. 导出数据集和运行结果

    LangSmith 允许将数据导出为常见格式(如 CSV 或 JSONL),进行进一步分析,如下图所示。

LangSmith导出数据集入口

LangSmith 通过以上步骤来跟踪、评估并改进 LangChain 应用,更多详细内容,可以前往此处查看[2]。有了这个工具,提示词管理,测试集维护和应用调试都非常方便,推荐大家去探索。

LangServer

LangServe 是一个自动为 LangChain 对象添加多个 API 的 LangChain 子库,方便对应用进行自部署或与现有系统集成。

使用示例

下面是一个部署 OpenAI 聊天模型讲述特定主题笑话的服务器示例

ini 复制代码
from fastapi import FastAPI
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatOpenAI
from langserve import add_routes

app = FastAPI(
    title="LangServer",
    version="0.1",
    description="A simple api server by langsercer",
   )

add_routes(app, ChatOpenAI(), path="/openai")

model = ChatOpenAI()
prompt = ChatPromptTemplate.from_template("讲一个关于 {topic} 的笑话。")
add_routes(app, prompt | model, path="/joke")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="localhost", port=8000)

使用 Python 客户端 SDK 调用 LangServe 服务器

javascript 复制代码
from langchain.schema import SystemMessage, HumanMessage
from langchain.prompts import ChatPromptTemplate
from langchain.schema.runnable import RunnableMap
from langserve import RemoteRunnable

openai = RemoteRunnable("http://localhost:8000/openai/")
joke_chain = RemoteRunnable("http://localhost:8000/joke/")
joke_chain.invoke({"topic": "股市"})

通过 LangServe,开发者可以将 LangChain 应用作为 API 服务部署,从而在各种开发环境中轻松访问和集成 LangChain 功能,更多详细内容,可以前往此处查看[3]。

类 LangChain 框架展望

首先,LangChain 生态已经起来了,在开源的世界,得开发者得天下,新推出的大模型,第三方服务等也会优先提供 LangChain 集成,现在看到最多的 LLM 应用教程都是用 LangChain 作为示例,其次之前被诟病的调试难,抽象过于复杂,且没有对 prompt 进行足够的开放等问题也已经改善了很多,当前主要维护的 JS 和 Python 两个版本,就看能不能在其他常见编程语言也提高影响力,毕竟langchain4j[4]、langchaingo[5]项目的增长势头也很快。

由于 LangChain 用的是 Python 语言,对于使用 Java/Golang/C# 等语言体系的企业来说,不方便直接与业务应用集成,技术团队稍微有些规模的公司,都会设计与开发内部类 LangChain 框架,为规模化应用 LLM 做技术储备,开源方面肯定也会出现设计理念与 LangChain 完全不同的路径,比如已经有的 Semantic Kernel [6](微软开源,支持 C#、Python 和 Java),无论是开源还是内部项目,新一轮定位于基础设施的 LLM 应用框架开发热正在进行。

不可错过 👉 :之前创建的 LLM 应用开发交流群已经运行 1 年了,里面会实时分享 AI 应用开发生态最新进展,欢迎感兴趣的朋友加入交流,请备注【入群交流

如果觉得内容不错,欢迎**订阅邮件和RSS,转发文章**~

参考资料

[1]

LangSmith 平台:

smith.langchain.com/

[2]

此处查看:

python.langchain.com/docs/langsm...

[3]

此处查看:

github.com/langchain-a...

[4]

langchain4j:

github.com/langchain4j...

[5]

langchaingo:

github.com/tmc/langcha...

[6]

Semantic Kernel :

github.com/microsoft/s...

相关推荐
良许Linux3 分钟前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网
ThisIsClark8 分钟前
【后端面试总结】MySQL主从复制逻辑的技术介绍
mysql·面试·职场和发展
求知若饥16 分钟前
NestJS 项目实战-权限管理系统开发(六)
后端·node.js·nestjs
gb42152871 小时前
springboot中Jackson库和jsonpath库的区别和联系。
java·spring boot·后端
程序猿进阶1 小时前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
颜淡慕潇2 小时前
【K8S问题系列 |19 】如何解决 Pod 无法挂载 PVC问题
后端·云原生·容器·kubernetes
LCG元8 小时前
【面试问题】JIT 是什么?和 JVM 什么关系?
面试·职场和发展
向前看-9 小时前
验证码机制
前端·后端
油泼辣子多加10 小时前
2024年12月18日Github流行趋势
github