Type something to search...
使用开源模型构建医疗聊天机器人:通过人工智能改变医疗保健

使用开源模型构建医疗聊天机器人:通过人工智能改变医疗保健

人工智能正在改变医疗保健,聊天机器人提供快速可靠的医疗信息。随着我对生成式人工智能的了解不断加深,我希望构建一个完全100%开源的医疗聊天机器人。我的目标是让这个医疗机器人能够通过丰富的医学文献回答医疗问题。然而,我面临了一些挑战和突破,稍后将进行讨论。我采取了以下步骤来实现这个项目。

步骤 1:环境和需求设置

首先,我在我的GitHub上创建了一个新的代码库,并将其克隆到我的本地机器上。完成后,我设置了一个.env文件来存储我的API密钥,以及一个requirements.txt文件,里面包含了我在项目中需要的所有库。这相当简单,但为其他一切奠定了基础。

注意:API密钥应当保密,因此不要将其推送到GitHub。

步骤 2:设置文本嵌入

我使用HuggingFaceEmbeddings类创建了使用all-MiniLM-L6-v2模型的嵌入。这一步对于将文本转换为数值向量至关重要,使模型更容易理解和处理数据。基本上,它允许我将原始文本表示为可以用于相似性搜索或聚类等任务的格式。

embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")

步骤 3:向量数据库设置

这段代码用于设置Pinecone,一个向量数据库,用于存储和搜索嵌入。我首先从环境中获取PINECONE_API_KEY并使用它连接到Pinecone。然后,我创建了一个名为”medicalbot”的索引,以便高效地存储嵌入进行相似性搜索。通过这个设置,我定义了一个函数,通过将用户查询与向量存储进行比较来搜索存储的数据,返回最相关的结果。

PINECONE_API_KEY = os.environ.get('PINECONE_API_KEY')
pc = Pinecone(api_key=PINECONE_API_KEY)
index_name = "medicalbot"
index = pc.Index(index_name)

vector_store = PineconeVectorStore(index=index, embedding=embeddings)

def search_db(user_query: str) -> list:
    sim_docs =[]
    result = vector_store.similarity_search_with_score(
    user_query, k=3
    )
    for doc in result:
        sim_docs.append(doc[0].page_content)
    
    return sim_docs    

search = search_db(user_query="What is candidiasis?")

步骤 4:设置LLM

我设置了一个医疗AI聊天机器人,根据医学文献提供答案。它使用一个名为ChatGroq的大型语言模型(LLM),模型为”llama-3.3-70b-versatile”。函数medicalbot_ai接收用户查询和相关文档列表。然后,它处理查询,利用文档生成准确、对话式和专业的响应,并将答案返回给用户。响应旨在既具信息性又富有同情心,确保AI提供准确和有用的信息。

注意:我发现提示在AI中是多么重要。查询输出的好坏取决于提示的质量。

## ---------------------------- LLM --------------------------------------
llm = ChatGroq(model_name="llama-3.3-70b-versatile", temperature=0.5)

def medicalbot_ai(user_query: str, doc_list: list) -> str:
    template = """
    You are a medical consultant AI chatbot. Your role is to provide accurate and reliable answers to user questions based on the provided documents. Use the information from the `doc_list` to address the `user_query` thoroughly and correctly. Ensure that your response is:

    - **Accurate:** Base your answers solely on the information in the provided documents.
    - **Conversational:** Maintain a friendly and approachable tone.
    - **Mature and Consultancy-Oriented:** Present information in a professional and trustworthy manner.

    **Inputs:**
    1. `user_query`: {user_query} The question posed by the user.
    2. `doc_list`: {doc_list} A list of documents containing relevant information related to the user's question.

    **Instructions:**
    - Analyze the `user_query` and identify the key information needed to answer it.
    - Review the `doc_list` to find relevant information that addresses the query.
    - Construct a response that is clear, concise, and directly answers the user's question using the information from the documents.
    - Avoid introducing information not present in the `doc_list`.
    - If the `user_query` have nothing similar to what is in the `doc_list`, return document not found or something in an apologetic way, tell the user to ask for something related to the context.
    - If the  `user_query` is an empty string, respond with "Please provide a valid query.".
    - Maintain a tone that is both professional and empathetic, suitable for a consultancy setting.
    
    Return the answer as the only output. 
    Always make sure that you're returning the answer without any explanation. 
    The output should be the answer alone.
    Always return this: "Please provide a valid query." for empty query.
    """
    question_prompt = PromptTemplate(input_variables=["user_query", "doc_list"], template=template)
    initiator_router = question_prompt | llm | StrOutputParser()
    output = initiator_router.invoke({"user_query":user_query, "doc_list":doc_list})
    return output

