解码 LangChain|用 LangChain 和 Milvus 从零搭建 LLM 应用

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 如何从零搭建一个 LLM 应用?不妨试试 LangChain + Milvus 的组合拳。作为开发 LLM 应用的框架,LangChain 内部不仅包含诸多模块,而且支持外部集成;Milvus 同样可以支持诸多 LLM 集成,二者结合除了可以轻松搭建一个 LLM 应用,还可以起到强化 ChatGPT 功能和效率的作用。

如何从零搭建一个 LLM 应用?不妨试试 LangChain + Milvus 的组合拳。

作为开发 LLM 应用的框架,LangChain 内部不仅包含诸多模块,而且支持外部集成;Milvus 同样可以支持诸多 LLM 集成,二者结合除了可以轻松搭建一个 LLM 应用,还可以起到强化 ChatGPT 功能和效率的作用。

本文为解码 LangChain 系列,将深入探讨如何借助 LangChain 与 Milvus 的力量增强 LLM 应用,以及如何构建和优化 AIGC 应用的小秘籍!

01. LangChain + 向量数据库:解决幻觉问题

LangChain

LangChain 是一种用于开发 LLM 应用的框架。LangChain 设计如下:

  • Data-aware:连接 LLM 与其他数据源
  • Agentic:允许 LLM 与 LangChain 环境交互

LangChain 包括许多模块,例如 Models、Prompts、Memory、Indexes、Chains、Agents 和 Callbacks。对于每个模块,LangChain 都提供标准化的可扩展接口。LangChain 还支持外部集成,甚至可实现端到端。LLM Wrapper 是 LangChain 的核心功能,提供了许多 LLM 模型,例如 OpenAI、Cohere、Hugging Face 等模型。

向量数据库

LangChain 提供一系列有用的大型语言模型(LLMs),可满足多样的用户需求。LangChain 的另一大亮点是其扩展功能——集成各种向量数据库(如 Milvus、Faiss 等),因此可以很好地进行语义搜索。

LangChain 通过 VectorStore Wrapper 提供了标准化的接口,从而简化数据加载和检索的流程。例如,大家可以使用 LangChain 的 Milvus 类,通过from_text方法存储文档的特征向量,然后调用similarity_search 方法获取查询语句的相似向量(也就是在向量空间中找到距离最接近的文档向量),从而轻松实现语义搜索。

通过 ChatGPT-Retrieval-Plugin 项目可以发现,向量数据库在 LLM 应用中起着至关重要的作用,它并不只局限于语义检索的用途,还包括其他用途,比如:

  • 存储问答上下文。这是 Auto-GPT 和 BabyAGI 等 LLM 平台提供的有用功能。这种功能可以增强LLM 应用对于上下文的理解和记忆能力。
  • 为 GPTCache 等 LLM 平台提供语义缓存,优化性能并节省成本。
  • 实现文档知识功能,降低 LLM 应用产生幻觉概率(如:OSSChat)。

如何解决 ChatGPT 的幻觉问题?

人工智能系统经常会产生“幻觉”、捏造事实、返回错误信息,更有甚者把 ChatGPT 形容为“一本正经地说废话“。因此,幻觉问题会降低 ChatGPT 回答的可信度,向量数据库可以有效解决幻觉问题。

其工作流程如下图所示:

1.png

首先,在 Milvus 中存储由官方文档转化而来的文本向量。然后,在响应问题时搜索相关文档(如上图中红色箭头流程所示)。ChatGPT 最后根据正确的上下文回答问题,从而产生准确的答案(如上图中绿色箭头流程所示)。

上述事例说明,用户无需标记、训练数据或进行额外开发和微调,只需将文本数据转化为向量并存储在 Milvus 中,即可解决 ChatGPT 的幻觉问题。LangChain + Milvus + ChatGPT 的组合可实现文本存储。ChatGPT 的答案也是基于参考文档库中的内容而返回的,可大大提高其回答的准确性。这样一来,聊天机器人可以基于正确的知识进行问答,减少出现“胡说八道”的可能性。

接下来分享一个 LangChain + Milvus + ChatGPT 的组合一个实际的具体应用场景:

如果我是一名 Milvus 社区管理员,每天需要回答各种社区相关问题,那么可以搭建一套智能应用来大大提高自己的工作效率。首先,可以将所有 Milvus 官方文档存储起来。然后,将这些文档作为必要的上下文知识提供给 ChatGPT。这样一来,如果用户问道:“如何使用 Milvus 搭建聊天机器人?”,构建的聊天机器人可以搜索与用户问题语义相关的官方文档。这种方法无需进行额外的数据训练,但能够大大提升工作效率和回答准确性。

02. LangChain + Milvus :搭建智能应用

搭建流程

