基于火山引擎的DeepSeek-V3 api实现简单的数据查询功能

前言

现在ai比较火,ai可以极大的提高大家的工作效率,所以有空的话要学习下ai的使用

火山引擎大模型

火山引擎大模型广场,聚集了市面上常见的基座大模型,每个模型都有50Wtokens的免费调用量,可以方便大家调用

账号登录-火山引擎

以 DeepSeek-V3为例,先申请体验大模型,通过api介入获得一个apikey

 然后里面还有快速接入测试,提供了demo供大家参考。

查询数据库的python代码demo

此处的代码主要是由TraeCn 软件生成的,生成后自己根据火山引擎的测试代码进行逻辑调整,最终实现了数据的查询

import tkinter as tk
from tkinter import scrolledtext
import json
import mysql.connector
import os
from openai import OpenAI

# 初始化Openai客户端,从环境变量中读取API Key
client = OpenAI(
    # 此为默认路径,可根据业务所在地域进行配置
    base_url="https://ark.cn-beijing.volces.com/api/v3",
    # 从环境变量中获取 API Key
    api_key='你自己的api_key',
)

# 数据库连接配置 你自己的数据库配置
db_config = {
    'host': '127.0.0.1',
    'user': 'root',
    'password': '123456',
    'database': 'aiTest'
}

# 连接数据库
def connect_to_db():
    try:
        connection = mysql.connector.connect(**db_config)
        return connection
    except mysql.connector.Error as err:
        print(f"数据库连接错误: {err}")
        return None

# 获取数据库表结构信息
def get_db_structure():
    connection = connect_to_db()
    if connection:
        try:
            cursor = connection.cursor()
            cursor.execute("SHOW TABLES")
            tables = cursor.fetchall()
            structure_info = {}
            for table in tables:
                table_name = table[0]
                cursor.execute(f"SHOW COLUMNS FROM {table_name}")
                columns = cursor.fetchall()
                column_info = []
                for column in columns:
                    column_info.append({
                        "Field": column[0],
                        "Type": column[1],
                        "Null": column[2],
                        "Key": column[3],
                        "Default": column[4],
                        "Extra": column[5]
                    })
                structure_info[table_name] = column_info
            return structure_info
        except mysql.connector.Error as err:
            print(f"获取数据库结构信息出错: {err}")
        finally:
            connection.close()
    return {}

# 调用火山云 API 将自然语言命令转换为 SQL 查询
def get_sql_query(command):
    db_structure = get_db_structure()
    try:
        completion = client.chat.completions.create(
            model="deepseek-v3-241226",
            messages=[
                {"role": "system", "content": f"数据库结构信息:{json.dumps(db_structure)}"},
                {"role": "user", "content": f"将以下自然语言命令转换为 SQL 查询: {command}"}
            ]
        )
        sql_query = completion.choices[0].message.content
        # 找到 SQL 代码块的起始和结束位置
        start_index = sql_query.find("```sql") + len("```sql")
        end_index = sql_query.find("```", start_index)

        # 提取 SQL 代码
        sql_query = sql_query[start_index:end_index].strip()
        return sql_query
    except Exception as e:
        print(f"火山云 API 调用出错: {e}")
        return None

# 执行 SQL 查询并返回结果
def execute_query(query):
    connection = connect_to_db()
    if connection:
        try:
            cursor = connection.cursor()
            cursor.execute(query)
            results = cursor.fetchall()
            column_names = [desc[0] for desc in cursor.description]
            formatted_results = []
            for row in results:
                result_dict = dict(zip(column_names, row))
                formatted_results.append(result_dict)
            return formatted_results
        except mysql.connector.Error as err:
            print(f"执行 SQL 查询出错: {err}")
        finally:
            connection.close()
    return []

# 主函数,根据输入命令获取数据库信息
def get_db_info(command):
    sql_query = get_sql_query(command)
    if sql_query:
        results = execute_query(sql_query)
        return results
    return []

# 创建主窗口
root = tk.Tk()
root.title("数据库查询聊天机器人")

