|
|
@@ -9,7 +9,7 @@
|
|
|
</div>
|
|
|
<div class="message-content ai-message chat" v-if="message.aiContent">
|
|
|
<div v-html="message.aiContent"></div>
|
|
|
- <button class="confirm-btn" v-if="message.jsonData?.isChoice">确定</button>
|
|
|
+ <button class="confirm-btn" v-if="message.jsonData?.gType !== 'chat'" @click="generate(message)">确定</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -50,10 +50,11 @@
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
import { ref, onMounted, useTemplateRef, nextTick } from 'vue'
|
|
|
-import { chat_no_stream, chat_stream, getAgentModel } from '@/tools/aiChat'
|
|
|
+import { chat_no_stream, chat_stream, getAgentModel, chat_no_stream2 } from '@/tools/aiChat'
|
|
|
import { useSlidesStore } from '@/store'
|
|
|
import { lang } from '@/main'
|
|
|
import MarkdownIt from 'markdown-it'
|
|
|
+import { getWorkPageId } from '@/services/course'
|
|
|
|
|
|
interface ChatMessage {
|
|
|
uid?: string
|
|
|
@@ -76,7 +77,7 @@ interface ChatMessage {
|
|
|
url?: string
|
|
|
}>
|
|
|
jsonData?: {
|
|
|
- isChoice?: boolean
|
|
|
+ gType?: string
|
|
|
headUrl?: string
|
|
|
assistantName?: string
|
|
|
sourceArray?: Array<{
|
|
|
@@ -154,12 +155,31 @@ const slidesStore = useSlidesStore()
|
|
|
const gType = ref('chat')
|
|
|
|
|
|
const sendAction = async (action: string) => {
|
|
|
- const content = await chat_no_stream(action, agentid1.value, props.userid || '', lang.lang)
|
|
|
- console.log(content)
|
|
|
- // 渲染 Markdown 格式
|
|
|
const md = new MarkdownIt()
|
|
|
- const html = md.render(content)
|
|
|
- messages.value.at(-1).aiContent = html
|
|
|
+ if (gType.value === 'chat') {
|
|
|
+ const content = await chat_no_stream(action, agentid1.value, props.userid || '', lang.lang)
|
|
|
+ console.log(content)
|
|
|
+ // 渲染 Markdown 格式
|
|
|
+ try {
|
|
|
+ gType.value = JSON.parse(content).intent
|
|
|
+ }
|
|
|
+ catch (error) {
|
|
|
+ gType.value = 'chat'
|
|
|
+ }
|
|
|
+
|
|
|
+ // generate_qa // generate_choice_question
|
|
|
+ if (gType.value !== 'chat') {
|
|
|
+ messages.value.at(-1).jsonData = {
|
|
|
+ gType: gType.value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ messages.value.at(-1).jsonData = {
|
|
|
+ gType: gType.value
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
const prompt = `
|
|
|
@@ -178,11 +198,66 @@ const sendAction = async (action: string) => {
|
|
|
chatLoading.value = false
|
|
|
prevChatResult()
|
|
|
}
|
|
|
- }).catch(err => {
|
|
|
+ }, session_name.value).catch(err => {
|
|
|
chatLoading.value = false
|
|
|
console.log('err', err)
|
|
|
- }, session_name.value)
|
|
|
+ })
|
|
|
}
|
|
|
+import useCreateElement from '@/hooks/useCreateElement'
|
|
|
+import useSlideHandler from '@/hooks/useSlideHandler'
|
|
|
+const { createSlide } = useSlideHandler()
|
|
|
+const { createFrameElement } = useCreateElement()
|
|
|
+
|
|
|
+const generate = (message: ChatMessage) => {
|
|
|
+ if (message.jsonData?.gType === 'generate_choice_question') {
|
|
|
+ console.log(message.jsonData?.gType)
|
|
|
+ const prompt = [
|
|
|
+ {
|
|
|
+ role: 'user',
|
|
|
+ content: `这是用户输入的内容:“${message.aiContent}”,根据用户输入的内容,生成选择题的json。输出一个json格式的回复,格式如下:{"testCount":1,"testTitle":"","testJson":[{"id":"7de1fdb4-bec3-4324-8986-4623f838e3d7","type":"2","teststitle":"1+1?","checkList":["1","2","3"],"timuList":[],"answer":[1],"userAnswer":[],"explanation":"解析"}]}。输出语言为${lang.lang === "en"? "英文" : lang.lang === "hk"? "繁体中文" : "简体中文"}`,
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ chat_no_stream2(prompt, { type: 'json_object' }).then(async (res: any) => {
|
|
|
+ console.log('选择题', JSON.parse(res));
|
|
|
+ gType.value = 'chat'
|
|
|
+ setPageId(45, res).then(res => {
|
|
|
+ let url = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/workPage.html#/setWorkPage?id=${res}&type=${45}`;
|
|
|
+ createSlide()
|
|
|
+ createFrameElement(url, 45)
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ else if (message.jsonData?.gType === 'generate_qa') {
|
|
|
+ console.log(message.jsonData?.gType)
|
|
|
+ const prompt = [
|
|
|
+ {
|
|
|
+ role: 'user',
|
|
|
+ content: `这是用户输入的内容:“${message.aiContent}”,根据用户输入的内容,生成问答题的json。输出一个json格式的回复,格式如下:{"answerQ":"问题","answer":"","fileList":[],"imageList":[],"evaluationCriteria":"评价标准"}。输出语言为${lang.lang === "en"? "英文" : lang.lang === "hk"? "繁体中文" : "简体中文"}`,
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ chat_no_stream2(prompt, { type: 'json_object' }).then((res: any) => {
|
|
|
+ console.log('问答题', JSON.parse(res));
|
|
|
+ gType.value = 'chat'
|
|
|
+ setPageId(15, res).then(res => {
|
|
|
+ let url = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/workPage.html#/setWorkPage?id=${res}&type=${15}`;
|
|
|
+ createSlide()
|
|
|
+ createFrameElement(url, 15)
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const setPageId = async (tool: any, json: any) => {
|
|
|
+ const res = await getWorkPageId({
|
|
|
+ userid: props.userid || '',
|
|
|
+ type: tool,
|
|
|
+ json: json
|
|
|
+ })
|
|
|
+ return res[0][0].id
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
const agentid1 = ref('cbb29b41-2a4a-4453-bf8d-357929ced4bd')// 判断意图
|
|
|
const agentid2 = ref('f86aa63c-b7b7-4d03-9b37-b59f116d36f3')// 生成内容
|
|
|
|