沉浸式学习PostgreSQL|PolarDB 9: AI大模型+向量数据库, 提升AI通用机器人在专业领域的精准度, 完美诠释柏拉图提出的“知识是回忆而不是知觉”

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 越来越多的企业和个人希望能够利用LLM和生成式人工智能来构建专注于其特定领域的具备AI能力的产品。目前,大语言模型在处理通用问题方面表现较好,但由于训练语料和大模型的生成限制,对于垂直专业领域,则会存在知识深度和时效性不足的问题。在信息时代,由于企业的知识库更新频率越来越高,并且企业所拥有的垂直领域知识库(例如文档、图像、音视频等)往往是未公开或不可公开的。因此,对于企业而言,如果想在大语言模型的基础上构建属于特定垂直领域的AI产品,就需要不断将自身的知识库输入到大语言模型中进行训练。

作者

digoal

日期

2023-08-31

标签

PostgreSQL , PolarDB , 数据库 , 教学


背景

欢迎数据库应用开发者参与贡献场景, 在此issue回复即可, 共同建设《沉浸式数据库学习教学素材库》, 帮助开发者用好数据库, 提升开发者职业竞争力, 同时为企业降本提效.

  • 系列课程的核心目标是教大家怎么用好数据库, 而不是怎么运维管理数据库、怎么开发数据库内核. 所以面向的对象是数据库的用户、应用开发者、应用架构师、数据库厂商的产品经理、售前售后专家等角色.

本文的实验可以使用永久免费的阿里云云起实验室来完成.

如果你本地有docker环境也可以把镜像拉到本地来做实验:

x86_64机器使用以下docker image:

ARM机器使用以下docker image:

业务场景1 介绍: AI大模型+向量数据库, 提升AI通用机器人在专业领域的精准度, 完美诠释柏拉图提出的“知识是回忆而不是知觉”

越来越多的企业和个人希望能够利用LLM和生成式人工智能来构建专注于其特定领域的具备AI能力的产品。目前,大语言模型在处理通用问题方面表现较好,但由于训练语料和大模型的生成限制,对于垂直专业领域,则会存在知识深度和时效性不足的问题。在信息时代,由于企业的知识库更新频率越来越高,并且企业所拥有的垂直领域知识库(例如文档、图像、音视频等)往往是未公开或不可公开的。因此,对于企业而言,如果想在大语言模型的基础上构建属于特定垂直领域的AI产品,就需要不断将自身的知识库输入到大语言模型中进行训练。

目前有两种常见的方法实现, 提升AI通用机器人在专业领域的精准度:

  • 微调(Fine-tuning):通过提供新的数据集对已有模型的权重进行微调,不断更新输入以调整输出,以达到所需的结果。这适用于数据集规模不大或针对特定类型任务或风格进行训练,但训练成本和价格较高。
  • 提示调整(Prompt-tuning):通过调整输入提示而非修改模型权重,从而实现调整输出的目的。相较于微调,提示调整具有较低的计算成本,需要的资源和训练时间也较少,同时更加灵活。

综上所述,微调的方案投入成本较高,更新频率较低,并不适合所有企业。提示调整的方案是在向量库中构建企业的知识资产,通过LLM+向量库构建垂直领域的深度服务。本质是利用数据库进行提示工程(Prompt Engineering)将企业知识库文档和实时信息通过向量特征提取然后存储到向量数据库,结合LLM可以让Chatbot的回答更具专业性和时效性,也更适合中小型企业构建企业专属Chatbot。

在机器学习领域,为了能够处理大量的非结构化的数据,通常会使用人工智能技术提取这些非结构化数据的特征,并将其转化为特征向量,再对这些特征向量进行分析和检索以实现对非结构化数据的处理。将这种能存储、分析和检索特征向量的数据库称之为向量数据库。

实现原理:

