🦭 格但斯克 AI 🦭
格但斯克 AI 是一个全栈 AI 语音聊天机器人(语音转文本、大语言模型、文本转语音),集成了 Auth0、OpenAI、Google Cloud API 和 Stripe - 包括 Web 应用、API 和 AI
Web API
它使用 Stripe 提供支付基础设施,用户可以购买 bibs
- API 令牌。Auth0 用于提供身份验证和授权。你可以免费使用它们 - Auth0 每月有 7000 用户的免费额度。Stripe 只从购买中收取费用,所以你不会因任何一个而产生持续成本。
如果你想使用这些服务,你需要设置你的 Stripe 和 Auth0 账户,并将 API 密钥放入 web-api/
目录下的 .env
文件中。
这里使用了 Node.js、TypeScript 和 Express
.env
.env_example
显示了你需要设置的值
CHATBOT_API_KEY={你自行决定;这个值在本项目的 ai-api、web-api 和 web 中重复使用}
OPEN_AI_API_KEY={前往 platform.openai.com,生成并复制粘贴 api 密钥到这里}
# Google Cloud API
type=service_account
project_id={项目 id}
private_key_id=
private_key={多行私钥,结构如下:-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----\n}
client_email={项目名称}@{项目 id}.iam.gserviceaccount.com
client_id=
auth_uri=https://accounts.google.com/o/oauth2/auth
token_uri=https://oauth2.googleapis.com/token
auth_provider_x509_cert_url=https://www.googleapis.com/oauth2/v1/certs
client_x509_cert_url=https://www.googleapis.com/robot/v1/metadata/x509/{项目名称}%40{项目 id}.iam.gserviceaccount.com
universe_domain=googleapis.com
# Stripe
STRIPE_SECRET_KEY={sk_...}
STRIPE_PUBLISHABLE_KEY={pk_...}
TOKENS_PRICE_ID={price_一些字符 - 你需要先在 Stripe 中为令牌创建价格,然后将其复制粘贴到这里}
# TOKENS_PER_TRANSACTION 定义用户每次购买 bibs 可以与 AI 进行多少次交互
TOKENS_PER_TRANSACTION=5
# Auth0
AUTH0_ISSUER_BASE_URL='https://{租户名称}.us.auth0.com'
AUTH0_DOMAIN='{租户名称}.us.auth0.com'
AUTH0_CLIENT_ID=
AUTH0_CLIENT_SECRET=
AUTH0_AUDIENCE="https://{租户名称}.us.auth0.com/api/v2/"
AUTH0_SCOPE="openid profile email offline_access"
CLIENT_URL={指向 web 部署位置的 url}
AI_API_URL={指向 ai api 部署位置的 url}
运行
- 进入
web-api
目录 - 执行
npm install
或npm ci
- 执行
npm run build
- 执行
npm run start
或npm run dev
以热重载方式运行
Web
目前在 Google Chrome 中运行。你可以点击格但斯克 AI 标志开始录音,然后再次点击将其发送到 Web API。收到成功响应后,会向你播放收到的音频。
这里使用了 Next.js,采用 Vercel 的模板
.env
.env_example
显示了你需要设置的值
CHATBOT_API_KEY={你自行决定;这个值在本项目的 ai-api、web-api 和 web 中重复使用}
CHATBOT_API_URL={api 部署位置的 url}
NEXT_PUBLIC_API_URL={指向 api 部署位置的 url}
API_URL={api 部署位置的 url}
# Auth0
NEXT_PUBLIC_AUTH0_ISSUER_BASE_URL="https://{租户名称}.us.auth0.com"
NEXT_PUBLIC_AUTH0_CLIENT_ID=
AUTH0_SECRET=
AUTH0_BASE_URL={指向 web 部署位置的 url}
AUTH0_ISSUER_BASE_URL='https://{租户名称}.us.auth0.com'
AUTH0_DOMAIN='{租户名称}.us.auth0.com'
AUTH0_CLIENT_ID=
AUTH0_CLIENT_SECRET=
AUTH0_AUDIENCE="https://{租户名称}.us.auth0.com/api/v2/"
AUTH0_SCOPE="openid profile email offline_access"
CLIENT_URL={指向 web 部署位置的 url}
运行
- 进入
web
目录 - 执行
npm install
或npm ci
- 执行
npm run build
- 安装 Stripe cli
- 执行
stripe listen --forward-to http://localhost:3000/webhook
(如果你更改了端口,请调整 3000)- 我们需要这个来在购买 bibs 时调用/webhook
端点 - 执行
npm run start
故障排除
- 你可能需要在
signup.ts
中删除/注释掉screen_hint: "signup",
AI API
这里使用 OpenAI 和 Google Cloud API 提供语音转文本(Whisper-1)、大语言模型(gpt-3.5-turbo)和文本转语音(Google Cloud TextToSpeechClient)服务。
这里使用 Python 和 FastAPI
.env
.env_example
显示了你需要设置的值
CHATBOT_API_KEY={你决定的任何值;此值在本项目的ai-api、web-api和web中重复使用}
OPEN_AI_API_KEY={前往platform.openai.com,生成并复制粘贴api密钥到此处}
# Google Cloud API 开始
type=service_account
project_id={项目ID}
private_key_id=
private_key={多行私钥,结构如下:-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----\n}
client_email={项目名称}@{项目ID}.iam.gserviceaccount.com
client_id=
auth_uri=https://accounts.google.com/o/oauth2/auth
token_uri=https://oauth2.googleapis.com/token
auth_provider_x509_cert_url=https://www.googleapis.com/oauth2/v1/certs
client_x509_cert_url=https://www.googleapis.com/robot/v1/metadata/x509/{项目名称}%40{项目ID}.iam.gserviceaccount.com
universe_domain=googleapis.com
PORT=9000
运行
- 进入
ai-api
目录 - 运行python3 app.py,默认在9000端口运行
Auth0设置
创建一个账户,然后创建一个新的租户。你需要设置:
-
应用程序
- API Explorer应用程序(机器对机器)
- 从此处获取客户端密钥
- 允许跨源认证
- 凭证 - 认证方法 - 客户端密钥(Post)
- API - Auth0 Management API - 授权并在右侧下拉菜单中授予所有权限
- 常规Web应用程序
- 此处的客户端密钥
- 允许的回调URL:总共6个URL,格式为:url、url/callback、url/api/auth/callback - 一个url是web api的url,另一个是web的url(例如:http://localhost:8080, http://localhost:8080/callback, http://localhost:8080/api/auth/callback, http://localhost:3000, http://localhost:3000/callback, http://localhost:3000/api/auth/callback;将localhost和端口替换为你的域名,并确保使用正确的协议http/https)
- 允许的注销URL:web api和web应用的URL - http://localhost:3000和http://localhost:8080或你的域名
- 允许的Web源:web api和web应用的URL - http://localhost:8080,你的API和AI API域名或你的域名
- 允许跨源认证:允许的Cors应为web url,你的Web API和AI API域名
- 轮换开启
- 凭证 - 认证方法 - 客户端密钥(Post)
- API Explorer应用程序(机器对机器)
-
API
- Auth0 Management API(系统API):
- 机器对机器应用程序:
- 添加上面列出的两个应用程序,并确保右侧的授权开关对两者都开启
- 为它们添加所有权限,通过点击右侧的下拉菜单并选择所有权限并保存
- 机器对机器应用程序:
- Auth0 Management API(系统API):
Stripe设置
创建一个账户,除非你想在生产环境中运行并处理真实支付,否则请打开测试模式,进入开发者标签,然后是API密钥。在这里你可以找到STRIPE_SECRET_KEY和STRIPE_PUBLISHABLE_KEY的值。现在进入产品标签并添加代表单次购买号码布(一个号码布 - 用户与AI的一次交互)的产品。创建后,复制priceId并将其放入.env中作为TOKENS_PRICE_ID。
OpenAI设置
创建一个账户,前往platform.openai.com,生成API密钥,在.env文件中使用
Google Cloud API设置
创建一个账户,进入IAM和管理,然后是服务账户并创建一个项目 - 你需要项目ID放入.env文件中。然后你需要生成带有凭证的json并从文件中提取值到你的.env文件中。前往创建访问凭证页面(你可以使用搜索引擎找到链接)。然后密钥 -> 添加密钥 -> 创建新密钥 -> JSON -> 创建。你应该得到一个包含你需要放入.env的所有值的credentials.json。最后,你需要启用文本到语音API服务,然后就准备就绪了
致谢
感谢Jeff McJunkin通过从头开始进行配置过程并填补文档中的空白来改进README
许可证
GNU GPL v2
作者
2023年由Jędrzej Paweł Maczan在波兰格但斯克制作