轻装上阵,加速商业化,LangChain 0.1 预发布看点
LangChain 在 0.1 版本发生了重要变更,官方还专门发了一篇博客,总体看下来可以概括为聚焦核心,共建生态,轻装上阵,加速商业化,我也在第一时间向官方申请试用了商业化产品,本篇文章从 LangChain 变更情况解读,商业化产品试用,以及类 LangChain 的 LLM 应用开发框架的发展三部分来谈谈。
我的新书《LangChain编程从入门到实践》 已经开售!推荐正在学习AI应用开发的朋友购买阅读!
LangChain 生态全景图
LangChain (如果你还不了解,可以看我之前的系列文章)已经发展成一个涵盖大模型应用全生命周期的完整生态系统,在开发阶段,开发者可以基于 LangChain 进行应用编写,参考现有模板快速验证效果;部署阶段,通过 LangServe 将应用转化为 API 服务;生产阶段,则利用 LangSmith 进行应用的检查、调试和监控,实现应用的持续迭代,下面这张图是官方最新博客文章对其整个生态的全景图勾画。
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 平台创建账户并生成 API 密钥
配置环境变量
设置
LANGCHAIN_TRACING_V2
环境变量为true
,以告诉 LangChain 记录追踪信息。设置
LANGCHAIN_PROJECT
环境变量指定项目(如果未设置,记录到默认项目)。创建 LangSmith 客户端
使用 LangSmith 的 Python 客户端与 API 交互。
1
2from langsmith import Client
client = Client()创建并运行 LangChain 代理
创建一个 ReAct 风格的代理,配置数学计算工具(如 llm-math),并将运行结果记录到 LangSmith 平台。
1
2
3
4
5
6
7
8
9inputs = ["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)查看代理运行信息
1
2
3
4
5# 打印代理运行信息
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 创建基准数据集,并运行 AI 辅助评估器对代理的输出进行评估。
1
2
3
4
5
6
7
8
9
10
11
12# 创建基准数据集
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 通过以上步骤来跟踪、评估并改进 LangChain 应用,更多详细内容,可以前往此处查看。有了这个工具,提示词管理,测试集维护和应用调试都非常方便,推荐大家去探索。
LangServer
LangServe 是一个自动为 LangChain 对象添加多个 API 的 LangChain 子库,方便对应用进行自部署或与现有系统集成。
使用示例
下面是一个部署 OpenAI 聊天模型讲述特定主题笑话的服务器示例
1 | from fastapi import FastAPI |
使用 Python 客户端 SDK 调用 LangServe 服务器
1 | from langchain.schema import SystemMessage, HumanMessage |
通过 LangServe,开发者可以将 LangChain 应用作为 API 服务部署,从而在各种开发环境中轻松访问和集成 LangChain 功能,更多详细内容,可以前往此处查看。
类 LangChain 框架展望
首先,LangChain 生态已经起来了,在开源的世界,得开发者得天下,新推出的大模型,第三方服务等也会优先提供 LangChain 集成,现在看到最多的 LLM 应用教程都是用 LangChain 作为示例,其次之前被诟病的调试难,抽象过于复杂,且没有对 prompt 进行足够的开放等问题也已经改善了很多,当前主要维护的 JS 和 Python 两个版本,就看能不能在其他常见编程语言也提高影响力,毕竟langchain4j、langchaingo项目的增长势头也很快。
由于 LangChain 用的是 Python 语言,对于使用 Java/Golang/C# 等语言体系的企业来说,不方便直接与业务应用集成,技术团队稍微有些规模的公司,都会设计与开发内部类 LangChain 框架,为规模化应用 LLM 做技术储备,开源方面肯定也会出现设计理念与 LangChain 完全不同的路径,比如已经有的 Semantic Kernel (微软开源,支持 C#、Python 和 Java),无论是开源还是内部项目,新一轮定位于基础设施的 LLM 应用框架开发热正在进行。
不可错过 👉:之前创建的 LLM 应用开发交流群已经运行 1 年了,里面会实时分享 AI 应用开发生态最新进展,欢迎感兴趣的朋友加入交流,请备注【入群交流】
如果觉得内容不错,欢迎**订阅邮件和RSS,转发文章**~
轻装上阵,加速商业化,LangChain 0.1 预发布看点