Agent是具有自主性、适应性、反应性、预动性和社会性的程序或系统,能够在特定环境中独立运作并完成特定任务。在人工智能领域,Agent可以是简单的软件程序,也可以是复杂的智能体,能够从数据中学习并不断优化自己行为。
在这里插入图片描述

系列文章:https://blog.csdn.net/qq_43128256/article/details/139652995中提到,智能体开发得两种模式,即Agent和工作流。
其中:

在这里插入图片描述

在这里插入图片描述

一般Agent实现与工作流相比,省去了对数据、模型、工具、逻辑判别等步骤的次序设计规划,这是由于应用开发框架已经于底层设计了一套利用大模型自身能力对工具、流程进行规划的机制。
具体机制可参考下图:

在这里插入图片描述

AGI 实现方式对比分析

一般Agent构建模式

优势

  • 高效性:开发者只需输入主题方向,平台自动生成详尽的人物设定和行为Prompt,提升开发速度和便捷性。

不足

  • 依赖性:对模型能力依赖较强,难以应对逻辑复杂且对稳定性要求高的任务流程。

工作流模式

优势

  • 复杂性:能够设计复杂庞大的工作流程,利用逻辑结构如意图跳转、条件分支(if/else逻辑)、循环等,构建精细的业务流程。

缺陷

  • 上手成本:开发时间较长,上手成本较高。

AGI 实现方式选择

根据上述对比,一般Agent构建模式更符合AGI(通用人工智能)的想象,它比一般AI更高级,目标是创造能像人类一样思考、学习、执行多种任务的系统。本文以text2sql应用场景为例,展示如何使用大模型和Dify开发平台创造AGI。

实战示例

tool.py

以下是一个实战示例,展示了如何在Dify开发平台上使用大模型创建AGI。

1
2
3
4
5
# 此处应包含具体的Python代码实现
# 例如:
# def create_agi_tool(prompt, model):
#     # 根据prompt和model创建AGI工具
#     pass

注意:以上代码仅为示例,实际开发中需要根据具体需求进行编写。

1
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.") columns: List[Tuple[str, str]] = Field(..., title="Columns", description="List of columns with their types.") sample_data: Optional[List[Tuple]] = Field(None, title="Sample Data", description="First three rows of table data.") @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)

该文件通过启动API得形式提供可用于Dify使用的tool,定义一个数据库table_info得获取工具,一个SQL语句的执行工具。

在这里插入图片描述

在这里插入图片描述

进入Dify Agent页面配置工具和LLM

Prompt如下:

1
你是一位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是本地数据库的名字。

配置本地数据库权限:

1
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。

这可能是很接近大家理想中的智能体吧!