pref: Generate prompt
parent
d466d0f512
commit
684b86f197
|
|
@ -7,13 +7,14 @@
|
|||
@desc:
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
from gettext import gettext
|
||||
from typing import List, Dict
|
||||
|
||||
import uuid_utils.compat as uuid
|
||||
from django.db.models import QuerySet
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from langchain_core.messages import HumanMessage, AIMessage
|
||||
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage
|
||||
from rest_framework import serializers
|
||||
|
||||
from application.chat_pipeline.pipeline_manage import PipelineManage
|
||||
|
|
@ -36,8 +37,9 @@ from common.exception.app_exception import AppApiException, AppChatNumOutOfBound
|
|||
from common.handle.base_to_response import BaseToResponse
|
||||
from common.handle.impl.response.openai_to_response import OpenaiToResponse
|
||||
from common.handle.impl.response.system_to_response import SystemToResponse
|
||||
from common.utils.common import flat_map
|
||||
from common.utils.common import flat_map, get_file_content
|
||||
from knowledge.models import Document, Paragraph
|
||||
from maxkb.conf import PROJECT_DIR
|
||||
from models_provider.models import Model, Status
|
||||
from models_provider.tools import get_model_instance_by_model_workspace_id
|
||||
|
||||
|
|
@ -67,6 +69,7 @@ class GeneratePromptSerializers(serializers.Serializer):
|
|||
if role not in ['user', 'ai']:
|
||||
raise AppApiException(400, _("Authentication failed. Please verify that the parameters are correct."))
|
||||
|
||||
|
||||
class ChatMessageSerializers(serializers.Serializer):
|
||||
message = serializers.CharField(required=True, label=_("User Questions"))
|
||||
stream = serializers.BooleanField(required=True,
|
||||
|
|
@ -140,6 +143,7 @@ class DebugChatSerializers(serializers.Serializer):
|
|||
"application_id": chat_info.application.id, "debug": True
|
||||
}).chat(instance, base_to_response)
|
||||
|
||||
SYSTEM_ROLE = get_file_content(os.path.join(PROJECT_DIR, "apps", "chat", 'template', 'generate_prompt_system'))
|
||||
|
||||
class PromptGenerateSerializer(serializers.Serializer):
|
||||
workspace_id = serializers.CharField(required=False, label=_('Workspace ID'))
|
||||
|
|
@ -152,13 +156,14 @@ class PromptGenerateSerializer(serializers.Serializer):
|
|||
query_set = QuerySet(Application).filter(id=self.data.get('application_id'))
|
||||
if workspace_id:
|
||||
query_set = query_set.filter(workspace_id=workspace_id)
|
||||
if not query_set.exists():
|
||||
application=query_set.first()
|
||||
if application is None:
|
||||
raise AppApiException(500, _('Application id does not exist'))
|
||||
return application
|
||||
|
||||
def generate_prompt(self, instance: dict, with_valid=True):
|
||||
if with_valid:
|
||||
self.is_valid(raise_exception=True)
|
||||
GeneratePromptSerializers(data=instance).is_valid(raise_exception=True)
|
||||
def generate_prompt(self, instance: dict):
|
||||
application=self.is_valid(raise_exception=True)
|
||||
GeneratePromptSerializers(data=instance).is_valid(raise_exception=True)
|
||||
workspace_id = self.data.get('workspace_id')
|
||||
model_id = self.data.get('model_id')
|
||||
prompt = instance.get('prompt')
|
||||
|
|
@ -169,17 +174,19 @@ class PromptGenerateSerializer(serializers.Serializer):
|
|||
messages[-1]['content'] = q
|
||||
|
||||
model_exist = QuerySet(Model).filter(
|
||||
id=model_id,
|
||||
model_type = "LLM"
|
||||
).exists()
|
||||
id=model_id,
|
||||
model_type="LLM"
|
||||
).exists()
|
||||
if not model_exist:
|
||||
raise Exception(_("Model does not exists or is not an LLM model"))
|
||||
|
||||
def process():
|
||||
model = get_model_instance_by_model_workspace_id(model_id=model_id, workspace_id=workspace_id)
|
||||
system_content = SYSTEM_ROLE.format(application_name=application.name, detail=application.desc)
|
||||
|
||||
for r in model.stream([HumanMessage(content=m.get('content')) if m.get('role') == 'user' else AIMessage(
|
||||
content=m.get('content')) for m in messages]):
|
||||
def process():
|
||||
model = get_model_instance_by_model_workspace_id(model_id=model_id, workspace_id=workspace_id,**application.model_params_setting)
|
||||
for r in model.stream([SystemMessage(content=system_content),
|
||||
*[HumanMessage(content=m.get('content')) if m.get('role') == 'user' else AIMessage(
|
||||
content=m.get('content')) for m in messages]]):
|
||||
yield 'data: ' + json.dumps({'content': r.content}) + '\n\n'
|
||||
|
||||
return to_stream_response_simple(process())
|
||||
|
|
|
|||
|
|
@ -0,0 +1,66 @@
|
|||
## 人设
|
||||
你是一个专业的提示词生成优化专家,擅长为各种智能体应用场景创建高质量的系统角色设定。你具有深厚的AI应用理解能力和丰富的提示词工程经验。
|
||||
|
||||
## 技能
|
||||
1. 深度分析用户提供的智能体名称和功能描述
|
||||
2. 根据应用场景生成结构化的系统角色设定
|
||||
3. 优化提示词的逻辑结构和语言表达
|
||||
4. 确保生成的角色设定具有清晰的人物设定、功能流程、约束限制和回复格式
|
||||
|
||||
当用户提供智能体信息时,你需要按照标准格式生成包含人物设定、功能和流程、约束与限制、回复格式四个核心模块的完整系统角色设定。
|
||||
|
||||
## 限制
|
||||
1. 严格按照人物设定、功能和流程、约束与限制、回复格式的结构输出
|
||||
2. 不输出与角色设定生成无关的内容
|
||||
3. 如果用户输入信息不够明确,基于智能体名称和已有描述进行合理推测
|
||||
|
||||
## 回复格式
|
||||
请严格按照以下格式输出:
|
||||
|
||||
# 角色:
|
||||
角色简短描述一句话
|
||||
|
||||
## 目标:
|
||||
角色的工作目标,如果有多目标可以分点列出,但建议更聚焦1-2个目标
|
||||
|
||||
## 核心技能:
|
||||
### 技能 1: [技能名称,如作品推荐/信息查询/专业分析等]
|
||||
1. [执行步骤1 - 描述该技能的第一个具体操作步骤,包括条件判断和处理方式]
|
||||
2. [执行步骤2 - 描述该技能的第二个具体操作步骤,包括如何获取或处理信息]
|
||||
3. [执行步骤3 - 描述该技能的最终输出步骤,说明如何呈现结果]
|
||||
|
||||
===回复示例===
|
||||
- 📋 [标识符]: <具体内容格式说明>
|
||||
- 🎯 [标识符]: <具体内容格式说明>
|
||||
- 💡 [标识符]: <具体内容格式说明>
|
||||
===示例结束===
|
||||
|
||||
### 技能 2: [技能名称]
|
||||
1. [执行步骤1 - 描述触发条件和初始处理方式]
|
||||
2. [执行步骤2 - 描述信息获取和深化处理的具体方法]
|
||||
3. [执行步骤3 - 描述最终输出的具体要求和格式]
|
||||
|
||||
### 技能 3: [技能名称]
|
||||
- [核心能力描述 - 说明该技能的主要作用和知识基础]
|
||||
- [应用方法 - 描述如何运用该技能为用户提供服务,包括具体的实施方式]
|
||||
|
||||
## 工作流:
|
||||
1. 描述角色工作流程的第一步
|
||||
2. 描述角色工作流程的第二步
|
||||
3. 描述角色工作流程的第三步
|
||||
|
||||
## 输出格式:
|
||||
如果对角色的输出格式有特定要求,可以在这里强调并举例说明想要的输出格式
|
||||
|
||||
## 限制:
|
||||
1. **严格限制回答范围**:仅回答与角色设定相关的问题。
|
||||
- 如果用户提问与角色无关,必须使用以下固定格式回复:
|
||||
“对不起,我只能回答与【角色设定】相关的问题,您的问题不在服务范围内。”
|
||||
- 不得提供任何与角色设定无关的回答。
|
||||
2. 描述角色在互动过程中需要遵循的限制条件2
|
||||
3. 描述角色在互动过程中需要遵循的限制条件3
|
||||
|
||||
输出时不得包含任何解释或附加说明,只能返回符合以上格式的内容。
|
||||
|
||||
智能体名称: {application_name}
|
||||
功能描述: {detail}
|
||||
|
|
@ -35,7 +35,7 @@ class ZhEnXunFeiSTTModelCredential(BaseForm, BaseModelCredential):
|
|||
else:
|
||||
return False
|
||||
try:
|
||||
model = provider.get_model(model_type, model_name, model_credential)
|
||||
model = provider.get_model(model_type, model_name, model_credential, **model_params)
|
||||
model.check_auth()
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
|
|
|
|||
Loading…
Reference in New Issue