|
@@ -4,57 +4,29 @@ import TableConfiguration from './components/TableConfiguration.vue'
|
|
|
import RespnseConfiguration from './components/RespnseConfiguration.vue'
|
|
import RespnseConfiguration from './components/RespnseConfiguration.vue'
|
|
|
import OutputConfiguration from './components/OutputConfiguration.vue'
|
|
import OutputConfiguration from './components/OutputConfiguration.vue'
|
|
|
import PreviewTesting from './components/PreviewTesting.vue'
|
|
import PreviewTesting from './components/PreviewTesting.vue'
|
|
|
|
|
+import submitsucessful from './images/icon_success_big@2x.png'
|
|
|
import moment from 'moment'
|
|
import moment from 'moment'
|
|
|
|
|
|
|
|
const rolename = ref('')
|
|
const rolename = ref('')
|
|
|
|
|
+const tablename = ref('')
|
|
|
const professionalfield = ref('')
|
|
const professionalfield = ref('')
|
|
|
|
|
+const tabledescription = ref('')
|
|
|
const maintasks = ref('')
|
|
const maintasks = ref('')
|
|
|
|
|
+const outputvalue = ref('')
|
|
|
|
|
+const editid = ref('')
|
|
|
|
|
+const prompttextvalue = ref('')
|
|
|
const TableConfigurationref = ref()
|
|
const TableConfigurationref = ref()
|
|
|
const RespnseConfigurationref = ref()
|
|
const RespnseConfigurationref = ref()
|
|
|
|
|
+const tableDataList = ref([])
|
|
|
|
|
+const stepData = ref([])
|
|
|
|
|
+const formatList = ref([])
|
|
|
|
|
+const promptValue = ref([])
|
|
|
const PromptdialogVisible = ref(false)
|
|
const PromptdialogVisible = ref(false)
|
|
|
const PromptdialogInnerVisible = ref(false)
|
|
const PromptdialogInnerVisible = ref(false)
|
|
|
-const ChangeLogList = ref([
|
|
|
|
|
- {
|
|
|
|
|
- time: '2025-04-23 09:30 Prompt1',
|
|
|
|
|
- person: '提交人:caroline@kln.com',
|
|
|
|
|
- text: '您是专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL1...'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- time: '2025-04-23 09:30 Prompt2',
|
|
|
|
|
- person: '提交人:caroline@kln.com',
|
|
|
|
|
- text: '您是专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL2...'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- time: '2025-04-23 09:30 Prompt3',
|
|
|
|
|
- person: '提交人:caroline@kln.com',
|
|
|
|
|
- text: '您是专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL3...'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- time: '2025-04-23 09:30 Prompt4',
|
|
|
|
|
- person: '提交人:caroline@kln.com',
|
|
|
|
|
- text: '您是专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL4...'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- time: '2025-04-23 09:30 Prompt5',
|
|
|
|
|
- person: '提交人:caroline@kln.com',
|
|
|
|
|
- text: '您是专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL5...'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- time: '2025-04-23 09:30 Prompt6',
|
|
|
|
|
- person: '提交人:caroline@kln.com',
|
|
|
|
|
- text: '您是专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL6...'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- time: '2025-04-23 09:30 Prompt7',
|
|
|
|
|
- person: '提交人:caroline@kln.com',
|
|
|
|
|
- text: '您是专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL7...'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- time: '2025-04-23 09:30 Prompt8',
|
|
|
|
|
- person: '提交人:caroline@kln.com',
|
|
|
|
|
- text: '您是专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL专家顾问专門从事货运代理行业的SQL8...'
|
|
|
|
|
- }
|
|
|
|
|
-])
|
|
|
|
|
|
|
+const testquestion = ref(false)
|
|
|
|
|
+const UnableSaveVisible = ref(false)
|
|
|
|
|
+const SaveedVisible = ref(false)
|
|
|
|
|
+const ChangeLogList = ref([])
|
|
|
const prompttext = ref('')
|
|
const prompttext = ref('')
|
|
|
|
|
|
|
|
const AddTableConfiguration = () => {
|
|
const AddTableConfiguration = () => {
|
|
@@ -65,23 +37,93 @@ const addstepdata = () => {
|
|
|
RespnseConfigurationref.value.addstepdata()
|
|
RespnseConfigurationref.value.addstepdata()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const stepData = ref([
|
|
|
|
|
- {
|
|
|
|
|
- description: '分析用户的具体问题,确定是否可以通过现有的表字段进行查询。'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- description: '如果查询可行,根据确定的条件生成可直接执行的SQL语句。'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- description: '如果因为表的字段未覆盖不能查询,说明原因,并联网查询该用户问题,并以KLN公司业务代表的角度回答问题,放在response里,如果回复要使用公司名称,请使用:KLN。'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- description: '如果不能查询是因为问题缺失具体条件,请在response里面反馈让客户输入具体的reference number来进行查询。'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- description: '请使用与用户消息相同的语言回复。如果用户使用中文提问,请用中文回答;如果用户使用英文提问,请使用英文回答;以此类推。始终以用户实际使用的语言为准,不要参考system prompt的语言。'
|
|
|
|
|
|
|
+const getPromptConfiguration = () => {
|
|
|
|
|
+ $api.getPromptConfiguration().then((res) => {
|
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
|
+ rolename.value = res.data.character_name
|
|
|
|
|
+ professionalfield.value = res.data.professional_field
|
|
|
|
|
+ maintasks.value = res.data.main_tasks
|
|
|
|
|
+ tablename.value = res.data.table_name
|
|
|
|
|
+ tabledescription.value = res.data.table_description
|
|
|
|
|
+ tableDataList.value = res.data.tableData
|
|
|
|
|
+ stepData.value = res.data.stepData
|
|
|
|
|
+ formatList.value = res.data.formatList
|
|
|
|
|
+ outputvalue.value = res.data.formatListType
|
|
|
|
|
+ prompttextvalue.value = res.data.complete_prompt
|
|
|
|
|
+ promptValue.value = res.data.prompt_summary
|
|
|
|
|
+ editid.value = res.data.id
|
|
|
|
|
+ ChangeLogList.value = res.data.prompt_log_record
|
|
|
|
|
+ if(rolename.value != '' && professionalfield.value != '' && maintasks.value != '' && professionalfield.value != '' && tableDataList.value.length != 0 && stepData.value.length != 0 && formatList.value.length != 0 && outputvalue.value != '' && prompttextvalue.value != '') {
|
|
|
|
|
+ testquestion.value = false
|
|
|
|
|
+ } else {
|
|
|
|
|
+ testquestion.value = true
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+// 保存
|
|
|
|
|
+const missingmessage = ref()
|
|
|
|
|
+const SavePromptConfiguration = () => {
|
|
|
|
|
+ missingmessage.value = ''
|
|
|
|
|
+ if(rolename.value != '' && professionalfield.value != '' && maintasks.value != '' && professionalfield.value != '' && tableDataList.value.length != 0 && stepData.value.length != 0 && formatList.value.length != 0 && outputvalue.value != '' && prompttextvalue.value != '') {
|
|
|
|
|
+ $api.SavePromptConfiguration({
|
|
|
|
|
+ role_name: rolename.value,
|
|
|
|
|
+ professional_field: professionalfield.value,
|
|
|
|
|
+ main_tasks: maintasks.value,
|
|
|
|
|
+ table_name: tablename.value,
|
|
|
|
|
+ table_description: tabledescription.value,
|
|
|
|
|
+ tableDataList: tableDataList.value,
|
|
|
|
|
+ stepData: stepData.value,
|
|
|
|
|
+ formatList: formatList.value,
|
|
|
|
|
+ outputvalue: outputvalue.value,
|
|
|
|
|
+ prompttextvalue: prompttextvalue.value,
|
|
|
|
|
+ id: editid.value
|
|
|
|
|
+ }).then((res) => {
|
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
|
+ SaveedVisible.value = true
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ window.location.reload()
|
|
|
|
|
+ }, 3000)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if(rolename.value == '' || professionalfield.value == '' || maintasks.value == '') {
|
|
|
|
|
+ missingmessage.value += '系统角色配置, '
|
|
|
|
|
+ }
|
|
|
|
|
+ if(tablename.value == '' || tableDataList.value.length == 0) {
|
|
|
|
|
+ missingmessage.value += '表结构配置, '
|
|
|
|
|
+ }
|
|
|
|
|
+ if(stepData.value.length == 0) {
|
|
|
|
|
+ missingmessage.value += '响应规则配置, '
|
|
|
|
|
+ }
|
|
|
|
|
+ if(formatList.value.length == 0 || outputvalue.value == '') {
|
|
|
|
|
+ missingmessage.value += '输出格式配置, '
|
|
|
|
|
+ }
|
|
|
|
|
+ missingmessage.value = missingmessage.value.substring(0, missingmessage.value.length - 2)
|
|
|
|
|
+ UnableSaveVisible.value = true
|
|
|
}
|
|
}
|
|
|
-])
|
|
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const EditPrompt = () => {
|
|
|
|
|
+ $api.EditPrompt({
|
|
|
|
|
+ role_name: rolename.value,
|
|
|
|
|
+ professional_field: professionalfield.value,
|
|
|
|
|
+ main_tasks: maintasks.value,
|
|
|
|
|
+ table_name: tablename.value,
|
|
|
|
|
+ table_description: tabledescription.value,
|
|
|
|
|
+ tableDataList: tableDataList.value,
|
|
|
|
|
+ stepData: stepData.value,
|
|
|
|
|
+ formatList: formatList.value,
|
|
|
|
|
+ outputvalue: outputvalue.value,
|
|
|
|
|
+ prompttextvalue: prompttextvalue.value,
|
|
|
|
|
+ id: editid.value
|
|
|
|
|
+ }).then((res) => {
|
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
|
+ prompttextvalue.value = res.data.complete_prompt
|
|
|
|
|
+ promptValue.value = res.data.prompt_summary
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
// 导出为txt
|
|
// 导出为txt
|
|
|
const exporttxt = () => {
|
|
const exporttxt = () => {
|
|
@@ -103,7 +145,6 @@ const exporttxt = () => {
|
|
|
|
|
|
|
|
// 查看日志
|
|
// 查看日志
|
|
|
const ViewPrompt = (item: any) => {
|
|
const ViewPrompt = (item: any) => {
|
|
|
- console.log(item)
|
|
|
|
|
PromptdialogInnerVisible.value = true
|
|
PromptdialogInnerVisible.value = true
|
|
|
prompttext.value = item
|
|
prompttext.value = item
|
|
|
}
|
|
}
|
|
@@ -113,6 +154,9 @@ const Backprompt = () => {
|
|
|
PromptdialogInnerVisible.value = false
|
|
PromptdialogInnerVisible.value = false
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+onMounted(() => {
|
|
|
|
|
+ getPromptConfiguration()
|
|
|
|
|
+})
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
|
<template>
|
|
@@ -120,7 +164,7 @@ const Backprompt = () => {
|
|
|
<div>Prompt Configuration</div>
|
|
<div>Prompt Configuration</div>
|
|
|
<div>
|
|
<div>
|
|
|
<el-button class="el-button--default title-button" style="margin-right: 8px;" @click="PromptdialogVisible = true"><span class="font_family icon-icon_dashboard_b icon_dark" style="margin-right: 5px;"></span>变更日志查看</el-button>
|
|
<el-button class="el-button--default title-button" style="margin-right: 8px;" @click="PromptdialogVisible = true"><span class="font_family icon-icon_dashboard_b icon_dark" style="margin-right: 5px;"></span>变更日志查看</el-button>
|
|
|
- <el-button class="el-button--main title-button"><span class="font_family icon-icon_save_b icon_dark" style="margin-right: 5px;"></span>保存生效</el-button>
|
|
|
|
|
|
|
+ <el-button class="el-button--main title-button" @click="SavePromptConfiguration"><span class="font_family icon-icon_save_b icon_dark" style="margin-right: 5px;"></span>保存生效</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<el-dialog
|
|
<el-dialog
|
|
@@ -166,9 +210,9 @@ const Backprompt = () => {
|
|
|
<el-button class="el-button--default" @click="exporttxt"><span class="font_family icon-icon_import_b icon_dark" style="margin-right: 5px;" ></span>导出完整日志</el-button>
|
|
<el-button class="el-button--default" @click="exporttxt"><span class="font_family icon-icon_import_b icon_dark" style="margin-right: 5px;" ></span>导出完整日志</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
- <div class="diaolog-content">
|
|
|
|
|
|
|
+ <pre class="diaolog-content">
|
|
|
{{ prompttext }}
|
|
{{ prompttext }}
|
|
|
- </div>
|
|
|
|
|
|
|
+ </pre>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
<div class="prompt-content">
|
|
<div class="prompt-content">
|
|
|
<!-- 系统角色设置 -->
|
|
<!-- 系统角色设置 -->
|
|
@@ -195,16 +239,16 @@ const Backprompt = () => {
|
|
|
<div class="flex">
|
|
<div class="flex">
|
|
|
<div style="width: 50%; margin-right: 8px;">
|
|
<div style="width: 50%; margin-right: 8px;">
|
|
|
<div class="little-title"><span class="stars_red">*</span>表名</div>
|
|
<div class="little-title"><span class="stars_red">*</span>表名</div>
|
|
|
- <el-input v-model="rolename" placeholder="创建一个表名" class="input-name"></el-input>
|
|
|
|
|
|
|
+ <el-input v-model="tablename" placeholder="创建一个表名" class="input-name"></el-input>
|
|
|
</div>
|
|
</div>
|
|
|
<div style="width: 50%;">
|
|
<div style="width: 50%;">
|
|
|
<div class="little-title">表描述</div>
|
|
<div class="little-title">表描述</div>
|
|
|
- <el-input v-model="professionalfield" placeholder="简要描述表的用途" class="input-name"></el-input>
|
|
|
|
|
|
|
+ <el-input v-model="tabledescription" placeholder="简要描述表的用途" class="input-name"></el-input>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div style="margin-top: 16px;">
|
|
<div style="margin-top: 16px;">
|
|
|
<el-button class="el-button--noborder--configuration prompt-button" @click="AddTableConfiguration">+ 添加字段</el-button>
|
|
<el-button class="el-button--noborder--configuration prompt-button" @click="AddTableConfiguration">+ 添加字段</el-button>
|
|
|
- <TableConfiguration ref="TableConfigurationref"></TableConfiguration>
|
|
|
|
|
|
|
+ <TableConfiguration ref="TableConfigurationref" :tableDataList="tableDataList"></TableConfiguration>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<!-- 响应规则配置 -->
|
|
<!-- 响应规则配置 -->
|
|
@@ -219,17 +263,48 @@ const Backprompt = () => {
|
|
|
<div class="prompt-border">
|
|
<div class="prompt-border">
|
|
|
<div class="prompt-title">输出格式配置</div>
|
|
<div class="prompt-title">输出格式配置</div>
|
|
|
<div style="margin-top: 16px;">
|
|
<div style="margin-top: 16px;">
|
|
|
- <OutputConfiguration ref="OutputConfigurationref"></OutputConfiguration>
|
|
|
|
|
|
|
+ <OutputConfiguration ref="OutputConfigurationref" :formatList="formatList" :outputvalue="outputvalue"></OutputConfiguration>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<!-- 预览与测试 -->
|
|
<!-- 预览与测试 -->
|
|
|
<div class="propmt-border-colorful">
|
|
<div class="propmt-border-colorful">
|
|
|
<div class="prompt-title" style="padding: 0 14px;">预览与测试</div>
|
|
<div class="prompt-title" style="padding: 0 14px;">预览与测试</div>
|
|
|
<div style="margin-top: 16px;">
|
|
<div style="margin-top: 16px;">
|
|
|
- <PreviewTesting ref="PreviewTestingref"></PreviewTesting>
|
|
|
|
|
|
|
+ <PreviewTesting ref="PreviewTestingref" :prompttext="prompttextvalue" :testquestion="testquestion" :promptValue="promptValue" @handleprompt="EditPrompt"></PreviewTesting>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="propmt-save"><el-button class="el-button--main"><span class="font_family icon-icon_save_b icon_dark" style="margin-right: 5px;"></span>保存生效</el-button></div>
|
|
|
|
|
|
|
+ <div class="propmt-save"><el-button class="el-button--main" @click="SavePromptConfiguration"><span class="font_family icon-icon_save_b icon_dark" style="margin-right: 5px;"></span>保存生效</el-button></div>
|
|
|
|
|
+ <!-- 保存失败 -->
|
|
|
|
|
+ <el-dialog v-model="UnableSaveVisible" width="480">
|
|
|
|
|
+ <div>{{ missingmessage }} missing.</div>
|
|
|
|
|
+ <div>Please complete all required fields.</div>
|
|
|
|
|
+ <template #footer>
|
|
|
|
|
+ <div class="dialog-footer">
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ class="el-button--danger"
|
|
|
|
|
+ @click="UnableSaveVisible = false"
|
|
|
|
|
+ style="width: 100px"
|
|
|
|
|
+ >
|
|
|
|
|
+ OK
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <template #header>
|
|
|
|
|
+ <div class="cancel_header">
|
|
|
|
|
+ <span class="iconfont_icon iconfont_warning">
|
|
|
|
|
+ <svg class="iconfont icon_danger" aria-hidden="true">
|
|
|
|
|
+ <use xlink:href="#icon-icon_fail_fill_b"></use>
|
|
|
|
|
+ </svg>
|
|
|
|
|
+ </span>
|
|
|
|
|
+ Unable to Save
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-dialog>
|
|
|
|
|
+ <!-- 保存成功 -->
|
|
|
|
|
+ <el-dialog v-model="SaveedVisible" width="320" style="height: 212px">
|
|
|
|
|
+ <div style="text-align: center"><el-image :src="submitsucessful" style="width: 64px;" /></div>
|
|
|
|
|
+ <div style="text-align: center; margin-top: 20px">Saved successfully</div>
|
|
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
@@ -326,6 +401,8 @@ const Backprompt = () => {
|
|
|
padding: 16px;
|
|
padding: 16px;
|
|
|
margin-bottom: 8px;
|
|
margin-bottom: 8px;
|
|
|
border-radius: 6px;
|
|
border-radius: 6px;
|
|
|
|
|
+ line-height: 21px;
|
|
|
|
|
+ white-space: break-spaces;
|
|
|
}
|
|
}
|
|
|
.diaolog-flex {
|
|
.diaolog-flex {
|
|
|
display: flex;
|
|
display: flex;
|
|
@@ -380,4 +457,18 @@ const Backprompt = () => {
|
|
|
color: var(--color-theme);
|
|
color: var(--color-theme);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+.cancel_header {
|
|
|
|
|
+ font-size: 18px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ color: var(--color-neutral-1);
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+}
|
|
|
|
|
+.icon_danger {
|
|
|
|
|
+ fill: var(--color-btn-danger-bg);
|
|
|
|
|
+}
|
|
|
|
|
+.iconfont_warning {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+}
|
|
|
</style>
|
|
</style>
|