再谈Agent:Dify智能体实现Txet2SQL
写代码的中青年 2024-08-22 09:31:05 阅读 88
大模型相关目录
<code>大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容
从0起步,扬帆起航。
基于Dify的智能分类方案:大模型结合KNN算法(附代码)OpenCompass:大模型测评工具一文读懂多模态大模型基础架构大模型管理平台:one-api使用指南大模型RAG、ROG、RCG概念科普RAGOnMedicalKG:大模型结合知识图谱的RAG实现DSPy:变革式大模型应用开发最简明的Few-shot Prompt指南Semantic Kernel:微软大模型开发框架——LangChain 替代对话大模型Prompt是否需要礼貌点?swift与Internvl下的多模态大模型分布式微调指南(附代码和数据)多模态大模型Internvl-1.5-26B微调后部署及测试实录(附代码)多模态大模型Internvl-2-26B的OCR赋能方案(附代码)miniconda+xinference的大模型推理部署指南Mem0:大模型最强赋能“有记忆的LLM”再谈Agent:Dify智能体实现Txet2SQL
文章目录
大模型相关目录前言实战
前言
什么是Agent?
Agent的是能够在一定环境中自主运作并完成特定任务的程序或者系统。
Agent具有以下特点:
自主性:Agent能够在没有人为干预的情况下运行,并独立做出决策。适应性:Agent能够根据环境的变化调整自己的行为。反应性:Agent能够对环境中的变化做出快速反应。预动性:Agent不仅对环境做出反应,还能主动采取行动以实现目标。社会性:多个Agent之间可以进行交互,合作完成更复杂的任务。
在人工智能领域,Agent可以是简单的,如一个根据预定规则做出决策的软件程序;也可以是复杂的,如采用机器学习算法,能够从数据中学习并不断优化自己行为的智能体。
通俗来讲,我将Agent特征总结如下:
系列文章:https://blog.csdn.net/qq_43128256/article/details/139652995中提到,智能体开发得两种模式,即Agent和工作流。
其中:
一般Agent实现与工作流相比,省去了对数据、模型、工具、逻辑判别等步骤的次序设计规划,这是由于应用开发框架已经于底层设计了一套利用大模型自身能力对工具、流程进行规划的机制。
具体机制可参考下图:
分割线上侧得黑色框图表示agent开发时对工具组得自定义、工具描述、工具实现;下侧得红色框图表示了大模型自身能力对工具、流程进行规划的机制原理,通俗地讲就是通过prompt、脚本实现了计划设定、终止条件设定、工具调用条件、内容生成等功能。
显而易见的。
<code>一般Agent构建模式:
优势在于搭建过程的高效性,开发者仅需要输入大致主题方向,平台就可以根据主题自动生成一套全面且详尽的人物设定和行为Prompt,极大地提升开发的速度和便捷性。不足之处在于对模型能力依赖较强、难以应对逻辑复杂且对稳定性有较高要求的任务流程。
工作流模式
:
优势在于能够设计出非常复杂且庞大的工作流程,利用意图跳转、条件分支(if/else逻辑)、循环等逻辑结构,配合模型、工具、数据,可以构建出企业内部非常复杂且精细的业务流程。缺陷是上手成本较高,开发时间较长。
可见一般Agent方式更符合我们对AGI通用人工智能得想象。这可比一般的AI高级多了。AGI的目标是创造一个能像人类一样思考、学习、执行多种任务的系统。本文以text2sql应用场景为例,使用大模型和Dify开发平台创造一个AGI!
实战
tool.py
from fastapi import FastAPI, HTTPException, Depends
import mysql.connector
from mysql.connector import Error
import mysql.connector
import pandas as pd
from typing import Dict, List, Tuple, Optional
from pydantic import BaseModel, Field
from fastapi import Depends, HTTPException
from sql_database import SQLDatabase
app = FastAPI()
# 依赖项函数,用于创建数据库连接
def get_mysql_connection(host: str, user: str, password: str, db: str):
try:
# 尝试连接到 MySQL 数据库
mysql_uri = f'mysql+pymysql://{ user}:{ password}@{ host}:3306/{ db}'
db = SQLDatabase.from_uri(mysql_uri)
return db
except Error as e:
raise HTTPException(status_code=400, detail=str(e))
class TableInfo(BaseModel):
table_name: str = Field(..., title="Table Name", description="Name of the table.")code>
columns: List[Tuple[str, str]] = Field(..., title="Columns", description="List of columns with their types.")code>
sample_data: Optional[List[Tuple]] = Field(None, title="Sample Data", description="First three rows of table data.")code>
@app.get("/get-schema/")
def get_schema(db: str, connection: mysql.connector.MySQLConnection = Depends(get_mysql_connection)):
return { "schema":connection.get_table_info()}
@app.post("/execute-query/")
def execute_query(query: str, connection: mysql.connector.MySQLConnection = Depends(get_mysql_connection)):
try:
result = connection.run(query)
except:
result = '查询失败,请检查输入的sql语句是否正确'
return result
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)code>
该文件通过启动API得形式提供可用于Dify使用的tool,定义一个数据库table_info得获取工具,一个SQL语句的执行工具。
进入Dify Agent页面配置工具和LLM
Prompt如下:
<code>你是一位MySQL专家。
你可以协助用户完成SQL查询。
你总是按照如下流程执行查询:
1. 解读用户问题,根据问题类型调用get_schema获取相关库表Schema。
2. 根据获取的Schema,生成查询语句,优先使用like匹配地区、供电所、变电站、线路名称等,调用execute_query执行查询
可用库表如下
host=172.20.182.22
user=root
password=970712
db_name 需要你根据任务描述从下述库中任选一项
mysql:可以完成任意有关mysql数据的查询。
wqx:可以完成任意有关微气象数据的查询。
其中wqx、mysql是本地数据库的名字。
配置本地数据库权限:
net start MySQL80
GRANT ALL ON *.* TO 'super'@'172.20.32.127';
GRANT ALL ON *.* TO 'root'@'172.20.32.127';
其中172.20.32.127为dify应用所在的服务器IP。
可见,只提供数据库table_info得获取工具,一个SQL语句的执行工具,让大模型自身设计调配逻辑、工作流程,并让其根据需求自身生成SQL语句,实现了一定程度上的AGI。
这可能是很接近大家理想中的智能体吧!
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。