MemFire教程|FastAPI+MemFire Cloud+LangChain开发ChatGPT应用-Part2
基本介绍
上篇文章我们讲解了使用FastAPI+MemFire Cloud+LangChain进行GPT知识库开发的基本原理和关键路径的代码实现。目前完整的实现代码已经上传到了github,感兴趣的可以自己玩一下:
https://github.com/MemFire-Cloud/memfirecloud-qa
目前代码主要完成了如下一些基本功能:
- 使用FastAPI作为Web服务端框架完成了基本的Web服务端开发
- 使用MemFire Cloud作为向量数据和个人文档数据存储
- 使用LangChain进行AI应用开发,加载本地磁盘目录上的文档,计算embedding、存储到向量数据库
- 使用OpenAI的GPT模型,完成问答功能的实现
- 使用Next.js开发了一个简单的UI界面用于问答演示
本篇文章我们将介绍一下如何部署示例代码。
准备工作
- 在MemFire Cloud上创建应用,后面需要用到应用的API URL和Service Role Key。可以在应用的应用设置->API页面找到相应的配置

- 创建应用后,在应用的SQL执行器页面执行如下脚本
-- Enable the pgvector extension to work with embedding vectors
create extension vector;-- Create a table to store your documents
create table documents (id uuid primary key,content text, -- corresponds to Document.pageContentmetadata jsonb, -- corresponds to Document.metadataembedding vector(1536) -- 1536 works for OpenAI embeddings, change if needed
);CREATE FUNCTION match_documents(query_embedding vector(1536), match_count int)RETURNS TABLE(id uuid,content text,metadata jsonb,-- we return matched vectors to enable maximal marginal relevance searchesembedding vector(1536),similarity float)LANGUAGE plpgsqlAS $$# variable_conflict use_column
BEGINRETURN querySELECTid,content,metadata,embedding,1 -(documents.embedding <=> query_embedding) AS similarityFROMdocumentsORDER BYdocuments.embedding <=> query_embeddingLIMIT match_count;
END;
$$;
-
准备好用来测试的文档目录
默认需要将文档放到app/docs下,可以通过环境变量指定其他目录 -
准备好openai的账号
请参考网上教程申请一个openai账号,后面代码运行需要用到openai的API KEY
如何运行
linux 下运行
1.安装依赖
pip install -r app/requirements.txt
2.设置参数
SUPABASE_URL/SUPABASE_KEY分别对应应用URL和service_role密钥。注意service_role秘钥具有比较高的数据库操作权限,只能用于服务端配置,不要泄漏。
export DOCS_PATH=./docs
export SUPABASE_URL="your-api-url"
export SUPABASE_KEY="your-service-role-key"
export OPENAI_API_KEY="your-openai-api-key"
3.运行
uvicorn main:app --reload --host 0.0.0.0
docker运行
docker build -t memfirecloud-qa:v1 .
docker run -p 8000:80 \-e SUPABASE_URL="your-api-url" \-e SUPABASE_KEY="your-service-role-key" \-e OPENAI_API_KEY="your-openai-api-key" \-v ./docs:/docs \memfirecloud-qa:v1
windows下运行(没测试)
与linux类似,设置相关环境变量,然后运行:
uvicorn main:app --reload --host 0.0.0.0
如何访问
用浏览器访问: http://your-ip:8000/可以显示一个简单的问答页面
支持的参数配置
# 本地文档路径
export DOCS_PATH=./docs# memfire cloud 应用的API URL和Service role key
export SUPABASE_URL="your-api-url"
export SUPABASE_KEY="your-service-role-key"# 使用openai / baidu 的大模型
export QA_BACKEND="openai" # 默认值# openai 相关配置(QA_BACKEND=openai是需要)
export OPENAI_ORGANIZATION="your-openai-organization"
export OPENAI_API_KEY="your-openai-api-key"
export OPENAI_MODEL="gpt-3.5-turbo" # 默认值# 百度相关配置(QA_BACKEND=baidu时需要)
export BAIDU_API_KEY="your-baidu-api-key"
export BAIDU_API_SECRET="your-baidu-api-secret"
export BAIDU_MODEL="ERNIE-Bot-turbo" # 默认值
接下来可以做的事情
-
过滤掉重复文档,避免应用重启或者添加重复文档时重新计算embedding
-
程序运行中支持增量添加新文档,实时更新知识库
-
支持对话(chat),目前只是问答(QA),不能连续对话
-
支持百度文心一言的接口(已完成api的封装)
感兴趣的可以提交pr,一起完善功能。
相关文章:
MemFire教程|FastAPI+MemFire Cloud+LangChain开发ChatGPT应用-Part2
基本介绍 上篇文章我们讲解了使用FastAPIMemFire CloudLangChain进行GPT知识库开发的基本原理和关键路径的代码实现。目前完整的实现代码已经上传到了github,感兴趣的可以自己玩一下: https://github.com/MemFire-Cloud/memfirecloud-qa 目前代码主要…...
C# File.Exists与Directory.Exists用法
File.Exists: 用于检查给定文件路径是否存在。如果文件存在,则返回true,否则返回false。 string path“D:\\test\\example.txt” bool exists File.Exists(path); if (exists) {Console.WriteLine("File exists."); } else {Con…...
(深度学习,自监督、半监督、无监督!!!)神经网络修改网络结构如何下手???
修改神经网络结构,我们可以根据这个进行添加: 卷积层(Convolutional Layers):标准的卷积层用于提取特征并进行特征映射。 池化层(Pooling Layers):用于减少特征图的空间维度&…...
Codejock Task Panel ActiveX Crack
Codejock Task Panel ActiveX Crack ActiveX COM的Codejock任务面板为Windows开发人员提供了一个复杂的Office任务面板,类似于在Microsoft Office和Windows资源管理器中看到的内容。TaskPanel甚至可以用作Visual Studio风格的工具箱。 功能概述 ActiveX COM的Codejo…...
LeetCode 热题 100 JavaScript--141. 环形链表
给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…...
文字转语音
键盘获取文字,转化为语音后保存本地 from win32com.client import Dispatch from comtypes.client import CreateObject from comtypes.gen import SpeechLib speakerDispatch(SAPI.SpVoice) speaker.Speak(请输入你想转化的文字) datainput(请输入:)#s…...
让ELK在同一个docker网络下通过名字直接访问
1. docker网络 参考https://blog.csdn.net/lihongbao80/article/details/108019773 https://www.freecodecamp.org/chinese/news/how-to-get-a-docker-container-ip-address-explained-with-examples/ 默认网络有三种,分别是 1、bridge模式,–netbridge(…...
EventBus 开源库学习(一)
一、概念 EventBus是一款在 Android 开发中使用的发布-订阅事件总线框架,基于观察者模式,将事件的接收者和发送者解耦,简化了组件之间的通信,使用简单、效率高、体积小。 一句话:用于Android组件间通信的。 二、原理…...
车载以太网SOME/IP的个人总结
如何实现CAN-SOME/IP通信路由测试 (qq.com) AutoSAR SOMEIP与SOC vsomeip通讯 (qq.com) 利用commonAPI和vSomeip对数据进行序列化 (qq.com) Vector - CANoe - VCDL与SomeIP (qq.com) 使用Wireshark 查看SOMEIP的方法 (qq.com) 基于AutoSAR的车载以太网测试 - SOMEIP之ECU做…...
vue2.29-Vue3跟vue2的区别
1、vue3介绍 更新(和重写)Vue的主要版本时,主要考虑两点因素:首先是新的JavaScript语言特性在主流浏览器中的受支持水平;其次是当前代码库中随时间推移而逐渐暴露出来的一些设计和架构问题。 相较于vue2,vu…...
【深度学习】分类和分割常见损失函数
分类 分类是一种监督机器学习任务,其中训练模型来预测给定输入数据点的类或类别。分类旨在学习从输入特征到特定类或类别的映射。 有不同的分类任务,例如二元分类、多类分类和多标签分类。 二元分类是一项训练模型来预测两个类别之一的任务,…...
Redhat Linux 安装MySQL安装手册
Redhat安装MySQL安装手册 1 下载2 上传服务器、解压并安装3 安装安装过程1:MySQL-shared-5.6.51-1.el7.x86_64.rpm安装过程2:MySQL-shared-compat-5.6.51-1.el7.x86_64.rpm安装过程3:MySQL-server-5.6.51-1.el7.x86_64.rpm安装过程4ÿ…...
题目:2303.计算应缴税款总额
题目来源: leetcode题目,网址:2303. 计算应缴税款总额 - 力扣(LeetCode) 解题思路: 按要求计算即可。注意最多产生 n1 个不同区间内的税款即可。 解题代码: class Solution {public doub…...
Kotlin 1.9.0 发布:带来多项新特性,改进 Multiplatform/Native 支持
新特性 Kotlin 的最新版本引入了许多新的语言特性,包括用于开放范围的…<操作符、扩展正则表达式等。此外,它还改进了 Kotlin Multiplatform 和 Kotlin/Native 支持。 Kotlin 1.9 稳定了与枚举类关联的 entries 属性,它会返回所定义的枚…...
接口测试——认知(一)
目录 引言 环境准备 1. 为什么要进行接口测试 2. 什么是接口 3. 接口测试与功能测试的区别 引言 为什么要做接口自动化测试? 在当前互联网产品迭代频繁的背景下,回归测试的时间越来越少,很难在每个迭代都对所有功能做完整回归。 但接…...
剑指 Offer 10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) 0, F(1) 1 F(N) F(N - 1) F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始&am…...
洪水填充算法详解
😜作 者:是江迪呀✒️本文关键词:算法、前端、JavaScript、HTML、洪水填充算法☀️每日 一言:不以物喜,不以己悲 一、前言 当象一个容器中注水时,无论容器的结构如何复杂,注入的水…...
ubuntu18.04安装docker及docker基本命令的使用
官网安装步骤:https://docs.docker.com/desktop/install/ubuntu/ docker快速入门教程 Ubuntu-Docker安装和使用 docker官网 docker-hub仓库 1、常用指令 (1)镜像操作 # ############################# 以nginx为例 docker images docker p…...
DataWhale 机器学习夏令营第二期——AI量化模型预测挑战赛 学习记录
DataWhale 机器学习夏令营第二期 学习记录一 (2023.08.06)1. 问题建模1.1 赛事数据数据集情况数据中缺失值类别和数值特征的基本分布 1.2 评价指标中间价的计算方式价格移动方向说明 1.3 线下验证 DataWhale 机器学习夏令营第二期 ——AI量化模型预测挑战赛 已跑通baseline&…...
简单认识ELK日志分析系统
一. ELK日志分析系统概述 1.ELK 简介 ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 好处: (1)提高安全…...
HS2汉化补丁终极指南:轻松实现Honey Select 2中文界面
HS2汉化补丁终极指南:轻松实现Honey Select 2中文界面 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面而困扰吗&…...
D1094UK,500MHz频段下20W高功率输出的单端式硅RF MOSFET射频晶体管
简介今天我要向大家介绍的是 TT Electronics / Semelab 的硅RF MOSFET晶体管——D1094UK。这是一款专为VHF/UHF通信频段设计的单端式射频功率场效应管,在28V工作电压、500MHz频率下可提供20W的输出功率。作为一款高性能射频器件,它具备极低的反向传输电容…...
工厂实验室建设公司厂家:建不好,产品质量白搞|中南实验室建设
在工业4.0浪潮席卷全球的今天,工厂实验室早已不是传统意义上"摆几台仪器、刷几面墙"的简单工程。它是企业质量管控的第一道闸门,是工艺优化的数据引擎,更是技术创新的核心载体。从新能源电池的毫秒级安全测试,到半导体工…...
如何告别模组管理噩梦:XXMI启动器的3个革命性解决方案
如何告别模组管理噩梦:XXMI启动器的3个革命性解决方案 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 你是否曾经为管理多个游戏的模组而感到头疼?每个游…...
AI大模型推理并行策略:DP、TP、PP、SP、EP的基本原理
在做大模型推理部署的时候,经常会碰到模型参数量太大,一块GPU的显存装不下,或者单块GPU的算力跟不上推理速度的情况,这时候就需要用并行策略来解决这些问题。 因为计算的流程不一样,推理和训练用到的并行策略在实现上也不一样。 这篇文章就是帮大家快速搞懂常见并行策略…...
Claude Citations API 实战:让模型自动标注引用来源,RAG 准确率提升 15%
Claude Citations API 实战:让模型自动标注引用来源,RAG 准确率提升 15% 做 RAG(检索增强生成)的工程师都遇到过这种灵魂提问: “你这个回答到底是从哪段文档里得出来的?” 这个问题之所以致命,…...
别再手动画图了!WPS PPT里这个‘转智能图形’功能,3秒让文字变高级图示
WPS PPT智能图形进阶指南:3秒实现专业级视觉表达 在快节奏的职场环境中,演示文档的视觉呈现往往决定着信息传递的效率。传统PPT制作中,将文字列表转换为可视化图形需要经历形状绘制、文字排版、配色调整等多道工序,耗时且难以保证…...
不懂网络也能远程连内网?UU 远程这个新功能,我真的会用
不懂网络也能远程连内网?UU 远程这个新功能,我真的会用 不懂网络也能远程连内网?UU 远程这个新功能,我真的会用 其实我的场景很简单——公司内网有台开发机,上面跑了不少服务,日常在家办公时需要随时能访问…...
5分钟上手Real-ESRGAN:让模糊图片瞬间清晰的AI图像增强神器
5分钟上手Real-ESRGAN:让模糊图片瞬间清晰的AI图像增强神器 【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN 你是否曾为…...
从Delaunay到高质量网格:手把手拆解TetGen算法核心与C++实现避坑指南
从Delaunay到高质量网格:手把手拆解TetGen算法核心与C实现避坑指南 在计算几何与科学计算领域,生成高质量四面体网格是有限元分析、流体仿真和游戏物理引擎等应用的基础。TetGen作为开源网格生成工具的代表,其算法设计与实现细节直接影响着最…...
