探索实践分享:基于LangChain构建大语言模型“套壳”应用

简介: 缘起近半年来AI非常火爆,我们深刻地体会到GPT类产品已经切实地在改变我们的生活和工作方式。我也比较关注AI相关的开源技术,最近看到了两个开源库给了我非常大的灵感:1. LangChain:这个库把AI开发中可能会用到的相关技术都抽象成一个个小的模块,很多工具函数都开箱即用。官网里的一个向量数据库使用的例子给我留下了深刻的印象:从本地文件的读取、文本内容的拆分、向量的存储到相似向量的检索**, 这

缘起

近半年来AI非常火爆,我们深刻地体会到GPT类产品已经切实地在改变我们的生活和工作方式。我也比较关注AI相关的开源技术,最近看到了两个开源库给了我非常大的灵感:

1. LangChain:这个库把AI开发中可能会用到的相关技术都抽象成一个个小的模块,很多工具函数都开箱即用。官网里的一个向量数据库使用的例子给我留下了深刻的印象:从本地文件的读取、文本内容的拆分、向量的存储到相似向量的检索**, 这整个过程每个步骤都是几个非常简洁明了的函数调用,整个流程几十行代码**。不禁让我感叹:这么容易?有了这AI开发我也能搞啊!

2. AutoGPT:在给AutoGPT设定一个目标后,它会做类OKR分解,执行,检查完成情况,制定优化计划,依此 通过不断地自我 prompt 达成设定目标。在学习它源码的时候有一点对我的启发很大:首先代码中预定义了一堆command脚本,在和ChatGPT通话过程中会让它 回复{”command”: “xxx”, “thoughts”: ‘xxx’} 这样的 JSON,解析后可以继续执行本地脚本,从而实现自主执行 , 感觉这是这个项目的精华所在。其实看到 JSON , 作为前端开发是很兴奋了,通过调戏 LLM 让他给出 JSON,纯前端就能玩出很多花活呢!

想到上面几个灵感比较兴奋,于是趁着周末两天撸了个“套壳”应用。同时也验证下利用 Prompt Engineering 调戏 LLM 返回 JSON 的方式玩出花活的可能性

有观察市面上比较火的文档类问答工具 ChatPDF 和 ChatDocs 等产品,觉得非常酷。因此,我打算简单实现类似的功能:在应用程序的某个目录下放置一些文件(PDF、TXT、DOC、EXCEL),然后在聊天窗口中提出任何文档相关的问题,机器人将总结好答案并回复你。此外,我还设计了一些小交互(如文章开头 GIF 所示):让机器人在回复答案的同时说明参考原文,并联想一些类似的问题,方便用户持续提问。

实现分析

主要聚焦在两个问题: 1.如何调教 LLM 让它学会本地的知识, 2. “套壳应用”工程技术选型

如何喂数据给 LLM?

Fine-Turning

说到让大语言模型学会一些本地知识,首先会想到的是“训练”。通常的做法是为机器准备固定格式的数据集,类似于 [{question: 'xxx', answer: 'xxx'}, ...],然后使用 Fine-Tuning 的方法对非结构化数据进行训练。但对于像我这样的外行来说,去对数据做预处理和特征工程不是一种合适的解法。

Embedding

Embedding的理解是将高维数据向量化的过程。在LangChain中,有现成的工具函数可以完成这个任务。众所周知,GPT3.5的API有4K token 的长度限制,因此直接将所有的PDF文件一股脑地塞给LLM是不可行的,肯定超过了这个长度限制。LangChain中的 Document Loaders、Text Splitters、Vector Stores 提供了一种巧妙的方法来绕过这个4K token的限制。大致的工作原理是:首先在本地启动一个向量数据库,用来存储所有本地文档。然后,在进入GPT之前,先在本地进行一次相似度内容搜索。最后,将空间距离最近的几个答案嵌入提问中,交给LLM处理。

所以我们使用 LangChain,其实并没有真正意义上去训练LLM, 我们只是把 本地知识库 和 问题当做prompt的一部分给到LLM。 这么做非常的轻量级, LLM只需要 做的它最擅长的事情。翻译和总结是大语言模型非常擅长的两件事情,所以如果你在目录里放的是英文文档,聊天框里你是可以通过中文和应用进行对话的。

如何搭建“套壳”应用工程?

一旦确定了AI训练数据相关的方案后,工程化就相对容易了,分析了下大致需要以下几个部分:

  • LangChain提供了JS API,因此可以使用Node.js应用程序即可运行。
  • 前端页面可以直接使用React、Vue甚至是原生HTML + JS。
  •  LangChain实际上还提供了10多个向量数据库可供选择。我选择了HNSWLib,因为目前只是进行技术探索,所以选择了内存级向量数据库,非常轻便,支持Node.js,支持离线运行,不需要编写SQL,无需单独启动数据库程序,只需将其作为一个模块导入即可运行。在生产环境中,建议使用更高级的云端数据库,例如Pinecone、Supabase等。

所以其实只需一个Next.js应用程序即可包含以上所有部分,只需一行 npm start 即可启动所有模块(前端 、后端、数据库)。

工程代码关键实现

在代码部分,我个人认为基于 LangChain 进行开发非常简洁。当大家看到下面的实现后,应该也会有同样的感觉。

