From 75b168b84b500de5d945ac55d616f2b855ed54cc Mon Sep 17 00:00:00 2001 From: yjmm10 Date: Fri, 14 Jul 2023 17:14:06 +0800 Subject: [PATCH 1/6] add autodl platform and fix english readme --- README.md | 6 ++++++ README.zh.md | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/README.md b/README.md index 9538418ca..dbbc4e34b 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,12 @@ The core capabilities mainly consist of the following parts: ## Install [Quickstart](https://db-gpt.readthedocs.io/en/latest/getting_started/getting_started.html) +### Language Switching + In the .env configuration file, modify the LANGUAGE parameter to switch to different languages. The default is English (Chinese: zh, English: en, other languages to be added later). +### Platform Deployment +- autodl + [autodl image](https://www.codewithgpu.com/i/csunny/DB-GPT/csunny-db-gpt). You can refer to the image instructions to build from scratch, or use `docker pull` to obtain the shared image, follow the instructions in the document to operate. If you have any questions, please leave a comment. + ## Usage Instructions - [Multi LLMs Usage](https://db-gpt.readthedocs.io/en/latest/modules/llms.html) diff --git a/README.zh.md b/README.zh.md index 0bc8e75a4..959dab657 100644 --- a/README.zh.md +++ b/README.zh.md @@ -122,6 +122,10 @@ DB-GPT基于 [FastChat](https://github.com/lm-sys/FastChat) 构建大模型运 ### 多语言切换 在.env 配置文件当中,修改LANGUAGE参数来切换使用不同的语言,默认是英文(中文zh, 英文en, 其他语言待补充) +### 平台部署 +- autodl + [autodl镜像](https://www.codewithgpu.com/i/csunny/DB-GPT/csunny-db-gpt),从头搭建可参考镜像说明,或通过`docker pull`获取共享镜像,按照文档中的说明操作即可,若有问题,欢迎评论。 + ## 使用说明 ### 多模型使用 From d805e6ab42bce0e7c2eed9bf7b34435cd70e670f Mon Sep 17 00:00:00 2001 From: FangYin Cheng Date: Tue, 18 Jul 2023 18:07:09 +0800 Subject: [PATCH 2/6] feat: structured prompt data interaction between dbgpt-server and llm-server --- pilot/model/llm_out/chatglm_llm.py | 55 ++++++------------ pilot/model/llm_out/proxy_llm.py | 37 ++++-------- pilot/scene/base_chat.py | 93 +++++++++++++++++++++++++----- pilot/scene/base_message.py | 41 +++++++++++++ pilot/server/llmserver.py | 4 ++ 5 files changed, 151 insertions(+), 79 deletions(-) diff --git a/pilot/model/llm_out/chatglm_llm.py b/pilot/model/llm_out/chatglm_llm.py index 9bfcac915..968101c56 100644 --- a/pilot/model/llm_out/chatglm_llm.py +++ b/pilot/model/llm_out/chatglm_llm.py @@ -8,6 +8,11 @@ import copy import torch from pilot.conversation import ROLE_ASSISTANT, ROLE_USER +from pilot.scene.base_message import ModelMessage, _parse_model_messages + +# TODO move sep to scene prompt of model +_CHATGLM_SEP = "\n" +_CHATGLM2_SEP = "\n\n" @torch.inference_mode() @@ -32,42 +37,20 @@ def chatglm_generate_stream( generate_kwargs["temperature"] = temperature # TODO, Fix this - print(prompt) - messages = prompt.split(stop) - # - # # Add history conversation - hist = [HistoryEntry()] - system_messages = [] - for message in messages[:-2]: - if len(message) <= 0: - continue - if "human:" in message: - hist[-1].add_question(message.split("human:")[1]) - elif "system:" in message: - msg = message.split("system:")[1] - hist[-1].add_question(msg) - system_messages.append(msg) - elif "ai:" in message: - hist[-1].add_answer(message.split("ai:")[1]) - hist.append(HistoryEntry()) - else: - # TODO - # hist[-1].add_question(message.split("system:")[1]) - # once_conversation.append(f"""###system:{message} """) - pass - - try: - query = messages[-2].split("human:")[1] - except IndexError: - query = messages[-3].split("human:")[1] - hist = build_history(hist) + # print(prompt) + # messages = prompt.split(stop) + messages: List[ModelMessage] = params["messages"] + query, system_messages, hist = _parse_model_messages(messages) + system_messages_str = "".join(system_messages) if not hist: # No history conversation, but has system messages, merge to user`s query - query = prompt_adaptation(system_messages, query) + query = prompt_adaptation(system_messages_str, query) + else: + # history exist, add system message to head of history + hist[0][0] = system_messages_str + _CHATGLM2_SEP + hist[0][0] + print("Query Message: ", query) print("hist: ", hist) - # output = "" - # i = 0 for i, (response, new_hist) in enumerate( model.stream_chat(tokenizer, query, hist, **generate_kwargs) @@ -103,10 +86,10 @@ def build_history(hist: List[HistoryEntry]) -> List[List[str]]: return list(filter(lambda hl: hl is not None, map(lambda h: h.to_list(), hist))) -def prompt_adaptation(system_messages: List[str], human_message: str) -> str: - if not system_messages: +def prompt_adaptation(system_messages_str: str, human_message: str) -> str: + if not system_messages_str or system_messages_str == "": return human_message - system_messages_str = " ".join(system_messages) + # TODO Multi-model prompt adaptation adaptation_rules = [ r"Question:\s*{}\s*", # chat_db scene r"Goals:\s*{}\s*", # chat_execution @@ -119,4 +102,4 @@ def prompt_adaptation(system_messages: List[str], human_message: str) -> str: if re.search(pattern, system_messages_str): return system_messages_str # https://huggingface.co/THUDM/chatglm2-6b/blob/e186c891cf64310ac66ef10a87e6635fa6c2a579/modeling_chatglm.py#L926 - return f"{system_messages_str}\n\n问:{human_message}\n\n答:" + return system_messages_str + _CHATGLM2_SEP + human_message diff --git a/pilot/model/llm_out/proxy_llm.py b/pilot/model/llm_out/proxy_llm.py index 3ec5d8504..c353426d2 100644 --- a/pilot/model/llm_out/proxy_llm.py +++ b/pilot/model/llm_out/proxy_llm.py @@ -3,8 +3,10 @@ import json import requests +from typing import List from pilot.configs.config import Config from pilot.conversation import ROLE_ASSISTANT, ROLE_USER +from pilot.scene.base_message import ModelMessage CFG = Config() @@ -20,36 +22,17 @@ def proxyllm_generate_stream(model, tokenizer, params, device, context_len=2048) "Token": CFG.proxy_api_key, } - messages = prompt.split(stop) + messages: List[ModelMessage] = params["messages"] # Add history conversation for message in messages: - if len(message) <= 0: - continue - if "human:" in message: - history.append( - {"role": "user", "content": message.split("human:")[1]}, - ) - elif "system:" in message: - history.append( - { - "role": "system", - "content": message.split("system:")[1], - } - ) - elif "ai:" in message: - history.append( - { - "role": "assistant", - "content": message.split("ai:")[1], - } - ) + if message.role == "human": + history.append({"role": "user", "content": message.content}) + elif message.role == "system": + history.append({"role": "system", "content": message.content}) + elif message.role == "ai": + history.append({"role": "assistant", "content": message.content}) else: - history.append( - { - "role": "system", - "content": message, - } - ) + pass # Move the last user's information to the end temp_his = history[::-1] diff --git a/pilot/scene/base_chat.py b/pilot/scene/base_chat.py index 7757d7fd6..ad1afbe88 100644 --- a/pilot/scene/base_chat.py +++ b/pilot/scene/base_chat.py @@ -37,6 +37,7 @@ from pilot.scene.base_message import ( HumanMessage, AIMessage, ViewMessage, + ModelMessage, ) from pilot.configs.config import Config @@ -116,6 +117,7 @@ class BaseChat(ABC): payload = { "model": self.llm_model, "prompt": self.generate_llm_text(), + "messages": self.generate_llm_messages(), "temperature": float(self.prompt_template.temperature), "max_new_tokens": int(self.prompt_template.max_new_tokens), "stop": self.prompt_template.sep, @@ -244,24 +246,62 @@ class BaseChat(ABC): text += self.__load_user_message() return text - def __load_system_message(self): + def generate_llm_messages(self) -> List[ModelMessage]: + """ + Structured prompt messages interaction between dbgpt-server and llm-server + See https://github.com/csunny/DB-GPT/issues/328 + """ + messages = [] + ### Load scene setting or character definition as system message + if self.prompt_template.template_define: + messages.append( + ModelMessage( + role="system", + content=self.prompt_template.template_define, + ) + ) + ### Load prompt + messages += self.__load_system_message(str_message=False) + ### Load examples + messages += self.__load_example_messages(str_message=False) + + ### Load History + messages += self.__load_histroy_messages(str_message=False) + + ### Load User Input + messages += self.__load_user_message(str_message=False) + return messages + + def __load_system_message(self, str_message: bool = True): system_convs = self.current_message.get_system_conv() system_text = "" + system_messages = [] for system_conv in system_convs: system_text += ( system_conv.type + ":" + system_conv.content + self.prompt_template.sep ) - return system_text + system_messages.append( + ModelMessage(role=system_conv.type, content=system_conv.content) + ) + return system_text if str_message else system_messages - def __load_user_message(self): + def __load_user_message(self, str_message: bool = True): user_conv = self.current_message.get_user_conv() + user_messages = [] if user_conv: - return user_conv.type + ":" + user_conv.content + self.prompt_template.sep + user_text = ( + user_conv.type + ":" + user_conv.content + self.prompt_template.sep + ) + user_messages.append( + ModelMessage(role=user_conv.type, content=user_conv.content) + ) + return user_text if str_message else user_messages else: raise ValueError("Hi! What do you want to talk about?") - def __load_example_messages(self): + def __load_example_messages(self, str_message: bool = True): example_text = "" + example_messages = [] if self.prompt_template.example_selector: for round_conv in self.prompt_template.example_selector.examples(): for round_message in round_conv["messages"]: @@ -269,16 +309,22 @@ class BaseChat(ABC): SystemMessage.type, ViewMessage.type, ]: + message_type = round_message["type"] + message_content = round_message["data"]["content"] example_text += ( - round_message["type"] + message_type + ":" - + round_message["data"]["content"] + + message_content + self.prompt_template.sep ) - return example_text + example_messages.append( + ModelMessage(role=message_type, content=message_content) + ) + return example_text if str_message else example_messages - def __load_histroy_messages(self): + def __load_histroy_messages(self, str_message: bool = True): history_text = "" + history_messages = [] if self.prompt_template.need_historical_messages: if self.history_message: logger.info( @@ -290,12 +336,17 @@ class BaseChat(ABC): ViewMessage.type, SystemMessage.type, ]: + message_type = first_message["type"] + message_content = first_message["data"]["content"] history_text += ( - first_message["type"] + message_type + ":" - + first_message["data"]["content"] + + message_content + self.prompt_template.sep ) + history_messages.append( + ModelMessage(role=message_type, content=message_content) + ) index = self.chat_retention_rounds - 1 for round_conv in self.history_message[-index:]: @@ -304,12 +355,17 @@ class BaseChat(ABC): SystemMessage.type, ViewMessage.type, ]: + message_type = round_message["type"] + message_content = round_message["data"]["content"] history_text += ( - round_message["type"] + message_type + ":" - + round_message["data"]["content"] + + message_content + self.prompt_template.sep ) + history_messages.append( + ModelMessage(role=message_type, content=message_content) + ) else: ### user all history @@ -320,14 +376,19 @@ class BaseChat(ABC): SystemMessage.type, ViewMessage.type, ]: + message_type = message["type"] + message_content = message["data"]["content"] history_text += ( - message["type"] + message_type + ":" - + message["data"]["content"] + + message_content + self.prompt_template.sep ) + history_messages.append( + ModelMessage(role=message_type, content=message_content) + ) - return history_text + return history_text if str_message else history_messages def current_ai_response(self) -> str: for message in self.current_message.messages: diff --git a/pilot/scene/base_message.py b/pilot/scene/base_message.py index 56fbb3b20..20d513c39 100644 --- a/pilot/scene/base_message.py +++ b/pilot/scene/base_message.py @@ -6,6 +6,7 @@ from typing import ( Dict, Generic, List, + Tuple, NamedTuple, Optional, Sequence, @@ -80,6 +81,14 @@ class SystemMessage(BaseMessage): return "system" +class ModelMessage(BaseModel): + """Type of message that interaction between dbgpt-server and llm-server""" + + """Similar to openai's message format""" + role: str + content: str + + class Generation(BaseModel): """Output of a single generation.""" @@ -146,3 +155,35 @@ def _message_from_dict(message: dict) -> BaseMessage: def messages_from_dict(messages: List[dict]) -> List[BaseMessage]: return [_message_from_dict(m) for m in messages] + + +def _parse_model_messages( + messages: List[ModelMessage], +) -> Tuple[str, List[str], List[List[str, str]]]: + """ " + Parameters: + messages: List of message from base chat. + Returns: + A tuple contains user prompt, system message list and history message list + str: user prompt + List[str]: system messages + List[List[str]]: history message of user and assistant + """ + user_prompt = "" + system_messages: List[str] = [] + history_messages: List[List[str]] = [[]] + + for message in messages[:-1]: + if message.role == "human": + history_messages[-1].append(message.content) + elif message.role == "system": + system_messages.append(message.content) + elif message.role == "ai": + history_messages[-1].append(message.content) + history_messages.append([]) + if messages[-1].role != "human": + raise ValueError("Hi! What do you want to talk about?") + # Keep message pair of [user message, assistant message] + history_messages = list(filter(lambda x: len(x) == 2, history_messages)) + user_prompt = messages[-1].content + return user_prompt, system_messages, history_messages diff --git a/pilot/server/llmserver.py b/pilot/server/llmserver.py index a8839b86a..910a97573 100644 --- a/pilot/server/llmserver.py +++ b/pilot/server/llmserver.py @@ -5,6 +5,7 @@ import asyncio import json import os import sys +from typing import List import uvicorn from fastapi import BackgroundTasks, FastAPI, Request @@ -24,6 +25,7 @@ from pilot.configs.model_config import * from pilot.model.llm_out.vicuna_base_llm import get_embeddings from pilot.model.loader import ModelLoader from pilot.server.chat_adapter import get_llm_chat_adapter +from pilot.scene.base_message import ModelMessage CFG = Config() @@ -128,6 +130,7 @@ app = FastAPI() class PromptRequest(BaseModel): + messages: List[ModelMessage] prompt: str temperature: float max_new_tokens: int @@ -170,6 +173,7 @@ async def api_generate_stream(request: Request): @app.post("/generate") def generate(prompt_request: PromptRequest) -> str: params = { + "messages": prompt_request.messages, "prompt": prompt_request.prompt, "temperature": prompt_request.temperature, "max_new_tokens": prompt_request.max_new_tokens, From 80f1a99b4da954a25538819ec563422e1adf0d48 Mon Sep 17 00:00:00 2001 From: FangYin Cheng Date: Wed, 19 Jul 2023 12:17:01 +0800 Subject: [PATCH 3/6] feat: add warning message when using generate_llm_text --- pilot/scene/base_chat.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pilot/scene/base_chat.py b/pilot/scene/base_chat.py index ad1afbe88..bd660a0cd 100644 --- a/pilot/scene/base_chat.py +++ b/pilot/scene/base_chat.py @@ -2,6 +2,7 @@ import time from abc import ABC, abstractmethod import datetime import traceback +import warnings import json from pydantic import BaseModel, Field, root_validator, validator, Extra from typing import ( @@ -229,6 +230,7 @@ class BaseChat(ABC): return self.nostream_call() def generate_llm_text(self) -> str: + warnings.warn("This method is deprecated - please use `generate_llm_messages`.") text = "" ### Load scene setting or character definition if self.prompt_template.template_define: From a90bb0710662895a721b4940ca5ae34bf05931e5 Mon Sep 17 00:00:00 2001 From: aries_ckt <916701291@qq.com> Date: Thu, 20 Jul 2023 13:30:38 +0800 Subject: [PATCH 4/6] doc:AutoDL Image 1.AutoDL Image 2.mock chat data sql 3.FAQ --- README.md | 3 +- README.zh.md | 3 + assets/schema/knowledge_management.sql | 37 ++++++- docs/faq.md | 97 +++++++++++++++++ docs/getting_started/getting_started.md | 16 ++- docs/index.rst | 12 +++ docs/locales/zh_CN/LC_MESSAGES/faq.po | 100 ++++++++++++++++++ .../getting_started/getting_started.po | 87 +++++++-------- docs/locales/zh_CN/LC_MESSAGES/index.po | 96 +++++++++-------- 9 files changed, 353 insertions(+), 98 deletions(-) create mode 100644 docs/faq.md create mode 100644 docs/locales/zh_CN/LC_MESSAGES/faq.po diff --git a/README.md b/README.md index 297d0e5ed..2d0a7deee 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,8 @@ The core capabilities mainly consist of the following parts: - [DB-GPT-Plugins](https://github.com/csunny/DB-GPT-Plugins) DB-GPT Plugins, Can run autogpt plugin directly - [DB-GPT-Web](https://github.com/csunny/DB-GPT-Web) ChatUI for DB-GPT - +## Image +🌐 [AutoDL Image](https://www.codewithgpu.com/i/csunny/DB-GPT/dbgpt-0.3.1-v2) ## Install [Quickstart](https://db-gpt.readthedocs.io/en/latest/getting_started/getting_started.html) diff --git a/README.zh.md b/README.zh.md index 24081adcb..272b03ba2 100644 --- a/README.zh.md +++ b/README.zh.md @@ -110,6 +110,9 @@ DB-GPT基于 [FastChat](https://github.com/lm-sys/FastChat) 构建大模型运 - [DB-GPT-Plugins](https://github.com/csunny/DB-GPT-Plugins) DB-GPT 插件仓库, 兼容Auto-GPT - [DB-GPT-Web](https://github.com/csunny/DB-GPT-Web) 多端交互前端界面 +## Image +🌐 [AutoDL镜像](https://www.codewithgpu.com/i/csunny/DB-GPT/dbgpt-0.3.1-v2) + ## 安装 [快速开始](https://db-gpt.readthedocs.io/projects/db-gpt-docs-zh-cn/zh_CN/latest/getting_started/getting_started.html) diff --git a/assets/schema/knowledge_management.sql b/assets/schema/knowledge_management.sql index ceaa566da..7b4d6c36e 100644 --- a/assets/schema/knowledge_management.sql +++ b/assets/schema/knowledge_management.sql @@ -1,3 +1,5 @@ +CREATE DATABASE knowledge_management; +use knowledge_management; CREATE TABLE `knowledge_space` ( `id` int NOT NULL AUTO_INCREMENT COMMENT 'auto increment id', `name` varchar(100) NOT NULL COMMENT 'knowledge space name', @@ -38,4 +40,37 @@ CREATE TABLE `document_chunk` ( `gmt_modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'update time', PRIMARY KEY (`id`), KEY `idx_document_id` (`document_id`) COMMENT 'index:document_id' -) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mb4 COMMENT='knowledge document chunk detail' \ No newline at end of file +) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mb4 COMMENT='knowledge document chunk detail'; + +CREATE DATABASE EXAMPLE_1; +use EXAMPLE_1; +CREATE TABLE `users` ( + `id` int NOT NULL AUTO_INCREMENT, + `username` varchar(50) NOT NULL COMMENT '用户名', + `password` varchar(50) NOT NULL COMMENT '密码', + `email` varchar(50) NOT NULL COMMENT '邮箱', + `phone` varchar(20) DEFAULT NULL COMMENT '电话', + PRIMARY KEY (`id`), + KEY `idx_username` (`username`) COMMENT '索引:按用户名查询' +) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COMMENT='聊天用户表'; + +INSERT INTO users (username, password, email, phone) VALUES ('user_1', 'password_1', 'user_1@example.com', '12345678901'); +INSERT INTO users (username, password, email, phone) VALUES ('user_2', 'password_2', 'user_2@example.com', '12345678902'); +INSERT INTO users (username, password, email, phone) VALUES ('user_3', 'password_3', 'user_3@example.com', '12345678903'); +INSERT INTO users (username, password, email, phone) VALUES ('user_4', 'password_4', 'user_4@example.com', '12345678904'); +INSERT INTO users (username, password, email, phone) VALUES ('user_5', 'password_5', 'user_5@example.com', '12345678905'); +INSERT INTO users (username, password, email, phone) VALUES ('user_6', 'password_6', 'user_6@example.com', '12345678906'); +INSERT INTO users (username, password, email, phone) VALUES ('user_7', 'password_7', 'user_7@example.com', '12345678907'); +INSERT INTO users (username, password, email, phone) VALUES ('user_8', 'password_8', 'user_8@example.com', '12345678908'); +INSERT INTO users (username, password, email, phone) VALUES ('user_9', 'password_9', 'user_9@example.com', '12345678909'); +INSERT INTO users (username, password, email, phone) VALUES ('user_10', 'password_10', 'user_10@example.com', '12345678900'); +INSERT INTO users (username, password, email, phone) VALUES ('user_11', 'password_11', 'user_11@example.com', '12345678901'); +INSERT INTO users (username, password, email, phone) VALUES ('user_12', 'password_12', 'user_12@example.com', '12345678902'); +INSERT INTO users (username, password, email, phone) VALUES ('user_13', 'password_13', 'user_13@example.com', '12345678903'); +INSERT INTO users (username, password, email, phone) VALUES ('user_14', 'password_14', 'user_14@example.com', '12345678904'); +INSERT INTO users (username, password, email, phone) VALUES ('user_15', 'password_15', 'user_15@example.com', '12345678905'); +INSERT INTO users (username, password, email, phone) VALUES ('user_16', 'password_16', 'user_16@example.com', '12345678906'); +INSERT INTO users (username, password, email, phone) VALUES ('user_17', 'password_17', 'user_17@example.com', '12345678907'); +INSERT INTO users (username, password, email, phone) VALUES ('user_18', 'password_18', 'user_18@example.com', '12345678908'); +INSERT INTO users (username, password, email, phone) VALUES ('user_19', 'password_19', 'user_19@example.com', '12345678909'); +INSERT INTO users (username, password, email, phone) VALUES ('user_20', 'password_20', 'user_20@example.com', '12345678900'); \ No newline at end of file diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 000000000..852dbd109 --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,97 @@ +# FAQ +##### Q1: text2vec-large-chinese not found + +##### A1: make sure you have download text2vec-large-chinese embedding model in right way + +```tip +centos:yum install git-lfs +ubuntu:apt-get install git-lfs -y +macos:brew install git-lfs +``` +```bash +cd models +git lfs clone https://huggingface.co/GanymedeNil/text2vec-large-chinese +``` + +##### Q2: execute `pip install -r requirements.txt` error, found some package cannot find correct version. + + +##### A2: change the pip source. + +```bash +# pypi +$ pip install -r requirements.txt -i https://pypi.python.org/simple +``` + +or + +```bash +# tsinghua +$ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ +``` + +or + +```bash +# aliyun +$ pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ +``` + + +##### Q3:Access denied for user 'root@localhost'(using password :NO) + +##### A3: make sure you have installed mysql instance in right way + +Docker: +```bash +docker run --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=aa12345678 -dit mysql:latest +``` +Normal: +[download mysql instance](https://dev.mysql.com/downloads/mysql/) + +##### Q4:When I use openai(MODEL_SERVER=proxyllm) to chat +

