利用 Gradio 和 Ollama 构建本地化聊天应用


前言

       在本文中,我们将探讨如何使用 Ollama 提供的大模型 API 和 Gradio 库来创建一个流式对话界面。这个界面允许用户与 AI 模型进行实时对话,并且能够根据用户选择的不同模型生成响应。


一、技术选型

1.1 Gradio

       Gradio 是一个开源的 Python 库,用于快速创建简单的机器学习模型界面。它提供了一个简单易用的 API,可以让我们在几分钟内创建一个交互式的 Web 应用程序。Gradio 支持多种输入和输出类型,包括文本、图像、音频等,这使得我们可以轻松地构建各种类型的机器学习模型界面。在我们的项目中,我们选择了 Gradio 作为聊天应用的界面框架,因为它可以帮助我们快速地创建一个用户友好的聊天界面。

1.2 Ollama

       Ollama是一个专为在本地环境中运行和定制大型语言模型而设计的工具。它提供了一个简单而高效的接口,用于创建、运行和管理这些模型,同时还提供了一个丰富的预构建模型库,可以轻松集成到各种应用程序中。Ollama的目标是使大型语言模型的部署和交互变得简单,无论是对于开发者还是对于终端用户。


二、环境准备

  • Python 3.8+
  • Ollama
  • Gradio 库
  • OpenAI库
  • requests库

三、代码实现

3.1 获取本地模型列表

       通过调用 Ollama 的 API 接口来获取模型信息。以下是获取本地模型列表的代码:

import requests

def get_local_models():
    api_url = "http://localhost:11434/api/tags"
    try:
        response = requests.get(api_url)
        if response.status_code == 200:
            response_data = response.json()
            models = [model['name'] for model in response_data.get("models", [])]
            return models
        else:
            return []
    except Exception as e:
        print(f"Request failed: {e}")
        return []

3.2 过滤支持聊天的模型

       在获取到本地模型列表后,我们需要过滤出支持聊天功能的模型。我们通过调用 Ollama 的 chat.completions.create 接口来测试每个模型是否支持聊天功能。以下是过滤支持聊天的模型的代码:

from openai import OpenAI

def filter_chat_models(models):
    chat_models = []
    for model in models:
        try:
            client = OpenAI(
                api_key="ollama",
                base_url="http://localhost:11434/v1",
            )
            client.chat.completions.create(
                model=model,
                messages=[
                    {"role": "system", "content": "你是人工智能助手。"},
                    {
                        "role": "user",
                        "content": "Hello"
                    }
                ],
                stream=False,
            )
            chat_models.append(model)
        except Exception as e:
            print(f"Model {model} does not support chat: {e}")
    return chat_models

3.3 初始化 OpenAI 客户端

       使用 OpenAI 的客户端来调用 Ollama 的 API 接口。

client = OpenAI(
    api_key="ollama",
    base_url="http://localhost:11434/v1",
)

3.4 实现流式回答

       为了提高用户体验,我们在聊天应用中实现了流式回答功能。流式回答可以让我们在生成回答的过程中实时地将内容展示给用户。以下是实现流式回答的代码:

def get_response(text, model_name, history):
    response = client.chat.completions.create(
        model=model_name,
        messages=[
            {"role": "system", "content": "你是人工智能助手。"},
            {
                "role": "user",
                "content": f"{text} " + "以下是历史对话" + f"{history}"
            }
        ],
        stream=True,
    )
    return response

3.5 聊天响应

       在聊天应用中,我们需要实现一个聊天响应函数,用于处理用户的输入并生成回答。以下是聊天响应的代码:

def chat_response(message, history, model_name):
    print(message, history)
    results = get_response(message, model_name, history)
    contents = ""
    for chunk in results:
        if chunk.choices[0].delta.content is not None:
            contents += chunk.choices[0].delta.content
            yield contents

3.6 创建 Gradio 自定义聊天界面

       最后,我们使用 Gradio 创建一个自定义的聊天界面。在聊天界面中,我们提供了一个下拉菜单,让用户可以选择不同的模型。以下是创建 Gradio 聊天界面的代码:

import gradio as gr

with gr.Blocks() as demo:
    chat_interface = gr.ChatInterface(chat_response, title="Your Chat with Ollama", additional_inputs=[gr.Dropdown(label="Model", choices=chat_models, value=models[0] if models else "")])

demo.launch()

四、实际操作

4.1 访问应用界面

       应用启动后,Gradio 会生成一个本地 URL,通常为 http://127.0.0.1:7860。在浏览器中访问该 URL,你将看到聊天应用的界面。
在这里插入图片描述

图1 应用页面

在这里插入图片描述

图2 选择模型

五、总结

       通过上述代码,我们成功地构建了一个基于 Gradio 和 Ollama 的本地化聊天应用。该应用不仅可以实现高效的聊天功能,还可以保护用户的隐私和数据安全。同时,我们还实现了模型选择和过滤功能,让用户可以根据自己的需求选择不同的模型,并确保选择的模型能够正常工作。
       在未来的开发中,我们可以进一步优化该应用,例如增加更多的模型支持、优化界面设计等,以满足更多用户的需求。
       希望本文能够帮助你了解如何使用 Gradio 和 Ollama 构建本地化聊天应用。如果你有任何问题或建议,欢迎随时与我们联系。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慢热型网友.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值