步骤 5:整合医疗聊天机器人工作流程以处理用户查询

medical_chatbot函数是聊天机器人工作流程的核心。它处理用户的查询并生成准确且相关的医疗响应。该函数首先记录它正在使用search_db函数在向量数据库中搜索与用户查询相关的文档。一旦检索到相关文档,该函数就调用medicalbot_ai函数生成响应,利用获取的文档提供准确、对话式和专业的答案。生成响应后,该函数记录最后一步并将聊天机器人的响应返回给用户。

该函数无缝连接了文档搜索过程和基于AI的答案生成,确保聊天机器人能够准确响应用户查询。

步骤 6:使用Streamlit构建聊天机器人界面

为了将所有内容整合成一个功能齐全的聊天机器人,我们将使用Streamlit库创建用户界面。

我使用Streamlit是因为它是免费的,其他人也可以与医疗机器人进行互动。

结论

通过这些步骤,您可以成功构建一个 100% 开源的医疗聊天机器人,并使用 Streamlit 部署,以便用户与其互动。

有关完整代码和更多详细信息,请查看 GitHub 上的项目仓库:https://github.com/Chinelonweke/medicalbot

在这里与医疗聊天机器人互动:https://medicalbot-semf2x7tccjtfv8fzd7iih.streamlit.app/

感谢您的阅读,请留下您的意见。

您可以在这里找到我;

LinkedIn: Chinelo Nweke

x: Nelo Nweke

Related Posts

使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
10 个强大的 Perplexity AI 提示,让您的营销任务自动化

10 个强大的 Perplexity AI 提示,让您的营销任务自动化

在当今快速变化的数字世界中,营销人员总是在寻找更智能的方法来简化他们的工作。想象一下,有一个个人助理可以为您创建受众档案,建议营销策略,甚至为您撰写广告文案。这听起来像是一个梦想? 多亏了像 Perplexity 这样的 AI 工具,这个梦想现在成为现实。通过正确的提示,您可以将 AI 转变为您的 个人营销助理。在本文中,我将分享 10 个强大的提示,帮助您自动

阅读更多
10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

人工智能技术,如机器学习、自然语言处理和数据分析,正在重新定义传统设计方法。从自动化重复任务到实现个性化用户体验,人工智能使设计师能够更加专注于战略思维和创造力。随着这一趋势的不断增长,UI/UX 设计师越来越多地采用 AI 驱动的工具来促进他们的工作。利用人工智能不仅能提供基于数据的洞察,还为满足多样化用户需求的创新设计解决方案开辟了机会。 1. 用户角色开发 目的

阅读更多
在几分钟内完成数月工作的 100 种人工智能工具

在几分钟内完成数月工作的 100 种人工智能工具

人工智能(AI)的快速发展改变了企业的运作方式,使人们能够在短短几分钟内完成曾经需要几周或几个月的任务。从内容创作到网站设计,AI工具帮助专业人士节省时间,提高生产力,专注于创造力。以下是按功能分类的100个AI工具的全面列表,以及它们在现实世界中的使用实例。 1. 研究工具 研究可能耗时,但人工智能工具使查找、分析和组织数据变得更加容易。**ChatGPT, Cop

阅读更多
你从未知道的 17 个令人惊叹的 GitHub 仓库

你从未知道的 17 个令人惊叹的 GitHub 仓库

Github 隐藏的宝石!! 立即收藏的代码库 学习编程相对简单,但掌握编写更好代码的艺术要困难得多。GitHub 是开发者的宝藏,那里“金子”是其他人分享的精心编写的代码。通过探索 GitHub,您可以发现如何编写更清晰的代码,理解高质量代码的样子,并学习成为更熟练开发者的基本步骤。 1. notwaldorf/emoji-translate *谁需

阅读更多