解码DBGPT:系统应用原理、Prompt工程、Agent核心

566 阅读8分钟

DBGPT 简介

🤖定义 :DBGPT是一个开源的 AI 原生数据应用开发框架,致力于简化企业与开发者构建专属应用的过程。

☁定位 :作为大模型领域的基础设施,DBGPT提供强大的底层支持,助力数据应用的高效开发。

🚀价值 :在数据 3.0 时代,DBGPT帮助企业和开发者用更少的代码搭建专属应用,基于模型和数据库,实现高效开发与创新。

关键特性

一、私域问答 & 数据处理 & RAG

  • 支持多种方式构建知识库:内置知识库、多文件格式上传、插件自抓取等多种方式,满足不同需求。
  • 统一向量存储与检索:高效处理海量结构化和非结构化数据,提供强大的数据检索能力。

二、多数据源 & GBI

  • 自然语言交互:支持与 Excel、数据库、数仓等多种数据源进行自然语言交互,操作便捷。
  • 生成分析报告:提供强大的数据可视化能力,帮助用户快速生成分析报告。

三、多模型管理

  • 海量模型支持:涵盖开源、API 代理等几十种大语言模型,满足多样化的开发需求。
  • 模型示例:包括 LLaMA/LLaMA2、Baichuan、ChatGLM、文心、通义、智谱、星火等主流模型。

四、自动化微调

  • 轻量微调框架:支持 Text2SQL 数据集,提供高效的微调支持。
  • 微调方法:采用 LoRA/QLoRA/Pturning 等方法,让 TextSQL 微调像流水线一样便捷。

五、Data-Driven Multi-Agents & Plugins

  • 自定义插件任务:支持自定义插件执行任务,满足个性化开发需求。
  • 原生支持 Auto-GPT:采用 Agent Protocol 标准,确保与主流 Agent 的兼容性。

六、隐私安全

  • 数据安全保障:通过私有化大模型、代理脱敏等技术,全方位保护数据隐私。

技术架构

技术架构图

层级描述
Visualization可视化层,主要代码在 web 中,封装了 antv/gpt-vis
Application应用层,默认应用代码位置 dbgpt/app,可直接安装场景库 dbpgts 中的场景。
Agents代码位置 dbgpt/agent
RAGS增强检索生成模块,代码位置 dbgpt/rag
SMMF多模型管理模块,代码位置 dbgpt/model
Protocol协议层,采用 AWEL 进行跨 agent 调用,基于 DAG,代码实现 dbgpt/core/awel
Train模型微调,仓库 DB-GPT-HUB,代码位置 dbgpt/train

系统应用

1. Chat Excel

  • ☀️能力:通过自然语言对话的方式,实现 Excel 数据的解读与分析。

  • 🎨核心原理:系统解析 Excel 行列,将列作为字段,行作为数据存储至临时表中,根据用户问答生成 SQL 语句。

  • 🚑待优化点

    • 对话上下文仅支持单文件,限制了多文件交互的场景。
    • 临时表存储在内存中,数据量较大时会显著影响服务器性能。

2. Chat Data

  • ☀️能力:通过自然语言生成 SQL 查询数据库,生成可视化图表。

  • 🎨核心原理:系统启动时会调用 LLM 对数据源总结概要存储至 vector DB 中,用户提问时会带上数据库的概要信息、数据库的表结构信息,LLM 会生成 SQL 语句通过 DB connector 获取数据。

  • 🚑待优化点

    • 当库表过多时,会超出上下文 token 限制,导致无法找到表结构,从而给出错误答案。
    • 缺少重试机制,影响用户体验。

3. Chat DB

  • ☀️能力:根据数据库信息进行问答。

  • 🎨核心原理:与 Chat Data 类似,但缺少 SQL 执行器。

  • 🚑待优化点

    • 当库表过多时,会超出上下文 token 限制,导致无法找到表结构,从而给出错误答案。
    • 缺少重试机制,影响用户体验。

Prompt 工程

✨什么是提示工程?

提示词工程是一种通过精心设计输入提示(Prompts),引导大语言模型(LLM)生成期望输出的技术。它结合了精确性与创造力,帮助模型更好地理解任务目标,从而输出准确、相关且有价值的结果。

Prompt 案例

Chat Excel

excel 学习

下面是用户文件{file_name}的一部分数据,请学习理解该数据的结构和内容,按要求输出解析结果:
    {data_example}