第一阶段:数据准备

  • 1. 知识库信息提取和分块:从领域知识库中提取相关的文本信息,并将其分块处理。这可以包括将长文本拆分为段落或句子,提取关键词或实体等。这样可以将知识库的内容更好地组织和管理。
  • 2. 调用LLM接口生成embedding(向量):利用LLM(如OpenAI)提供的接口,将分块的文本信息输入到模型中,并生成相应的文本embedding。这些embedding将捕捉文本的语义和语境信息,为后续的搜索和匹配提供基础。你可以理解为“正确答案”(或者prompt).
  • 3. 存储embedding(向量)信息:将生成的文本embedding(向量)信息、文本分块以及文本关联的metadata信息存入PolarDB|PostgreSQL 数据库中, 使用vector或embedding插件提供的向量数据类型。

第二阶段:问答过程

  • 1. 用户使用自然语言提问。
  • 2. 通过OpenAI提供的embedding接口创建该问题的embedding(向量)。
  • 3. 使用该问题等向量, 在PolarDB|PostgreSQL 数据库中, 搜索到向量相似度大于一定阈值的文档块, 作为用户原始问题的提示传递给OpenAI, 作为问题的Prompt。
  • 4. 将用户输入的问题 + 最相似问题和答案(如果有)输入OpenAI, 向OpenAI提问, 从而修正直接向OpenAI问“用户输入的问题”的结果. 提升OpenAI专业领域回答的准确度.

柏拉图是古希腊三贤之一, 他有个这样的观点: 人类的知识并非来自于感知和经验,而是存在于灵魂中的先前的灵魂经验的回忆。

从上面的实现原理我们可以理解为 “AI的知识并非来自感知和经验, 而是存在于灵魂中的先前的灵魂经验的回忆” , 回忆的源头在PolarDB|PostgreSQL 数据库中, 通过问题embedding得到相似向量(prompt)的过程就是回忆.

实现和对照

传统方法 设计和实验

传统数据库没有数组类型, 只能使用text表达, 或者使用多个数值字段的组合来表达向量.

传统数据库没有向量距离搜索的操作符, 无法实现向量特征相似搜索.

传统数据库没有办法在text或者多个数值字段组合上建立向量索引, 因此即使实现了计算2个向量距离的函数, 也无法实现高效率的向量相似检索.

PolarDB|PG新方法1 设计和实验

第一阶段:数据准备

数据准备阶段的关键在于将专属领域知识转化为文本embedding,并有效地存储和匹配这些信息。通过利用LLM的强大语义理解能力,您可以获得与特定领域相关的高质量回答和建议。当前的一些开源框架,可以方便您上传和解析知识库文件,包括URL、Markdown、PDF、Word等格式。例如LangChain和OpenAI开源的ChatGPT Retrieval Plugin。LangChain和ChatGPT Retrieval Plugin均已经支持了基于PGVector扩展的PostgreSQL作为其后端向量数据库,这使得与PolarDB PostgreSQL版集群的集成变得更加便捷。通过这样的集成,您可以方便地完成第一阶段领域知识库的数据准备,并充分利用PGVector提供的向量索引和相似度搜索功能,实现高效的文本匹配和查询操作。

1. 连接PolarDB | PostgreSQL 。

2. 创建测试数据库,以testdb为例。

CREATE DATABASE testdb;

3. 进入测试数据库,并创建PGvector插件。

CREATE EXTENSION IF NOT EXISTS vector;

4. 创建测试表(本文以polardb_pg_help_docs为例),用于存储知识库内容。

CREATE TABLE polardb_pg_help_docs (  
  id bigserial PRIMARY KEY,   
  title text,           -- 文档标题  
  description text,         -- 描述  
  doc_chunk text,       -- 文档分块  
  token_size int,       -- 文档分块字数  
  embedding vector(1536));  -- 文本嵌入信息

5. 为embedding列创建索引,用于查询优化和加速。

