轻装上阵,加速商业化,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...

相关推荐
程序员爱钓鱼2 小时前
Go语言实战案例-创建模型并自动迁移
后端·google·go
javachen__2 小时前
SpringBoot整合P6Spy实现全链路SQL监控
spring boot·后端·sql
PAK向日葵6 小时前
【算法导论】PDD 0817笔试题题解
算法·面试
uzong7 小时前
技术故障复盘模版
后端
GetcharZp8 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程8 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研8 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi9 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国10 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy10 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程