LangChain 基于大模型的智能问答

在构建基于大模型的智能问答系统时,LangChain 提供了一个强大的框架,支持各种模块来帮助开发者构建更复杂、更智能的语言处理应用。以下是构建此类系统的一些关键组件和步骤。

模型接入:使用 LangChain 支持的模型,通过 API 接入外部模型,或利用 api-for-open-llm 框架调用 本地llm模型。

向量库与嵌入模型:利用 Milvus 向量库和嵌入模型(如 m3e 向量模型)来增强问答系统的检索能力,使其能够从大量文本数据中快速检索相关信息。

链式调用和代理行动决策:使用 LangChain 的链(Chains)和代理(Agents)模块来构建复杂的问答逻辑,使系统能够根据用户输入做出连贯的决策并提供相关的回答。

提示词写法:根据需要编写适当的提示词,以引导模型提供准确的回答。可以使用 XML 标记来定义上下文和历史记录,以便模型更好地理解问题和背景。

通过以上步骤,可以构建一个基于大模型的智能问答系统,该系统能够理解用户的问题并提供准确、相关的回答。此外,通过不断优化模型、提示词和检索策略,可以进一步提高问答系统的性能和用户体验。

langchain/dify的智能体

Langchain支持各种模型的接入、提示词管理、基于向量库的检索增强、索引优化、链式调用和代理行动决策,适用于创建自治代理、模拟、个人助理、问答系统、聊天机器人、数据查询、代码理解、API交互、信息提取、文本摘要和模型评估等多种应用场景。

dify则是国内开源的一个agent平台,类似于带界面的Langchain。

milvus向量库

Milvus是在2019年创建的,其唯一目标是存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大规模嵌入向量。

作为一个专门设计用于处理输入向量查询的数据库,它能够处理万亿级别的向量索引。与现有的关系型数据库主要处理遵循预定义模式的结构化数据不同,Milvus从底层设计用于处理从非结构化数据转换而来的嵌入向量。Milvus使得向应用中添加相似性搜索变得容易。

嵌入模型

嵌入模型(Embedding Model)是一种在自然语言处理(NLP)和机器学习中广泛使用的技术,旨在将高维的稀疏数据(如单词、句子或图像)转换为低维的密集向量表示。这种向量表示能够捕捉到数据的语义信息和结构特征,使得计算机能够更有效地处理和分析数据。

在NLP中,单词嵌入(Word Embedding)是最常见的嵌入模型之一。它将每个单词映射到一个固定长度的实数向量,使得语义上相似的单词在向量空间中也相互接近。这种表示方式可以有效地减少数据的维度,并捕捉单词之间的语义关系,如同义词、反义词和上下文相关性。

嵌入模型通常通过无监督学习方法从大量文本数据中学习得到,如Word2Vec、GloVe和fastText等。这些模型利用单词的共现信息和上下文关系来学习单词的向量表示。

除了单词嵌入,还有句子嵌入(Sentence Embedding)、段落嵌入(Paragraph Embedding)和图像嵌入(Image Embedding)等,它们分别用于将句子、段落和图像转换为密集向量表示,以便进行后续的机器学习任务,如文本分类、情感分析、图像识别等。

目前中文嵌入模型效果较好的推荐m3e向量模型。

本地自有模型/外部模型接口

本地部署可以使用api-for-open-llm,该项目是一个开源框架,提供了统一的后端接口,使得以 OpenAI ChatGPT API 的方式调用各类开源大模型变得简单。

它支持流式响应、文本嵌入模型、langchain 的各类功能,并允许通过简单修改环境变量将开源模型作为 ChatGPT 的替代模型。此外,该项目还支持加载自行训练的 lora 模型,以及 vLLM 推理加速和处理并发请求,为各类应用提供强大的后端支持。

接口的话推荐使用gemini,在今年5月份之前gemini还是可以免费使用的。

提示词写法

以基于知识库的官网问答系统的提示词为例,下面是一个写好的提示词样例:

在XML标记中使用以下上下文作为您学到的知识。{上下文}

当回答用户:-如果你不知道,就说你不知道。

-如果你不知道,当你不确定,要求澄清。

避免提到你是从上下文中获得信息的。并根据用户提问的语言进行回答。

下面是人与助手之间的聊天历史记录,位于<历史>{聊天记录} XML标记中。

总结

基于大模型的智能问答系统利用 LangChain 框架和相关技术,如 Milvus 向量库和嵌入模型,提供了一个强大的解决方案,用于构建理解自然语言并提供准确回答的系统。通过集成不同的模型、管理提示词、利用向量检索和链式调用,这个系统能够处理复杂的用户查询,并根据上下文提供相关的信息。此外,系统的灵活性和可扩展性使得开发者可以根据特定需求定制和优化问答逻辑,从而提高用户体验和满意度。