CREATE INDEX ON polardb_pg_help_docs USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);  
-- 或者使用hnsw算法  
CREATE INDEX ON polardb_pg_help_docs USING hnsw (embedding vector_cosine_ops) WITH (m = 12, ef_construction=40;

算法解读:

6. 在PyCharm中,创建项目,然后打开Terminal,输入如下语句,安装如下依赖库。

pip install openai psycopg2 tiktoken requests beautifulsoup4 numpy

7. 创建.py文件(本文以knowledge_chunk_storage.py为例),拆分知识库文档内容并存储到数据库中,示例代码如下:

说明

如下示例代码中,自定义的拆分方法仅仅是将知识库文档内容按固定字数进行了拆分,您可以使用LangChain和OpenAI开源的ChatGPT Retrieval Plugin等开源框架中提供的方法进行拆分。知识库中的文档质量和分块结果对最终的输出的结果有较大的影响。

import openai  
import psycopg2  
import tiktoken  
import requests  
from bs4 import BeautifulSoup  
EMBEDDING_MODEL = "text-embedding-ada-002"  
tokenizer = tiktoken.get_encoding("cl100k_base")  
# 连接PolarDB-PG数据库  
conn = psycopg2.connect(database="<数据库名>",  
                        host="<PolarDB PostgreSQL版集群连接地址>",  
                        user="<用户名>",  
                        password="<密码>",  
                        port="<数据库端口>")  
conn.autocommit = True  
# OpenAI的API Key  
openai.api_key = '<Secret API Key>'  
# 自定义拆分方法(仅为示例)  
def get_text_chunks(text, max_chunk_size):  
    chunks_ = []  
    soup_ = BeautifulSoup(text, 'html.parser')  
    content = ''.join(soup_.strings).strip()  
    length = len(content)  
    start = 0  
    while start < length:  
        end = start + max_chunk_size  
        if end >= length:  
            end = length  
        chunk_ = content[start:end]  
        chunks_.append(chunk_)  
        start = end  
    return chunks_  
# 指定需要拆分的网页  
url = 'https://help.aliyun.com/document_detail/602217.html?spm=a2c4g.468881.0.0.5a2c72c2cnmjaL'  
response = requests.get(url)  
if response.status_code == 200:  
    # 获取网页内容  
    web_html_data = response.text  
    soup = BeautifulSoup(web_html_data, 'html.parser')  
    # 获取标题(H1标签)  
    title = soup.find('h1').text.strip()  
    # 获取描述(class为shortdesc的p标签内容)  
    description = soup.find('p', class_='shortdesc').text.strip()  
    # 拆分并存储  
    chunks = get_text_chunks(web_html_data, 500)  
    for chunk in chunks:  
        doc_item = {  
            'title': title,  
            'description': description,  
            'doc_chunk': chunk,  
            'token_size': len(tokenizer.encode(chunk))  
        }  
        query_embedding_response = openai.Embedding.create(  
            model=EMBEDDING_MODEL,  
            input=chunk,  
        )  
        doc_item['embedding'] = query_embedding_response['data'][0]['embedding']  
        cur = conn.cursor()  
        insert_query = '''  
        INSERT INTO polardb_pg_help_docs   
            (title, description, doc_chunk, token_size, embedding) VALUES (%s, %s, %s, %s, %s);  
        '''  
        cur.execute(insert_query, (  
            doc_item['title'], doc_item['description'], doc_item['doc_chunk'], doc_item['token_size'],  
            doc_item['embedding']))  
        conn.commit()  
else:  
    print('Failed to fetch web page')

8. 运行python程序。

9. 登录数据库使用如下命令查看是否已将知识库文档内容拆分并存储为向量数据。

SELECT * FROM polardb_pg_help_docs;

第二阶段:问答

1. 在python项目中,创建.py文件(本文以chatbot.py为例),创建问题并与数据库中的知识库内容比较相似度,返回结果。

# 连接PolarDB | PostgreSQL版集群数据库  
conn = psycopg2.connect(database="<数据库名>",  
                        host="<PolarDB PostgreSQL版集群连接地址>",  
                        user="<用户名>",  
                        password="<密码>",  
                        port="<数据库端口>")  
conn.autocommit = True  
def answer(prompt_doc, prompt):  
    improved_prompt = f"""  
    按下面提供的文档和步骤来回答接下来的问题:  
    (1) 首先,分析文档中的内容,看是否与问题相关  
    (2) 其次,只能用文档中的内容进行回复,越详细越好,并且以markdown格式输出  
    (3) 最后,如果问题与PolarDB PostgreSQL版不相关,请回复"我对PolarDB PostgreSQL版以外的知识不是很了解"  
    文档:  
    \"\"\"  
    {prompt_doc}  
    \"\"\"  
    问题: {prompt}  
    """  
    response = openai.Completion.create(  
        model=GPT_COMPLETIONS_MODEL,  
        prompt=improved_prompt,  
        temperature=0.2,  
        max_tokens=MAX_TOKENS  
    )  
    print(f"{response['choices'][0]['text']}\n")  
similarity_threshold = 0.78  
max_matched_doc_counts = 8  
# 通过pgvector过滤出相似度大于一定阈值的文档块  
similarity_search_sql = f'''  
SELECT doc_chunk, token_size, 1 - (embedding <=> '{prompt_embedding}') AS similarity   
FROM polardb_pg_help_docs WHERE 1 - (embedding <=> '{prompt_embedding}') > {similarity_threshold} ORDER BY id LIMIT {max_matched_doc_counts};  
'''  
cur = conn.cursor(cursor_factory=DictCursor)  
cur.execute(similarity_search_sql)  
matched_docs = cur.fetchall()  
total_tokens = 0  
prompt_doc = ''  
print('Answer: \n')  
for matched_doc in matched_docs:  
    if total_tokens + matched_doc['token_size'] <= 1000:  
        prompt_doc += f"\n---\n{matched_doc['doc_chunk']}"  
        total_tokens += matched_doc['token_size']  
        continue  
    answer(prompt_doc,prompt)  
    total_tokens = 0  
    prompt_doc = ''  
answer(prompt_doc,prompt)

2. 运行Python程序后,您可以在运行窗口看到类似如下的对应答案:

说明

您可以对拆分方法以及问题prompt进行优化,以获得更加准确、完善的回答,本文仅为示例。

总结

如果未接入向量数据库,OpenAI对于问题“列举2023年PolarDB PostgreSQL 14版本新增功能点”的回答往往与阿里云不相关(因为大模型未训练相关知识点, 所以需要prompt来提升精准度).

在接入存储在PolarDB | PostgreSQL版数据库中的专属知识库后,对于问题“列举2023年PolarDB PostgreSQL 14版本新增功能点”,我们将会得到只属于阿里云PolarDB PostgreSQL版数据库的相关回答。

根据上述实践内容,可以看出PolarDB | PostgreSQL版完全具备构建基于LLM的垂直领域知识库的能力。

PolarDB|PG新方法2 设计和实验

ChatGPT 这类通用机器人在专业领域的回答可能不是那么精准, 原因有可能是通用机器人在专业领域的语料库学习有限, 或者是没有经过专业领域的正反馈训练.

为了提升通用机器人在专业领域的回答精准度, 可以输入更多专业领域相似内容作为prompt来提升通用ai机器人在专业领域的精准度.

PolarDB | PostgreSQL 开源数据库在与openai结合的过程中起到的核心作用是什么?

将PolarDB|PG 作为OpenAI(大模型)的外脑, 当需要回忆知识时, 基于PolarDB|PG数据库向量插件的向量类型、向量索引、向量相似搜索操作符, 加速相似内容的搜索. 通过“问题 和 prompt:可能的正确答案(来自外脑的回忆)”作为参考输入, 修正OpenAI(大模型)在专业领域的回答精准度.

1、准备:

  • PolarDB | PostgreSQL 开源数据库
  • plpython3u 函数插件 以及 python openai 包
  • 向量插件 (pgvector, hnsw, embedding等插件都可以)
  • openai 账号
  • 参考文档库素材

2、建设专业领域的“参考文档库”, 问题+答案的格式. 这一步可能是人肉工作, 比如从文档提炼成“问题+答案”的格式. 例如:

  • 问题: 如何使用PolarDB的eqp功能实现多机并行计算?
  • 答案: 以htap模式构建PolarDB集群, 配置xxx相关并行参数, explain sql 观察执行计划, 执行sql; (实际情况你可以写得更详细一些.)

3、创建向量插件

4、创建openai的辅助参考表, 包括“问题文本、问题向量、答案文本”几个字段. 你可以理解为“正确答案”(或者prompt).

5、将"参考文档库"导入数据库, 并调用openai得到辅助参考表“问题文本字段对应的vector值, 1536维度的向量”写入到辅助参考表.

6、创建辅助参考表vector字段的向量索引.

7、在用户向openai问非常专业的问题时,

  • 将“用户输入的问题1”抛给openai得到“向量值1”,
  • 使用“向量值1”搜索辅助参考表, 找到最相似的“向量2”(这一步就是向量检索, 可以用到向量索引), 取出与之相对应的“问题和答案”, (这一步可以设置阈值, 如果没有特别相似的就不要了.)
  • 将“用户输入的问题1 + 最相似问题和答案(如果有)”输入, 向openai提问, 从而修正直接向openai问“用户输入的问题1”的结果. 提升openai专业领域回答的准确度.

Demo 演示

1、通过云起实验启动数据库, 这个实验室是永久免费的.

参考:

创建并启动容器

docker run -d -it --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name pg registry.cn-hangzhou.aliyuncs.com/digoal/opensource_database:pg14_with_exts

进入容器

docker exec -ti pg bash

连接数据库

psql

这个容器支持如下相似搜索插件, 接下来的例子使用pgvector插件, 如果向量文本特别多, 建议使用hnsw或pg_embedding插件.

  • similarity, 近似算法, 类型+索引
  • imgsmlr, 图像搜索, 类型+索引
  • pgvector, 向量搜索, 类型+索引(ivfflat)
  • hnsw, 向量搜索, 类型+索引(hnsw)
  • embedding, 向量搜索, 类型+索引(hnsw)

2、创建插件以及 python openai 包

# apt install -y python3-pip    
# pip3 install openai    
root@689ed216de12:/tmp# psql    
psql (14.8 (Debian 14.8-1.pgdg110+1))    
Type "help" for help.    
postgres=# create extension plpython3u ;    
CREATE EXTENSION    
postgres=# create extension vector ;    
CREATE EXTENSION

3、准备"参考文档库", 你可以理解为“正确答案”.

4、创建openai的辅助参考表, 包括“问题文本、问题向量、答案文本”几个字段.

create table tbl_faq (    
  id serial8 primary key,    
  f text,  -- 问题    
  q text,  -- 标准答案    
  v vector(1536)  -- 文本格式: faq (textcat('title: '||f, ' --- '||q)) 文本向量    
);

5、将"参考文档库"导入数据库, 并调用openai得到辅助参考表“问题文本字段对应的vector值, 1536维度的向量”写入到辅助参考表.

直接update全表的话容易造成表膨胀, 建议从外面的文件导入的过程中调用openai实时计算vector值并导入.

配置环境变量(启动数据库时的环境变量OPENAI_API_KEY. 用于存储openai key, 当然你也可以使用其他方式获取key, 改写下列function即可.)

create or replace function get_v (faq text) returns vector as $$    
  import openai    
  import os    
  text = faq    
  openai.api_key = os.getenv("OPENAI_API_KEY")    
  response = openai.Embedding.create(    
      model = "text-embedding-ada-002",    
      input = text.replace("\n", " ")    
    )    
  embedding = response['data'][0]['embedding']    
  return embedding    
$$ language plpython3u;
insert into tbl_faq(f,q,v) select f,q,get_v(textcat('title: '||f, ' --- '||q)) from 外部表;

6、创建辅助参考表vector字段的向量索引.

create index on tbl_faq using ivfflat (v vector_cosine_ops);    
analyze tbl_faq;

7、在用户向openai问非常专业的问题时:

将“用户输入的问题1”抛给openai得到“向量值1”,

select get_v('用户输入的问题1');

使用“向量值1”搜索辅助参考表, 找到最相似的“向量2”(这一步就是向量检索, 可以用到向量索引), 取出与之相对应的“问题和答案”, (这一步可以设置阈值, 如果没有特别相似的就不要了.)

create or replace function get_faq(    
  v vector(1536),   -- 用户抛出问题向量    
  th float,  -- 相似度阈值    
  cnt int    -- 返回多少条    
)    
returns table (    
  id int8,   -- 辅助表ID    
  faq text,   -- 辅助表问题+答案    
  similarity float   -- 相似度    
)    
as $$    
  select     
    tbl_faq.id,     
    textcat('title: '||tbl_faq.f, ' --- '||tbl_faq.q) as faq,    
    1 - (tbl_faq.v <=> v) as similarity    
  from tbl_faq    
  where 1 - (tbl_faq.v <=> v) > th    
  order by similarity desc    
  limit cnt;    
$$ language sql strict stable;
select t.id, t.faq, t.similarity    
from get_faq(    
  (select get_v('用户输入的问题1')),    
  0.8,   -- 相似度阈值    
  1      -- 返回最相似的1条    
) as t;

将“用户输入的问题1 + 最相似问题和答案(如果有)”输入, 向openai提问, 从而修正直接向openai问“用户输入的问题1”的结果. 提升openai专业领域回答的准确度.

create or replace function ask_openai(    
  user_input text,  -- 用户输入问题    
  faq text   -- get_faq()得到的参考问题和答案    
)    
returns text as    
$$    
  import openai    
  import os    
  openai.api_key = os.getenv("OPENAI_API_KEY")    
  search_string = user_input    
  docs_text = faq    
  messages = [{"role": "system", "content": "You concisely answer questions based on text provided to you."}]    
  prompt = """Answer the user's prompt or question:     
  {search_string}    
  by summarising the following text:    
  {docs_text}    
  Keep your answer direct and concise. Provide code snippets where applicable.    
  The question is about a Greenplum/PostgreSQL/PolarDB database. You can enrich the answer with other     
  Greenplum or PostgreSQ-relevant details if applicable.""".format(search_string=search_string, docs_text=docs_text)    
  messages.append({"role": "user", "content": prompt})    
  response = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=messages)    
  return response.choices[0]["message"]["content"]    