1. 前提条件

  • 运行 pip install langchain 命令安装 LangChain。

  • 安装向量数据库 Milvus 或注册 Zilliz Cloud ——大家可以选择在本地系统上安装和启动开源向量数据库 Milvus 或者选择全托管向量数据库 Zilliz Cloud 服务,免去运维部署的麻烦。Zilliz Cloud 简单易用,具备高扩展性,提供超强性能,本教程将使用 Zilliz Cloud。

2. 加载知识库数据

首先,需要使用标准格式加载数据。也就是说,我们需要将文本切成小块,从而确保传入 LLM 模型的数据为一段段小的文本片段。

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Milvus
from langchain.document_loaders import TextLoader

loader = TextLoader('state_of_the_union.txt')
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

接下来,我们需要将小块的文本片段转化为向量并存储在向量数据库中。以下示例代码使用 OpenAI 的模型和 Zilliz Cloud 向量数据库。

embeddings = OpenAIEmbeddings()

vector_db = Milvus.from_documents(
    docs,
    embeddings,
    connection_args={
        "uri": "YOUR_ZILLIZ_CLOUD_URI",
        "user": "YOUR_ZILLIZ_CLOUD_USERNAME",
        "password": "YOUR_ZILLIZ_CLOUD_PASSWORD",
        "secure": True
    }
)

3. 查询数据

加载数据后,可以在问答链(Chain)中使用这些数据,下述代码主要解决上文提到的“幻觉”问题。

使用 similarity_search 方法将查询语句转化为特征向量,然后在 Zilliz Cloud 中搜索相似向量,以及相关的文档内容。

query = "What did the president say about Ketanji Brown Jackson"
docs = vector_db.similarity_search(query)

运行 load_qa_chain获取最终答案。这是一个最通用的用于回答问题的接口,它加载一整个链,可以根据所有数据库中文本进行问答。以下示例代码使用 OpenAI 作为 LLM 模型。在运行时,QA Chain 接收input_documentsquestion,将其作为输入。input_documents是与数据库中的query相关的文档。LLM 基于这些文档的内容和所提问的问题来组织答案。

from langchain.chains.question_answering import load_qa_chain
from langchain.llms import OpenAI

llm = OpenAI(temperature=0)
chain = load_qa_chain(llm, chain_type="stuff")
chain.run(input_documents=docs, question=query)

Milvus:更适合 AIGC 应用的向量数据库

如果想要提高应用的可靠性,需要使用数据库存储文本向量。但为什么选择 Milvus 向量数据库?

  • 助力语义搜索:不同于传统数据库,Milvus 专为向量设计,可以实现语义检索。
  • 高度可扩展:支持灵活扩展,用户可轻松存储和检索十亿级向量数据。此外,可扩展性对于检索速度和效率至关重要。
  • 支持混合查询:Milvus 支持混合查询,将向量相似性搜索和标量过滤相结合,可满足不同的搜索场景和要求。
    提供丰富的 API:Milvus 提供多语言的 API,包括 Python、Java、Go、Restful 等,方便用户在各种应用中集成和使用 Milvus。
  • 集成多种 LLM 模型:Milvus 可与多种主流 LLM 模型集成,包括 OpenAI Plugin、LangChain、LLamaIndex 等,方便用户灵活定制化其应用。
  • 多种部署版本和配置:Milvus 提供多种版本(如:MilvusLite 版、单机版、分布式版和云服务版),可以轻松适应不同类型的应用场景,即可支持小型项目,也可适用于企业级数据检索。

03. 如何优化 AIGC 应用?

人工智能领域中不断涌现各种新技术、新突破。本文将介绍 2 种优化 AIGC 应用的秘籍,帮助你进一步提升 AIGC 应用的性能和搜索质量。

提升 AIGC 应用程序性能:使用 GPTCache

如果想要提升 AIGC 应用性能并节省成本,可以试试 GPTCache。这个创新项目旨在创建语义缓存,以存储 LLM 响应。

具体而言,GPTCache 会缓存 LLM 的响应。在收到问题时,GPTCache 使用向量数据库检索相似的问题并查询此前缓存的响应。这样一来,应用便可快速准确地回答用户。GPTCache 可有效避免重复问题多次调用 LLM 接口所产生的费用以及需要等待的响应时间,从而提供更快速、更准确的答案,使 AIGC 应用更受用户欢迎。

提高搜索质量:调整 Embedding 模型和 Prompt

此外,我们可以通过微调 Embedding 模型和 Prompt 达到提高搜索质量的效果。Embedding 模型在 AIGC 应用中不可或缺,发挥着将文本转化为向量的关键作用。微调模型具体指调节模型从而使其注重关注某些关键词或短语,并调整模型权重和评分机制,从而迎合用户的需求和偏好。微调后,模型可以更准确地理解用户问题、将其进行分类,从而提高语义搜索结果的准确性和相关性,返回准确的结果。

