autoDL安装Open-WebUi+Rag本地知识库问答+Function Calling

基础环境搭建

  1. open-webui安装
arduino 复制代码
pip install open-webui
  1. ollama在线安装
arduino 复制代码
curl -fsSL https://ollama.com/install.sh | sh

2.1. 将模型下载地址改到数据盘

bash 复制代码
vim /etc/profile
export OLLAMA_MODELS=/root/autodl-tmp/models
source /etc/profile

2.2. 启动ollama

sql 复制代码
ollama start

3. 安装deepseek-r1:14b模型

复制代码
ollama pull deepseek-r1:14b
  1. Embedding模型下载
arduino 复制代码
ollama pull nomic-embed-text
  1. 查看模型下载情况

    ollama list

Open-WebUi调用

首先需要设置离线环境,避免Open-WebUI启动时自动进行模型下载:

export HF_HUB_OFFLINE=1

  1. Open-WebUi启动
arduino 复制代码
open-webui serve
  1. 本地8080端口访问

需要建立链接隧道,autodl参考这里www.autodl.com/docs/visdom...

  1. Rag本地知识库问答

按照如下步骤操作后,即可上传文档,进行基础本地知识库问答

  1. 外部工具调用Function Calling

案例:连接本地MySQL数据库进行数据查询

4.1. 安装mysql

sql 复制代码
-- 创建mysql数据库
apt install mysql-server


-- 启动mysql
mysqld &
mysql

-- 初始化密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123';

-- 退出
exit;

-- 再次进入
mysql -u root -p

-- 创建数据库
CREATE DATABASE school;
USE school;

-- 创建表结构
CREATE TABLE students_scores (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
course1 INT,
course2 INT,
course3 INT
);

-- 插入数据
INSERT INTO students_scores (name, course1, course2, course3)
VALUES
('学生1', 85, 92, 78),
('学生2', 76, 88, 91),
('学生3', 90, 85, 80),
('学生4', 65, 70, 72),
('学生5', 82, 89, 95),
('学生6', 91, 93, 87),
('学生7', 77, 78, 85),
('学生8', 88, 92, 91),
('学生9', 84, 76, 80),
('学生10', 89, 90, 92);

-- 需要刷新身份验证,使得其他库(如pymysql)可以通过密码验证登录:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';

4.2. 编写外部工具

python 复制代码
import pymysql
import json
from fastapi import Request
from open_webui.models.users import Users


class Tools:
    def __init__(self):
        pass

    async def sql_inter(
        self,
        sql_query: str,
        __request__: Request,
        __user__: dict,
        __event_emitter__=None,
    ) -> str:
        """
        用于获取school数据库中各张表的有关相关信息。

        :param sql_query: 字符串形式的SQL查询语句,用于执行对MySQL数据库中的查询
        :param __request__: HTTP 请求对象(来自 FastAPI)
        :param __user__: 用户信息(可以用于个性化或记录请求)
        :param __event_emitter__: 事件发射器,用于将实时状态更新发送到前端
        :return: SQL 查询结果的 JSON 字符串
        """
        # Step 1. 通知用户正在执行数据库查询
        await __event_emitter__(
            {
                "type": "status",
                "data": {"description": "正在查询数据库...", "done": False},
            }
        )

        try:
            # Step 2. 连接 MySQL 数据库
            connection = pymysql.connect(
                host="localhost",  # 数据库地址
                user="root",  # 数据库用户名
                passwd="123",  # 数据库密码
                db="school",  # 数据库名
                charset="utf8",  # 字符集选择utf8
            )

            # Step 3. 执行 SQL 查询
            with connection.cursor() as cursor:
                cursor.execute(sql_query)
                results = cursor.fetchall()

            # Step 4. 格式化查询结果
            results_json = json.dumps(results, ensure_ascii=False)

            # Step 5. 通知用户查询完成
            await __event_emitter__(
                {
                    "type": "status",
                    "data": {"description": "数据库查询完成", "done": True},
                }
            )

            # Step 6. 返回查询结果
            return f"查询结果: {results_json}"

        except Exception as e:
            # Step 7. 如果发生错误,通知用户
            await __event_emitter__(
                {
                    "type": "status",
                    "data": {"description": f"发生错误: {str(e)}", "done": True},
                }
            )
            # 返回错误信息
            return f"获取数据库查询数据时发生错误:{str(e)}"

        finally:
            # Step 8. 关闭数据库连接
            if connection:
                connection.close()

4.3. 对话中打开数据库查询工具

相关推荐
暮色妖娆丶9 小时前
SpringBoot 启动流程源码分析 ~ 它其实不复杂
spring boot·后端·spring
CoderIsArt9 小时前
三大主流智能体框架解析
人工智能
VT.馒头9 小时前
【力扣】2727. 判断对象是否为空
javascript·数据结构·算法·leetcode·职场和发展
民乐团扒谱机9 小时前
【微实验】机器学习之集成学习 GBDT和XGBoost 附 matlab仿真代码 复制即可运行
人工智能·机器学习·matlab·集成学习·xgboost·gbdt·梯度提升树
Coder_Boy_9 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring
芷栀夏9 小时前
CANN ops-math:揭秘异构计算架构下数学算子的低延迟高吞吐优化逻辑
人工智能·深度学习·神经网络·cann
goodluckyaa9 小时前
LCR 006. 两数之和 II - 输入有序数组
算法
L543414469 小时前
告别代码堆砌匠厂架构让你的系统吞吐量翻倍提升
大数据·人工智能·架构·自动化·rpa
孤狼warrior9 小时前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
凯子坚持 c9 小时前
构建企业级 AI 工厂:基于 CANN `cann-mlops-suite` 的端到端 MLOps 实战
人工智能