LangChain使用之Chains
Chains的基本使用Chain的基本概念Chain:链,用于将多个组件(提示模板、LLM模型、记忆、工具等)连接起来,形成可复用的工作流,完成复杂的任务。 Chain 的核心思想是通过组合不同的模块化单元,实现比单一组件更强大的功能。比如: 将LLM与 Prompt Template (提示模板)结合 将LLM与 输出解析器结合 将LLM与 外部数据结合,例如用于问答 将LLM与 长期记忆结合,例如用于聊天历史记录 通过将 第一个LLM 的输出作为第二个LLM 的输入,…,将多个LLM按顺序结合在一起 LCEL 及其基本构成使用LCEL,可以构造出结构最简单的Chain。 LangChain表达式语言(LCEL,LangChain Expression Language)是一种声明式方法,可以轻松地 将多个组件链接成 AI 工作流。它通过Python原生操作符(如管道符|)将组件连接成可执行流程,显 著简化了AI应用的开发。 LCEL的基本构成:提示(Prompt)+ 模型(Model)+ 输出解析器(OutputParser) 即: 123# 在这个链条中,用...
LangChain使用之Memory
Memory概述为什么需要Memory大多数的大模型应用程序都会有一个会话接口,允许我们进行多轮的对话,并有一定的上下文记忆能 力。 但实际上,模型本身是 不会记忆任何上下文的,只能依靠用户本身的输入去产生输出。 如何实现记忆功能呢? 实现这个记忆功能,就需要 额外的模块去保存我们和模型对话的上下文信息,然后在下一次请求时,把 所有的历史信息都输入给模型,让模型输出最终结果。 而在 LangChain 中,提供这个功能的模块就称为 Memory(记忆) ,用于存储用户和模型交互的历史信息。 什么是MemoryMemory,是LangChain中用于多轮对话中保存和管理上下文信息(比如文本、图像、音频等)的组件。它让应用能够记住用户之前说了什么,从而实现对话的 感知的链式对话系统提供了基础。 Memory的设计理念 输入问题:({“question”: …}) 读取历史消息:从Memory中READ历史消息({“past_messages”: […]}) 构建提示(Prompt):读取到的历史消息和当前问题会被合并,构建一个新的Prompt 模型处理:构建好的提示会被传递...
LangChain使用之Model I/O
Model I/O介绍Model I/O 模块是与语言模型(LLMs)进行交互的 核心组件,在整个框架中有着很重要的地位。所谓的Model I/O,包括输入提示(Format)、调用模型(Predict)、输出解析(Parse)。分别对应着Prompt Template , Model 和 Output Parser ==简单来说,就是输⼊、模型处理、输出这三个步骤。== Model I/O之调用模型1类型1:LLMs(非对话模型)LLMs,也叫Text Model、非对话模型,是许多语言模型应用程序的支柱。主要特点如下: 输入:接受 文本字符串或 PromptValue 对象 输出:总是返回 文本字符串 适用场景:仅需单次文本生成任务(如摘要生成、翻译、代码生成、单次问答)或对接不支持消息 结构的旧模型(如部分本地部署模型)( 言外之意,优先推荐ChatModel )不支持多轮对话上下文。每次调用独立处理输入,无法自动关联历史对话(需手动拼接历史文 本)。局限性:无法处理角色分工或复杂对...
LangChain使用之Retrieval
Retrieval模块的设计意义大模型的幻觉问题拥有记忆后,确实扩展了AI工程的应用场景。 但是在专有领域,LLM无法学习到所有的专业知识细节,因此在 面向专业领域知识的提问时,无法给出 可靠准确的回答,甚至会“胡言乱语”,这种现象称之为 LLM的“幻觉”。 大模型生成内容的不可控,尤其是在金融和医疗领域等领域,一次金额评估的错误,一次医疗诊断的失误,哪怕只出现一次都是致命的。但,对于非专业人士来说可能难以辨识。目前还没有能够百分之百解决这种情况的方案。 当前大家普遍达成共识的一个方案:首先,为大模型提供一定的上下文信息,让其输出会变得更稳定。其次,利用本章的RAG,将检索出来的 文档和提示词输送给大模型,生成更可靠的答案。 RAG的优缺点 RAG的优点 相比提示词工程,RAG有 更丰富的上下文和数据样本,可以不需要用户提供过多的背景描述,就能生 成比较符合用户预期的答案。 相比于模型微调,RAG可以提升问答内容的 时效性和 可靠性 在一定程度上保护了业务数据的 隐私性。 RAG的缺点 由于每次问答都涉及外部系统数据检索,因此RAG的 响应时延相对较高。 引用的外...
LangChain使用概述
LangChain使用概述LangChain的使用场景 项目名称 技术点 难度 文档问答助手 Prompt + Embedding + RetrievalQA ⭐⭐ 智能日程规划助手 Agent + Tool + Memory ⭐⭐⭐ LLM+数据库问答 SQLDatabaseToolkit + Agent ⭐⭐⭐⭐ 多模型路由对话系统 RouterChain + 多 LLM ⭐⭐⭐⭐ 互联网智能客服 ConversationChain + RAG +Agent ⭐⭐⭐⭐⭐ 企业知识库助手(RAG + 本地模 型) VectorDB + LLM + Streamlit ⭐⭐⭐⭐⭐ LangChain资料介绍 官网地址:https://www.langchain.com/langchain 官网文档:https://python.langchain.com/docs/introduction/ API文档:https://python.langchain.com/api_reference/ github地址:https://git...
chromadb向量数据库
chromadb官方地址:https://docs.trychroma.com/docs/overview/introduction 本文大部分内容地址 GitHub 仓库: https://github.com/chroma-core/chroma 查看 Issues和Discussions。 基本介绍什么是矢量存储?向量存储是专门为有效地存储和检索向量嵌入而设计的数据库。之所以需要它们,是因为像 SQL 这样的传统数据库没有针对存储和查询大型向量数据进行优化。 嵌入在高维空间中以数字向量格式表示数据(通常是非结构化数据,如文本)。传统的关系数据库不太适合存储和搜索这些向量表示。 向量存储可以使用相似性算法对相似的向量进行索引和快速搜索。它允许应用程序在给定目标向量查询的情况下查找相关向量。 在个性化聊天机器人的情况下,用户输入生成式 AI 模型的提示。然后,该模型使用相似性搜索算法在文档集合中搜索相似文本。然后,由此产生的信息用于生成高度个性化和准确的响应。这是通过在向量存储中嵌入和向量索引来实现的。 什么是ChromaDB?ChromaDB是一个开源矢量存储,用于...
逐层分解Transformer
Transformer整体结构下面的Transformer的整体结构,下图是Transformer用与中英文翻译的整体结构: [!notice]可以看到==Transformer==由==Encoder==和==Decoder==两个部分组成,Encoder和Decoder都包含6个==block==。 Transformer的工作流程大体如下: 第一步:获取输入句子的每一个单词的表示向量X,X由单词的 Embedding(Embedding就是从原始数据提取出来的Feature)和单词位置的 Embedding相加得到。 第二步:将得到的单词表示向量矩阵(如上图所示,每一行是一个单词的表示)传入 Encoder中,经过6个Encoder block(后可以得到句子所有单词的编码信息矩阵C,如下图。单词向量矩阵用表示,n是句子中单词个数,d是表示向量的维度( d=512)。每一个Encoder block输出的矩阵维度与输入完全一致。 第三步:将Encoder输出的编码信息矩阵C传递到Decoder中,Decoder依次会根据当前翻译过的单词1~i翻译下一个单词i+...
Dify教程
本文纯属是搬运工,原文来自-光聚客网络科技 Dify系列课程 Lecture:邓澎波 一、Dify的介绍https://dify.ai/ Dify 是一款创新的智能生活助手应用,旨在为您提供便捷、高效的服务。通过人工智能技术,Dify 可以实现语音助手、智能家居控制、日程管理等功能,助您轻松应对生活琐事,享受智慧生活。简约的界面设计,让操作更加便捷;丰富的应用场景,满足您多样化的需求。Dify,让生活更简单! 二、Dify的安装方式1. 在线体验 速度比较慢。不推荐 2. 本地部署2.1 Docker安装 安装Docker环境 1bash <(curl -sSl https://cdn.jsdelivr.net/gh/SuperManito/LunuxMirrors@main/DockerInstallation.sh) 安装Docker Compose 1curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(u...
Shell编程
Shell编程入门认识Shell开发者在进行服务器集群管理时,都需要编写 Shell 程序来进行服务器管理。Shell 是一个命令行解释器,为用户提供了一个向 Linux 内核发送请求以便于运行程序的界面系统升级程序。用户可以用 Shell 来启动、挂起、停止或者编写一些程序。 Shell 脚本的创建与执行Shell 脚本在执行时有两个格式上的要求:以 #!/bin/bash 开头、必须有可执行权限。如下我们编写第一个 Shell 脚本: 创建新目录 shell 用于存放 shell 脚本;12root@raspberrypi:~# mkdir /root/shellroot@raspberrypi:~# cd /root/shell/ vim 编辑器新建 shell 脚本 shell.sh,输入命令;12#!/bin/bashecho "hello world!" 这个时候查看 shell.sh 的权限,是没有可执行权限 x 的; 为它添加可执行权限;1root@raspberrypi:~/shell# chmod u+x shell.sh 执行文件; ...








