成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Deno Fresh OpenAI 實現智能搜索

數據庫 其他數據庫
Suabase的免費托管PostgresDB非常適合與OpenAI的GPT-3一起使用,因為該數據庫帶有擴展pgvector,允許您存儲嵌入并執行向量相似性搜索。這兩者都是構建GPT-3應用程序所必需的。接下來咱們看看怎么實現。

大家好,我是Echa。

在上個月Deno 官方的SaasKit受到如此積極的歡迎之后,官方與Suabase合作,為大家帶來了另一款Deno Fresh首發產品。這次,Deno 官方使用OpenAI Text Completion API創建了一個自定義ChatGPT風格的文檔搜索。

在線體驗:https://supabase-openai-doc-search.deno.dev/

Suabase的免費托管PostgresDB非常適合與OpenAI的GPT-3一起使用,因為該數據庫帶有擴展pgvector,允許您存儲嵌入并執行向量相似性搜索。這兩者都是構建GPT-3應用程序所必需的。接下來咱們看看怎么實現。

技術細節

構建您自己的自定義ChatGPT需要四個步驟:

  • ?? GitHub操作預處理知識庫(docs文件夾中的.mdx文件)。
  • ?? 使用pgvector在Postgres中嵌入GitHub Action Store。
  •  運行時執行向量相似性搜索,以查找與問題相關的內容。
  •  運行時將內容注入OpenAI GPT-3文本完成提示并流式響應到客戶端。

GitHub操作

步驟1。和2。無論何時我們對主分支進行更改,都可以通過GitHub Action進行。

合并main時,將執行此生成嵌入腳本,該腳本將執行以下任務:

  • 使用.mdx文件預處理知識庫
  • 使用OpenAI生成嵌入
  • 將嵌入內容存儲在Suabase中

以下是所發生情況的工作流程圖:

我們可以在GitHub Actions中使用setup deno GitHub Action通過deno執行TypScript腳本。此操作還允許我們使用npm說明符。

Github Action:https://github.com/marketplace/actions/setup-deno

這是GitHub Action yml文件:

name: Generate Embeddings

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  generate-embeddings:
    runs-on: ubuntu-latest

    env:
      SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
      SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.SUPABASE_SERVICE_ROLE_KEY }}
      OPENAI_KEY: ${{ secrets.OPENAI_KEY }}

    steps:
      - uses: actions/checkout@v3

      - uses: denoland/setup-deno@v1
        with:
          deno-version: v1.x

      - run: deno task embeddings

除了存儲嵌入之外,此腳本還會為每個.mdx文件生成一個校驗合并將其存儲在另一個數據庫表中,以確保只有在文件更改時才重新生成嵌入。

運行時

步驟3。和4。無論何時用戶提交問題,都會在運行時發生。發生這種情況時,將執行以下任務序列:

  • Edge函數接收查詢并使用OpenAI為查詢生成嵌入
  • 嵌入向量用于使用pgvector對Supadase進行向量相似性搜索,返回相關文檔
  • 文檔和查詢被發送到OpenAI,響應被流式傳輸到客戶端

下面是一個工作流程圖,詳細描述了這些步驟:

在代碼中,用戶提示以SearchDialog 開始。

然后,向量搜索API端點生成嵌入,然后在Supabase上執行向量搜索。當它得到相關文檔的響應時,它會組裝OpenAI的提示:

const prompt = codeBlock`
${oneLine`
  You are a very enthusiastic Supabase representative who loves
  to help people! Given the following sections from the Supabase
  documentation, answer the question using only that information,
  outputted in markdown format. If you are unsure and the answer
  is not explicitly written in the documentation, say
  "Sorry, I don't know how to help with that."
`}

Context sections:
${contextText}

Question: """
${sanitizedQuery}
"""

Answer as markdown (including related code snippets if available):
`;

