文档聊天机器人 — 多个文件、主题、聊天窗口和聊天历史记录。由GPT提供支持。
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/dissorial/doc-chatbot
doc-chatbot: GPT-4 x Pinecone x LangChain x MongoDB
注意 - 右侧包含了该应用程序的部署版本链接,但是如果您尝试登录谷歌账号,将无法成功。我在那里使用了自己的API密钥,并且只限制访问权限仅限于我自己。请按照下面的说明运行或部署您自己的版本。
功能
- 创建多个聊天主题
- 使用Google OAuth进行登录,并将聊天记录存储在与您的电子邮件相关的MongoDB中
- 为每个主题上传任意数量的文件
- 为每个主题创建任意数量的聊天窗口
- 在浏览器内上传文件,将其转换为嵌入向量,并将嵌入向量存储在命名空间中并上传到Pinecone,还可以从浏览器中删除Pinecone命名空间
- 使用MongoDB上传和自动检索所有聊天的历史记录
- 支持
.pdf、.docx和.txt文件格式
+ LangChain和Pinecone
主聊天区域

设置页面

免责声明
该存储库最初是由mayooear的GPT-4 & LangChain存储库派生而来的。我原本计划做一些小的更改以满足我的需求,但最终却进行了以下操作:
- 添加了一些API路由(包括Pinecone和MongoDB)
- 创建了一堆新的(大型和小型)组件
- 完全改变了样式
- 设置了MongoDB
- 将所有npm脚本转换为在浏览器中运行
- 还有其他的一些杂项更改
这就是为什么我将其发布为一个独立的存储库。尽管如此,本自述文件的某些部分也是从那里借用的。
本地设置
克隆存储库
bashCopy code
git clone https://github.com/dissorial/pdf-chatbot.git
Pinecone设置
在Pinecone上创建一个账号。进入Indexes页面,点击Create index。输入任意名称,将Dimensions设置为1536,其余保持默认。然后进入API keys页面,点击Create API key。
MongoDB设置
在MongoDB上创建一个账号。在仪表板上,点击New Project并命名。然后点击Create project。您将被重定向到Database Deployments页面。点击Build a database,选择M0 FREE。选择任意提供商和地区,但可以保持默认设置。在底部为您的集群命名,并点击Create。
用户名和密码应该在此处预填。点击Create user。在IP access list中,点击Add my current API address,然后点击Finish and close和Go to databases。在您的集群旁边,将有一个Connect按钮。点击进入,然后转到Drivers。在Add your connection string into your application code下方,您将找到您的MongoDB_URI。将其复制到您的env文件中,并将<password>替换为您的密码(在您点击Create user时使用的密码)。完成。
Google身份验证设置
转到Google开发者控制台并创建一个新项目。
OAuth同意屏幕
- 导航到
APIs & Services,然后点击OAuth consent screen。点击External,然后点击Create。为应用程序命名,填写电子邮件/开发人员联系信息字段,然后继续。在Scopes部分,点击Add or remove scopes,然后勾选.../auth.userinfo.email,然后点击Save and continue。在Test users section中,添加自己的邮箱地址,然后点击Save and Continue,然后点击Back to dashboard。
凭据
转到Credentials(仍然在APIs and Services下),然后点击Create credentials,然后点击OAuth Client ID。在Application type下选择Web application,并为其命名。
在Authorized JavaScript origins下,添加http://localhost:3000。在Authorized redirect URIs下,添加http://localhost:3000/api/auth/callback/google。
然后点击Create。这也将显示您的Google Client ID和秘钥。
安装软件包
Copy code
yarn install
设置您的.env文件
- 将
.env.example重命名为.env - 您的
.env文件应如下所示:
makefileCopy codeOPENAI_API_KEY=
PINECONE_API_KEY=
PINECONE_ENVIRONMENT=
PINECONE_INDEX_NAME=
MONGODB_URI=''
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=
JWT_SECRET=
ALLOWED_EMAIL_DOMAIN='@gmail.com'
NODE_ENV=development
OpenAI API
- 访问OpenAI以获取API密钥,并将其插入到您的
.env文件中。
NextAuth Secret
- 您可以通过在Git Bash中运行
openssl rand -base64 32来生成此密钥。
JWT Secret
- 您可以通过在Git Bash中运行
openssl rand -base64 32来生成此密钥。
NextAuth URL
- 默认为http://localhost:3000。在生产环境中,这应该是您部署的应用程序的URL。
Allowed email domain
- 默认为'@gmail.com'。如果要使用任何电子邮件域,请从
pages/api/auth/[...nextauth].ts的选项中删除callback。
Node environment
- 默认为development。在生产环境中,将其设置为'production'(不带引号)
其他设置
- 在
utils/makechain.ts中,根据您自己的用例调整QA_PROMPT。如果您可以访问gpt-4API,请将new OpenAI中的modelName更改为gpt-4。
运行应用程序
运行npm run dev。一旦本地开发环境启动,请使用Google登录,然后转到左下角的Settings。上传您的文件并为它们设置一个'namespace'。在这里,'namespace'与您对话的主题是同义词。通过这种方式,您可以将多个文件上传到多个命名空间,并保持针对不同主题和文件的多个对话。
与文件聊天
如果您现在返回到主页,您应该在左侧边栏上看到您的命名空间。点击它,创建一个新的聊天,并与该特定命名空间的嵌入文件进行对话。
故障排除
通用错误
- 确保您正在运行最新版本的Node。运行
node -v命令检查您的版本。 - 如果您遇到特定文件的问题,请尝试先将其转换为文本,或者尝试使用不同的文件。有可能文件损坏、被扫描过,或者需要OCR技术将其转换为文本。
- 考虑记录环境变量并确保它们被正确暴露。
- 确认您正在使用与该存储库相同的LangChain和Pinecone版本。
- 检查您是否已创建包含有效的API密钥、环境和索引名称的.env文件。
- 确保您的全局环境中没有多个OPENAPI密钥。如果存在多个密钥,项目中的本地env文件将被系统的环境变量覆盖。
Pinecone错误
- 确保您的Pinecone仪表板环境和索引与.env文件中的值匹配。
- 确认您已将向量维度设置为1536。
- 请注意,Starter(免费)计划用户的Pinecone索引在7天不活动后会被删除。为了防止这种情况发生,在7天之前向Pinecone发送API请求以重置计数器。
- 如果问题仍然存在,请考虑使用新的Pinecone项目、索引和克隆的存储库重新开始。
鸣谢
该存储库的前端受到了ChatGPT的启发。