Skip to content

Commit

Permalink
Merge pull request #23 from lvwzhen/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
lvwzhen committed May 7, 2023
2 parents bfacffe + f79c86e commit 015d9a3
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 23 deletions.
3 changes: 2 additions & 1 deletion .env.example
Expand Up @@ -5,4 +5,5 @@ NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=

# Get your key at https://platform.openai.com/account/api-keys
OPENAI_KEY=
OPENAI_KEY=
OPENAI_BASE_URL=
40 changes: 22 additions & 18 deletions README.md
Expand Up @@ -10,53 +10,60 @@

<table>
<tr>
<td width="300px" align="center">
<td width="200px" align="center">
<a href="https://magickpen.com/?ref=lawcnai" target="_blank">
<img alt="MagickPen" src="public/MagickPen.png" height="30px" />
<p>智能写作助手</p>
</a>
</td>
<td width="300px" align="center">
<td width="200px" align="center">
<a href="https://www.teach-anything.com/?ref=lawcnai" target="_blank">
<img alt="TeachAnything" src="public/TeachAnything.png" height="30px" />
<p>AI 百科全书</p>
</a>
</td>
<td width="200px" align="center">
<a href="https://better.avatarprompt.net/?ref=lawcnai" target="_blank">
<img alt="TeachAnything" src="public/BetterPrompt.png" height="30px" />
<p>Prompt 生成器</p>
</a>
</td>
</tr>
<tr>
<td width="300px" align="center">
<td width="200px" align="center">
<a href="https://openl.io/?ref=lawcnai" target="_blank">
<img alt="OpenL" src="public/OpenL.png" height="30px" />
<p>AI 翻译专家</p>
</a>
</td>
<td width="300px" align="center">
<td width="200px" align="center">
<a href="https://afdian.net/a/lvwzhen/plan" target="_blank">
<p>❤️ 打赏赞助 ❤️ </p>
</a>
</td>
<td width="200px" align="center">
</td>
</tr>
</table>


## 部署

部署此starter到Vercel。Supabase集成将自动设置所需的环境变量并配置您的[数据库概要](./supabase/migrations/20230406025118_init.sql)。您只需要设置 `OPENAI_KEY`,然后就可以开始了!
部署此 starter 到 Vercel。Supabase 集成将自动设置所需的环境变量并配置您的[数据库概要](./supabase/migrations/20230406025118_init.sql)。您只需要设置 `OPENAI_KEY`,然后就可以开始了!

[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?demo-title=Next.js%20Law%20CN%20AI&demo-description=Template%20for%20building%20your%20own%20law%20cn%20ai%20powered%20by%20Next.js%2C%20OpenAI%2C%20and%20Supabase.&demo-url=https%3A%2F%2Fsupabase.com%2Fdocs&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F1OntM6THNEUvlUsYy6Bjmf%2F475e39dbc84779538c8ed47c63a37e0e%2Fnextjs_openai_doc_search_og.png&project-name=Next.js%20OpenAI%20Doc%20Search%20Starter&repository-name=law-cn-ai&repository-url=https%3A%2F%2Fgithub.com%2Flvwzhen%2Flaw-cn-ai%2F&from=github&integration-ids=oac_jUduyjQgOyzev1fjrW83NYOv&env=OPENAI_KEY&envDescription=Get%20your%20OpenAI%20API%20key%3A&envLink=https%3A%2F%2Fplatform.openai.com%2Faccount%2Fapi-keys&teamCreateStatus=hidden&external-id=law-cn-ai)

## 技术细节

构建您自己的自定义ChatGPT涉及四个步骤
构建您自己的自定义 ChatGPT 涉及四个步骤