$$ language plpython3u;

整合成一个函数:

(用户输入, openai返回基于辅助参考表修正后的答案.)

create or replace function good_ai_assistant(    
  user_input text  -- 只需要用户输入    
)    
returns table (    
  content text    
)    
language sql stable    
as $$    
  select ask_openai(user_input,    
    (select t.faq from get_faq( (select get_v('用户输入的问题1')), 0.8, 1 ) as t)    
  );    
$$;
select content from good_ai_assistant('用户输入的问题');

对照

传统数据库不支持向量类型、向量距离计算、向量类型索引.

PolarDB|PG 支持向量类型、向量距离计算操作符和函数、向量索引. 可以存储向量、进行向量距离计算、快速检索相似向量(向量距离相近).

将PolarDB|PG 作为OpenAI(大模型)的外脑, 当需要回忆知识时, 基于PolarDB|PG数据库向量插件的向量类型、向量索引、向量相似搜索操作符, 加速相似内容的搜索. 通过“问题 和 prompt:可能的正确答案(来自外脑的回忆)”作为参考输入, 修正OpenAI(大模型)在专业领域的回答精准度.

知识点

外脑词条转换, 关键词提取

向量类型

  • vector

向量索引组织方法:

  • ivfflat
  • hnsw

向量距离算法

  • Euclidean distance
  • negative inner product
  • cosine distance
  • taxicab distance

