From e7a44b64dceb984b0bb243bfdcae73edb099e5f1 Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期一, 26 八月 2024 21:04:49 +0800
Subject: [PATCH] agent
---
src/views/sessionManager/index.vue | 160 +++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 125 insertions(+), 35 deletions(-)
diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index 96bc8bb..2d252ee 100644
--- a/src/views/sessionManager/index.vue
+++ b/src/views/sessionManager/index.vue
@@ -87,30 +87,68 @@
<template #avatar>
<img
class="icon-user-jpg"
- src="../../assets/images/icon-chart.png"
+ src="../../assets/images/icon-picture.png"
alt="鏈湴鍥剧墖"
/>
</template>
<template #content>
- <!-- <a-card :class="{ chatItemAnswer: theme === 'light' }">-->
- <!-- <div-->
- <!-- :class="{ light: theme === 'light' }"-->
- <!-- v-html="sessionDetail.content.replace(/\n/g, '<br/>')"-->
- <!-- >-->
- <!-- </div>-->
- <!-- </a-card>-->
- <a-textarea
- readonly
- auto-size
- v-model="sessionDetail.content"
- :class="{ chatItemAnswer: theme === 'light' }"
- :style="{
- backgroundColor:
- theme === 'light' ? '#ffffff' : '#000000',
- }"
- style="border: none"
- >
- </a-textarea>
+ <a-card v-if="isExistTip(sessionDetail.content)">
+ <div
+ :class="{ chatItemAnswer: theme === 'light' }"
+ :style="{
+ backgroundColor:
+ theme === 'light' ? '#ffffff' : '#000000',
+ }"
+ style="border: none; display: inline"
+ v-for="(item, tipIndex) in tipMatch(sessionDetail)"
+ >
+ <span v-if="tipIndex == 0">
+ {{ sessionDetail.content.substring(0, item.index) }}
+ <a-tooltip
+ background-color="#3491FA"
+ :content="
+ getTipContent(messagenList.reference, index)
+ "
+ >
+ <img
+ style="width: 20px; height: 20px"
+ :src="tipImage"
+ />
+ </a-tooltip>
+ </span>
+ <span v-else>
+ {{
+ sessionDetail.content.substring(
+ item.preIndex + item.item.length,
+ item.index
+ )
+ }}
+ <a-tooltip
+ background-color="#3491FA"
+ :content="
+ getTipContent(messagenList.reference, index)
+ "
+ >
+ <img
+ style="width: 20px; height: 20px"
+ :src="tipImage"
+ />
+ </a-tooltip>
+ </span>
+ </div>
+ </a-card>
+ <a-card v-else>
+ <div
+ :class="{ chatItemAnswer: theme === 'light' }"
+ :style="{
+ backgroundColor:
+ theme === 'light' ? '#ffffff' : '#000000',
+ }"
+ style="border: none"
+ >
+ {{ sessionDetail.content }}
+ </div>
+ </a-card>
</template>
<!-- <div>{{ sessionDetail.role === 'assistant' }}</div> -->
<template #actions>
@@ -159,7 +197,7 @@
<template #avatar>
<img
class="icon-user-jpg"
- src="../../assets/images/icon-chart.png"
+ src="../../assets/images/icon-picture.png"
alt="鏈湴鍥剧墖"
/>
</template>
@@ -340,6 +378,12 @@
</div>
</a-col>
</a-row>
+ <a-modal title=" " v-model:visible="fileVisible" :footer="false" fullscreen>
+ <!-- <docx previewSrc="http://192.168.20.116:1080/v1/document/get/405c3efa4d8c11ef97560242ac120006"></docx>-->
+ <docx v-if="documenttype == 'docx'" :previewSrc="previewSrc"></docx>
+ <excel v-if="documenttype == 'excel'" :previewSrc="previewSrc"></excel>
+ <txtPdf v-if="documenttype == 'txtPdf'" :previewSrc="previewSrc"></txtPdf>
+ </a-modal>
<a-modal
v-model:visible="visible"
title="淇敼鍚嶇О"
@@ -368,7 +412,7 @@
</div>
</template>
<script setup lang="ts">
- import { useAppStore, useUserStore } from '@/store';
+ import { useAppStore, userModelState, useUserStore } from '@/store';
import {
computed,
nextTick,
@@ -407,6 +451,11 @@
import pdfImg3 from '@/assets/session/execl.png';
import pdfImg4 from '@/assets/session/icon-txt.png';
import pdfImg5 from '@/assets/session/txt.png';
+ import tipImage from '@/assets/session/tip.png';
+
+ import docx from '@/views/dmx/knowledgeLib/components/docx.vue';
+ import excel from '@/views/dmx/knowledgeLib/components/excel.vue';
+ import txtPdf from '@/views/dmx/knowledgeLib/components/txtPdf.vue';
// const url = ref('../../assets/session/PDF.png');
@@ -450,7 +499,13 @@
const fileInput = ref(null);
const chatDataMeg = reactive({});
const visible = ref(false);
+ const fileVisible = ref(false);
let toStop = false;
+ let documenttype = ref('docx');
+ let previewSrc = ref('');
+
+ const modelStore = userModelState();
+ const httpUrl = modelStore.hrefUrl;
const rules = {
name: [
@@ -476,8 +531,28 @@
}
};
let dataItem = [];
- const getTxt = (data, role, message, index) => {
+ const isExistTip = (message: string): boolean => {
if (/##[0-9]\$\$/.test(message)) {
+ return true;
+ } else {
+ return false;
+ }
+ };
+
+ const tipMatch = (session: any): any[] => {
+ //match session.content涓殑##[0-9]$$鐨勭储寮�
+ let indexs: any[] = [];
+ let preTip = 0;
+ session.content.match(/##([0-9]+)\$\$/g)?.map((item) => {
+ let i = session.content.indexOf(item);
+ indexs.push({ index: i, item: item, preIndex: preTip });
+ preTip = i;
+ });
+ return indexs;
+ };
+
+ const getTxt = (data, role, message, index) => {
+ if (isExistTip(message)) {
if (role == 'assistant' && index) {
let i = index / 2 - 1 > 0 ? index / 2 - 1 : 0;
dataItem = data[i].doc_aggs;
@@ -489,13 +564,23 @@
return dataItem;
};
- const clickHref = (item) => {
- // return Message.warning('鏆傛棤娉曟煡鐪�');
- // window.open(`/api/v1/document/get/${item.doc_id}`, '_blank');
- downloadFile({
- url: `/api/v1/document/get/${item.doc_id}`,
- filename: item.doc_name,
+ const getTipContent = (data, index): string => {
+ let maxSimilarityContent = '';
+ let i = index / 2 - 1 > 0 ? index / 2 - 1 : 0;
+ let maxSimilarity = 0;
+ data[i].chunks.forEach((chunk) => {
+ if (chunk.similarity > maxSimilarity) {
+ maxSimilarity = chunk.similarity;
+ maxSimilarityContent = chunk.content_with_weight;
+ }
});
+ return maxSimilarityContent;
+ };
+
+ const clickHref = async (item) => {
+ documenttype.value = item.doc_name.split('.').pop();
+ previewSrc.value = httpUrl + `/api/v1/document/get/${item.doc_id}`;
+ fileVisible.value = true;
};
const downloadFile = ({
@@ -559,7 +644,7 @@
const selectFileCallback = (data) => {
console.log(data, 'selectFileCallback');
- uploaditemList.value = data;
+ uploaditemList.value = [...uploaditemList.value, ...data];
};
let onFileSelectedLoading = ref(false);
@@ -644,6 +729,7 @@
// 鍙戦��
const sentClick = () => {
sendMessage('click');
+ uploaditemList.value = [];
};
// 閲嶆柊鐢熸垚
const reGenerate = () => {
@@ -669,7 +755,6 @@
//鏂板缓浼氳瘽
// 濡傛灉鏈変細璇漣d
console.log(inputMsg.value, '鏂板缓浼氳瘽鍚嶇О');
-
const res = await addSessionApi({
dialog_id: '',
conversation_desc: inputMsg.value,
@@ -678,9 +763,15 @@
if (res.code == 200) {
// console.log(res.data.conversation_id);
activeSessionId.value = res.data?.conversation_id;
- startChat(inputMsg.value);
- inputMsg.value = '';
- // queryNewSessionDetail(res.data?.conversation_id);
+ const { code, data } = await getSessionDetailsApi(
+ res.data?.conversation_id
+ );
+ if (code === 200) {
+ console.log(data, '鏂板缓浼氳瘽璇︽儏');
+ Object.assign(chatObj, data);
+ startChat(inputMsg.value);
+ inputMsg.value = '';
+ }
} else {
Message.error('鍒涘缓浼氳瘽澶辫触锛岃閲嶈瘯');
}
@@ -793,7 +884,6 @@
sessionDetailList.value = sessionDetailList.value
.splice(0, sessionDetailList.value.length - 2)
.concat(lastArr);
-
console.log(sessionDetailList.value, 'sessionDetailList2');
console.log(chatObj, 'chatObj瀵硅薄');
chatObj.message = chatObj.message.concat(lastArr);
--
Gitblit v1.8.0