首先,看这段 Prompt 代码 ,它算是这个套壳应用最核心的代码

这段代码也是我在调试过程中花费了相当多时间的。首先,我让 GPT 扮演文档工程师的角色,让他帮我总结与“问题”相关的内容,这也充分利用了 LLM 的超强总结能力。我要求 LLM 返回一个包含三个字段的 JSON,这几个字段也是界面聊天框内吐出的答案所必需的内容,即机器人的总结回复、原文引用和相似答案

其实中间我遇到了一个比较大的问题:就是 LLM 有较大的概率不会返回完整的 JSON 结构体。这会导致应用 JSON.parse 失败。解决办法有很多,例如 AutoGPT 中有自定义的 fix_json_using_multiple_techniques 函数用于修复 JSON,LangChain 中也有 OutputFixingParser 等解析函数。不过我尝试的是另一种 SAO 操作——“威胁”,如下:

  “不要包含任何其他非JSON内容,否则你将被扣分!!!”

经实测,回答出错率的确会下降很多,但无法完全避免出错。还需要进一步研究研究,也许需要更大参数量的 API 来解决这个问题。

流程中其他流程相关的代码我贴一些图,大家也能感受一下 LangChain 的简单易用:

本地文件的解析

 

通过Embedding方式做文档切片并初始化向量数据库

近似向量内容检索

LLM API 调用

 

聊天前端代码:把 HTML + JS 都算上不到300行代码

顺带安利一下,tailwind 是 next.js 自带的 CSS 框架。时常在其他开源项目中看到,这次聊天页面的 CSS 基本上都是用 tailwind 编写的。上手成本非常低,基本上可以不离开 HTML 就将 CSS 全部搞定,这得益于 GPT 的支持。

最后几点零散想法

  • 探索的价值:上周末在开始写这个项目的时候,有看到一个新闻(Claude 已支持100K token 长度的上下文),长上下文方案比起我这个依赖前置向量数据库的效果显然会是降维打击, 不过我还是硬着头皮把代码写完了, 这个工程化的探索还是有价值的,毕竟随便魔改一下就可以摇身一变另外一个垂类领域的“套壳”应用。
  • AI开发的壁垒在哪:AI生态蓬勃的状态非常像前几年前端生态,真是以“天”为单位的迸发出令人惊叹的项目。现在开发应用也变得越来越容易,所以我认为开发出一个好的应用的难点并不在于像 LangChain 等工具库的使用本身,而更多在于 如何充分利用 LLM 的优势,充分利用积累的数据,“调戏”LLM, 最终设计出良好的交互体验优秀并解决用户痛点的产品
  • 项目代码:因为项目是周末时间兴起在个人电脑上写的,所以写完后直接 push到了 github 上,供大家交流学习。  https://github.com/nigulasikk/local-mind
相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
6月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
2398 1
|
6月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
3478 58
存储 人工智能 机器人
203 0
|
6月前
|
人工智能 安全 数据库
构建可扩展的 AI 应用:LangChain 与 MCP 服务的集成模式
本文以LangChain和文件系统服务器为例,详细介绍了MCP的配置、工具创建及调用流程,展现了其“即插即用”的模块化优势,为构建复杂AI应用提供了强大支持。
|
7月前
|
机器学习/深度学习 算法 大数据
构建数据中台,为什么“湖仓一体”成了大厂标配?
在大数据时代,数据湖与数据仓库各具优势,但单一架构难以应对复杂业务需求。湖仓一体通过融合数据湖的灵活性与数据仓的规范性,实现数据分层治理、统一调度,既能承载海量多源数据,又能支撑高效分析决策,成为企业构建数据中台、推动智能化转型的关键路径。
|
8月前
|
数据采集 存储 分布式计算
一文读懂数据中台架构,高效构建企业数据价值
在数字化时代,企业面临数据分散、难以统一管理的问题。数据中台架构通过整合、清洗和管理数据,打破信息孤岛,提升决策效率。本文详解其核心组成、搭建步骤及常见挑战,助力企业高效用数。
2303 24
|
10月前
|
SQL 机器学习/深度学习 监控
构建数据中枢:数据中台指标体系如何赋能企业运营
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
10月前
|
存储 机器学习/深度学习 人工智能
使用 LangChain + Higress + Elasticsearch 构建 RAG 应用
本文介绍了如何利用LangChain、Higress和Elasticsearch快速构建RAG(检索增强生成)应用,实现企业知识的智能检索与问答。首先通过LangChain解析Markdown文档并写入Elasticsearch,接着部署Higress AI网关并配置ai-search插件以整合私有知识库与在线搜索功能。最后,通过实际案例展示了RAG查询流程及结果更新机制,确保内容准确性和时效性。文章还提供了相关参考资料以便进一步学习。
872 39
|
11月前
|
存储 人工智能 监控
通过Milvus和Langchain快速构建基于百炼大模型的LLM问答系统
阿里云向量检索服务Milvus版是一款全托管向量检索引擎,并确保与开源Milvus的完全兼容性,支持无缝迁移。它在开源版本的基础上增强了可扩展性,能提供大规模AI向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力和全链路监控告警,Milvus云服务成为多样化AI应用场景的理想选择,包括多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等。您还可以利用开源的Attu工具进行可视化操作,进一步促进应用的快速开发和部署。
1180 4

热门文章

最新文章