思考

向量搜索

  • chatgpt 外脑专属知识库
  • 柏拉图是古希腊三贤之一, 他有个这样的观点: 人类的知识并非来自于感知和经验,而是存在于灵魂中的先前的灵魂经验的回忆。
  • 从上面的实现原理我们可以理解为 “AI的知识并非来自感知和经验, 而是存在于灵魂中的先前的灵魂经验的回忆” , 回忆的源头在PolarDB|PostgreSQL 数据库中, 通过问题embedding得到相似向量(prompt)的过程就是回忆.

自建大模型

通义大模型

如何在数据库中直接调用大模型api?

  • plpython3u

如果不是用openai?

  • 由于openai的访问受限, 换一个基于开源自建的大模型或者使用国内大厂的大模型, 也可以使用同样的方法提升其他大模型在专业领域的回答问题精准度.
  • 参考对应模型的api进行相应调整即可.

还有什么AI结合的应用

  • gitee+ai
  • 语雀知识库|钉钉文档+ai
  • 帮助文档+ai
  • 钉钉聊天工具+ai
  • 图片,音频搜索+ai
  • ...

参考

《沉浸式学习PostgreSQL|PolarDB 8: 电商|短视频|新闻|内容推荐业务(根据用户行为推荐相似内容)、监控预测报警系统(基于相似指标预判告警)、音视图文多媒体相似搜索、人脸|指纹识别|比对 - 向量搜索应用》

