DB-GPT v0.4.0 使用通义千问 API Chat Excel

原文地址:https://alphahinex.github.io/2023/11/05/dbgpt-chat-excel-with-tongyi/


description: "国产大语言模型与 ChatGPT 3.5 相比,还是存在一定差距"
date: 2023.11.05 10:34
categories:
- AI
tags: [DB-GPT]
keywords: DB-GPT, tongyi, qwen-turbo, qwen-plus, Chat Excel


DB-GPT

DB-GPT 是一个使用本地大模型(或在线 API)与数据交互的开源项目,Demo 中使用 ChatGPT 3.5 的接口,效果很吸引人。

demo

让我们以 通义千问 为例,试试使用国产大模型在 DB-GPT 中能否达到类似的效果。

通义千问 API

要通过 API 使用通义千问模型,需要在阿里云灵积模型服务中 开通DashScope并创建API-KEY,获得 sk-xxxxx 格式的 API-KEY。

开通后会获得通义千问 qwen-turboqwen-plus 两个模型 的调用权限和有效期为 180 天的 200w/100w token 数的 免费额度

models
quota

API-KEY 的调用量可在 调用统计 中查看。

DB-GPT 使用通义千问 API 环境搭建

使用 源码安装 方式搭建 DB-GPT v0.4.0 版本运行环境,先下载源码:

$ git clone https://github.com/eosphoros-ai/DB-GPT.git
$ cd DB-GPT
$ git checkout v0.4.0

之后安装依赖:

# python>=3.10
$ conda create -n dbgpt_env python=3.10
$ conda activate dbgpt_env
# it will take some minutes
$ pip install -e ".[default]"

使用模板创建环境变量文件:

cp .env.template .env

修改 .env 配置文件中如下内容,以使用通义千问 API:

LLM_MODEL=tongyi_proxyllm
# qwen-turbo or qwen-plus
PROXYLLM_BACKEND=qwen-turbo
LANGUAGE=zh
TONGYI_PROXY_API_KEY=sk-xxxxxxxxx

下载 Embedding 模型:

$ mkdir models && cd models
#### embedding model
$ git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese
# or
# git clone https://huggingface.co/moka-ai/m3e-large
# back to DB-GPT root folder
$ cd ..

之后启动 DB-GPT 服务:

python pilot/server/dbgpt_server.py --port 5050

使用在线 API,无需本地 GPU。启动成功后,浏览器访问 http://localhost:5050 即可使用 DB-GPT 与通义千问接口对话:

hello1
hello2

Chat Excel

接下来让我们试试 Chat Excel 功能。进入 Chat Excel 场景后,需要先上传一个 Excel 或 CSV 文件。使用演示中的 example.xlsx

example
excel learning

可以看到通义千问基本分析出了上传文件中的数据内容,但有一些小的瑕疵,如字段数量,数据结构中包含不存在的字段等。

问题

继续对话,你会发现无论问什么,得到的回复都是 InvalidParameter:User and assistant need to appear alternately in the message 报错信息。

7f5bd8d1

我创建了一个 Issue #756 描述了这个现象,此问题将会在 0.4.1 版本中修正。

修正方法

如果希望在本地先临时修正这个问题,可以参照下面的修改方式:

diff --git a/pilot/model/proxy/llms/tongyi.py b/pilot/model/proxy/llms/tongyi.py
index fb826e49..13031e96 100644
--- a/pilot/model/proxy/llms/tongyi.py
+++ b/pilot/model/proxy/llms/tongyi.py
@@ -36,7 +36,7 @@ def tongyi_generate_stream(
         if message.role == ModelMessageRoleType.HUMAN:
             history.append({"role": "user", "content": message.content})
     for message in messages:
-        if message.role == ModelMessageRoleType.SYSTEM:
+        if message.role == ModelMessageRoleType.SYSTEM or message.role == ModelMessageRoleType.HUMAN:
             history.append({"role": "user", "content": message.content})
         # elif message.role == ModelMessageRoleType.HUMAN:
         #     history.append({"role": "user", "content": message.content})
@@ -45,17 +45,24 @@ def tongyi_generate_stream(
         else:
             pass
 
-    # temp_his = history[::-1]
-    temp_his = history
+    temp_his = history[::-1]
     last_user_input = None
     for m in temp_his:
         if m["role"] == "user":
             last_user_input = m
             break
 
-    if last_user_input:
+    temp_his = history
+    prompt_input = None
+    for m in temp_his:
+        if m["role"] == "user":
+            prompt_input = m
+            break
+
+    if last_user_input and prompt_input and last_user_input != prompt_input:
         history.remove(last_user_input)
-        history.append(last_user_input)
+        history.remove(prompt_input)
+        history.append(prompt_input)
 
     gen = Generation()
     res = gen.call(

报错的原因是通义千问 API 在对话时,需要 userassistant 两个角色交替进行,且 user 先发言。而在 tongyi.py 中,传递给 LLM Server 的 messages 是将对话历史中的 human 角色内容过滤,system 提示词部分作为 user 角色内容移至末尾,导致 assistant 先于 user 发言了,如:

msg-stack

上面的修改方法将消息栈的转换方式变更为保留 human 角色信息,将除第一个 system 角色信息保留外,其余 systemhuman 角色信息修改为 user 角色,ai 角色修改为 assistant 角色,之后移除最后一条 user 消息,并将第一条 user 消息(根据用户最后输入的信息,使用场景的提示词模板生成的提示词)移至消息栈的末尾。

效果

看下修改之后的效果吧:

after

在 WPS 中查看统计数据,与柱状图中信息一致:

stat

不过遗憾的是,使用 demo 中的对话内容 —— 分析不同销售部门的销售额和利润对比,以柱状图展示,通义千问还是得不到 ChatGPT 3.5 的效果:

tongyi
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容