大模型知识补充三

LangChain组件 – LLMChain

在这里插入图片描述

在这里插入图片描述



PromptTemplate 模板工具

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



Demo - 一个基于自然语言查询的工厂管理系统

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 导入需要的库
from langchain.chains import LLMChain  # 语言模型链,用于处理对话流程
from langchain.prompts import PromptTemplate  # 用于创建对话模板
from langchain.llms import OpenAI  # OpenAI的语言模型
import mysql.connector  # MySQL数据库连接库
from mysql.connector import Error  # 错误处理
import os  # 操作系统相关功能

# 数据库配置(类似填写快递单)
DB_CONFIG = {
    'host': 'localhost',      # 数据库地址(本机)
    'user': 'factory_user',   # 用户名(类似银行账号)
    'password': 'factory_password',  # 密码
    'database': 'factory_db'  # 要使用的数据库名(类似Excel文件名)
}

class FactoryAgent:  # 定义一个工厂智能体类(就像造一个机器人)
    def __init__(self):  # 初始化方法(机器人开机时的准备工作)
        self.llm = OpenAI(temperature=0)  # 创建语言模型(温度0表示最严谨的回答)
        self.db_connection = self._create_db_connection()  # 连接数据库
        self._init_db()  # 初始化数据库(建表)
        
        # 创建查询链(教机器人如何把中文转成SQL)
        self.query_chain = LLMChain(
            llm=self.llm,  # 使用的语言模型
            prompt=PromptTemplate(
                input_variables=["query"],  # 输入变量(用户的问题)
                template="将以下中文工厂查询转换为SQL语句:\n{query}"  # 转换模板
            )
        )
    
    # 创建数据库连接方法(类似给机器人装网线)
    def _create_db_connection(self):
        try:  # 尝试连接
            connection = mysql.connector.connect(**DB_CONFIG)  # **表示解包字典配置
            return connection  # 返回连接对象
        except Error as e:  # 如果出错
            print(f"数据库连接错误: {e}")  # 打印错误信息
            return None  # 返回空值
    
    # 初始化数据库表(给机器人准备记事本)
    def _init_db(self):
        # 建表SQL语句列表(三个表格的创建命令)
        create_tables = [
            """
            CREATE TABLE IF NOT EXISTS equipment (  # 设备表(如果不存在就创建)
                id INT AUTO_INCREMENT PRIMARY KEY,  # 自动增长的ID(唯一编号)
                name VARCHAR(255) NOT NULL,         # 设备名称(不能为空)
                status ENUM('运行中', '待机', '维修中') DEFAULT '待机',  # 状态枚举
                last_maintenance DATE               # 最后维护日期
            )
            """,
            # 生产记录表(类似生产日记本)
            """
            CREATE TABLE IF NOT EXISTS production (
                id INT AUTO_INCREMENT PRIMARY KEY,
                equipment_id INT,                   # 关联设备ID
                product_name VARCHAR(255),          # 产品名称
                quantity INT,                      # 生产数量
                production_time DATETIME,          # 生产时间
                FOREIGN KEY (equipment_id) REFERENCES equipment(id)  # 外键约束
            )
            """,
            # 库存表(仓库物品清单)
            """
            CREATE TABLE IF NOT EXISTS inventory (
                id INT AUTO_INCREMENT PRIMARY KEY,
                material_name VARCHAR(255) NOT NULL,  # 材料名称
                quantity INT DEFAULT 0,               # 数量(默认为0)
                location VARCHAR(255)                # 存放位置
            )
            """  # 注意这里修正了原代码缺少的右括号
        ]
        
        cursor = self.db_connection.cursor()  # 创建游标(类似拿笔写字)
        for table in create_tables:  # 遍历所有建表语句
            cursor.execute(table)     # 执行SQL语句
        self.db_connection.commit()  # 提交更改(类似保存文件)
        cursor.close()              # 关闭游标(放下笔)
    
    # 执行查询方法(机器人的工作流程)
    def execute_query(self, user_query):
        try:
            # 第一步:让语言模型生成SQL(把中文翻译成数据库能懂的语言)
            generated_sql = self.query_chain.run(user_query)
            print(f"生成的SQL: {generated_sql}")  # 打印生成的SQL(调试用)
            
            # 第二步:执行SQL查询
            cursor = self.db_connection.cursor(dictionary=True)  # 创建字典格式游标
            cursor.execute(generated_sql)  # 执行SQL语句
            
            # 判断是否是查询语句(SELECT)
            if "SELECT" in generated_sql.upper():
                result = cursor.fetchall()  # 获取所有结果
            else:  # 如果是更新/插入操作
                self.db_connection.commit()  # 提交更改
                result = "操作执行成功"
                
            cursor.close()  # 关闭游标
            return result   # 返回结果
            
        except Error as e:
            return f"数据库错误: {e}"  # 捕获数据库错误
        except Exception as e:
            return f"处理错误: {e}"   # 捕获其他错误
    
    # 添加示例数据方法(给机器人一些练习数据)
    def add_sample_data(self):
        try:
            cursor = self.db_connection.cursor()
            
            # 插入设备数据(两条记录)
            cursor.execute("""
                INSERT INTO equipment (name, status, last_maintenance)
                VALUES 
                    ('注塑机-01', '运行中', '2023-08-01'),  # 值1
                    ('冲压机-02', '待机', '2023-07-25')     # 值2
            """)
            
            # 插入生产记录(两条记录)
            cursor.execute("""
                INSERT INTO production (equipment_id, product_name, quantity, production_time)
                VALUES 
                    (1, '塑料外壳', 1000, NOW()),  # 设备1的生产记录
                    (1, '塑料配件', 800, NOW())   # 设备1的另一条记录
            """)
            
            # 插入库存数据
            cursor.execute("""
                INSERT INTO inventory (material_name, quantity, location)
                VALUES 
                    ('ABS塑料颗粒', 5000, 'A区-3排'),  # 材料1
                    ('钢板', 2000, 'B区-1排')         # 材料2
            """)
            
            self.db_connection.commit()  # 提交所有插入操作
            cursor.close()
            return "示例数据添加成功"
            
        except Error as e:
            return f"添加示例数据失败: {e}"

# 使用示例(机器人开机后的操作)
if __name__ == "__main__":
    agent = FactoryAgent()  # 创建智能体实例(启动机器人)
    print(agent.add_sample_data())  # 添加示例数据
    
    # 准备四个测试问题
    queries = [
        "查询当前所有设备的状态",          # 问题1
        "统计注塑机-01最近的生产总量",     # 问题2
        "查询ABS塑料颗粒的库存位置和数量", # 问题3
        "将冲压机-02的状态改为维修中"     # 问题4
    ]
    
    # 遍历执行每个查询
    for query in queries:
        print(f"\n查询: {query}")        # 打印当前问题
        result = agent.execute_query(query)  # 执行查询
        print("结果:", result)          # 显示结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值