《标准知识库 + PostgreSQL或PolarDB + 向量插件 + openai(或其他大模型) 提升通用ai机器人在专业领域的精准度》

https://developer.aliyun.com/article/1308443

https://github.com/openai/openai-cookbook/tree/main/examples/vector_databases/PolarDB

https://github.com/kelvich/pg_tiktoken

https://mp.weixin.qq.com/s/TEEdmOXvS5Wm2ajsJ7ejOg

https://tanzu.vmware.com/content/webinars/jul-11-building-ai-powered-search-applications-on-vmware-greenplum-data-warehouse-with-pgvector

https://www.brighttalk.com/webcast/14883/586427

https://supabase.com/blog/openai-embeddings-postgres-vector

https://help.openai.com/en/articles/4936848-how-do-i-create-a-good-prompt

《PostgreSQL 阿里云rds pg发布高维向量索引,支持图像识别、人脸识别 - pase 插件, 以及ivfflat,hnsw搜索算法说明》

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
1天前
|
人工智能
AniDoc:蚂蚁集团开源 2D 动画上色 AI 模型,基于视频扩散模型自动将草图序列转换成彩色动画,保持动画的连贯性
AniDoc 是一款基于视频扩散模型的 2D 动画上色 AI 模型,能够自动将草图序列转换为彩色动画。该模型通过对应匹配技术和背景增强策略,实现了色彩和风格的准确传递,适用于动画制作、游戏开发和数字艺术创作等多个领域。
29 16
AniDoc:蚂蚁集团开源 2D 动画上色 AI 模型,基于视频扩散模型自动将草图序列转换成彩色动画,保持动画的连贯性
|
10天前
|
人工智能 安全 测试技术
EXAONE 3.5:LG 推出的开源 AI 模型,采用 RAG 和多步推理能力降低模型的幻觉问题
EXAONE 3.5 是 LG AI 研究院推出的开源 AI 模型,擅长长文本处理,能够有效降低模型幻觉问题。该模型提供 24 亿、78 亿和 320 亿参数的三个版本,支持多步推理和检索增强生成技术,适用于多种应用场景。
59 9
EXAONE 3.5:LG 推出的开源 AI 模型,采用 RAG 和多步推理能力降低模型的幻觉问题
|
12天前
|
机器学习/深度学习 人工智能
SNOOPI:创新 AI 文本到图像生成框架,提升单步扩散模型的效率和性能
SNOOPI是一个创新的AI文本到图像生成框架,通过增强单步扩散模型的指导,显著提升模型性能和控制力。该框架包括PG-SB和NASA两种技术,分别用于增强训练稳定性和整合负面提示。SNOOPI在多个评估指标上超越基线模型,尤其在HPSv2得分达到31.08,成为单步扩散模型的新标杆。
54 10
SNOOPI:创新 AI 文本到图像生成框架,提升单步扩散模型的效率和性能
|
12天前
|
人工智能 搜索推荐 开发者
Aurora:xAI 为 Grok AI 推出新的图像生成模型,xAI Premium 用户可无限制访问
Aurora是xAI为Grok AI助手推出的新图像生成模型,专注于生成高逼真度的图像,特别是在人物和风景图像方面。该模型支持文本到图像的生成,并能处理包括公共人物和版权形象在内的多种图像生成请求。Aurora的可用性因用户等级而异,免费用户每天能生成三张图像,而Premium用户则可享受无限制访问。
54 11
Aurora:xAI 为 Grok AI 推出新的图像生成模型,xAI Premium 用户可无限制访问
|
16天前
|
人工智能 编解码 网络架构
GenCast:谷歌DeepMind推出的AI气象预测模型
GenCast是由谷歌DeepMind推出的革命性AI气象预测模型,基于扩散模型技术,提供长达15天的全球天气预报。该模型在97.2%的预测任务中超越了全球顶尖的中期天气预报系统ENS,尤其在极端天气事件的预测上表现突出。GenCast能在8分钟内生成预报,显著提高预测效率,并且已经开源,包括代码和模型权重,支持更广泛的天气预报社区和研究。
110 14
GenCast:谷歌DeepMind推出的AI气象预测模型
|
15天前
|
机器学习/深度学习 人工智能 编解码
【AI系统】Transformer 模型小型化
本文介绍了几种轻量级的 Transformer 模型,旨在解决传统 Transformer 参数庞大、计算资源消耗大的问题。主要包括 **MobileVit** 和 **MobileFormer** 系列,以及 **EfficientFormer**。MobileVit 通过结合 CNN 和 Transformer 的优势,实现了轻量级视觉模型,特别适合移动设备。MobileFormer 则通过并行结构融合了 MobileNet 和 Transformer,增强了模型的局部和全局表达能力。
46 8
【AI系统】Transformer 模型小型化
|
14天前
|
存储 人工智能 PyTorch
【AI系统】模型转换流程
本文详细介绍了AI模型在不同框架间的转换方法,包括直接转换和规范式转换两种方式。直接转换涉及从源框架直接生成目标框架的模型文件,而规范式转换则通过一个中间标准格式(如ONNX)作为桥梁,实现模型的跨框架迁移。文中还提供了具体的转换流程和技术细节,以及模型转换工具的概览,帮助用户解决训练环境与部署环境不匹配的问题。
33 5
【AI系统】模型转换流程
|
17天前
|
机器学习/深度学习 存储 人工智能
EfficientTAM:Meta AI推出的视频对象分割和跟踪模型
EfficientTAM是Meta AI推出的轻量级视频对象分割和跟踪模型,旨在解决SAM 2模型在移动设备上部署时的高计算复杂度问题。该模型采用非层次化Vision Transformer(ViT)作为图像编码器,并引入高效记忆模块,以降低计算复杂度,同时保持高质量的分割结果。EfficientTAM在多个视频分割基准测试中表现出与SAM 2相当的性能,具有更快的处理速度和更少的参数,特别适用于移动设备上的视频对象分割应用。
36 9
EfficientTAM:Meta AI推出的视频对象分割和跟踪模型
|
14天前
|
机器学习/深度学习 存储 人工智能
【AI系统】模型转换基本介绍
模型转换技术旨在解决深度学习模型在不同框架间的兼容性问题,通过格式转换和图优化,将训练框架生成的模型适配到推理框架中,实现高效部署。这一过程涉及模型格式转换、计算图优化、算子统一及输入输出支持等多个环节,确保模型能在特定硬件上快速、准确地运行。推理引擎作为核心组件,通过优化阶段和运行阶段,实现模型的加载、优化和高效执行。面对不同框架的模型文件格式和网络结构,推理引擎需具备高度的灵活性和兼容性,以支持多样化的应用场景。
36 4
【AI系统】模型转换基本介绍
|
14天前
|
机器学习/深度学习 人工智能 算法
【AI系统】模型压缩基本介绍
模型压缩旨在通过减少存储空间、降低计算量和提高计算效率,降低模型部署成本,同时保持模型性能。主要技术包括模型量化、参数剪枝、知识蒸馏和低秩分解,广泛应用于移动设备、物联网、在线服务系统、大模型及自动驾驶等领域。
50 4
【AI系统】模型压缩基本介绍

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB
  • 下一篇
    DataWorks