影响搜索质量的另一重要因素是搜索提示。例如“我有什么可以帮助您的?”或“您有什么想法?”都可以用于提示用户该输入何种提问。通过测试和修改这些提示,可以提高搜索结果的质量和相关性。如果你的应用程序面向特定行业或人群,可以在提示内加入一些行业术语,这样有助于指导用户进行更相关的搜索查询。

总之,LangChain + Milvus 的组合方式可以帮助开发者从零开始搭建 LLM 应用。LangChain 为 LLM 提供了标准化且易用的接口,Milvus 则提供出色的存储和检索能力,从而整体提升 ChatGPT 等应用的功能和效率。

本文最初发布于 The Sequence,已获得转载许可。

如果在使用 Milvus 或 Zilliz 产品有任何问题,可添加小助手微信 “zilliz-tech” 加入交流群。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
14天前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
109 2
|
8天前
|
机器学习/深度学习 人工智能 运维
企业内训|LLM大模型在服务器和IT网络运维中的应用-某日企IT运维部门
本课程是为某在华日资企业集团的IT运维部门专门定制开发的企业培训课程,本课程旨在深入探讨大型语言模型(LLM)在服务器及IT网络运维中的应用,结合当前技术趋势与行业需求,帮助学员掌握LLM如何为运维工作赋能。通过系统的理论讲解与实践操作,学员将了解LLM的基本知识、模型架构及其在实际运维场景中的应用,如日志分析、故障诊断、网络安全与性能优化等。
28 2
|
14天前
|
监控 Kubernetes Python
Python 应用可观测重磅上线:解决 LLM 应用落地的“最后一公里”问题
为增强对 Python 应用,特别是 Python LLM 应用的可观测性,阿里云推出了 Python 探针,旨在解决 LLM 应用落地难、难落地等问题。助力企业落地 LLM。本文将从阿里云 Python 探针的接入步骤、产品能力、兼容性等方面展开介绍。并提供一个简单的 LLM 应用例子,方便测试。
101 11
|
14天前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
12天前
|
存储 机器学习/深度学习 人工智能
文档智能与RAG技术在LLM中的应用评测
本文介绍了阿里云在大型语言模型(LLM)中应用文档智能与检索增强生成(RAG)技术的解决方案,通过文档预处理、知识库构建、高效检索和生成模块,显著提升了LLM的知识获取和推理能力,尤其在法律、医疗等专业领域表现突出。
36 1
|
22天前
|
机器学习/深度学习 人工智能 自然语言处理
企业内训|LLM大模型技术在金融领域的应用及实践-某商业银行分行IT团队
本企业培训是TsingtaoAI技术团队专们为某商业银行分行IT团队开发的LLM大模型技术课程。课程深入分析大模型在金融行业中的发展趋势、底层技术及应用场景,重点提升学员在大模型应用中的实际操作能力与业务场景适应力。通过对全球商用 LLM 产品及国内外技术生态的深度对比,学员将了解大模型在不同企业中的发展路径,掌握如 GPT 系列、Claude 系列、文心一言等大模型的前沿技术。针对金融行业的业务需求,学员将学会如何结合多模态技术改进用户体验、数据分析等服务流程,并掌握大模型训练与工具链的实操技术,尤其是模型的微调、迁移学习与压缩技术。
40 2
|
2月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
291 12
|
12天前
|
机器学习/深度学习 数据采集 人工智能
文档智能 & RAG 让AI大模型更懂业务 —— 阿里云LLM知识库解决方案评测
随着数字化转型的深入,企业对文档管理和知识提取的需求日益增长。阿里云推出的文档智能 & RAG(Retrieval-Augmented Generation)解决方案,通过高效的内容清洗、向量化处理、精准的问答召回和灵活的Prompt设计,帮助企业构建强大的LLM知识库,显著提升企业级文档管理的效率和准确性。
|
13天前
|
人工智能 前端开发
大模型体验体验报告:OpenAI-O1内置思维链和多个llm组合出的COT有啥区别?传统道家理论+中学生物理奥赛题测试,名不虚传还是名副其实?
一个月前,o1发布时,虽然让人提前体验,但自己并未进行测试。近期终于有机会使用,却仍忘记第一时间测试。本文通过两个测试案例展示了o1的强大能力:一是关于丹田及练气的详细解答,二是解决一道复杂的中学生物理奥赛题。o1的知识面广泛、推理迅速,令人印象深刻。未来,或许可以通过赋予o1更多能力,使其在更多领域发挥作用。如果你有好的测试题,欢迎留言,一起探索o1的潜力。
|
14天前
|
机器学习/深度学习 人工智能 自然语言处理
前端大模型入门(三):编码(Tokenizer)和嵌入(Embedding)解析 - llm的输入
本文介绍了大规模语言模型(LLM)中的两个核心概念:Tokenizer和Embedding。Tokenizer将文本转换为模型可处理的数字ID,而Embedding则将这些ID转化为能捕捉语义关系的稠密向量。文章通过具体示例和代码展示了两者的实现方法,帮助读者理解其基本原理和应用场景。