分析各列数据的含义和作用,并对专业术语进行简单明了的解释, 如果是时间类型请给出时间格式类似:yyyy-MM-dd HH:MM:ss.
将列名作为属性名,分析解释作为属性值,组成json数组,并输出在返回json内容的ColumnAnalysis属性中.
请不要修改或者翻译列名,确保和给出数据列名一致.
针对数据从不同维度提供一些有用的分析思路给用户。

请一步一步思考,确保只以JSON格式回答,具体格式如下:
    {response}

excel 分析

请使用历史对话中的数据结构信息,在满足下面约束条件下通过duckdb sql数据分析回答用户的问题。
约束条件:
    1.请充分理解用户的问题,使用duckdb sql的方式进行分析, 分析内容按下面要求的输出格式返回,sql请输出在对应的sql参数中
    2.请从如下给出的展示方式种选择最优的一种用以进行数据渲染,将类型名称放入返回要求格式的name参数值种,如果找不到最合适的则使用'Table'作为展示方式,可用数据展示方式如下: {display_type}
    3.SQL中需要使用的表名是: {table_name},请检查你生成的sql,不要使用没在数据结构中的列名
    4.优先使用数据分析的方式回答,如果用户问题不涉及数据分析内容,你可以按你的理解进行回答
    5.输出内容中sql部分转换为:<api-call><name>[数据显示方式]</name><args><sql>[正确的duckdb数据分析sql]</sql></args></api- call> 这样的格式,参考返回格式要求
	
请一步一步思考,给出回答,并确保你的回答内容格式如下:
    对用户说的想法摘要.<api-call><name>[数据展示方式]</name><args><sql>[正确的duckdb数据分析sql]</sql></args></api-call>

用户问题:{user_input}

Chat Data

请根据用户选择的数据库和该库的部分可用表结构定义来回答用户问题.
数据库名:
    {db_name}
表结构定义:
    {table_info}

约束:
    1. 请根据用户问题理解用户意图,使用给出表结构定义创建一个语法正确的 {dialect} sql,如果不需要sql,则直接回答用户问题。
    2. 除非用户在问题中指定了他希望获得的具体数据行数,否则始终将查询限制为最多 {top_k} 个结果。
    3. 只能使用表结构信息中提供的表来生成 sql,如果无法根据提供的表结构中生成 sql ,请说:“提供的表结构信息不足以生成 sql 查询。” 禁止随意捏造信息。
    4. 请注意生成SQL时不要弄错表和列的关系
    5. 请检查SQL的正确性,并保证正确的情况下优化查询性能
    6.请从如下给出的展示方式种选择最优的一种用以进行数据渲染,将类型名称放入返回要求格式的name参数值种,如果找不到最合适的则使用'Table'作为展示方式,可用数据展示方式如下: {display_type}
用户问题:
    {user_input}
请一步步思考并按照以下JSON格式回复:
      {response}
确保返回正确的json并且可以被Python json.loads方法解析.

Chat DB

根据要求和问题,提供专业的答案。如果无法从提供的内容中获取答案,请说:“知识库中提供的信息不足以回答此问题。” 禁止随意捏造信息。

使用以下表结构信息: 
{table_info}

问题:
{input}
一步步思考。

🧩Prompt 技巧

1. 简明清晰: 使用明确、无歧义的语言,避免模糊的指令。例如,将“解释这个话题”改为“提供关于可再生能源好处的200字总结,重点关注太阳能和风能”

2. 思维链(COT):引导模型逐步思考问题,尤其适用于复杂任务。例如:“我有10个苹果,我送出去2个,然后买了5个,最后吃掉1个。现在我有多少个苹果?让我们逐步思考。”

3. 少样本提示(Few-Shot): 提供少量输入/输出示例。例如:“示例1:输入‘Good morning.’ 输出‘Bonjour.’ 现在,输入‘Good night.’ 输出。”

4. 角色扮演(cosplay):让模型扮演特定角色,以生成更符合场景的输出。例如:“你是一位财务顾问。给一个有1000美元用于投资的初学者提供建议。”

Agent

✨什么是 Agent(智能体)

LLM agent

🛒Agent 核心模块

DBGPT中agent核心模块

  • Profile模块: Profile模块,Profile模块的目的主要是做Agent角色认定,回答的核心问题有: 我是谁?我在哪?我该干什么? 一般由名称、角色、目标、约束条件等部分组成。
  • Memory模块: Memory即记忆模块,主要用来存储、获取、检索信息。依据人类记忆过程,记忆分为短期记忆、长期记忆
  • Planning模块: 制定计划,可以根据过去的行为与目标动态规划下一步的行动
  • Action模块: 执行模块,执行智能体的具体决策。