以下是该项目的源代码和数据源。
准备深入探讨:
踏上一场变革之旅,探索先进AI的世界,我们将创建一个前沿的多语言医疗保健聊天机器人。在这份全面的指南中,我们将利用Qdrant、LangChain和OpenAI的力量,构建一个打破语言障碍的复杂对话式AI。
无论你是AI爱好者、经验丰富的开发者,还是介于两者之间的某个人,本教程都将为你提供创建能够突破可能界限的AI应用程序的知识和技能。阅读完本文后,你将具备构建智能、多语言系统的基础,这些系统能够适应各种应用场景。
准备迎接挑战,扩展你的AI工具箱,并加入塑造对话式AI未来的一流创新者行列。让我们开始这次激动人心的现代聊天机器人开发之旅!
图片由 Code With prince 提供
图片由 Code With Prince 创建
一旦所有数据下载成功,我们还需要获取Qdrant和OpenAI的API密钥。
一旦你生成了OpenAI的API密钥,你可以回到VS-code中,打开.env文件,并添加以下内容:
图片由Code With Prince提供
在屏幕左侧的侧边栏中,点击“集群”按钮。
点击屏幕右上角的“创建”按钮,填写详细信息以创建您的集群
图片由 Code With Prince 创建
图片由Code With Prince制作
完成之后,你应该能够在仪表板中看到创建的集群。
图片由 Code With Prince 创建
点击集群名称以跳转到集群仪表板。
图片由 Code With Prince 创建
在那里,你应该能够看到集群的详细信息。
图片由 Code With Prince 创建
为了获取你的Qdrant API密钥,你需要点击屏幕最左边的“数据访问控制”按钮。
图片由Code With Prince提供
完成之后,点击屏幕右上角的“创建”按钮。填写详细信息并创建您的API密钥。
图片由Code With Prince提供
选择你想要为其创建API密钥的集群,然后点击确定。
图片由 Code With Prince 提供
请勿点击模态框外部,并轻轻复制第一个输入框中出现的API密钥。
一旦复制好,你可以回到VS-code中,打开.env文件并将它添加进去。
我们也需要刚刚创建的集群的 URL 或 “端点”;你可以通过点击侧边栏的“集群”按钮来获取该 URL。
图片由 Code With Prince 创建
一旦复制好,请将其粘贴到.env文件中,如下所示:
我们将使用OpenAI的文本嵌入模型来创建您的文本文档的向量表示。为此,我们需要在.env文件中设置一些环境变量。
在这一重要部分,我们将深入探讨如何将数据导入Qdrant Cloud,这是一个强大的向量数据库,将作为我们高级文档检索系统的基石。通过创建一个复杂的向量索引,我们将解锁执行闪电般快速相似性搜索的能力,从而能够以前所未有的准确度找到最相关的文档来回答用户的问题。
为了使这个系统变得生动,我们将利用OpenAI最先进的嵌入模型。这些前沿的模型将把我们的原始文本数据转换为丰富、多维度的向量表示,捕捉每个文档的细微语义。
到本节结束时,你将拥有一个强大的向量索引,准备好彻底改变你的信息检索和查询回答方法。
作为参考,这里是我的项目目录结构的视图:
图片由Code With Prince提供
这个设置将为我们向量索引和相似性搜索能力提供基础。
一旦我们使用Pandas读取了CSV文件,我们将把每一行数据转换为LangChain文档。
现在让我们使用Pandas读入清洗后的数据:
图片由Code With Prince提供
从这里,我们可以继续创建LangChain文档,以下是实现这一操作的代码:
每个文档都有一个唯一的标识符。让我们继续创建这些文档:
现在我们已经准备好了文档,接下来需要将它们嵌入并存储在我们的向量数据库中,本例中为Qdrant Cloud。为此,我们首先需要连接到刚刚创建的Qdrant Cloud实例。
为此,我们需要以下代码块:
注意:代码片段未被翻译,保持原样。
图片由Code With Prince提供
我们可以使用以下代码检查是否已经有现有的集合:
图片由Code With Prince提供
从上面的图片中可以看到,我已经有一些集合,这些集合是我学校项目中正在使用的。我们将为这个项目创建一个新的集合,如果你当前还没有任何集合,也不用担心。
为了创建一个集合,我们需要以下代码块:
现在,让我们使用上述信息在Qdrant云中创建集合:
图片由 Code With Prince 创建
现在我们已经创建了集合,可以回到Qdrant Cloud控制台查看创建的“集合”。点击屏幕右上角的“打开控制台”按钮。
图片由Code With Prince提供
图片由 Code With Prince 创建
我们现在继续连接到这个集合。为此,我们将使用以下代码块。
首先,我们需要创建OpenAI嵌入模型的实例。我们将使用text-embedding-3-small模型。
_QdrantVectorStore_ 支持三种相似性搜索模式。这些模式可以通过设置类时的_retrieval_mode_ 参数进行配置。
稠密向量搜索(默认)
稀疏向量搜索
混合搜索
如果你希望使用稀疏或混合搜索,你需要使用SparseEmbeddings。
仅使用稀疏向量进行搜索时,
在我们的情况下,我们将使用默认的 DENSE 检索模式。
图片由Code With Prince提供
我们现在准备将最初创建的文档插入到我们的Qdrant云集群集合中。这个过程称为“Upsert”。
add_documents 方法将使用创建向量存储集合时指定的 OpenAI 模型来生成嵌入。它还将使用我们最初创建的 uuids 独特地标识每个文档。
图片由 Code With Prince 创建
这是我们向集群集合中插入数据所需的一切。
现在我们已经将数据嵌入并索引到Qdrant云集合中,我们可以继续对其进行一些查询,通过提问来看看返回的数据是什么。
这里我指定了想要执行相似性搜索,并返回与查询最接近的k篇文档。k是一个变量,你可以为它指定任何值。只需记住,这个值应该是合理的;不要指定一个荒谬的值,比如1000。
默认情况下,您的文档将存储在以下负载结构中;例如:
疾病:登革热 描述:由登革病毒(登革病毒属)引起的急性传染病,通过埃及伊蚊传播,表现为头痛、严重关节痛和皮疹。——也称为骨痛热、登革热。立即行动:喝木瓜叶汁 医疗建议:避免食用油腻辛辣食物 饮食指导:防止蚊虫叮咬 长期管理:保持水分 [{‘Disease’: ‘Dengue’, ‘_id’: ‘8320500c-c4d2–4143–9263–83fbd5e4170b’, ‘_collection_name’: ‘healthcare_collection’}]
你可以看到我们有正确的数据可以用来回答用户的问题。
完成这一部分后,我们可以继续构建多语言聊天机器人。
对于我们的初始设计,这是我目前考虑实现的内容。我只是想暂时说出来。请看这个图:
图片由Code With Prince提供
流程形成了一个完整的循环:
这种架构允许聊天机器人在处理和回答查询时保持单一的核心语言,同时为用户提供多语言界面。它有效地将语言翻译任务与核心问答功能分离,使系统更加模块化,便于维护或为其他语言进行更新。
我们需要翻译器的原因是,嵌入是从英文文本生成的,而用户可以选择使用任何语言。那么,我们如何确保能够创建与从英文文本生成的嵌入具有相似意义的嵌入呢?这就是为什么我们需要翻译层的原因。希望这对你有帮助。
让我们继续前进,实现这个架构。
为了开始使用Llama-3.1,首先需要创建一个Groq账户并获取Groq的API密钥。
Groq 是一家成立于2016年的创新型AI公司,专注于高速AI推理解决方案。其开创性的语言处理单元(LPU)技术,专门设计用于AI推理和语言处理,提供了前所未有的速度、成本效益和能源效率。与传统的GPU不同,Groq的LPU在AI硬件架构上实现了根本性的转变。通过在云端和本地环境中提供快速的AI推理,Groq为各行各业带来了下一代的AI创新和生产力。
图片由Code With Prince提供
如果你不想使用Groq,另一个选择是将Llama-3.1本地下载并在本地运行。由于我没有足够的计算资源来演示这一点,所以我们将继续使用Groq API。
图片由 Code With Prince 创建
替换为你复制的API密钥。
重要说明:
要探索Groq-LangChain的集成,只需导航到GroqCloud文档中的“LangChain集成”部分,这将引导您访问官方LangChain文档以获取详细的实现说明。
图片由 Code With Prince 创建
图片由 Code With Prince 创建
要安装LangChain-Groq集成包,请使用此处的命令,如官方文档中所述。
我们也需要安装 python-dotenv 包来帮助我们读取 .env 文件中的环境变量。还记得我们在里面存储了什么值吗?
从上面的描述中,我们讨论了Groq的API密钥。我们将其存储在了一个安全的位置。那么,我们该如何在代码中读取它呢?
为了在代码中读取环境变量,我们需要在同一个笔记本中创建一个新的单元格并运行以下代码块:
图片由 Code With Prince 创建
让我们进入旅程中令人兴奋的部分。在你的当前笔记本中,创建一个新的单元格并执行以下代码片段以启动Llama-3.1:
只是为了测试,我将使用来自LangChain官方文档的这段代码:
图片由Code With Prince提供
我们的医疗保健聊天机器人支持多语言,这意味着它可以理解多种语言。因此,我们需要一个链来将用户的输入转换为一种通用语言,在这种情况下是英语。
俗话说,一图胜千言,所以我想要做的是如下所示。
图片由 Code With Prince 创建
但我们为什么要将用户输入翻译成英语呢?原因是我们所创建的嵌入模型是基于英文文本语料库的。
要开始,请安装以下依赖项和包:
完成这一步后,导入以下库:
为了提升我们的翻译链的性能,我们将进入结构化输出的世界。为什么要满足于混乱,而不能追求精准呢?让我们创建一个解析器,让它成为我们AI的私人造型师,确保每个输出都符合我们期望的字段和数据类型,完美呈现。
看这里,这段代码将把我们的原始AI构思转化为结构化的精华:
这个强大的解析器是你的关键在于:
一致、干净的数据结构
方便进一步处理的可操作输出
通过实现这个解析器,我们不仅在进行翻译,更是在将信息塑造成最完美的形式。准备好见证结构化AI输出的美妙之处吧!
提示工程是为像Llama-3.1这样的AI模型生成最优输出而设计精确指令的艺术与科学。这是AI开发中的一项关键技能,涉及精心设计文本提示以引导模型的响应。通过微调这些提示,开发人员可以显著提高AI生成内容的准确性、相关性和实用性。
在我们的项目中,我们利用提示工程优化翻译链,确保结构化输出,并根据我们的具体需求调整Llama-3.1的响应。掌握这种技术使我们能够充分发挥AI的潜力,将强大的语言模型转化为处理复杂语言任务的精调工具。
要开始,请创建一个新的单元格并运行以下代码块:
将各个部分组合起来构建链:
测试我们的翻译链:
图片由Code With Prince提供
一旦翻译做得很好,我们就能回答各种语言的问题了!
图片由 Code With Prince 创建
有了这些信息,我们需要创建一个功能,将检索到的信息传递给聊天机器人,以便使用检索到的信息作为上下文正确地回答我们的问题。
这将使用LangChain表达语言来构建LLM链。
机器人的响应:
‘疟疾是由疟原虫家族的原生动物寄生虫引起的一种传染病,可以通过蚊子(尤其是按蚊)叮咬、受污染的针头或输血传播。恶性疟疾是最致命的一种。’
图片由Code With Prince提供
最后,我们需要将生成的答案翻译回用户查询的原始语言。
{‘source_language’: ‘English’,‘target_language’: ‘French’,‘target_text’: ‘疟疾是由疟原虫(属于间日疟原虫家族)引起的一种传染病,可以通过受感染的蚊子(按蚊属)、受污染的针头或输血传播。恶性疟疾是最致命的一种疟疾。’}
带您回顾我们最初设计的多语言聊天机器人:
图片由 Code With Prince 创建
我们已经成功构建了应用程序的所有子模块。现在我们只需要将它们整合起来。我创建了一个函数,我们可以使用它来实现这一目标:
准备用斯瓦希里语(主要来自东非的一种语言)向多语言医疗聊天机器人提问。
图片由 Code With Prince 创建
{‘question’: {‘source_language’: ‘斯瓦希里语’,‘target_language’: ‘英语’,‘target_text’: ‘什么是疟疾?’},‘response’: {‘source_language’: ‘英语’,‘target_language’: ‘斯瓦希里语’,‘target_text’: ‘Malaria ni ugonjwa wa kuambukiza unaosababishwa na vimelea vya protozoa kutoka kwa familia ya Plasmodium ambavyo vinaweza kusambazwa kwa kung’ata kwa mbu wa Anopheles au kwa kuchoma sindano au kwa njia ya damu. Malaria ya Falciparum ni aina inayoweza kuua zaidi.’},.‘sources’: [Document(metadata={‘Disease’: ‘Malaria’, ‘_id’: ‘1497e650–06e7–458c-a542–9f8815e7303f’, ‘_collection_name’: ‘healthcare_collection’}, page_content=’Disease: 疟疾 Description: 由疟原虫属的原生动物寄生虫引起的传染病,可以通过按蚊叮咬或被污染的针头或输血传播。恶性疟疾是最致命的类型。立即行动:咨询最近的医院 医疗建议:避免食用油腻食物 饮食指导:避免食用非素食食物 长期管理:防止蚊子进入’)]}
机器人回复如下:
“疟疾是由疟原虫(来自疟原虫属的寄生虫)引起的疾病,这些寄生虫可以通过雌性按蚊叮咬传播,也可以通过输血或使用污染的针头传播。恶性疟疾是最致命的一种。”
恭喜你完成了这个旅程!你现在掌握了使用Qdrant、LangChain和OpenAI构建先进多语言聊天机器人的技巧。你新获得的技能包括:
这个坚实的基础为无数创新项目奠定了基础。你所学到的工具和技术不仅仅是理论上的——它们是构建能够改变行业的实际AI应用程序的基石。
记住,AI 创新的旅程是持续的。不断实验,不断学习,最重要的是,不断构建。AI 的未来掌握在你的手中——你接下来会创造什么呢?