1. [👷 构建时间] 预处理知识库(您的 `pages` 文件夹中的 `.mdx` 文件)。
2. [👷 构建时间] 在PostgreSQL中使用 [pgvector](https://supabase.com/docs/guides/database/extensions/pgvector) 存储嵌入向量。
2. [👷 构建时间] 在 PostgreSQL 中使用 [pgvector](https://supabase.com/docs/guides/database/extensions/pgvector) 存储嵌入向量。
3. [🏃 运行时] 执行向量相似性搜索,查找与问题相关的内容。
4. [🏃 运行时] 将内容注入到OpenAI GPT-3文本自动补全中,并将响应流式传输到客户端。
4. [🏃 运行时] 将内容注入到 OpenAI GPT-3 文本自动补全中,并将响应流式传输到客户端。

## 👷 构建时间

步骤1和2发生在构建时间,例如当Vercel构建您的Next.js应用程序时。此时执行 [`generate-embeddings`](./lib/generate-embeddings.ts) 脚本,该脚本执行以下任务:
步骤 1 和 2 发生在构建时间,例如当 Vercel 构建您的 Next.js 应用程序时。此时执行 [`generate-embeddings`](./lib/generate-embeddings.ts) 脚本,该脚本执行以下任务:

```mermaid
sequenceDiagram
Expand All @@ -77,7 +84,7 @@ sequenceDiagram

## 🏃 运行时

步骤3和4在运行时发生,即用户提交问题时。发生这种情况时,执行以下一系列任务:
步骤 3 和 4 在运行时发生,即用户提交问题时。发生这种情况时,执行以下一系列任务:

```mermaid
sequenceDiagram
Expand All @@ -100,7 +107,7 @@ sequenceDiagram

此为 [`SearchDialog(客户端)`](./components/SearchDialog.tsx)组件和[`vector-search(边缘函数)`](./pages/api/vector-search.ts)负责的相关文件。

数据库的初始化,包括 `pgvector` 扩展的设置存储在 [`supabase/migrations`文件夹](./supabase/migrations/)中,并在运行 `supabase start` 时自动应用于本地PostgreSQL实例
数据库的初始化,包括 `pgvector` 扩展的设置存储在 [`supabase/migrations`文件夹](./supabase/migrations/)中,并在运行 `supabase start` 时自动应用于本地 PostgreSQL 实例

## 本地开发

Expand All @@ -127,23 +134,20 @@ pnpm dev

## 部署

仅需将此 starter 部署到 Vercel。Supabase集成将自动设置所需的环境变量并配置您的[数据库Schema](./supabase/migrations/20230406025118_init.sql)。您只需设置 `OPENAI_KEY` 并开始使用即可!
仅需将此 starter 部署到 Vercel。Supabase 集成将自动设置所需的环境变量并配置您的[数据库 Schema](./supabase/migrations/20230406025118_init.sql)。您只需设置 `OPENAI_KEY` 并开始使用即可!

[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?demo-title=Next.js%20Law%20CN%20AI&demo-description=Template%20for%20building%20your%20own%20law%20cn%20ai%20powered%20by%20Next.js%2C%20OpenAI%2C%20and%20Supabase.&demo-url=https%3A%2F%2Fsupabase.com%2Fdocs&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F1OntM6THNEUvlUsYy6Bjmf%2F475e39dbc84779538c8ed47c63a37e0e%2Fnextjs_openai_doc_search_og.png&project-name=Next.js%20OpenAI%20Doc%20Search%20Starter&repository-name=law-cn-ai&repository-url=https%3A%2F%2Fgithub.com%2Flvwzhen%2Flaw-cn-ai%2F&from=github&integration-ids=oac_jUduyjQgOyzev1fjrW83NYOv&env=OPENAI_KEY&envDescription=Get%20your%20OpenAI%20API%20key%3A&envLink=https%3A%2F%2Fplatform.openai.com%2Faccount%2Fapi-keys&teamCreateStatus=hidden&external-id=law-cn-ai)

## 了解更多

- 阅读我们如何建立[Supabase文档的ChatGPT](https://supabase.com/blog/chatgpt-supabase-docs)的博客帖子。
- 阅读我们如何建立[Supabase 文档的 ChatGPT](https://supabase.com/blog/chatgpt-supabase-docs)的博客帖子。
- [[Docs] pgvector:嵌入和向量相似性](https://supabase.com/docs/guides/database/extensions/pgvector)函数。
- 观看[Greg](https://twitter.com/ggrdson) 关于[Rabbit Hole Syndrome YouTube Channel](https://www.youtube.com/@RabbitHoleSyndrome)的 "How I built this" [video](https://youtu.be/Yhtjd7yGGGA):

[![Video: How I Built Supabase's OpenAI Doc Search](https://img.youtube.com/vi/Yhtjd7yGGGA/0.jpg)](https://www.youtube.com/watch?v=Yhtjd7yGGGA)

此文件由 ChatGPT 提供翻译




## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=lvwzhen/law-cn-ai&type=Date)](https://star-history.com/#lvwzhen/law-cn-ai&Date)

7 changes: 4 additions & 3 deletions pages/api/vector-search.ts
Expand Up @@ -11,6 +11,7 @@ export const config = {
}

const openAiKey = process.env.OPENAI_KEY
const openAiBaseUrl = process.env.OPENAI_BASE_URL || 'api.openai.com';
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
const supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY

Expand Down Expand Up @@ -44,7 +45,7 @@ export default async function handler(req: NextRequest) {

// Moderate the content to comply with OpenAI T&C
const sanitizedQuery = query.trim()
const moderationResponse = await fetch('https://api.openai.com/v1/moderations', {
const moderationResponse = await fetch('https://' + openAiBaseUrl + '/v1/moderations', {
method: 'POST',
headers: {
Authorization: `Bearer ${openAiKey}`,
Expand All @@ -64,7 +65,7 @@ export default async function handler(req: NextRequest) {
})
}

const embeddingResponse = await fetch('https://api.openai.com/v1/embeddings', {
const embeddingResponse = await fetch('https://' + openAiBaseUrl + '/v1/embeddings', {
method: 'POST',
headers: {
Authorization: `Bearer ${openAiKey}`,
Expand Down Expand Up @@ -143,7 +144,7 @@ export default async function handler(req: NextRequest) {
stream: true,
}

const response = await fetch('https://api.openai.com/v1/chat/completions', {
const response = await fetch('https://' + openAiBaseUrl + '/v1/chat/completions', {
method: 'POST',
headers: {
Authorization: `Bearer ${openAiKey}`,
Expand Down
10 changes: 9 additions & 1 deletion pages/index.tsx
Expand Up @@ -42,7 +42,7 @@ export default function Home() {

<div className='mt-28 md:mt-40 text-center w-full'>
<h2 className='text-slate-500'>更多好玩</h2>
<ul className='grid grid-cols-2 md:grid-cols-3 gap-3 md:gap-5 mt-4 max-w-lg mx-auto text-xs'>
<ul className='grid grid-cols-2 md:grid-cols-4 gap-3 mt-4 max-w-2xl mx-auto text-xs'>
<li>
<Link href="https://magickpen.com/?ref=lawcnai" className='
dark:bg-white/30
Expand All @@ -61,6 +61,14 @@ export default function Home() {
AI 百科全书
</Link>
</li>
<li>
<Link href="https://better.avatarprompt.net/?ref=lawcnai" className='dark:bg-white/30
dark:border-slate-900
dark:text-slate-900 text-slate-400 border border-slate-300/30 transition-all hover:bg-white/50 hover:backdrop-blur-md py-2.5 rounded-md block'>
<Image src={'/BetterPrompt.png'} width={100} height="20" className='w-full mb-1 h-5 object-contain' alt="Teach Anything - AI 百科全书" />
Prompt 生成器
</Link>
</li>
<li>
<Link href="https://openl.io/?ref=lawcnai" className='dark:bg-white/30
dark:border-slate-900
Expand Down
Binary file added public/BetterPrompt.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

1 comment on commit 015d9a3

@vercel
Copy link

@vercel vercel bot commented on 015d9a3 May 7, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.