+ +

+ +##### A4: make sure your openapi API_KEY is available + +##### Q5:When I Chat Data and Chat Meta Data, I found the error +

+ +

+ +##### A5: you have not create your database and table +1.create your database. +```bash +mysql> create database {$your_name} +mysql> use {$your_name} +``` + +2.create table {$your_table} and insert your data. +eg: +```bash +mysql>CREATE TABLE `users` ( + `id` int NOT NULL AUTO_INCREMENT, + `username` varchar(50) NOT NULL COMMENT '用户名', + `password` varchar(50) NOT NULL COMMENT '密码', + `email` varchar(50) NOT NULL COMMENT '邮箱', + `phone` varchar(20) DEFAULT NULL COMMENT '电话', + PRIMARY KEY (`id`), + KEY `idx_username` (`username`) COMMENT '索引:按用户名查询' +) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COMMENT='聊天用户表' +``` + +##### Q6:When I use vicuna-13b, found some illegal character like this. +

+ +

+ +##### A6: set KNOWLEDGE_SEARCH_TOP_SIZE smaller or set KNOWLEDGE_CHUNK_SIZE smaller, and reboot server. + + + + + + + diff --git a/docs/getting_started/getting_started.md b/docs/getting_started/getting_started.md index 946448853..be4855a3b 100644 --- a/docs/getting_started/getting_started.md +++ b/docs/getting_started/getting_started.md @@ -17,11 +17,15 @@ As our project has the ability to achieve ChatGPT performance of over 85%, there ### 2. Install -This project relies on a local MySQL database service, which you need to install locally. We recommend using Docker for installation. - +1.This project relies on a local MySQL database service, which you need to install locally. We recommend using Docker for installation. ```bash $ docker run --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=aa12345678 -dit mysql:latest ``` +2. prepare server sql script +```bash +$ mysql -h127.0.0.1 -uroot -paa12345678 < ./assets/schema/knowledge_management.sql +``` + We use [Chroma embedding database](https://github.com/chroma-core/chroma) as the default for our vector database, so there is no need for special installation. If you choose to connect to other databases, you can follow our tutorial for installation and configuration. For the entire installation process of DB-GPT, we use the miniconda3 virtual environment. Create a virtual environment and install the Python dependencies. @@ -63,16 +67,10 @@ You can refer to this document to obtain the Vicuna weights: [Vicuna](https://gi If you have difficulty with this step, you can also directly use the model from [this link](https://huggingface.co/Tribbiani/vicuna-7b) as a replacement. -1. prepare server sql script -```bash -mysql> CREATE DATABASE knowledge_management; -mysql> use knowledge_management; -mysql> source ./assets/schema/knowledge_management.sql -``` set .env configuration set your vector store type, eg:VECTOR_STORE_TYPE=Chroma, now we support Chroma and Milvus(version > 2.1) -2. Run db-gpt server +1.Run db-gpt server ```bash $ python pilot/server/dbgpt_server.py diff --git a/docs/index.rst b/docs/index.rst index b52edc93c..cbabd1e69 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -130,6 +130,18 @@ Reference ./reference.md +FAQ +----------- +| DB-GPT FAQ. + +.. toctree:: + :maxdepth: 1 + :caption: FAQ + :name: FAQ + :hidden: + + ./faq.md + Ecosystem ---------- diff --git a/docs/locales/zh_CN/LC_MESSAGES/faq.po b/docs/locales/zh_CN/LC_MESSAGES/faq.po new file mode 100644 index 000000000..074547881 --- /dev/null +++ b/docs/locales/zh_CN/LC_MESSAGES/faq.po @@ -0,0 +1,100 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, csunny +# This file is distributed under the same license as the DB-GPT package. +# FIRST AUTHOR , 2023. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: DB-GPT 👏👏 0.3.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-07-20 10:53+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: ../../faq.md:1 81cedd396b274db9b2a69448df98a28d +msgid "FAQ" +msgstr "FAQ" + +#: ../../faq.md:2 1a3f8c7661e34721a4465a34281416b1 +msgid "Q1: text2vec-large-chinese not found" +msgstr "Q1: text2vec-large-chinese not found" + +#: ../../faq.md:4 5d2844bcbcc843fc97de41a491f914fe +msgid "" +"A1: make sure you have download text2vec-large-chinese embedding model in" +" right way" +msgstr "按照正确的姿势下载text2vec-large-chinese模型" + +#: ../../faq.md:16 82ade01884534030b81be7c3e06f1504 +msgid "" +"Q2: execute `pip install -r requirements.txt` error, found some package " +"cannot find correct version." +msgstr "执行`pip install -r requirements.txt`报错" + +#: ../../faq.md:19 451ede833da642788e5224811a71ba0f +msgid "A2: change the pip source." +msgstr "修改pip源" + +#: ../../faq.md:26 ../../faq.md:33 0142abf1050d4fee9caf056322b52247 +#: 0adb87dd67fa4122997871f7ab064637 +msgid "or" +msgstr "或" + +#: ../../faq.md:41 d6981160ecc6491284fd32e1098fc10e +msgid "Q3:Access denied for user 'root@localhost'(using password :NO)" +msgstr "或" + +#: ../../faq.md:43 e50b195057804f28b84d0d10859e4f1b +msgid "A3: make sure you have installed mysql instance in right way" +msgstr "按照正确姿势安装mysql" + +#: ../../faq.md:45 03ba25aa7bd241d3b32cc1916f858a3e +msgid "Docker:" +msgstr "Docker:" + +#: ../../faq.md:49 dd5336b44673459c93a1408097cb76f9 +msgid "Normal: [download mysql instance](https://dev.mysql.com/downloads/mysql/)" +msgstr "[download mysql instance](https://dev.mysql.com/downloads/mysql/)" + +#: ../../faq.md:52 2b290c4653a2410c8d330ed5b0e9a821 +msgid "Q4:When I use openai(MODEL_SERVER=proxyllm) to chat" +msgstr "使用openai-chatgpt模型时(MODEL_SERVER=proxyllm)" + +#: ../../faq.md:57 f4d0e8e8113f4ca4bc55f167b661fd6a +msgid "A4: make sure your openapi API_KEY is available" +msgstr "确认openapi API_KEY是否可用" + +#: ../../faq.md:59 092ca3dea0c5466ab6e22ab0049f166e +msgid "Q5:When I Chat Data and Chat Meta Data, I found the error" +msgstr "Chat Data and Chat Meta Data报如下错" + +#: ../../faq.md:64 dbf61e6ea2c64ecebfdbbde83cb74e3e +msgid "A5: you have not create your database and table" +msgstr "需要创建自己的数据库" + +#: ../../faq.md:65 0505bb716e6445c2a7960436d93cb407 +msgid "1.create your database." +msgstr "1.先创建数据库" + +#: ../../faq.md:71 fd689b541ee549bd85385647c219b4cb +msgid "2.create table {$your_table} and insert your data. eg:" +msgstr "然后创建数据表,模拟数据" + +#: ../../faq.md:85 de2d78db5fb6450cb08b0f15385ed525 +msgid "Q6:When I use vicuna-13b, found some illegal character like this." +msgstr "使用vicuna-13b,知识库问答出现乱码" + +#: ../../faq.md:90 0cb1d0c2ec434763ae80e6f87d4a1665 +msgid "" +"A6: set KNOWLEDGE_SEARCH_TOP_SIZE smaller or set KNOWLEDGE_CHUNK_SIZE " +"smaller, and reboot server." +msgstr "将KNOWLEDGE_SEARCH_TOP_SIZE和KNOWLEDGE_CHUNK_SIZE设置小点然后重启" + diff --git a/docs/locales/zh_CN/LC_MESSAGES/getting_started/getting_started.po b/docs/locales/zh_CN/LC_MESSAGES/getting_started/getting_started.po index 2f339c99f..86277c361 100644 --- a/docs/locales/zh_CN/LC_MESSAGES/getting_started/getting_started.po +++ b/docs/locales/zh_CN/LC_MESSAGES/getting_started/getting_started.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: DB-GPT 0.3.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-13 15:39+0800\n" +"POT-Creation-Date: 2023-07-20 10:53+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -19,29 +19,29 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" -#: ../../getting_started/getting_started.md:1 0b2e795438a3413c875fd80191e85bad +#: ../../getting_started/getting_started.md:1 7c12b6d7d5be4528be005cdadec568db msgid "Quickstart Guide" msgstr "使用指南" -#: ../../getting_started/getting_started.md:3 7b84c9776f8a4f9fb55afc640f37f45c +#: ../../getting_started/getting_started.md:3 ba312f5a132541be89dcc09012076784 msgid "" "This tutorial gives you a quick walkthrough about use DB-GPT with you " "environment and data." msgstr "本教程为您提供了关于如何使用DB-GPT的使用指南。" -#: ../../getting_started/getting_started.md:5 1b2880e1ef674bfdbf39ac9f330aeec9 +#: ../../getting_started/getting_started.md:5 8e56b3f0726740abaaafa57415b10bea msgid "Installation" msgstr "安装" -#: ../../getting_started/getting_started.md:7 d0a8c6654bfe4bbdb0eb40ceb2ea3388 +#: ../../getting_started/getting_started.md:7 3af8fe74db1043349e8f784c109b0417 msgid "To get started, install DB-GPT with the following steps." msgstr "请按照以下步骤安装DB-GPT" -#: ../../getting_started/getting_started.md:9 0a4e0b06c7fe49a9b2ca56ba2eb7b8ba +#: ../../getting_started/getting_started.md:9 0b33cf4604f846e781a63d857dde72b2 msgid "1. Hardware Requirements" msgstr "1. 硬件要求" -#: ../../getting_started/getting_started.md:10 2b42f6546ef141f696943ba2120584e5 +#: ../../getting_started/getting_started.md:10 f1d4abb176494bcb85cead7f3f8b719d msgid "" "As our project has the ability to achieve ChatGPT performance of over " "85%, there are certain hardware requirements. However, overall, the " @@ -49,62 +49,67 @@ msgid "" "specific hardware requirements for deployment are as follows:" msgstr "由于我们的项目有能力达到85%以上的ChatGPT性能,所以对硬件有一定的要求。但总体来说,我们在消费级的显卡上即可完成项目的部署使用,具体部署的硬件说明如下:" -#: ../../getting_started/getting_started.md 4df0c44eff8741f39ca0fdeff222f90c +#: ../../getting_started/getting_started.md e8516902f29d4ca2bb46f19b5e3deb81 msgid "GPU" msgstr "GPU" -#: ../../getting_started/getting_started.md b740a2991ce546cca43a426b760e9901 +#: ../../getting_started/getting_started.md a951ccca67364cf7ad5f0af2ec0ece8d msgid "VRAM Size" msgstr "显存大小" -#: ../../getting_started/getting_started.md 222b91ff82f14d12acaac5aa238758c8 +#: ../../getting_started/getting_started.md 01b7e055ee4543bdb619fbc14fea4d86 msgid "Performance" msgstr "显存大小" -#: ../../getting_started/getting_started.md c2d2ae6a4c964c4f90a9009160754782 +#: ../../getting_started/getting_started.md 0b20b224ff8a4e2c890a8b4ff43b6045 msgid "RTX 4090" msgstr "RTX 4090" -#: ../../getting_started/getting_started.md 529220ec6a294e449dc460ba2e8829a1 -#: 5e0c5900842e4d66b2064b13cc31a3ad +#: ../../getting_started/getting_started.md 17a343c4359d45c987f29de1c73760b4 +#: c9daaf0578434a7e812a8d3f3edde3f0 msgid "24 GB" msgstr "24 GB" -#: ../../getting_started/getting_started.md 84d29eef342f4d6282295c0e32487548 +#: ../../getting_started/getting_started.md 6a35be039a0a43eaaf7d1aa40aece6f7 msgid "Smooth conversation inference" msgstr "可以流畅的进行对话推理,无卡顿" -#: ../../getting_started/getting_started.md 5a10effe322e4afb8315415c04dc05a4 +#: ../../getting_started/getting_started.md a414f5ae7bdd450f8d171d1f075d6b66 msgid "RTX 3090" msgstr "RTX 3090" -#: ../../getting_started/getting_started.md 8924059525ab43329a8bb6659e034d5e +#: ../../getting_started/getting_started.md 109ed9bda6e541b88eb3400a44e15df7 msgid "Smooth conversation inference, better than V100" msgstr "可以流畅进行对话推理,有卡顿感,但好于V100" -#: ../../getting_started/getting_started.md 10f5bc076f524127a956d7a23f3666ba +#: ../../getting_started/getting_started.md 3f2a05dc610f461faa989f3c12750d00 msgid "V100" msgstr "V100" -#: ../../getting_started/getting_started.md 7d664e81984847c7accd08db93fad404 +#: ../../getting_started/getting_started.md 90e24795876546ecbb4796ca5d313514 msgid "16 GB" msgstr "16 GB" -#: ../../getting_started/getting_started.md 86765bc9ab01409fb7f5edf04f9b32a5 +#: ../../getting_started/getting_started.md 34061757e69e4691b7a5ff3c2953f1e3 msgid "Conversation inference possible, noticeable stutter" msgstr "可以进行对话推理,有明显卡顿" -#: ../../getting_started/getting_started.md:18 a0ac5591c0ac4ac6a385e562353daf22 +#: ../../getting_started/getting_started.md:18 61d59cb27daf43eb9aa2775fa6dac820 msgid "2. Install" msgstr "2. 安装" -#: ../../getting_started/getting_started.md:20 a64a9a5945074ece872509f8cb425da9 +#: ../../getting_started/getting_started.md:20 28a6b66c92464929bed8f04d5b841e8c +#, fuzzy msgid "" -"This project relies on a local MySQL database service, which you need to " -"install locally. We recommend using Docker for installation." +"1.This project relies on a local MySQL database service, which you need " +"to install locally. We recommend using Docker for installation." msgstr "本项目依赖一个本地的 MySQL 数据库服务,你需要本地安装,推荐直接使用 Docker 安装。" -#: ../../getting_started/getting_started.md:25 11e799a372ab4d0f8269cd7be98bebc6 +#: ../../getting_started/getting_started.md:24 7793b19e96b44ba481b527a877c81170 +msgid "prepare server sql script" +msgstr "准备db-gpt server sql脚本" + +#: ../../getting_started/getting_started.md:29 e3743699e95e45eab3e140df266bb3b5 msgid "" "We use [Chroma embedding database](https://github.com/chroma-core/chroma)" " as the default for our vector database, so there is no need for special " @@ -117,11 +122,11 @@ msgstr "" "向量数据库我们默认使用的是Chroma内存数据库,所以无需特殊安装,如果有需要连接其他的同学,可以按照我们的教程进行安装配置。整个DB-" "GPT的安装过程,我们使用的是miniconda3的虚拟环境。创建虚拟环境,并安装python依赖包" -#: ../../getting_started/getting_started.md:34 dcab69c83d4c48b9bb19c4336ee74a66 +#: ../../getting_started/getting_started.md:38 be9f388e255c4bc7837029ce8237ef0b msgid "Before use DB-GPT Knowledge Management" msgstr "使用知识库管理功能之前" -#: ../../getting_started/getting_started.md:40 735aeb6ae8aa4344b7ff679548279acc +#: ../../getting_started/getting_started.md:44 9175b34ed78c4310b048f53ac07b13cb msgid "" "Once the environment is installed, we have to create a new folder " "\"models\" in the DB-GPT project, and then we can put all the models " @@ -130,33 +135,33 @@ msgstr "" "环境安装完成后,我们必须在DB-" "GPT项目中创建一个新文件夹\"models\",然后我们可以把从huggingface下载的所有模型放到这个目录下。" -#: ../../getting_started/getting_started.md:43 7cbefe131b24488b9be39b3e8ed4f563 +#: ../../getting_started/getting_started.md:47 40715051bd844b0187265d425debfbee #, fuzzy msgid "Notice make sure you have install git-lfs" msgstr "确保你已经安装了git-lfs" -#: ../../getting_started/getting_started.md:53 54ec90ebb969475988451cd66e6ff412 +#: ../../getting_started/getting_started.md:57 7d7e7b1fe72b4e0c96eba721a8aa2113 msgid "" "The model files are large and will take a long time to download. During " "the download, let's configure the .env file, which needs to be copied and" " created from the .env.template" msgstr "模型文件很大,需要很长时间才能下载。在下载过程中,让我们配置.env文件,它需要从。env.template中复制和创建。" -#: ../../getting_started/getting_started.md:56 9bdadbee88af4683a4eb7b4f221fb4b8 +#: ../../getting_started/getting_started.md:60 6a25e5307bdb49a0afc69b9d17395a5a msgid "cp .env.template .env" msgstr "cp .env.template .env" -#: ../../getting_started/getting_started.md:59 6357c4a0154b4f08a079419ac408442d +#: ../../getting_started/getting_started.md:63 14567647544f4036beaae158b59833f6 msgid "" "You can configure basic parameters in the .env file, for example setting " "LLM_MODEL to the model to be used" msgstr "您可以在.env文件中配置基本参数,例如将LLM_MODEL设置为要使用的模型。" -#: ../../getting_started/getting_started.md:61 2f349f3ed3184b849ade2a15d5bf0c6c +#: ../../getting_started/getting_started.md:65 1b459d413a4d4b7e883d1ec17384ca30 msgid "3. Run" msgstr "3. 运行" -#: ../../getting_started/getting_started.md:62 fe408e4405bd48288e2e746386615925 +#: ../../getting_started/getting_started.md:66 ed15ee15450e4a028bf5aa05a9309697 msgid "" "You can refer to this document to obtain the Vicuna weights: " "[Vicuna](https://github.com/lm-sys/FastChat/blob/main/README.md#model-" @@ -165,7 +170,7 @@ msgstr "" "关于基础模型, 可以根据[Vicuna](https://github.com/lm-" "sys/FastChat/blob/main/README.md#model-weights) 合成教程进行合成。" -#: ../../getting_started/getting_started.md:64 c0acfe28007f459ca21174f968763fa3 +#: ../../getting_started/getting_started.md:68 de15a70920a94192a1f2017cbe3cdb55 msgid "" "If you have difficulty with this step, you can also directly use the " "model from [this link](https://huggingface.co/Tribbiani/vicuna-7b) as a " @@ -174,11 +179,7 @@ msgstr "" "如果此步有困难的同学,也可以直接使用[此链接](https://huggingface.co/Tribbiani/vicuna-" "7b)上的模型进行替代。" -#: ../../getting_started/getting_started.md:66 cc0f4c4e43f24b679f857a8d937528ee -msgid "prepare server sql script" -msgstr "准备db-gpt server sql脚本" - -#: ../../getting_started/getting_started.md:72 386948064fe646f2b9f51a262dd64bf2 +#: ../../getting_started/getting_started.md:70 763aaed45fd948fab761552a7e06061a msgid "" "set .env configuration set your vector store type, " "eg:VECTOR_STORE_TYPE=Chroma, now we support Chroma and Milvus(version > " @@ -187,17 +188,17 @@ msgstr "" "在.env文件设置向量数据库环境变量,eg:VECTOR_STORE_TYPE=Chroma, 目前我们支持了 Chroma and " "Milvus(version >2.1) " -#: ../../getting_started/getting_started.md:75 e6f6b06459944f2d8509703af365c664 +#: ../../getting_started/getting_started.md:73 a8f0dc3546c54a1098ff10157f980cef #, fuzzy -msgid "Run db-gpt server" +msgid "1.Run db-gpt server" msgstr "运行模型服务" -#: ../../getting_started/getting_started.md:80 489b595dc08a459ca2fd83b1389d3bbd +#: ../../getting_started/getting_started.md:78 1715948545154c10af585de8960bf853 #, fuzzy msgid "Open http://localhost:5000 with your browser to see the product." msgstr "打开浏览器访问http://localhost:5000" -#: ../../getting_started/getting_started.md:82 699afb01c9f243ab837cdc73252f624c +#: ../../getting_started/getting_started.md:80 8ea9964df477473e866fe844dcf4be54 msgid "" "If you want to access an external LLM service, you need to 1.set the " "variables LLM_MODEL=YOUR_MODEL_NAME " @@ -205,7 +206,7 @@ msgid "" "file. 2.execute dbgpt_server.py in light mode" msgstr "如果你想访问外部的大模型服务,1.需要在.env文件设置模型名和外部模型服务地址。2.使用light模式启动服务" -#: ../../getting_started/getting_started.md:89 7df7f3870e1140d3a17dc322a46d6476 +#: ../../getting_started/getting_started.md:87 4c409a0e2a994f428712ab94b475e9bd msgid "" "If you want to learn about dbgpt-webui, read https://github.com/csunny" "/DB-GPT/tree/new-page-framework/datacenter" diff --git a/docs/locales/zh_CN/LC_MESSAGES/index.po b/docs/locales/zh_CN/LC_MESSAGES/index.po index b212dc447..197bdf9c2 100644 --- a/docs/locales/zh_CN/LC_MESSAGES/index.po +++ b/docs/locales/zh_CN/LC_MESSAGES/index.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: DB-GPT 0.3.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-30 17:16+0800\n" +"POT-Creation-Date: 2023-07-20 10:53+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -19,31 +19,35 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" -#: ../../index.rst:34 ../../index.rst:45 00f3369727374a2da4b3e02c35c63363 +#: ../../index.rst:34 ../../index.rst:45 5bab1511780c442e9dd9e18519ad7ef3 msgid "Getting Started" msgstr "开始" -#: ../../index.rst:56 ../../index.rst:77 f3b85d983f0141b5872a46451d20252a +#: ../../index.rst:57 ../../index.rst:78 dbdeae6c9a344e7889d399a5dbbca872 msgid "Modules" msgstr "模块" -#: ../../index.rst:91 ../../index.rst:107 614a2220f0004aadab14402dab5c926d +#: ../../index.rst:92 ../../index.rst:108 43594aec45bf49609d7c7435c6472a9b msgid "Use Cases" msgstr "示例" -#: ../../index.rst:121 ../../index.rst:124 fae0a63e09f049a79ffbd8c1fd5b8f12 +#: ../../index.rst:122 ../../index.rst:125 013a0e5d909e4332ac49f6200924043e msgid "Reference" msgstr "参考" -#: ../../index.rst:148 ../../index.rst:154 d4113b3e7b2f4a1ba462e6a54062adff +#: ../../index.rst:134 ../../index.rst:137 42907cf1d1bb491bae2fcd7ede06e421 +msgid "FAQ" +msgstr "" + +#: ../../index.rst:161 ../../index.rst:167 64f4a587bc1f4ca9a456b97fac5d6def msgid "Resources" msgstr "资源" -#: ../../index.rst:7 6548011d66b14e71bf3f028b82bb58d6 +#: ../../index.rst:7 df1ad6da308f49debd4053e5899a4c8d msgid "Welcome to DB-GPT!" msgstr "欢迎来到DB-GPT中文文档" -#: ../../index.rst:8 da9fdd494e664e7e83448d4993c30f60 +#: ../../index.rst:8 cc5b388ea2924968b2769e4b4a159761 msgid "" "As large models are released and iterated upon, they are becoming " "increasingly intelligent. However, in the process of using large models, " @@ -61,7 +65,7 @@ msgstr "" ",我们启动了DB-" "GPT项目,为所有基于数据库的场景构建一个完整的私有大模型解决方案。该方案“”支持本地部署,既可应用于“独立私有环境”,又可根据业务模块进行“独立部署”和“隔离”,确保“大模型”的能力绝对私有、安全、可控。" -#: ../../index.rst:10 7650af0ff7bc4a93ad82c930c81cb7f5 +#: ../../index.rst:10 b831cd62a1ba46108dcf343792e8d67a msgid "" "**DB-GPT** is an experimental open-source project that uses localized GPT" " large models to interact with your data and environment. With this " @@ -71,102 +75,102 @@ msgstr "" "DB-GPT 是一个开源的以数据库为基础的GPT实验项目,使用本地化的GPT大模型与您的数据和环境进行交互,无数据泄露风险100% 私密,100%" " 安全。" -#: ../../index.rst:12 18249811cea0456096f06da05638d474 +#: ../../index.rst:12 3baac7e36a824395a57c246e05560c67 msgid "**Features**" msgstr "特性" -#: ../../index.rst:13 367c092acf1a49a0906f78433e6d9926 +#: ../../index.rst:13 6638568ff94e47f6a0b04a6775ca45d1 msgid "" "Currently, we have released multiple key features, which are listed below" " to demonstrate our current capabilities:" msgstr "目前我们已经发布了多种关键的特性,这里一一列举展示一下当前发布的能力。" -#: ../../index.rst:15 01334c212ef44244a306f8cfb584c48f +#: ../../index.rst:15 b49710ac36ed4a188280aeb3589f11fe msgid "SQL language capabilities - SQL generation - SQL diagnosis" msgstr "SQL语言能力 - SQL生成 - SQL诊断" -#: ../../index.rst:19 fe7396137ed84517bd99c93500f21bb6 +#: ../../index.rst:19 6bd495632b39477e8948677aeb4ab1ee msgid "" "Private domain Q&A and data processing - Database knowledge Q&A - Data " "processing" msgstr "私有领域问答与数据处理 - 数据库知识问答 - 数据处理" -#: ../../index.rst:23 c12af975ed2d451496a476d91b6bb4c5 +#: ../../index.rst:23 d1d3665a412246b9814139a938a29d1b msgid "" "Plugins - Support custom plugin execution tasks and natively support the " "Auto-GPT plugin, such as:" msgstr "插件模型 - 支持自定义插件执行任务,并原生支持Auto-GPT插件,例如:* SQL自动执行,获取查询结果 * 自动爬取学习知识" -#: ../../index.rst:26 97507eb30ab548fb9443b252e481d6be +#: ../../index.rst:26 41e37b63a8f44fc09a4da3574b25fcd3 msgid "" "Unified vector storage/indexing of knowledge base - Support for " "unstructured data such as PDF, Markdown, CSV, and WebURL" msgstr "知识库统一向量存储/索引 - 非结构化数据支持包括PDF、MarkDown、CSV、WebURL" -#: ../../index.rst:29 b2ff661c13d54cd79f27923163079706 +#: ../../index.rst:29 1acac8a6cbe54f7b8c31135189d726d6 msgid "" "Milti LLMs Support - Supports multiple large language models, currently " "supporting Vicuna (7b, 13b), ChatGLM-6b (int4, int8) - TODO: codegen2, " "codet5p" msgstr "多模型支持 - 支持多种大语言模型, 当前已支持Vicuna(7b,13b), ChatGLM-6b(int4, int8)" -#: ../../index.rst:35 15178a36df624fa9b4a5acdab5060752 +#: ../../index.rst:35 481edf63bcd348b4b3e14353dc5be952 msgid "" "How to get started using DB-GPT to interact with your data and " "environment." msgstr "开始使用DB-GPT与您的数据环境进行交互。" -#: ../../index.rst:36 8aa3a44286b244a4b9b92db285e5382b +#: ../../index.rst:36 6b26a04661f7445198b3797442d3f178 #, fuzzy msgid "`Quickstart Guide <./getting_started/getting_started.html>`_" msgstr "`使用指南 <./getting_started/getting_started.html>`_" -#: ../../index.rst:38 3f4ec91e5df44629aff6c94ffbaa37d7 +#: ../../index.rst:38 ff435ef9964d44508ad840de2950c1c8 msgid "Concepts and terminology" msgstr "相关概念" -#: ../../index.rst:40 d0126674e0e24aefbf51d610b2fcf5da +#: ../../index.rst:40 db9dfacbe93e4f858843c4d2a0e2dd25 #, fuzzy msgid "`Concepts and Terminology <./getting_started/concepts.html>`_" msgstr "`相关概念 <./getting_started/concepts.html>`_" -#: ../../index.rst:42 c6d67e4c1b8346c18f2b99c8f5795627 +#: ../../index.rst:42 50faf8302ba140ce84897daef2c90ca2 msgid "Coming soon..." msgstr "" -#: ../../index.rst:44 18d63d2d729246648743d1b7470029e0 +#: ../../index.rst:44 547bb007f90e43c096f25647cebefd7b msgid "`Tutorials <.getting_started/tutorials.html>`_" msgstr "`教程 <.getting_started/tutorials.html>`_" -#: ../../index.rst:58 5f93833b5e8f42b7b8728587f5054d8b +#: ../../index.rst:59 89bc50c752b84e3fb789ce5da1b654dc msgid "" "These modules are the core abstractions with which we can interact with " "data and environment smoothly." msgstr "这些模块是我们可以与数据和环境顺利地进行交互的核心组成。" -#: ../../index.rst:59 d68173b40df146818ddf68b309bbd27d +#: ../../index.rst:60 81f3860920964720958c62b3a6769f12 msgid "" "It's very important for DB-GPT, DB-GPT also provide standard, extendable " "interfaces." msgstr "DB-GPT还提供了标准的、可扩展的接口。" -#: ../../index.rst:61 00257e3907b346d5bd007f2cfe52bac9 +#: ../../index.rst:62 15faf914d05544df86359e50fdc70483 msgid "" "The docs for each module contain quickstart examples, how to guides, " "reference docs, and conceptual guides." msgstr "每个模块的文档都包含快速入门的例子、操作指南、参考文档和相关概念等内容。" -#: ../../index.rst:63 e04ba16ec943405080a26ec874e67823 +#: ../../index.rst:64 18a673690afa47df8e6dd3d065b2580f msgid "The modules are as follows" msgstr "组成模块如下:" -#: ../../index.rst:65 12d9ce3eda484316b3fcbbb2adb48b6e +#: ../../index.rst:66 d2c20ed1b6ba4aa697090453b0f775a1 msgid "" "`LLMs <./modules/llms.html>`_: Supported multi models management and " "integrations." msgstr "`LLMs <./modules/llms.html>`_:基于FastChat提供大模型的运行环境。支持多模型管理和集成。 " -#: ../../index.rst:67 9d7ce6fea46c41c0940198499336430e +#: ../../index.rst:68 d6c72e6fee3348e89422f9ff45804e3a msgid "" "`Prompts <./modules/prompts.html>`_: Prompt management, optimization, and" " serialization for multi database." @@ -174,59 +178,59 @@ msgstr "" "`Prompt自动生成与优化 <./modules/prompts.html>`_: 自动化生成高质量的Prompt " ",并进行优化,提高系统的响应效率" -#: ../../index.rst:69 0847158883424a98a02e58fd9c2d6744 +#: ../../index.rst:70 1756de47335d4eb7916a6c8b8b5ab70b msgid "`Plugins <./modules/plugins.html>`_: Plugins management, scheduler." msgstr "`Agent与插件: <./modules/plugins.html>`_:提供Agent和插件机制,使得用户可以自定义并增强系统的行为。" -#: ../../index.rst:71 6b2a8143adff4395b6a86a6d22078a87 +#: ../../index.rst:72 542efb88411f4cc192a08e7d28c84863 #, fuzzy msgid "" "`Knowledge <./modules/knowledge.html>`_: Knowledge management, embedding," " and search." msgstr "`知识库能力: <./modules/knowledge.html>`_: 支持私域知识库问答能力, " -#: ../../index.rst:73 70e831c592ca431791a614934061c148 +#: ../../index.rst:74 0204630cd5f14c68ada3bf11e0b0fbf5 msgid "" "`Connections <./modules/connections.html>`_: Supported multi databases " "connection. management connections and interact with this." msgstr "`连接模块 <./modules/connections.html>`_: 用于连接不同的模块和数据源,实现数据的流转和交互 " -#: ../../index.rst:75 1a5eaebe25174828b60c17475dae7928 +#: ../../index.rst:76 f9363a963be44d0ea01bb5d65b69d0f8 #, fuzzy msgid "`Vector <./modules/vector.html>`_: Supported multi vector database." msgstr "`LLMs <./modules/llms.html>`_:基于FastChat提供大模型的运行环境。支持多模型管理和集成。 " -#: ../../index.rst:93 8a2ea497d36449febd1560dbecd5ec44 +#: ../../index.rst:94 7223c3b95e9446bcae40a355e6b02324 msgid "Best Practices and built-in implementations for common DB-GPT use cases:" msgstr "DB-GPT用例的最佳实践和内置方法:" -#: ../../index.rst:95 fcc65a470c5643619688488cfe010f61 +#: ../../index.rst:96 c088f2ab9f2247ac9a8c9af31d0da7a6 msgid "" "`Sql generation and diagnosis " "<./use_cases/sql_generation_and_diagnosis.html>`_: SQL generation and " "diagnosis." msgstr "`Sql生成和诊断 <./use_cases/sql_generation_and_diagnosis.html>`_: Sql生成和诊断。" -#: ../../index.rst:97 26b983fbb9394f94bf31636175cc6f95 +#: ../../index.rst:98 23973b07c6ba42088a714b048d4b43c4 msgid "" "`knownledge Based QA <./use_cases/knownledge_based_qa.html>`_: A " "important scene for user to chat with database documents, codes, bugs and" " schemas." msgstr "`知识库问答 <./use_cases/knownledge_based_qa.html>`_: 用户与数据库文档、代码和bug聊天的重要场景\"" -#: ../../index.rst:99 aa4cfc95a3bf463682952bf40f38c99b +#: ../../index.rst:100 6a1d77bc56a14803b66ebc9f2b6c4b7b msgid "" "`Chatbots <./use_cases/chatbots.html>`_: Language model love to chat, use" " multi models to chat." msgstr "`聊天机器人 <./use_cases/chatbots.html>`_: 使用多模型进行对话" -#: ../../index.rst:101 e9b540aab91c44ae911bf96aa18c0f36 +#: ../../index.rst:102 621774a68cba46daa7112f865e6e3af9 msgid "" "`Querying Database Data <./use_cases/query_database_data.html>`_: Query " "and Analysis data from databases and give charts." msgstr "`查询数据库数据 <./use_cases/query_database_data.html>`_:从数据库中查询和分析数据并给出图表。" -#: ../../index.rst:103 88a99b638b4a42abae39fe9de4f16927 +#: ../../index.rst:104 9f379fbe8aac47f4a1a53d84ab2a2f51 msgid "" "`Interacting with apis <./use_cases/interacting_with_api.html>`_: " "Interact with apis, such as create a table, deploy a database cluster, " @@ -235,33 +239,37 @@ msgstr "" "`API交互 <./use_cases/interacting_with_api.html>`_: " "与API交互,例如创建表、部署数据库集群、创建数据库等。" -#: ../../index.rst:105 53cb38b16ed04420934233aec02fd44b +#: ../../index.rst:106 3dbb717e1b024a20bb6049facb616b1b msgid "" "`Tool use with plugins <./use_cases/tool_use_with_plugin>`_: According to" " Plugin use tools to manage databases autonomoly." msgstr "`插件工具 <./use_cases/tool_use_with_plugin>`_: 根据插件使用工具自主管理数据库。" -#: ../../index.rst:122 fbc2fe1374ac4909b1c66ea11bbfafec +#: ../../index.rst:123 4acedc39ccf34e79b805189a11285a3a msgid "" "Full documentation on all methods, classes, installation methods, and " "integration setups for DB-GPT." msgstr "关于DB-GPT的所有方法、类、安装方法和集成设置的完整文档。" -#: ../../index.rst:133 c45530a6c3a34a42a0fd8bca6efe3b07 +#: ../../index.rst:135 622112f3cce34461ba7e0d52fa81d438 +msgid "DB-GPT FAQ." +msgstr "" + +#: ../../index.rst:146 a989256fd69f4bbfae73191b505c59fa msgid "Ecosystem" msgstr "环境系统" -#: ../../index.rst:135 e9f68f4abbdc4832889d0e343ce43d27 +#: ../../index.rst:148 1b5c410dd94842f2801f08540dd57647 msgid "Guides for how other companies/products can be used with DB-GPT" msgstr "其他公司/产品如何与DB-GPT一起使用的方法指南" -#: ../../index.rst:150 c33686daaa7c44d28c96dc22c0d9480c +#: ../../index.rst:163 8368b4c62ebe41ad91551e241dbcc4df msgid "" "Additional resources we think may be useful as you develop your " "application!" msgstr "“我们认为在您开发应用程序时可能有用的其他资源!”" -#: ../../index.rst:152 f6d108be181f47af80c4b8a5931ff172 +#: ../../index.rst:165 2a4cd897b20c4683979b44fb9d7470e6 msgid "" "`Discord `_: if your have some " "problem or ideas, you can talk from discord." From ec8a96d5314a9d314cc52dd2b45e947c0e3e1d83 Mon Sep 17 00:00:00 2001 From: aries_ckt <916701291@qq.com> Date: Thu, 20 Jul 2023 14:09:15 +0800 Subject: [PATCH 5/6] doc:FAQ assets --- assets/faq/chatdataerror.png | Bin 0 -> 46171 bytes assets/faq/illegal_character.png | Bin 0 -> 16267 bytes assets/faq/proxyerror.png | Bin 0 -> 151426 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/faq/chatdataerror.png create mode 100644 assets/faq/illegal_character.png create mode 100644 assets/faq/proxyerror.png diff --git a/assets/faq/chatdataerror.png b/assets/faq/chatdataerror.png new file mode 100644 index 0000000000000000000000000000000000000000..32987abbf68830dc398f0a694bf9dff891cbc045 GIT binary patch literal 46171 zcmdqI1yfvI(>9uf1c%`65Zv9}-GWOP+}$m>>!2aHOK{f!gS$I}ySvZFbLzeC_xbAl zfm5ey*REC7Q?=Sw&$X`Z9igl!g#?cW|KY<2BpGRO)ej$_fbZ)hSm^gR@+aSl4KC%(q?(Aj%&W#%dnSyIsad4FtTJ=Xav2zy$_C#M0|YEL`BKsQ#D~T6`88OtE(HE zn4C!KWx*J#96dv{f4BSH+|CX_1phHV?f#d!qI{&1rsmhqo5HUCFu@ztmnq`cFK>t0 zopA>T9u^I}vvV99!0Z=-&a33EzR5}0GjNyxa9kLvpfe%np!Kf=h*D#6j;X9O1$+l_ z)k@zwEyZ`l5y&~X4XSPKQ`8cCR39y5*#?<=?b%~{Y{rP?pRly2@~Z(sCmJ8`Z9HyQ zz>=rU$o8upVQubbTW6LHW$1uX2ywj;QswEq-4-NAoM2VbLQ;N*jM=AYitaB z!^_fA{$x*fzTCCNr!wZ@tQ14+e@v{x*7~trCM><>i$ye+R=xAX+X4jFmi$^8(GxfO z?F9S6o=LxZq3g->b87T(HE5ub^{4++zq`tG-PYr-i^o6lVm|*i5uAoWT(dcj-FcDv z@UBqgg#TN4T1JKtn*CN?M+dn%#mqEoVcN@~lA(mLab5e~dA88jw$^d)zTbBKgMk-u z^mS%)`cjEUdwCB6_NUwyB!aTg3ol{TyFP|k)0dmVaunxW1)0?Nsg}y-;t3N|{x>O; znJM?n%dh_xsGavfiIVsosrd(ohg)!GGFq_fJo@cyZZdfKIyvDH60S*YosJm3;jywh zWeE>{ytiLMx!StFWCA~a^!qhi~h7&a9DrK;aTLzNT zbS5=pM>p_8bzCwXl%J5)Fe9quhX}mv3U!1MJPCc{L9m@Uq6&xkr@)N14X}|@_Bm

}e9|XG4d>X%3pb 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 CnFHql literal 0 HcmV?d00001 diff --git a/assets/faq/illegal_character.png b/assets/faq/illegal_character.png new file mode 100644 index 0000000000000000000000000000000000000000..95f74f0c87e52dd7fc188882a260e95da3a107c2 GIT binary patch literal 16267 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�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 literal 0 HcmV?d00001 diff --git a/assets/faq/proxyerror.png b/assets/faq/proxyerror.png new file mode 100644 index 0000000000000000000000000000000000000000..7c82a4881632ac024b864c80a97be76a18824876 GIT binary patch literal 151426 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 #x0wl4b~}YZS`lQ& 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

