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 应用的监控中心,用于调试,记录链和代理运行的所有步骤,实现状态跟踪和运行时可观测性。
使用示例
-
在LangSmith 平台[1]创建账户并生成 API 密钥
-
配置环境变量
设置
LANGCHAIN_TRACING_V2
环境变量为true
,以告诉 LangChain 记录追踪信息。设置
LANGCHAIN_PROJECT
环境变量指定项目(如果未设置,记录到默认项目)。 -
创建 LangSmith 客户端
使用 LangSmith 的 Python 客户端与 API 交互。
arduinofrom langsmith import Client client = Client()
-
创建并运行 LangChain 代理
创建一个 ReAct 风格的代理,配置数学计算工具(如 llm-math),并将运行结果记录到 LangSmith 平台。
iniinputs = ["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)
-
查看代理运行信息
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平台
-
评估代理
使用 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)
-
导出数据集和运行结果
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 平台:
[2]
此处查看:
python.langchain.com/docs/langsm...
[3]
此处查看:
[4]
langchain4j:
[5]
langchaingo:
[6]
Semantic Kernel :