# 创建历史聊天信息显示区域
history_text = scrolledtext.ScrolledText(root, width=80, height=20)
history_text.pack(pady=10)

# 创建输入框
input_entry = tk.Entry(root, width=70)
input_entry.pack(pady=5)

# 定义发送消息函数
def send_message():
    user_input = input_entry.get()
    if user_input:
        # 显示用户输入到历史聊天信息区域
        history_text.insert(tk.END, f"你: {user_input}\n")
        # 清空输入框
        input_entry.delete(0, tk.END)

        # 获取数据库信息
        results = get_db_info(user_input)
        if results:
            completion = client.chat.completions.create(
                model="deepseek-v3-241226",
                messages=[
                    {"role": "user", "content": f"{user_input},sql查询结果为:{results},请回答用户的问题。"}
                ]
            )
            result = completion.choices[0].message.content
            history_text.insert(tk.END, f"机器人: {result}\n")
        else:
            history_text.insert(tk.END, "机器人: 未获取到有效结果。\n")

# 创建发送按钮
send_button = tk.Button(root, text="发送", command=send_message)
send_button.pack(pady=10)

# 运行主循环
root.mainloop()

数据库和表资源

我这里的数据库和表都是由deepseek生成的,生成的关键词是:

生成一个mysql用户信息表,并且模拟20条数据插入进去

CREATE TABLE `user_info` (
  `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
  `username` VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
  `password` CHAR(32) NOT NULL COMMENT 'MD5加密密码',
  `email` VARCHAR(100) UNIQUE COMMENT '邮箱',
  `phone` VARCHAR(20) COMMENT '手机号',
  `address` VARCHAR(200) COMMENT '地址',
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


INSERT INTO `user_info` 
  (`username`, `password`, `email`, `phone`, `address`)
VALUES
  ('john_doe', MD5('123456'), 'john@example.com', '13812345678', '北京市朝阳区'),
  ('mary_smith', MD5('123456'), 'mary@example.com', '13987654321', '上海市浦东新区'),
  ('alex_wang', MD5('123456'), 'alex@example.com', '13698765432', NULL),
  ('sarah_li', MD5('123456'), 'sarah@example.com', '13512348765', '广州市天河区'),
  ('mike_chen', MD5('123456'), 'mike@example.com', '13765439876', '深圳市南山区'),
  ('lisa_zhang', MD5('123456'), 'lisa@example.com', '13344556677', NULL),
  ('david_lee', MD5('123456'), 'david@example.com', '18911223344', '成都市锦江区'),
  ('emily_zhao', MD5('123456'), 'emily@example.com', '15966554433', '杭州市西湖区'),
  ('peter_liu', MD5('123456'), 'peter@example.com', '18633445566', '武汉市江汉区'),
  ('luna_ma', MD5('123456'), 'luna@example.com', '15299887766', NULL),
  ('tom_tang', MD5('123456'), 'tom@example.com', '17611223344', '南京市玄武区'),
  ('sophia_hu', MD5('123456'), 'sophia@example.com', '19988776655', '西安市碑林区'),
  ('jackson_xu', MD5('123456'), 'jackson@example.com', '18855443322', NULL),
  ('olivia_he', MD5('123456'), 'olivia@example.com', '13566778899', '重庆市渝中区'),
  ('ethan_lin', MD5('123456'), 'ethan@example.com', '13898765432', '长沙市岳麓区'),
  ('mia_wu', MD5('123456'), 'mia@example.com', '13712345678', '苏州市工业园区'),
  ('ryan_zhou', MD5('123456'), 'ryan@example.com', '13955446677', NULL),
  ('chloe_mao', MD5('123456'), 'chloe@example.com', '18600998877', '天津市和平区'),
  ('oscar_huang', MD5('123456'), 'oscar@example.com', '13366554433', '宁波市海曙区'),
  ('grace_feng', MD5('123456'), 'grace@example.com', '15811223344', NULL);

测试

总结

ai迅猛发展,ai无处不在,用好ai事半功倍,程序员要学好ai的使用,ai以后会成为一个普遍使用的工具,谁使用谁受益,谁不使用谁就会被慢慢边缘化 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值