From c31f8ee370458f1e5a7c9626b62dd18d0022814c Mon Sep 17 00:00:00 2001 From: ulleo Date: Mon, 16 Jun 2025 15:56:16 +0800 Subject: [PATCH] feat: chat template support i18n --- backend/apps/chat/api/chat.py | 7 +++++-- backend/apps/chat/models/chat_model.py | 5 +++-- backend/apps/chat/task/llm.py | 6 ++++-- backend/template.yaml | 14 ++++++++------ 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/backend/apps/chat/api/chat.py b/backend/apps/chat/api/chat.py index 536bb9d3..51d45d98 100644 --- a/backend/apps/chat/api/chat.py +++ b/backend/apps/chat/api/chat.py @@ -13,6 +13,7 @@ from apps.chat.models.chat_model import CreateChat, ChatRecord, RenameChat, Chat from apps.chat.task.llm import LLMService from apps.datasource.crud.datasource import get_table_schema from apps.datasource.models.datasource import CoreDatasource +from apps.system.crud.user import get_user_info from apps.system.models.system_model import AiModelDetail from common.core.deps import SessionDep, CurrentUser @@ -117,13 +118,15 @@ async def stream_sql(session: SessionDep, current_user: CurrentUser, request_que llm_service.init_record(session=session, current_user=current_user) + db_user = get_user_info(session=session, user_id=current_user.id) + def run_task(): try: # return id yield json.dumps({'type': 'id', 'id': llm_service.get_record().id}) + '\n\n' # generate sql - sql_res = llm_service.generate_sql(session=session) + sql_res = llm_service.generate_sql(session=session, lang=db_user.language) full_sql_text = '' for chunk in sql_res: full_sql_text += chunk @@ -142,7 +145,7 @@ async def stream_sql(session: SessionDep, current_user: CurrentUser, request_que yield json.dumps({'content': orjson.dumps(result).decode(), 'type': 'sql-data'}) + '\n\n' # generate chart - chart_res = llm_service.generate_chart(session=session) + chart_res = llm_service.generate_chart(session=session, lang=db_user.language) full_chart_text = '' for chunk in chart_res: full_chart_text += chunk diff --git a/backend/apps/chat/models/chat_model.py b/backend/apps/chat/models/chat_model.py index 515676c1..ff890e02 100644 --- a/backend/apps/chat/models/chat_model.py +++ b/backend/apps/chat/models/chat_model.py @@ -72,19 +72,20 @@ class AiModelQuestion(BaseModel): db_schema: str = "" sql: str = "" rule: str = "" + lang: str = "zh-CN" def sql_sys_question(self): return get_sql_template()['system'].format(engine=self.engine, schema=self.db_schema, question=self.question) def sql_user_question(self): return get_sql_template()['user'].format(engine=self.engine, schema=self.db_schema, question=self.question, - rule=self.rule) + rule=self.rule, lang=self.lang) def chart_sys_question(self): return get_chart_template()['system'].format(sql=self.sql, question=self.question) def chart_user_question(self): - return get_chart_template()['user'].format(sql=self.sql, question=self.question, rule=self.rule) + return get_chart_template()['user'].format(sql=self.sql, question=self.question, rule=self.rule, lang=self.lang) class ChatQuestion(AiModelQuestion): diff --git a/backend/apps/chat/task/llm.py b/backend/apps/chat/task/llm.py index c6fa330d..54d08274 100644 --- a/backend/apps/chat/task/llm.py +++ b/backend/apps/chat/task/llm.py @@ -109,7 +109,8 @@ class LLMService: def get_record(self): return self.record - def generate_sql(self, session: SessionDep): + def generate_sql(self, session: SessionDep, lang: str = 'zh-CN'): + self.chat_question.lang = lang # append current question self.sql_message.append(HumanMessage(self.chat_question.sql_user_question())) self.record = save_full_sql_message(session=session, record_id=self.record.id, @@ -136,7 +137,8 @@ class LLMService: [{'type': msg.type, 'content': msg.content} for msg in self.sql_message], ensure_ascii=False)) - def generate_chart(self, session: SessionDep): + def generate_chart(self, session: SessionDep, lang: str = 'zh-CN'): + self.chat_question.lang = lang # append current question self.chart_message.append(HumanMessage(self.chat_question.chart_user_question())) self.record = save_full_chart_message(session=session, record_id=self.record.id, diff --git a/backend/template.yaml b/backend/template.yaml index 1f017951..9eb4dd00 100644 --- a/backend/template.yaml +++ b/backend/template.yaml @@ -24,8 +24,8 @@ template: {{"success":true,"sql":"生成的SQL语句","chart-type":"选择的图表类型(table/column/bar/line/pie)"}} ### 请遵守以下输出要求: - 请逐步推理后给出答案 - 推理过程中不需要输出JSON,仅在最终结果内输出符合要求的JSON + - 请逐步推理后给出答案 + - 推理过程中不需要输出JSON,仅在最终结果内输出符合要求的JSON 步骤1: [思考内容] 步骤2: [思考内容] …… @@ -37,8 +37,9 @@ template: ### 问题: {question} + ### 请使用 i18n: {lang} 对应的语言输出你的推理思考步骤、内容和结果 + ### 其他规则: - 请使用英语(English)输出 {rule} chart: system: | @@ -73,8 +74,8 @@ template: ```json ### 请遵守以下输出要求: - 请逐步推理后给出答案 - 推理过程中不需要输出JSON,仅在最终结果内输出符合要求的JSON + - 请逐步推理后给出答案 + - 推理过程中不需要输出JSON,仅在最终结果内输出符合要求的JSON 步骤1: [思考内容] 步骤2: [思考内容] …… @@ -86,8 +87,9 @@ template: ### 问题: {question} + ### 请使用 i18n: {lang} 对应的语言输出你的推理思考步骤、内容和结果 + ### 其他规则: - 请使用英语(English)输出 {rule} guess: system: |