Skip to content

Commit 684b86f

Browse files
committed
pref: Generate prompt
1 parent d466d0f commit 684b86f

File tree

3 files changed

+88
-15
lines changed

3 files changed

+88
-15
lines changed

apps/chat/serializers/chat.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
@desc:
88
"""
99
import json
10+
import os
1011
from gettext import gettext
1112
from typing import List, Dict
1213

1314
import uuid_utils.compat as uuid
1415
from django.db.models import QuerySet
1516
from django.utils.translation import gettext_lazy as _
16-
from langchain_core.messages import HumanMessage, AIMessage
17+
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage
1718
from rest_framework import serializers
1819

1920
from application.chat_pipeline.pipeline_manage import PipelineManage
@@ -36,8 +37,9 @@
3637
from common.handle.base_to_response import BaseToResponse
3738
from common.handle.impl.response.openai_to_response import OpenaiToResponse
3839
from common.handle.impl.response.system_to_response import SystemToResponse
39-
from common.utils.common import flat_map
40+
from common.utils.common import flat_map, get_file_content
4041
from knowledge.models import Document, Paragraph
42+
from maxkb.conf import PROJECT_DIR
4143
from models_provider.models import Model, Status
4244
from models_provider.tools import get_model_instance_by_model_workspace_id
4345

@@ -67,6 +69,7 @@ def is_valid(self, *, raise_exception=False):
6769
if role not in ['user', 'ai']:
6870
raise AppApiException(400, _("Authentication failed. Please verify that the parameters are correct."))
6971

72+
7073
class ChatMessageSerializers(serializers.Serializer):
7174
message = serializers.CharField(required=True, label=_("User Questions"))
7275
stream = serializers.BooleanField(required=True,
@@ -140,6 +143,7 @@ def chat(self, instance: dict, base_to_response: BaseToResponse = SystemToRespon
140143
"application_id": chat_info.application.id, "debug": True
141144
}).chat(instance, base_to_response)
142145

146+
SYSTEM_ROLE = get_file_content(os.path.join(PROJECT_DIR, "apps", "chat", 'template', 'generate_prompt_system'))
143147

144148
class PromptGenerateSerializer(serializers.Serializer):
145149
workspace_id = serializers.CharField(required=False, label=_('Workspace ID'))
@@ -152,13 +156,14 @@ def is_valid(self, *, raise_exception=False):
152156
query_set = QuerySet(Application).filter(id=self.data.get('application_id'))
153157
if workspace_id:
154158
query_set = query_set.filter(workspace_id=workspace_id)
155-
if not query_set.exists():
159+
application=query_set.first()
160+
if application is None:
156161
raise AppApiException(500, _('Application id does not exist'))
162+
return application
157163

158-
def generate_prompt(self, instance: dict, with_valid=True):
159-
if with_valid:
160-
self.is_valid(raise_exception=True)
161-
GeneratePromptSerializers(data=instance).is_valid(raise_exception=True)
164+
def generate_prompt(self, instance: dict):
165+
application=self.is_valid(raise_exception=True)
166+
GeneratePromptSerializers(data=instance).is_valid(raise_exception=True)
162167
workspace_id = self.data.get('workspace_id')
163168
model_id = self.data.get('model_id')
164169
prompt = instance.get('prompt')
@@ -169,17 +174,19 @@ def generate_prompt(self, instance: dict, with_valid=True):
169174
messages[-1]['content'] = q
170175

171176
model_exist = QuerySet(Model).filter(
172-
id=model_id,
173-
model_type = "LLM"
174-
).exists()
177+
id=model_id,
178+
model_type="LLM"
179+
).exists()
175180
if not model_exist:
176181
raise Exception(_("Model does not exists or is not an LLM model"))
177182

178-
def process():
179-
model = get_model_instance_by_model_workspace_id(model_id=model_id, workspace_id=workspace_id)
183+
system_content = SYSTEM_ROLE.format(application_name=application.name, detail=application.desc)
180184

181-
for r in model.stream([HumanMessage(content=m.get('content')) if m.get('role') == 'user' else AIMessage(
182-
content=m.get('content')) for m in messages]):
185+
def process():
186+
model = get_model_instance_by_model_workspace_id(model_id=model_id, workspace_id=workspace_id,**application.model_params_setting)
187+
for r in model.stream([SystemMessage(content=system_content),
188+
*[HumanMessage(content=m.get('content')) if m.get('role') == 'user' else AIMessage(
189+
content=m.get('content')) for m in messages]]):
183190
yield 'data: ' + json.dumps({'content': r.content}) + '\n\n'
184191

185192
return to_stream_response_simple(process())
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
## 人设
2+
你是一个专业的提示词生成优化专家,擅长为各种智能体应用场景创建高质量的系统角色设定。你具有深厚的AI应用理解能力和丰富的提示词工程经验。
3+
4+
## 技能
5+
1. 深度分析用户提供的智能体名称和功能描述
6+
2. 根据应用场景生成结构化的系统角色设定
7+
3. 优化提示词的逻辑结构和语言表达
8+
4. 确保生成的角色设定具有清晰的人物设定、功能流程、约束限制和回复格式
9+
10+
当用户提供智能体信息时,你需要按照标准格式生成包含人物设定、功能和流程、约束与限制、回复格式四个核心模块的完整系统角色设定。
11+
12+
## 限制
13+
1. 严格按照人物设定、功能和流程、约束与限制、回复格式的结构输出
14+
2. 不输出与角色设定生成无关的内容
15+
3. 如果用户输入信息不够明确,基于智能体名称和已有描述进行合理推测
16+
17+
## 回复格式
18+
请严格按照以下格式输出:
19+
20+
# 角色:
21+
角色简短描述一句话
22+
23+
## 目标:
24+
角色的工作目标,如果有多目标可以分点列出,但建议更聚焦1-2个目标
25+
26+
## 核心技能:
27+
### 技能 1: [技能名称,如作品推荐/信息查询/专业分析等]
28+
1. [执行步骤1 - 描述该技能的第一个具体操作步骤,包括条件判断和处理方式]
29+
2. [执行步骤2 - 描述该技能的第二个具体操作步骤,包括如何获取或处理信息]
30+
3. [执行步骤3 - 描述该技能的最终输出步骤,说明如何呈现结果]
31+
32+
===回复示例===
33+
- 📋 [标识符]: <具体内容格式说明>
34+
- 🎯 [标识符]: <具体内容格式说明>
35+
- 💡 [标识符]: <具体内容格式说明>
36+
===示例结束===
37+
38+
### 技能 2: [技能名称]
39+
1. [执行步骤1 - 描述触发条件和初始处理方式]
40+
2. [执行步骤2 - 描述信息获取和深化处理的具体方法]
41+
3. [执行步骤3 - 描述最终输出的具体要求和格式]
42+
43+
### 技能 3: [技能名称]
44+
- [核心能力描述 - 说明该技能的主要作用和知识基础]
45+
- [应用方法 - 描述如何运用该技能为用户提供服务,包括具体的实施方式]
46+
47+
## 工作流:
48+
1. 描述角色工作流程的第一步
49+
2. 描述角色工作流程的第二步
50+
3. 描述角色工作流程的第三步
51+
52+
## 输出格式:
53+
如果对角色的输出格式有特定要求,可以在这里强调并举例说明想要的输出格式
54+
55+
## 限制:
56+
1. **严格限制回答范围**:仅回答与角色设定相关的问题。
57+
- 如果用户提问与角色无关,必须使用以下固定格式回复:
58+
“对不起,我只能回答与【角色设定】相关的问题,您的问题不在服务范围内。”
59+
- 不得提供任何与角色设定无关的回答。
60+
2. 描述角色在互动过程中需要遵循的限制条件2
61+
3. 描述角色在互动过程中需要遵循的限制条件3
62+
63+
输出时不得包含任何解释或附加说明,只能返回符合以上格式的内容。
64+
65+
智能体名称: {application_name}
66+
功能描述: {detail}

apps/models_provider/impl/xf_model_provider/credential/zh_en_stt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def is_valid(self,
3535
else:
3636
return False
3737
try:
38-
model = provider.get_model(model_type, model_name, model_credential)
38+
model = provider.get_model(model_type, model_name, model_credential, **model_params)
3939
model.check_auth()
4040
except Exception as e:
4141
traceback.print_exc()

0 commit comments

Comments
 (0)