const completionOptions: CreateCompletionRequest = {
  model: "text-davinci-003",
  prompt,
  max_tokens: 512,
  temperature: 0,
  stream: true,
};

// The Fetch API allows for easier response streaming over the OpenAI client.
const response = await fetch("https://api.openai.com/v1/completions", {
  headers: {
    Authorization: `Bearer ${OPENAI_KEY}`,
    "Content-Type": "application/json",
  },
  method: "POST",
  body: JSON.stringify(completionOptions),
});

// Proxy the streamed SSE response from OpenAI
return new Response(response.body, {
  headers: {
    ...corsHeaders,
    "Content-Type": "text/event-stream",
  },
});

最后,SearchDialog使用EventSource web API處理從OpenAI API返回的服務器發送事件。這使我們能夠將響應流式傳輸到客戶端,因為它是從OpenAI生成的:

const onSubmit = (e: Event) => {
  e.preventDefault();
  answer.value = "";
  isLoading.value = true;

  const query = new URLSearchParams({ query: inputRef.current!.value });
  const eventSource = new EventSource(`api/vector-search?${query}`);

  eventSource.addEventListener("error", (err) => {
    isLoading.value = false;
    console.error(err);
  });
  eventSource.addEventListener("message", (e: MessageEvent) => {
    isLoading.value = false;

    if (e.data === "[DONE]") {
      eventSource.close();
      return;
    }

    const completionResponse: CreateCompletionResponse = JSON.parse(e.data);
    const text = completionResponse.choices[0].text;

    answer.value += text;
  });

  isLoading.value = true;
};

最后

不知道小伙們看明白了,希望大家動手也嘗試一下看看能否實現。遇到問題歡迎在評論區留言。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-02-08 11:05:38

2025-02-06 11:00:00

模型搜索數據

2025-03-12 09:32:38

2024-07-26 13:42:01

OpenAIAISearchGPT

2025-01-10 13:36:24

2011-06-09 09:42:23

JavaScript

2024-01-04 10:20:47

OpenAI人工智能物聯網

2024-10-08 08:35:01

2023-07-06 07:40:31

OpenAI人工智能

2024-10-15 17:28:05

2022-08-17 09:08:44

Deno前端

2023-12-22 08:00:00

2020-05-20 09:26:59

Node.jsDenoJavaScript

2025-03-12 13:04:01

2024-07-26 09:29:38

2023-10-30 17:36:08

OpenAIAPI插件

2025-02-06 15:07:27

2021-12-14 10:41:49

DenoECMAJavaScript

2022-03-04 07:37:16

DenoNode.js項目

2024-11-14 18:40:57

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人午夜电影网 | 国产精品亚洲综合 | 成人在线不卡 | japan21xxxxhd美女| 国产91一区二区三区 | 国产区精品视频 | 日本在线网站 | 亚洲国产日韩一区 | 久久久久久国产精品久久 | 农村真人裸体丰满少妇毛片 | 婷婷激情综合 | 亚洲在线免费观看 | 成人免费观看男女羞羞视频 | 国产视频一区二区三区四区五区 | 国产成人免费视频 | 黄色日批视频 | 成人av网站在线观看 | 欧美成ee人免费视频 | 日韩精品一区二区三区在线播放 | 亚洲视频在线看 | 亚洲一区二区中文字幕在线观看 | 亚洲精品三级 | 亚洲精品亚洲人成人网 | 日韩精品一区二区三区在线播放 | 久久免费视频在线 | 精品久久久久久18免费网站 | 中文字幕国产精品 | 国产精品久久久久久久久久 | 一区二区高清在线观看 | 黑人精品xxx一区一二区 | 欧美精品一区二区三区在线 | 国产精品久久9 | 精品真实国产乱文在线 | 欧美日韩午夜精品 | 亚洲欧洲中文 | 日韩国产精品一区二区三区 | 免费在线黄色av | 成人精品在线观看 | 久久久精| 日韩有码一区二区三区 | 97久久久 |