前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DB-GPT v0.4.0 使用通义千问 API Chat Excel

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

作者头像
AlphaHinex
发布2024-04-09 19:30:24
8290
发布2024-04-09 19:30:24
举报
文章被收录于专栏:周拱壹卒周拱壹卒

Part1DB-GPT

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

demo

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

Part2通义千问 API

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

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

models

quota

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

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

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

代码语言:javascript
复制
$ git clone https://github.com/eosphoros-ai/DB-GPT.git
$ cd DB-GPT
$ git checkout v0.4.0

之后安装依赖:

代码语言:javascript
复制
# python>=3.10
$ conda create -n dbgpt_env python=3.10
$ conda activate dbgpt_env
# it will take some minutes
$ pip install -e ".[default]"

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

代码语言:javascript
复制
cp .env.template .env

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

代码语言:javascript
复制
LLM_MODEL=tongyi_proxyllm
# qwen-turbo or qwen-plus
PROXYLLM_BACKEND=qwen-turbo
LANGUAGE=zh
TONGYI_PROXY_API_KEY=sk-xxxxxxxxx

之后启动 DB-GPT 服务:

代码语言:javascript
复制
python pilot/server/dbgpt_server.py --port 5050

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

hello1

hello2

Part4Chat Excel

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

example

excel learning

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

1问题

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

7f5bd8d1

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

2修正方法

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

代码语言:javascript
复制
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[11] 中,传递给 LLM Server 的 messages 是将对话历史中的 human 角色内容过滤,system 提示词部分作为 user 角色内容移至末尾,导致 assistant 先于 user 发言了,如:

msg-stack

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

3效果

看下修改之后的效果吧:

after

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

stat

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

tongyi

参考资料

[1]

DB-GPT: https://github.com/eosphoros-ai/DB-GPT

[2]

Demo: https://github.com/eosphoros-ai/DB-GPT#demo

[3]

通义千问: https://qianwen.aliyun.com/

[4]

开通DashScope并创建API-KEY: https://help.aliyun.com/zh/dashscope/developer-reference/activate-dashscope-and-create-an-api-key

[5]

两个模型: https://help.aliyun.com/zh/dashscope/developer-reference/api-details?disableWebsiteRedirect=true

[6]

免费额度: https://help.aliyun.com/zh/dashscope/developer-reference/tongyi-thousand-questions-metering-and-billing

[7]

调用统计: https://dashscope.console.aliyun.com/dashboard

[8]

源码安装: https://db-gpt.readthedocs.io/en/latest/getting_started/install/deploy.html

[9]

example.xlsx: https://github.com/eosphoros-ai/DB-GPT/blob/main/docker/examples/excel/example.xlsx

[10]

Issue #756: https://github.com/eosphoros-ai/DB-GPT/issues/756

[11]

tongyi.py: https://github.com/eosphoros-ai/DB-GPT/blob/v0.4.0/pilot/model/proxy/llms/tongyi.py

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 周拱壹卒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Part1DB-GPT
  • Part2通义千问 API
  • Part3DB-GPT 使用通义千问 API 环境搭建
  • Part4Chat Excel
    • 1问题
      • 2修正方法
        • 3效果
          • 参考资料
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档