以下是该项目的源代码和数据源。
GitHub - Princekrampah/multilingual_healthcare_bot 在 GitHub 上为 Princekrampah/multilingual_healthcare_bot 的开发做出贡献 最重要的是:准备深入探讨:
- 向量存储的复杂性以及如何利用Qdrant实现高效的数据导入。
- 掌握Qdrant中的集合管理以实现最佳性能。
- 激活相似性搜索的潜力,以实现上下文感知的响应。
- 构建复杂的LangChain工作流,以增强聊天机器人的功能。
- 将革命性的Llama 3.1模型与Groq的高速基础设施集成。
踏上一场变革之旅,探索先进AI的世界,我们将创建一个前沿的多语言医疗保健聊天机器人。在这份全面的指南中,我们将利用Qdrant、LangChain和OpenAI的力量,构建一个打破语言障碍的复杂对话式AI。
无论你是AI爱好者、经验丰富的开发者,还是介于两者之间的某个人,本教程都将为你提供创建能够突破可能界限的AI应用程序的知识和技能。阅读完本文后,你将具备构建智能、多语言系统的基础,这些系统能够适应各种应用场景。
准备迎接挑战,扩展你的AI工具箱,并加入塑造对话式AI未来的一流创新者行列。让我们开始这次激动人心的现代聊天机器人开发之旅!
图片由 Code With prince 提供
项目数据集为了创建一个多语言的医疗保健聊天机器人,第一步是获取一个合适的数据集。该数据集应与医疗相关,以确保回复的相关性和准确性。在我的研究中,我发现了一个在线可用的、适合该项目的数据集。
GitHub - Princekrampah/multilingual_healthcare_bot 在 GitHub 上为 Princekrampah/multilingual_healthcare_bot 的开发做出贡献我对两个表格进行了预处理,合并了symptom_Description.csv
和symptom_precaution.csv
两个文件。合并这些表格后,我清洗了数据并将结果保存为cleaned_data.csv
文件。所有文件都位于data目录下,便于访问。
图片由 Code With Prince 创建
我不会详细讲解数据清洗的过程,因为这并不是本文的重点。不过,你可以通过下载提供的cleaned_data.csv
文件来访问清洗后的数据。
一旦所有数据下载成功,我们还需要获取Qdrant和OpenAI的API密钥。
从 OpenAI 开始,你可以通过这个 链接 获取你的API密钥。
一旦你生成了OpenAI的API密钥,你可以回到VS-code中,打开.env
文件,并添加以下内容:
OPENAI_API_KEY=sk-xxxxxxxxxxxxx
继续介绍 Qdrant ,你需要首先创建一个Qdrant云账户。你可以通过 这个链接 来完成。一旦你通过Gmail创建了账户,我们就可以进入下一步了。
注意: 如果您不想使用免费提供的Qdrant云实例,您也可以在本地搭建Qdrant。这在本文中不会详细讨论。更多相关信息,您可以在这里阅读。
创建Qdrant云集群一旦我们有了API密钥,就需要继续创建一个集群,它们在Qdrant Cloud中被称为集群。登录到您的账户后,您应该会看到这个仪表板。
图片由Code With Prince提供
在屏幕左侧的侧边栏中,点击“集群”按钮。
点击屏幕右上角的“创建”按钮,填写详细信息以创建您的集群
图片由 Code With Prince 创建
图片由Code With Prince制作
完成之后,你应该能够在仪表板中看到创建的集群。
图片由 Code With Prince 创建
点击集群名称以跳转到集群仪表板。
图片由 Code With Prince 创建
在那里,你应该能够看到集群的详细信息。
图片由 Code With Prince 创建
获取Qdrant API密钥为了获取你的Qdrant API密钥,你需要点击屏幕最左边的“数据访问控制”按钮。
图片由Code With Prince提供
完成之后,点击屏幕右上角的“创建”按钮。填写详细信息并创建您的API密钥。
图片由Code With Prince提供
选择你想要为其创建API密钥的集群,然后点击确定。
图片由 Code With Prince 提供
请勿点击模态框外部,并轻轻复制第一个输入框中出现的API密钥。
一旦复制好,你可以回到VS-code中,打开.env
文件并将它添加进去。
OPENAI_API_KEY=sk-xxxx
QDRANT_API_KEY=xxxxxx
我们也需要刚刚创建的集群的 URL 或 “端点”;你可以通过点击侧边栏的“集群”按钮来获取该 URL。
图片由 Code With Prince 创建
一旦复制好,请将其粘贴到.env
文件中,如下所示:
OPENAI_API_KEY=sk-xxxxxxxxxxxxx
QDRANT_URL=https://xxxxxxxxxxxxxxxxxxxxxx
QDRANT_API_KEY=xxxxxxx
OpenAI 文本嵌入模型
我们将使用OpenAI的文本嵌入模型来创建您的文本文档的向量表示。为此,我们需要在.env
文件中设置一些环境变量。
OPENAI_API_KEY=sk-xxxxxxxxxxxxx
QDRANT_URL=https://xxxxxxxxxxxxxxxxxxxxxx
QDRANT_API_KEY=xxxxxxx
QDRANT_VECTOR_DIMENSION=1536
EMBEDDING_MODEL="text-embedding-3-small"
您可以在此处了解更多关于OpenAI嵌入模型的信息:OpenAI Embedding Models
数据摄入在这一重要部分,我们将深入探讨如何将数据导入Qdrant Cloud,这是一个强大的向量数据库,将作为我们高级文档检索系统的基石。通过创建一个复杂的向量索引,我们将解锁执行闪电般快速相似性搜索的能力,从而能够以前所未有的准确度找到最相关的文档来回答用户的问题。
为了使这个系统变得生动,我们将利用OpenAI最先进的嵌入模型。这些前沿的模型将把我们的原始文本数据转换为丰富、多维度的向量表示,捕捉每个文档的细微语义。
到本节结束时,你将拥有一个强大的向量索引,准备好彻底改变你的信息检索和查询回答方法。
安装索引对于高效地找到相关文档以回答用户查询至关重要。我们将利用OpenAI强大的嵌入模型将数据转换为向量表示。
首先,让我们设置开发环境。我们需要安装两个关键的Python库:Qdrant用于向量数据库,LangChain-Qdrant用于无缝集成。在你的data_ingestion.ipynb
笔记本中,运行以下命令:
!pip install qdrant-client langchain-qdrant langchain-openai
作为参考,这里是我的项目目录结构的视图:
图片由Code With Prince提供
这个设置将为我们向量索引和相似性搜索能力提供基础。
从CSV文件创建LangChain文档一旦我们使用Pandas读取了CSV文件,我们将把每一行数据转换为LangChain文档。
from langchain_core.documents import Document
import pandas as pd
现在让我们使用Pandas读入清洗后的数据:
df = pd.read_csv('../data/cleaned_data.csv')
df.head()
图片由Code With Prince提供
从这里,我们可以继续创建LangChain文档,以下是实现这一操作的代码:
文档列表 = []
for 索引, 行 in df.iterrows():
文档 = Document(
page_content=行["prepared_text"],
metadata={"Disease": 行["Disease"]}
)
文档列表.append(文档)
len(documents)
文档 UUID
每个文档都有一个唯一的标识符。让我们继续创建这些文档:
from uuid import uuid4
uuids = [str(uuid4()) for _ in range(len(documents))]
连接到Qdrant Cloud
现在我们已经准备好了文档,接下来需要将它们嵌入并存储在我们的向量数据库中,本例中为Qdrant Cloud。为此,我们首先需要连接到刚刚创建的Qdrant Cloud实例。
为此,我们需要以下代码块:
from qdrant_client import QdrantClient
from dotenv import load_dotenv
import os
%load_ext dotenv
%dotenv
注意:代码片段未被翻译,保持原样。
qdrant_client = QdrantClient(
api_key=os.getenv("QDRANT_API_KEY"),
url=os.getenv("QDRANT_URL")
)
图片由Code With Prince提供
我们可以使用以下代码检查是否已经有现有的集合:
qdrant_client.get_collections()
图片由Code With Prince提供
从上面的图片中可以看到,我已经有一些集合,这些集合是我学校项目中正在使用的。我们将为这个项目创建一个新的集合,如果你当前还没有任何集合,也不用担心。
创建集合为了创建一个集合,我们需要以下代码块:
from qdrant_client.http.models import Distance, VectorParams
COLLECTION_NAME = "healthcare_collection"
现在,让我们使用上述信息在Qdrant云中创建集合:
qdrant_client.create_collection(
collection_name=COLLECTION_NAME,
vectors_config=VectorParams(
size=os.getenv("QDRANT_VECTOR_DIMENSION", 1536),
distance=Distance.COSINE),
)
图片由 Code With Prince 创建
现在我们已经创建了集合,可以回到Qdrant Cloud控制台查看创建的“集合”。点击屏幕右上角的“打开控制台”按钮。
图片由Code With Prince提供
这将引导您进入一个页面并要求您输入身份验证详情;输入相关信息后,您应该会看到类似以下的界面:
图片由 Code With Prince 创建
连接到向量存储我们现在继续连接到这个集合。为此,我们将使用以下代码块。
首先,我们需要创建OpenAI嵌入模型的实例。我们将使用text-embedding-3-small
模型。
from langchain_qdrant import QdrantVectorStore
from langchain_openai import OpenAIEmbeddings
embedding_model = OpenAIEmbeddings(
model=os.getenv("EMBEDDING_MODEL",
default="text-embedding-3-small")
)
from langchain_qdrant import RetrievalMode
_QdrantVectorStore_
支持三种相似性搜索模式。这些模式可以通过设置类时的_retrieval_mode_
参数进行配置。稠密向量搜索(默认)
稀疏向量搜索
混合搜索
vector_store = QdrantVectorStore(
client=qdrant_client,
collection_name=COLLECTION_NAME,
embedding=embedding_model,
# retrieval_mode=RetrievalMode.DENSE
)
如果你希望使用稀疏或混合搜索,你需要使用SparseEmbeddings。
稀疏向量搜索
仅使用稀疏向量进行搜索时,
应将
_retrieval_mode_
参数设置为_RetrievalMode.SPARSE_
。需要提供一个实现了
[ _SparseEmbeddings_](https://github.com/langchain-ai/langchain/blob/master/libs/partners/qdrant/langchain_qdrant/sparse_embeddings.py)
接口的任何稀疏嵌入提供者作为_sparse_embedding_
参数的值。
您可以在此处阅读更多相关信息 here
在我们的情况下,我们将使用默认的 DENSE 检索模式。
图片由Code With Prince提供
插入记录/文档我们现在准备将最初创建的文档插入到我们的Qdrant云集群集合中。这个过程称为“Upsert”。
vector_store.add_documents(documents=documents, ids=uuids)
add_documents
方法将使用创建向量存储集合时指定的 OpenAI 模型来生成嵌入。它还将使用我们最初创建的 uuids
独特地标识每个文档。
图片由 Code With Prince 创建
这是我们向集群集合中插入数据所需的一切。
查询向量数据库现在我们已经将数据嵌入并索引到Qdrant云集合中,我们可以继续对其进行一些查询,通过提问来看看返回的数据是什么。
query = "什么是疟疾?"
results = vector_store.similarity_search(
query, k=2
)
这里我指定了想要执行相似性搜索,并返回与查询最接近的k篇文档。k是一个变量,你可以为它指定任何值。只需记住,这个值应该是合理的;不要指定一个荒谬的值,比如1000。
默认情况下,您的文档将存储在以下负载结构中;例如:
打印结果
打印结果[0].元数据
打印结果[0].页面内容
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
- 疾病:疟疾 描述:由疟原虫家族的原生动物寄生虫引起的传染病,可以通过按蚊叮咬或受污染的针头或输血传播。恶性疟疾是最致命的一种。立即行动:咨询最近的医院 医疗建议:避免食用油腻食物 饮食指导:避免食用非素食食物 长期管理:防止蚊虫叮咬 [{‘Disease’: ‘Malaria’, ‘_id’: ‘1497e650–06e7–458c-a542–9f8815e7303f’, ‘_collection_name’: ‘healthcare_collection’}] *
疾病:登革热 描述:由登革病毒(登革病毒属)引起的急性传染病,通过埃及伊蚊传播,表现为头痛、严重关节痛和皮疹。——也称为骨痛热、登革热。立即行动:喝木瓜叶汁 医疗建议:避免食用油腻辛辣食物 饮食指导:防止蚊虫叮咬 长期管理:保持水分 [{‘Disease’: ‘Dengue’, ‘_id’: ‘8320500c-c4d2–4143–9263–83fbd5e4170b’, ‘_collection_name’: ‘healthcare_collection’}]
你可以看到我们有正确的数据可以用来回答用户的问题。
我们也可以应用元数据过滤,你可以通过这里阅读更多了解详情。
完成这一部分后,我们可以继续构建多语言聊天机器人。
构建多语言AI架构:打造初始多语言聊天机器人框架对于我们的初始设计,这是我目前考虑实现的内容。我只是想暂时说出来。请看这个图:
图片由Code With Prince提供
- 用户查询: 这是用户输入问题或请求的起点,用户可以使用他们偏好的语言。
- 翻译链: 用户的查询首先被发送到此组件,该组件将用户的输入从其语言翻译成聊天机器人的主要语言(可能是英语)。
- 回答链: 翻译完成后,查询被发送到回答链。此组件负责理解问题并生成适当的响应,响应将以聊天机器人的主要语言呈现。
- 第二翻译链: 回答链生成的响应随后被发送到此最终组件,该组件将答案翻译回用户原始语言。
流程形成了一个完整的循环:
- 用户的查询以他们的语言开始
- 将查询翻译成机器人的主要语言
- 处理并回答查询
- 将答案翻译回用户语言
- 将翻译后的回复返回给用户
这种架构允许聊天机器人在处理和回答查询时保持单一的核心语言,同时为用户提供多语言界面。它有效地将语言翻译任务与核心问答功能分离,使系统更加模块化,便于维护或为其他语言进行更新。
我们需要翻译器的原因是,嵌入是从英文文本生成的,而用户可以选择使用任何语言。那么,我们如何确保能够创建与从英文文本生成的嵌入具有相似意义的嵌入呢?这就是为什么我们需要翻译层的原因。希望这对你有帮助。
让我们继续前进,实现这个架构。
获取Groq API密钥访问权限为了开始使用Llama-3.1,首先需要创建一个Groq账户并获取Groq的API密钥。
什么是Groq?Groq 是一家成立于2016年的创新型AI公司,专注于高速AI推理解决方案。其开创性的语言处理单元(LPU)技术,专门设计用于AI推理和语言处理,提供了前所未有的速度、成本效益和能源效率。与传统的GPU不同,Groq的LPU在AI硬件架构上实现了根本性的转变。通过在云端和本地环境中提供快速的AI推理,Groq为各行各业带来了下一代的AI创新和生产力。
图片由Code With Prince提供
如果你不想使用Groq,另一个选择是将Llama-3.1本地下载并在本地运行。由于我没有足够的计算资源来演示这一点,所以我们将继续使用Groq API。
你可以访问他们的官方网站并创建一个账户。创建账户后,前往GroqCloud仪表板,在API密钥部分生成一个API密钥。
图片由 Code With Prince 创建
- 在你的
.env
文件中添加以下内容。
GROQ_API_KEY=你的Groq API密钥
替换为你复制的API密钥。
- 保存文件。
重要说明:
- 不要在API密钥周围使用引号。
- 确保等号前后没有空格。
- 请确保此文件的安全性,永远不要将其提交到Git等版本控制系统中。将
.env
文件添加到您的.gitignore
文件中,以防止意外共享您的API密钥。 - 在您的代码中,您将使用类似
python-dotenv
的库来加载此环境变量。
记住,保护好你的API密钥非常重要。绝不要公开分享它,也不要直接将其包含在代码中。
Groq LangChain 集成LangChain 是一个强大的 Python 大型语言模型编排框架,可以与 Groq 无缝集成,从而解锁非凡的能力。对于 LangChain 新手,我创建了全面的资源,包括一篇 入门文章 和一个 YouTube 视频教程。
要探索Groq-LangChain的集成,只需导航到GroqCloud文档中的“LangChain集成”部分,这将引导您访问官方LangChain文档以获取详细的实现说明。
图片由 Code With Prince 创建
你可以使用这个链接here直接访问LangChain Groq集成文档页面。
安装 LangChain-Groq 集成包我们首先需要创建一个新的笔记本,用于覆盖LangChain Groq集成的内容。我在一个名为chatbot
的新文件夹内创建了一个名为getting_started_with_groq.ipynb
的文件。以下是新目录的树形结构:
图片由 Code With Prince 创建
要安装LangChain-Groq集成包,请使用此处的命令,如官方文档中所述。
!pip install -qU langchain-groq python-dotenv
我们也需要安装 python-dotenv
包来帮助我们读取 .env
文件中的环境变量。还记得我们在里面存储了什么值吗?
从上面的描述中,我们讨论了Groq的API密钥。我们将其存储在了一个安全的位置。那么,我们该如何在代码中读取它呢?
为了在代码中读取环境变量,我们需要在同一个笔记本中创建一个新的单元格并运行以下代码块:
from dotenv import load_dotenv
%load_ext dotenv
%dotenv
图片由 Code With Prince 创建
使用Llama-3.1 70B模型现在我们已经奠定了基础,是时候利用前沿的Llama-3.1模型!的力量了 🚀
让我们进入旅程中令人兴奋的部分。在你的当前笔记本中,创建一个新的单元格并执行以下代码片段以启动Llama-3.1:
from langchain_groq import ChatGroq
llm = ChatGroq(
model="llama-3.1-70b-versatile",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
)
只是为了测试,我将使用来自LangChain官方文档的这段代码:
messages = [
(
"system",
"你是一个乐于助人的助手,将用户的英文句子翻译成法文。",
),
("human", "我热爱编程。"),
]
ai_msg = llm.invoke(messages)
ai_msg
图片由Code With Prince提供
构建语言翻译链我们的医疗保健聊天机器人支持多语言,这意味着它可以理解多种语言。因此,我们需要一个链来将用户的输入转换为一种通用语言,在这种情况下是英语。
俗话说,一图胜千言,所以我想要做的是如下所示。
图片由 Code With Prince 创建
但我们为什么要将用户输入翻译成英语呢?原因是我们所创建的嵌入模型是基于英文文本语料库的。
要开始,请安装以下依赖项和包:
!pip install langchain langchain-community
完成这一步后,导入以下库:
from langchain.prompts import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
PromptTemplate,
SystemMessagePromptTemplate,
)
from pydantic import BaseModel
from langchain_core.output_parsers import JsonOutputParser
创建语言翻译解析器
为了提升我们的翻译链的性能,我们将进入结构化输出的世界。为什么要满足于混乱,而不能追求精准呢?让我们创建一个解析器,让它成为我们AI的私人造型师,确保每个输出都符合我们期望的字段和数据类型,完美呈现。
看这里,这段代码将把我们的原始AI构思转化为结构化的精华:
class TranslationParser(BaseModel):
源语言: str
目标语言: str
目标文本: str
translation_parser = JsonOutputParser(pydantic_object=TranslationParser)
这个强大的解析器是你的关键在于:
-
一致、干净的数据结构
-
方便进一步处理的可操作输出
- 提高了人类和机器的可读性
通过实现这个解析器,我们不仅在进行翻译,更是在将信息塑造成最完美的形式。准备好见证结构化AI输出的美妙之处吧!
提示工程对于我们翻译链管道提示工程是为像Llama-3.1这样的AI模型生成最优输出而设计精确指令的艺术与科学。这是AI开发中的一项关键技能,涉及精心设计文本提示以引导模型的响应。通过微调这些提示,开发人员可以显著提高AI生成内容的准确性、相关性和实用性。
在我们的项目中,我们利用提示工程优化翻译链,确保结构化输出,并根据我们的具体需求调整Llama-3.1的响应。掌握这种技术使我们能够充分发挥AI的潜力,将强大的语言模型转化为处理复杂语言任务的精调工具。
要开始,请创建一个新的单元格并运行以下代码块:
language_translation = """
你是一位擅长语言翻译的高级助手。
你的任务是将给定的文本准确地翻译成英语,同时保留原文的意思、语气和语境。请将用户的句子翻译成英语。
用户的句子: {user_sentence}
你的最终输出应采用以下格式: {format_instructions}
"""
language_translation_prompt = SystemMessagePromptTemplate(
prompt=PromptTemplate(
input_variables=["user_sentence", "format_instructions"],
template=language_translation,
partial_variables={
"format_instructions": translation_parser.get_format_instructions()
},
)
)
human_prompt = HumanMessagePromptTemplate(
prompt=PromptTemplate(
input_variables=["user_sentence"], template="将这段文字翻译成英语。文本:{user_sentence}"
)
)
messages = [language_translation_prompt, human_prompt]
translation_chain_promt = ChatPromptTemplate(
messages=messages,
input_variables=["user_sentence"]
)
将各个部分组合起来构建链:
first_layer_translation_chain = translation_chain_promt | llm | translation_parser
测试我们的翻译链:
first_layer_translation_chain.invoke({
"user_sentence": "J'aime programmer."
})
图片由Code With Prince提供
一旦翻译做得很好,我们就能回答各种语言的问题了!
信息检索现在,让我们继续实现信息检索层。这一层将接收经过翻译的用户查询(无论用户使用哪种支持的语言),并通过相似性搜索来找到最相似的文档或最相关的文档,以便回答用户的问题。
def 信息检索器(question: str) -> str:
"""
从Qdrant向量存储中搜索和检索信息。
"""
# 根据产品名称过滤搜索结果
unstructured_data_results = vector_store.similarity_search(
query=query,
k=3
)
return unstructured_data_results
information_retriever("什么是疟疾?")
图片由 Code With Prince 创建
聊天机器人检索最相关的文档,这将返回我们从Qdrant向量数据库中获取的信息。
有了这些信息,我们需要创建一个功能,将检索到的信息传递给聊天机器人,以便使用检索到的信息作为上下文正确地回答我们的问题。
这将使用LangChain表达语言来构建LLM链。
from langchain_core.runnables import (
RunnableParallel,
RunnablePassthrough,
)
bot_chat_template = """
你是一个具备广泛医学知识的AI医疗聊天机器人。你的任务是仅根据给定的上下文,提供准确、简洁的答案来回答用户的问题。
上下文:
{context}
问题:
{question}
指令:
- 使用自然语言回答问题,确保答案清晰简洁。
- 在回答之后,明确地陈述所使用的上下文信息,不得修改信息内容。你只能修改数据类型。
- 如果没有提供上下文,只需回复:“没有提供上下文。”
回答:
使用的上下文:
"""
from pydantic import Field, BaseModel
from typing import List, Union
from langchain.prompts import ChatPromptTemplate
from langchain_groq import ChatGroq
class ResponseFormat(BaseModel):
"""识别产品信息的标识。"""
answer: str = Field(
...,
description="您对用户查询的回答。"
)
sources: List[Union[str, Document]] = Field(
...,
description="生成回答所使用的来源和上下文。"
)
llm = ChatGroq(
model="llama-3.1-70b-versatile",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
)
bot_chat_prompt = ChatPromptTemplate.from_template(bot_chat_template)
chat_chain = (
RunnableParallel(
{
"context": information_retriever,
"question": RunnablePassthrough(),
}
)
| bot_chat_prompt
| llm.with_structured_output(ResponseFormat)
)
response = chat_chain.invoke("什么是疟疾?")
response.answer
机器人的响应:
‘疟疾是由疟原虫家族的原生动物寄生虫引起的一种传染病,可以通过蚊子(尤其是按蚊)叮咬、受污染的针头或输血传播。恶性疟疾是最致命的一种。’
我们也可以通过以下方式检索生成答案的来源:
response.sources
图片由Code With Prince提供
构建翻译层的第二层最后,我们需要将生成的答案翻译回用户查询的原始语言。
第二层语言翻译 = """
你是一位擅长语言翻译的高级助手。
你的任务是将给定的文本准确地翻译成指定的目标语言,同时保留原文的意义、语气和语境。
用户的句子: {sentence}
源语言: 英语
目标语言: {target_language}
你的最终输出应采用以下格式: {format_instructions}
"""
second_language_translation_prompt = SystemMessagePromptTemplate(
prompt=PromptTemplate(
input_variables=["sentence", "target_language", "format_instructions"],
template=second_layer_language_translation,
partial_variables={
"format_instructions": translation_parser.get_format_instructions()
},
)
)
human_prompt = HumanMessagePromptTemplate(
prompt=PromptTemplate(
input_variables=["user_sentence"], template="将这段文本翻译成指定的语言。文本:{user_sentence}"
)
)
messages = [second_language_translation_prompt, human_prompt]
second_layer_translation_chain_promt = ChatPromptTemplate(
messages=messages,
input_variables=["user_sentence"]
)
second_layer_translation_chain = second_layer_translation_chain_promt | llm | translation_parser
response = second_layer_translation_chain.invoke({
"sentence": response.answer,
"target_language": "法语"
})
response
把所有内容整合在一起{‘source_language’: ‘English’,
‘target_language’: ‘French’,
‘target_text’: ‘疟疾是由疟原虫(属于间日疟原虫家族)引起的一种传染病,可以通过受感染的蚊子(按蚊属)、受污染的针头或输血传播。恶性疟疾是最致命的一种疟疾。’}
带您回顾我们最初设计的多语言聊天机器人:
图片由 Code With Prince 创建
我们已经成功构建了应用程序的所有子模块。现在我们只需要将它们整合起来。我创建了一个函数,我们可以使用它来实现这一目标:
def multilingual_chatbot(question: str) -> dict:
"""
多语言聊天机器人,能够用多种语言回答用户问题。
"""
# 将用户问题翻译成英语
translated_question = first_layer_translation_chain.invoke({
"user_sentence": question
})
# 根据用户问题检索信息
response = chat_chain.invoke(translated_question.get("target_text"))
# 将响应翻译成指定的目标语言
translated_response = second_layer_translation_chain.invoke({
"sentence": response.answer,
"target_language": translated_question.get("source_language")
})
return {
"question": translated_question,
"response": translated_response,
"sources": response.sources
}
准备用斯瓦希里语(主要来自东非的一种语言)向多语言医疗聊天机器人提问。
ml_response = 多语言聊天机器人("疟疾是什么?")
图片由 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构建先进多语言聊天机器人的技巧。你新获得的技能包括:
- 将数据导入Qdrant的强大向量存储。
- 创建和管理Qdrant集合。
- 执行精确的相似性搜索。
- 构建复杂的LangChain工作流。
- 利用Groq闪电般快速的基础设施发挥Llama-3.1的潜力。
这个坚实的基础为无数创新项目奠定了基础。你所学到的工具和技术不仅仅是理论上的——它们是构建能够改变行业的实际AI应用程序的基石。
站在这个令人兴奋的十字路口上,我非常期待听到你即将实现的开创性想法。你的下一个大项目是什么?分享你的愿景,让我们一起探讨如何利用这些强大的技术将你的概念变为现实。
记住,AI 创新的旅程是持续的。不断实验,不断学习,最重要的是,不断构建。AI 的未来掌握在你的手中——你接下来会创造什么呢?
你可以通过以下平台联系我:
祝你编程愉快!下次见,世界在继续转动。
参考资料以下是该项目的源代码和数据来源。
GitHub - Princekrampah/multilingual_healthcare_bot 通过在 GitHub 上创建账户来参与 Princekrampah/multilingual_healthcare_bot 的开发。 参考资料共同學習,寫下你的評論
評論加載中...
作者其他優質文章