g0&sx5!@(K?2OI36Dx+S49JlpFgLu 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 z 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 W(cGmdueW*w`^ZQsN>+&*2L6A?+T`y5 literal 0 HcmV?d00001 From 168c754a3fff536bde166fb3891723cb9f686723 Mon Sep 17 00:00:00 2001 From: FangYin Cheng Date: Thu, 20 Jul 2023 21:43:20 +0800 Subject: [PATCH 6/6] feat: Support llama-2 model --- docs/modules/llms.md | 2 +- pilot/configs/model_config.py | 3 + pilot/model/adapter.py | 14 ++ pilot/model/conversation.py | 308 +++++++++++++++++++++++++++++++ pilot/model/inference.py | 242 ++++++++++++++++++++++++ pilot/model/llm_out/proxy_llm.py | 8 +- pilot/model/llm_utils.py | 15 +- pilot/out_parser/base.py | 9 +- pilot/scene/base_chat.py | 3 +- pilot/scene/base_message.py | 8 + pilot/server/chat_adapter.py | 64 ++++++- pilot/server/llmserver.py | 8 +- 12 files changed, 671 insertions(+), 13 deletions(-) create mode 100644 pilot/model/conversation.py create mode 100644 pilot/model/inference.py diff --git a/docs/modules/llms.md b/docs/modules/llms.md index bec64313e..a4baf1807 100644 --- a/docs/modules/llms.md +++ b/docs/modules/llms.md @@ -11,7 +11,7 @@ cp .env.template .env LLM_MODEL=vicuna-13b MODEL_SERVER=http://127.0.0.1:8000 ``` -now we support models vicuna-13b, vicuna-7b, chatglm-6b, flan-t5-base, guanaco-33b-merged, falcon-40b, gorilla-7b. +now we support models vicuna-13b, vicuna-7b, chatglm-6b, flan-t5-base, guanaco-33b-merged, falcon-40b, gorilla-7b, llama-2-7b, llama-2-13b. if you want use other model, such as chatglm-6b, you just need update .env config file. ``` diff --git a/pilot/configs/model_config.py b/pilot/configs/model_config.py index 22354b4bf..aea5c6731 100644 --- a/pilot/configs/model_config.py +++ b/pilot/configs/model_config.py @@ -47,6 +47,9 @@ LLM_MODEL_CONFIG = { "gorilla-7b": os.path.join(MODEL_PATH, "gorilla-7b"), "gptj-6b": os.path.join(MODEL_PATH, "ggml-gpt4all-j-v1.3-groovy.bin"), "proxyllm": "proxyllm", + "llama-2-7b": os.path.join(MODEL_PATH, "Llama-2-7b-chat-hf"), + "llama-2-13b": os.path.join(MODEL_PATH, "Llama-2-13b-chat-hf"), + "llama-2-70b": os.path.join(MODEL_PATH, "Llama-2-70b-chat-hf"), } # Load model config diff --git a/pilot/model/adapter.py b/pilot/model/adapter.py index 2d420c02f..cea73c602 100644 --- a/pilot/model/adapter.py +++ b/pilot/model/adapter.py @@ -263,12 +263,26 @@ class ProxyllmAdapter(BaseLLMAdaper): return "proxyllm", None +class Llama2Adapter(BaseLLMAdaper): + """The model adapter for llama-2""" + + def match(self, model_path: str): + return "llama-2" in model_path.lower() + + def loader(self, model_path: str, from_pretrained_kwargs: dict): + model, tokenizer = super().loader(model_path, from_pretrained_kwargs) + model.config.eos_token_id = tokenizer.eos_token_id + model.config.pad_token_id = tokenizer.pad_token_id + return model, tokenizer + + register_llm_model_adapters(VicunaLLMAdapater) register_llm_model_adapters(ChatGLMAdapater) register_llm_model_adapters(GuanacoAdapter) register_llm_model_adapters(FalconAdapater) register_llm_model_adapters(GorillaAdapter) register_llm_model_adapters(GPT4AllAdapter) +register_llm_model_adapters(Llama2Adapter) # TODO Default support vicuna, other model need to tests and Evaluate # just for test_py, remove this later diff --git a/pilot/model/conversation.py b/pilot/model/conversation.py new file mode 100644 index 000000000..5443992df --- /dev/null +++ b/pilot/model/conversation.py @@ -0,0 +1,308 @@ +""" +Fork from fastchat: https://github.com/lm-sys/FastChat/blob/main/fastchat/conversation.py + +Conversation prompt templates. +""" + +import dataclasses +from enum import auto, IntEnum +from typing import List, Any, Dict, Callable + + +class SeparatorStyle(IntEnum): + """Separator styles.""" + + ADD_COLON_SINGLE = auto() + ADD_COLON_TWO = auto() + ADD_COLON_SPACE_SINGLE = auto() + NO_COLON_SINGLE = auto() + NO_COLON_TWO = auto() + ADD_NEW_LINE_SINGLE = auto() + LLAMA2 = auto() + CHATGLM = auto() + CHATML = auto() + CHATINTERN = auto() + DOLLY = auto() + RWKV = auto() + PHOENIX = auto() + ROBIN = auto() + + +@dataclasses.dataclass +class Conversation: + """A class that manages prompt templates and keeps all conversation history.""" + + # The name of this template + name: str + # The system prompt + system: str + # Two roles + roles: List[str] + # All messages. Each item is (role, message). + messages: List[List[str]] + # The number of few shot examples + offset: int + # Separators + sep_style: SeparatorStyle + sep: str + sep2: str = None + # Stop criteria (the default one is EOS token) + stop_str: str = None + # Stops generation if meeting any token in this list + stop_token_ids: List[int] = None + + # format system message + system_formatter: Callable = None + + def get_prompt(self) -> str: + """Get the prompt for generation.""" + if self.sep_style == SeparatorStyle.ADD_COLON_SINGLE: + ret = self.system + self.sep + for role, message in self.messages: + if message: + ret += role + ": " + message + self.sep + else: + ret += role + ":" + return ret + elif self.sep_style == SeparatorStyle.ADD_COLON_TWO: + seps = [self.sep, self.sep2] + ret = self.system + seps[0] + for i, (role, message) in enumerate(self.messages): + if message: + ret += role + ": " + message + seps[i % 2] + else: + ret += role + ":" + return ret + elif self.sep_style == SeparatorStyle.ADD_COLON_SPACE_SINGLE: + ret = self.system + self.sep + for role, message in self.messages: + if message: + ret += role + ": " + message + self.sep + else: + ret += role + ": " # must be end with a space + return ret + elif self.sep_style == SeparatorStyle.ADD_NEW_LINE_SINGLE: + ret = "" if self.system == "" else self.system + self.sep + for role, message in self.messages: + if message: + ret += role + "\n" + message + self.sep + else: + ret += role + "\n" + return ret + elif self.sep_style == SeparatorStyle.NO_COLON_SINGLE: + ret = self.system + for role, message in self.messages: + if message: + ret += role + message + self.sep + else: + ret += role + return ret + elif self.sep_style == SeparatorStyle.NO_COLON_TWO: + seps = [self.sep, self.sep2] + ret = self.system + for i, (role, message) in enumerate(self.messages): + if message: + ret += role + message + seps[i % 2] + else: + ret += role + return ret + elif self.sep_style == SeparatorStyle.RWKV: + ret = self.system + for i, (role, message) in enumerate(self.messages): + if message: + ret += ( + role + + ": " + + message.replace("\r\n", "\n").replace("\n\n", "\n") + ) + ret += "\n\n" + else: + ret += role + ":" + return ret + elif self.sep_style == SeparatorStyle.LLAMA2: + seps = [self.sep, self.sep2] + ret = "" + for i, (role, message) in enumerate(self.messages): + if message: + if i == 0: + ret += self.system + message + else: + ret += role + " " + message + seps[i % 2] + else: + ret += role + return ret + elif self.sep_style == SeparatorStyle.CHATGLM: + # source: https://huggingface.co/THUDM/chatglm-6b/blob/1d240ba371910e9282298d4592532d7f0f3e9f3e/modeling_chatglm.py#L1302-L1308 + # source2: https://huggingface.co/THUDM/chatglm2-6b/blob/e186c891cf64310ac66ef10a87e6635fa6c2a579/modeling_chatglm.py#L926 + round_add_n = 1 if self.name == "chatglm2" else 0 + if self.system: + ret = self.system + self.sep + else: + ret = "" + + for i, (role, message) in enumerate(self.messages): + if i % 2 == 0: + ret += f"[Round {i//2 + round_add_n}]{self.sep}" + + if message: + ret += f"{role}:{message}{self.sep}" + else: + ret += f"{role}:" + return ret + elif self.sep_style == SeparatorStyle.CHATML: + ret = "" if self.system == "" else self.system + self.sep + "\n" + for role, message in self.messages: + if message: + ret += role + "\n" + message + self.sep + "\n" + else: + ret += role + "\n" + return ret + elif self.sep_style == SeparatorStyle.CHATINTERN: + # source: https://huggingface.co/internlm/internlm-chat-7b-8k/blob/bd546fa984b4b0b86958f56bf37f94aa75ab8831/modeling_internlm.py#L771 + seps = [self.sep, self.sep2] + ret = self.system + for i, (role, message) in enumerate(self.messages): + if i % 2 == 0: + ret += "" + if message: + ret += role + ":" + message + seps[i % 2] + "\n" + else: + ret += role + ":" + return ret + elif self.sep_style == SeparatorStyle.DOLLY: + seps = [self.sep, self.sep2] + ret = self.system + for i, (role, message) in enumerate(self.messages): + if message: + ret += role + ":\n" + message + seps[i % 2] + if i % 2 == 1: + ret += "\n\n" + else: + ret += role + ":\n" + return ret + elif self.sep_style == SeparatorStyle.PHOENIX: + ret = self.system + for role, message in self.messages: + if message: + ret += role + ": " + "" + message + "" + else: + ret += role + ": " + "" + return ret + elif self.sep_style == SeparatorStyle.ROBIN: + ret = self.system + self.sep + for role, message in self.messages: + if message: + ret += role + ":\n" + message + self.sep + else: + ret += role + ":\n" + return ret + else: + raise ValueError(f"Invalid style: {self.sep_style}") + + def append_message(self, role: str, message: str): + """Append a new message.""" + self.messages.append([role, message]) + + def update_last_message(self, message: str): + """Update the last output. + + The last message is typically set to be None when constructing the prompt, + so we need to update it in-place after getting the response from a model. + """ + self.messages[-1][1] = message + + def update_system_message(self, system_message: str): + """Update system message""" + if self.system_formatter: + self.system = self.system_formatter(system_message) + else: + self.system = system_message + + def to_gradio_chatbot(self): + """Convert the conversation to gradio chatbot format.""" + ret = [] + for i, (role, msg) in enumerate(self.messages[self.offset :]): + if i % 2 == 0: + ret.append([msg, None]) + else: + ret[-1][-1] = msg + return ret + + def to_openai_api_messages(self): + """Convert the conversation to OpenAI chat completion format.""" + ret = [{"role": "system", "content": self.system}] + + for i, (_, msg) in enumerate(self.messages[self.offset :]): + if i % 2 == 0: + ret.append({"role": "user", "content": msg}) + else: + if msg is not None: + ret.append({"role": "assistant", "content": msg}) + return ret + + def copy(self): + return Conversation( + name=self.name, + system=self.system, + roles=self.roles, + messages=[[x, y] for x, y in self.messages], + offset=self.offset, + sep_style=self.sep_style, + sep=self.sep, + sep2=self.sep2, + stop_str=self.stop_str, + stop_token_ids=self.stop_token_ids, + system_formatter=self.system_formatter, + ) + + def dict(self): + return { + "template_name": self.name, + "system": self.system, + "roles": self.roles, + "messages": self.messages, + "offset": self.offset, + } + + +# A global registry for all conversation templates +conv_templates: Dict[str, Conversation] = {} + + +def register_conv_template(template: Conversation, override: bool = False): + """Register a new conversation template.""" + if not override: + assert ( + template.name not in conv_templates + ), f"{template.name} has been registered." + + conv_templates[template.name] = template + + +def get_conv_template(name: str) -> Conversation: + """Get a conversation template.""" + return conv_templates[name].copy() + + +# llama2 template +# reference: https://github.com/facebookresearch/llama/blob/cfc3fc8c1968d390eb830e65c63865e980873a06/llama/generation.py#L212 +register_conv_template( + Conversation( + name="llama-2", + system="[INST] <>\nYou are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. " + "Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. " + "Please ensure that your responses are socially unbiased and positive in nature.\n\n" + "If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. " + "If you don't know the answer to a question, please don't share false information.\n<>\n\n", + roles=("[INST]", "[/INST]"), + messages=(), + offset=0, + sep_style=SeparatorStyle.LLAMA2, + sep=" ", + sep2=" ", + stop_token_ids=[2], + system_formatter=lambda msg: f"[INST] <>\n{msg}\n<>\n\n", + ) +) + +# TODO Support other model conversation template diff --git a/pilot/model/inference.py b/pilot/model/inference.py new file mode 100644 index 000000000..cbbd04339 --- /dev/null +++ b/pilot/model/inference.py @@ -0,0 +1,242 @@ +""" +Fork from fastchat: https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/inference.py + +""" +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import gc +from typing import Iterable, Dict + +import torch + +import torch + +from transformers.generation.logits_process import ( + LogitsProcessorList, + RepetitionPenaltyLogitsProcessor, + TemperatureLogitsWarper, + TopKLogitsWarper, + TopPLogitsWarper, +) + +from pilot.model.llm_utils import is_sentence_complete, is_partial_stop + + +def prepare_logits_processor( + temperature: float, repetition_penalty: float, top_p: float, top_k: int +) -> LogitsProcessorList: + processor_list = LogitsProcessorList() + # TemperatureLogitsWarper doesn't accept 0.0, 1.0 makes it a no-op so we skip two cases. + if temperature >= 1e-5 and temperature != 1.0: + processor_list.append(TemperatureLogitsWarper(temperature)) + if repetition_penalty > 1.0: + processor_list.append(RepetitionPenaltyLogitsProcessor(repetition_penalty)) + if 1e-8 <= top_p < 1.0: + processor_list.append(TopPLogitsWarper(top_p)) + if top_k > 0: + processor_list.append(TopKLogitsWarper(top_k)) + return processor_list + + +@torch.inference_mode() +def generate_stream( + model, + tokenizer, + params: Dict, + device: str, + context_len: int, + stream_interval: int = 2, + judge_sent_end: bool = False, +): + # Read parameters + prompt = params["prompt"] + print(f"Prompt of model: \n{prompt}") + len_prompt = len(prompt) + temperature = float(params.get("temperature", 1.0)) + repetition_penalty = float(params.get("repetition_penalty", 1.0)) + top_p = float(params.get("top_p", 1.0)) + top_k = int(params.get("top_k", -1)) # -1 means disable + max_new_tokens = int(params.get("max_new_tokens", 2048)) + echo = bool(params.get("echo", True)) + stop_str = params.get("stop", None) + stop_token_ids = params.get("stop_token_ids", None) or [] + stop_token_ids.append(tokenizer.eos_token_id) + + logits_processor = prepare_logits_processor( + temperature, repetition_penalty, top_p, top_k + ) + input_ids = tokenizer(prompt).input_ids + + if model.config.is_encoder_decoder: + max_src_len = context_len + else: # truncate + max_src_len = context_len - max_new_tokens - 1 + + input_ids = input_ids[-max_src_len:] + output_ids = list(input_ids) + input_echo_len = len(input_ids) + + if model.config.is_encoder_decoder: + encoder_output = model.encoder( + input_ids=torch.as_tensor([input_ids], device=device) + )[0] + start_ids = torch.as_tensor( + [[model.generation_config.decoder_start_token_id]], + dtype=torch.int64, + device=device, + ) + + past_key_values = out = None + sent_interrupt = False + for i in range(max_new_tokens): + if i == 0: # prefill + if model.config.is_encoder_decoder: + out = model.decoder( + input_ids=start_ids, + encoder_hidden_states=encoder_output, + use_cache=True, + ) + logits = model.lm_head(out[0]) + else: + out = model(torch.as_tensor([input_ids], device=device), use_cache=True) + logits = out.logits + past_key_values = out.past_key_values + else: # decoding + if model.config.is_encoder_decoder: + out = model.decoder( + input_ids=torch.as_tensor( + [[token] if not sent_interrupt else output_ids], device=device + ), + encoder_hidden_states=encoder_output, + use_cache=True, + past_key_values=past_key_values if not sent_interrupt else None, + ) + sent_interrupt = False + + logits = model.lm_head(out[0]) + else: + out = model( + input_ids=torch.as_tensor( + [[token] if not sent_interrupt else output_ids], device=device + ), + use_cache=True, + past_key_values=past_key_values if not sent_interrupt else None, + ) + sent_interrupt = False + logits = out.logits + past_key_values = out.past_key_values + + if logits_processor: + if repetition_penalty > 1.0: + tmp_output_ids = torch.as_tensor([output_ids], device=logits.device) + else: + tmp_output_ids = None + last_token_logits = logits_processor(tmp_output_ids, logits[:, -1, :])[0] + else: + last_token_logits = logits[0, -1, :] + + if device == "mps": + # Switch to CPU by avoiding some bugs in mps backend. + last_token_logits = last_token_logits.float().to("cpu") + + if temperature < 1e-5 or top_p < 1e-8: # greedy + _, indices = torch.topk(last_token_logits, 2) + tokens = [int(index) for index in indices.tolist()] + else: + probs = torch.softmax(last_token_logits, dim=-1) + indices = torch.multinomial(probs, num_samples=2) + tokens = [int(token) for token in indices.tolist()] + token = tokens[0] + output_ids.append(token) + + if token in stop_token_ids: + stopped = True + else: + stopped = False + + # Yield the output tokens + if i % stream_interval == 0 or i == max_new_tokens - 1 or stopped: + if echo: + tmp_output_ids = output_ids + rfind_start = len_prompt + else: + tmp_output_ids = output_ids[input_echo_len:] + rfind_start = 0 + + output = tokenizer.decode( + tmp_output_ids, + skip_special_tokens=True, + spaces_between_special_tokens=False, + clean_up_tokenization_spaces=True, + ) + # TODO: For the issue of incomplete sentences interrupting output, apply a patch and others can also modify it to a more elegant way + if judge_sent_end and stopped and not is_sentence_complete(output): + if len(tokens) > 1: + token = tokens[1] + output_ids[-1] = token + else: + output_ids.pop() + stopped = False + sent_interrupt = True + + partially_stopped = False + if stop_str: + if isinstance(stop_str, str): + pos = output.rfind(stop_str, rfind_start) + if pos != -1: + output = output[:pos] + stopped = True + else: + partially_stopped = is_partial_stop(output, stop_str) + elif isinstance(stop_str, Iterable): + for each_stop in stop_str: + pos = output.rfind(each_stop, rfind_start) + if pos != -1: + output = output[:pos] + stopped = True + break + else: + partially_stopped = is_partial_stop(output, each_stop) + if partially_stopped: + break + else: + raise ValueError("Invalid stop field type.") + + # Prevent yielding partial stop sequence + if not partially_stopped: + yield output + # yield { + # "text": output, + # "usage": { + # "prompt_tokens": input_echo_len, + # "completion_tokens": i, + # "total_tokens": input_echo_len + i, + # }, + # "finish_reason": None, + # } + + if stopped: + break + + # Finish stream event, which contains finish reason + if i == max_new_tokens - 1: + finish_reason = "length" + elif stopped: + finish_reason = "stop" + else: + finish_reason = None + yield output + # yield { + # "text": output, + # "usage": { + # "prompt_tokens": input_echo_len, + # "completion_tokens": i, + # "total_tokens": input_echo_len + i, + # }, + # "finish_reason": finish_reason, + # } + + # Clean + del past_key_values, out + gc.collect() + torch.cuda.empty_cache() diff --git a/pilot/model/llm_out/proxy_llm.py b/pilot/model/llm_out/proxy_llm.py index c353426d2..79cb28adf 100644 --- a/pilot/model/llm_out/proxy_llm.py +++ b/pilot/model/llm_out/proxy_llm.py @@ -6,7 +6,7 @@ import requests from typing import List from pilot.configs.config import Config from pilot.conversation import ROLE_ASSISTANT, ROLE_USER -from pilot.scene.base_message import ModelMessage +from pilot.scene.base_message import ModelMessage, ModelMessageRoleType CFG = Config() @@ -25,11 +25,11 @@ def proxyllm_generate_stream(model, tokenizer, params, device, context_len=2048) messages: List[ModelMessage] = params["messages"] # Add history conversation for message in messages: - if message.role == "human": + if message.role == ModelMessageRoleType.HUMAN: history.append({"role": "user", "content": message.content}) - elif message.role == "system": + elif message.role == ModelMessageRoleType.SYSTEM: history.append({"role": "system", "content": message.content}) - elif message.role == "ai": + elif message.role == ModelMessageRoleType.AI: history.append({"role": "assistant", "content": message.content}) else: pass diff --git a/pilot/model/llm_utils.py b/pilot/model/llm_utils.py index 0dfd8d2b5..ec50a7d34 100644 --- a/pilot/model/llm_utils.py +++ b/pilot/model/llm_utils.py @@ -10,7 +10,6 @@ from typing import List, Optional from pilot.configs.config import Config from pilot.model.base import Message -from pilot.server.llmserver import generate_output def create_chat_completion( @@ -115,3 +114,17 @@ class Iteratorize: def __exit__(self, exc_type, exc_val, exc_tb): self.stop_now = True + + +def is_sentence_complete(output: str): + """Check whether the output is a complete sentence.""" + end_symbols = (".", "?", "!", "...", "。", "?", "!", "…", '"', "'", "”") + return output.endswith(end_symbols) + + +def is_partial_stop(output: str, stop_str: str): + """Check whether the output contains a partial stop str.""" + for i in range(0, min(len(output), len(stop_str))): + if stop_str.startswith(output[-i:]): + return True + return False diff --git a/pilot/out_parser/base.py b/pilot/out_parser/base.py index 058de71ab..000d92709 100644 --- a/pilot/out_parser/base.py +++ b/pilot/out_parser/base.py @@ -53,8 +53,15 @@ class BaseOutputParser(ABC): """ TODO Multi mode output handler, rewrite this for multi model, use adapter mode. """ + model_context = data.get("model_context") + if model_context and "prompt_echo_len_char" in model_context: + prompt_echo_len_char = int(model_context.get("prompt_echo_len_char", -1)) + if prompt_echo_len_char != -1: + skip_echo_len = prompt_echo_len_char + if data.get("error_code", 0) == 0: - if "vicuna" in CFG.LLM_MODEL: + if "vicuna" in CFG.LLM_MODEL or "llama-2" in CFG.LLM_MODEL: + # TODO Judging from model_context # output = data["text"][skip_echo_len + 11:].strip() output = data["text"][skip_echo_len:].strip() elif "guanaco" in CFG.LLM_MODEL: diff --git a/pilot/scene/base_chat.py b/pilot/scene/base_chat.py index bd660a0cd..e6b9bb9f4 100644 --- a/pilot/scene/base_chat.py +++ b/pilot/scene/base_chat.py @@ -39,6 +39,7 @@ from pilot.scene.base_message import ( AIMessage, ViewMessage, ModelMessage, + ModelMessageRoleType, ) from pilot.configs.config import Config @@ -258,7 +259,7 @@ class BaseChat(ABC): if self.prompt_template.template_define: messages.append( ModelMessage( - role="system", + role=ModelMessageRoleType.SYSTEM, content=self.prompt_template.template_define, ) ) diff --git a/pilot/scene/base_message.py b/pilot/scene/base_message.py index 20d513c39..09ea9695d 100644 --- a/pilot/scene/base_message.py +++ b/pilot/scene/base_message.py @@ -89,6 +89,14 @@ class ModelMessage(BaseModel): content: str +class ModelMessageRoleType: + """ "Type of ModelMessage role""" + + SYSTEM = "system" + HUMAN = "human" + AI = "ai" + + class Generation(BaseModel): """Output of a single generation.""" diff --git a/pilot/server/chat_adapter.py b/pilot/server/chat_adapter.py index ebab2d2d4..1c0d73bac 100644 --- a/pilot/server/chat_adapter.py +++ b/pilot/server/chat_adapter.py @@ -2,8 +2,10 @@ # -*- coding: utf-8 -*- from functools import cache -from typing import List +from typing import List, Dict, Tuple from pilot.model.llm_out.vicuna_base_llm import generate_stream +from pilot.model.conversation import Conversation, get_conv_template +from pilot.scene.base_message import ModelMessage, ModelMessageRoleType class BaseChatAdpter: @@ -17,6 +19,52 @@ class BaseChatAdpter: """Return the generate stream handler func""" pass + def get_conv_template(self) -> Conversation: + return None + + def model_adaptation(self, params: Dict) -> Tuple[Dict, Dict]: + """Params adaptation""" + conv = self.get_conv_template() + messages = params.get("messages") + # Some model scontext to dbgpt server + model_context = {"prompt_echo_len_char": -1} + if not conv or not messages: + # Nothing to do + return params, model_context + conv = conv.copy() + system_messages = [] + for message in messages: + role, content = None, None + if isinstance(message, ModelMessage): + role = message.role + content = message.content + elif isinstance(message, dict): + role = message["role"] + content = message["content"] + else: + raise ValueError(f"Invalid message type: {message}") + + if role == ModelMessageRoleType.SYSTEM: + # Support for multiple system messages + system_messages.append(content) + elif role == ModelMessageRoleType.HUMAN: + conv.append_message(conv.roles[0], content) + elif role == ModelMessageRoleType.AI: + conv.append_message(conv.roles[1], content) + else: + raise ValueError(f"Unknown role: {role}") + if system_messages: + conv.update_system_message("".join(system_messages)) + # Add a blank message for the assistant. + conv.append_message(conv.roles[1], None) + new_prompt = conv.get_prompt() + # Overwrite the original prompt + # TODO remote bos token and eos token from tokenizer_config.json of model + prompt_echo_len_char = len(new_prompt.replace("", "").replace("", "")) + model_context["prompt_echo_len_char"] = prompt_echo_len_char + params["prompt"] = new_prompt + return params, model_context + llm_model_chat_adapters: List[BaseChatAdpter] = [] @@ -134,12 +182,26 @@ class GPT4AllChatAdapter(BaseChatAdpter): return gpt4all_generate_stream +class Llama2ChatAdapter(BaseChatAdpter): + def match(self, model_path: str): + return "llama-2" in model_path.lower() + + def get_conv_template(self) -> Conversation: + return get_conv_template("llama-2") + + def get_generate_stream_func(self): + from pilot.model.inference import generate_stream + + return generate_stream + + register_llm_model_chat_adapter(VicunaChatAdapter) register_llm_model_chat_adapter(ChatGLMChatAdapter) register_llm_model_chat_adapter(GuanacoChatAdapter) register_llm_model_chat_adapter(FalconChatAdapter) register_llm_model_chat_adapter(GorillaChatAdapter) register_llm_model_chat_adapter(GPT4AllChatAdapter) +register_llm_model_chat_adapter(Llama2ChatAdapter) # Proxy model for test and develop, it's cheap for us now. register_llm_model_chat_adapter(ProxyllmChatAdapter) diff --git a/pilot/server/llmserver.py b/pilot/server/llmserver.py index 910a97573..43f5a1f94 100644 --- a/pilot/server/llmserver.py +++ b/pilot/server/llmserver.py @@ -77,6 +77,8 @@ class ModelWorker: def generate_stream_gate(self, params): try: + # params adaptation + params, model_context = self.llm_chat_adapter.model_adaptation(params) for output in self.generate_stream_func( self.model, self.tokenizer, params, DEVICE, CFG.MAX_POSITION_EMBEDDINGS ): @@ -84,10 +86,8 @@ class ModelWorker: # The gpt4all thread shares stdout with the parent process, # and opening it may affect the frontend output. print("output: ", output) - ret = { - "text": output, - "error_code": 0, - } + # return some model context to dgt-server + ret = {"text": output, "error_code": 0, "model_context": model_context} yield json.dumps(ret).encode() + b"\0" except torch.cuda.CudaError: