LLM Develop Tools
Motivation
如何开发以下需求?
-
业务 (Models、Prompt)
- 多模型(gpt-3.5, gpt-4, chatglm-6b, chatglm-6b-ft)
- 多业务(运营push、个性化push、weibo地域、商业评论、新闻评论……)
- 不同业务 X 不同模型 = 不同prompt
- 敏感词风控
- 输出标准化json格式
-
网页 (Memory)
- 多轮对话
- 控制记忆上限(按轮数、按token[全量, 摘要……])
-
外部数据 (Indexes)
- 汽车博文生成,需要参考车型各类参数(pdf,md, txt……)
-
任务拆分 (Chain)
- 汽车博文3段式生成
- 根据brief =》开头
- 根据brief、开头 =》 中间
- 根据开头、中间 =》结尾
- 汽车博文3段式生成
-
日志(Callbacks)
- 过程日志统计、token统计……
-
……
工具
目前开源工具包括以下几种:llama_index、langchain、semantic-kernel等。
tool | starred |
---|---|
langchain | 43.6k |
LlamaIndex(GPTIndex) | 16.3k |
semantic-kernel | 9.6k |
-
langChain是一个用于开发LLM应用程序的
框架
,使LLM开发变得规范快捷,类似于 java的Spring Boot、php的Laravel、python的Django …… -
LlamaIndex(GPTIndex)是LLM应用程序的
数据框架
。-
GptIndex为什么改名为LlamaIndex?
Funny that we had just rebranded our tool from GPT Index to LlamaIndex about a week ago
to avoid potential trademark issues with OpenAI
, and turns out Meta has similar ideas around LLM+llama puns :). Must mean the name is good though! Also very excited to try plugging in the LLaMa model into LlamaIndex, will report the results. https://news.ycombinator.com/item?id=34928386
-
-
semantic-kernel(SK)是一个轻量级的SDK,能够将人工智能大型语言模型(LLM)与传统编程语言集成。
区别
Q: Llamaindex vs langchain, which one should be used?
WEB | LLM |
---|---|
Spring Boot | langchain |
ElasticSearch-Lucene、MyBatis-Mysql | LlamaIndex(GptIndex)-Faiss |
取决于你的最终目标,如果它主要是一个智能搜索工具,llamaindex是很棒的,如果你想构建一个能够创建插件的chatgpt克隆,那就完全不同了。Langchain允许您利用ChatGPT的多个实例,为它们提供内存,甚至多个llamaindex实例。你可以用langchain做的事情是构建代理,它可以做不止一件事,一个例子是执行python代码,同时搜索谷歌。基本上llmaindex是一种智能存储机制,而Langchain是一种将多种工具结合在一起的工具。
Q: Differences between semantic-kernel and langchain? #936
Deep Learning | LLM |
---|---|
tensorflow、pytorch、paddlepaddle | langchain、semantic-kernel |
@santanaeds
As far as I know, semantic-kernel do support .Net, which langchain doesn’t, that’s all.
开源Demo
application | starred |
---|---|
langchain-ChatGLM | 7.5k |
DevSecOpsKB-LlamaIndex-LangChain-OpenAI | 3 |
本地知识库 QA Bot | - |
Note: starred数据截至2023-05-31 取个好名字很重要 ( ̄┰ ̄*)
langchain
LangChain 是一个用于开发由语言模型驱动的应用程序的框架。
主要功能
- 调用语言模型
- 将不同数据源接入到语言模型的交互中
- 允许语言模型与运行环境交互
LangChain 中提供的模块
- Models: 支持的模型类型和集成。
- Prompt: 提示词管理、优化和序列化。
- Memory: 内存是指在链/代理调用之间持续存在的状态
- Indexes: 当语言模型与特定于应用程序的数据相结合时,会变得更加强大-此模块包含用于加载、查询和更新外部数据的接口和集成。
- Chain: 链是结构化的调用序列 (对LLM或其他实用程序)。
- Agents: 代理是一个链,其中LLM在给定高级指令和一组工具的情况下,反复决定操作,执行操作并观察结果,直到高级指令完成。
- Callbacks: 回调允许您记录和流式传输任何链的中间步骤,从而轻松观察、调试和评估应用程序的内部。
各组件功能、demo https://python.langchain.com/en/latest/getting_started/getting_started.html
LangChain for LLM Application Development
@DeepLearning Ai
应用
langchain-ChatGLM
langchain-ChatGLM:一种利用 ChatGLM-6B + langchain 实现的基于本地知识的 ChatGLM 应用。
langchain-ChatGLM实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 -> 匹配出的文本作为上下文和问题一起添加到prompt中 -> 提交给LLM生成回答。
从文档处理角度来看,实现流程如下:
项目特点
- 依托 ChatGLM 等开源模型实现,可离线部署
- 基于 langchain 实现,可快速实现接入多种数据源
- 在分句、文档读取等方面,针对中文使用场景优化
- 支持pdf、txt、md、docx等文件类型接入,具备命令行demo、webui 和 vue 前端
项目结构
- models: llm的接口类与实现类,针对开源模型提供流式输出支持loader: 文档加载器的实现类。
- textsplitter: 文本切分的实现类。
- chains: 工作链路实现,如 chains/local doc ga 实现了基于本地文档的问答实现
- content:用于存储上传的原始文件。
- vector store: 用于存储向量库文件,即本地知识库本体
- configs: 配置文件存储。
langchain-ChatGLM QA Bot
ChatGLM-6B 结合 langchain 实现本地知识库 QA Bot
LangChain-LlamaIndex
Building Your Own DevSecOps Knowledge Base with OpenAI, LangChain, and LlamaIndex