From 6d453537c8acf92ea5d9decbf6744df07f00efb1 Mon Sep 17 00:00:00 2001
From: liudong <liudong>
Date: 星期六, 03 八月 2024 22:29:25 +0800
Subject: [PATCH] 智能体管理的页面开发和功能开发
---
src/api/Agent.ts | 59 +++++++++++
src/views/dmx/IntelligentAgent/index.vue | 105 +++++++++++++-------
src/views/dmx/IntelligentAgent/components/editAgent.vue | 83 +++++++++++++++-
src/views/dmx/IntelligentAgent/components/addAgent.vue | 4
4 files changed, 206 insertions(+), 45 deletions(-)
diff --git a/src/api/Agent.ts b/src/api/Agent.ts
new file mode 100644
index 0000000..9c1928d
--- /dev/null
+++ b/src/api/Agent.ts
@@ -0,0 +1,59 @@
+import axios from "axios";
+import qs from "query-string";
+import type { DescData } from "@arco-design/web-vue/es/descriptions/interface";
+
+
+// 鏅鸿兘浣撳垪琛ㄦ帴鍙�
+export function querydialogList(params) {
+ return axios.get("/api/v1/dialog/list", {
+ params
+ });
+}
+
+// 鏅鸿兘浣撹鎯呮帴鍙�
+export function querydialogdetail(params) {
+ return axios.get("/api/v1/dialog/get", {
+ params
+ });
+}
+
+
+// 鏅鸿兘浣撹亰澶╂帴鍙�
+export function conversationList(params) {
+ return axios.get("/api/v1/conversation/list", {
+ params
+ });
+}
+
+// 鏅鸿兘浣撳垱寤�/鏇存柊鎺ュ彛
+export function dialogSet(params) {
+ return axios.post("/api/v1/dialog/set", params);
+}
+
+// 鏅鸿兘浣撳垹闄ゆ帴鍙�
+export function deletedialog(params) {
+ return axios.post("/api/v1/dialog/rm", params);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dmx/IntelligentAgent/components/addAgent.vue b/src/views/dmx/IntelligentAgent/components/addAgent.vue
index a5c2c6d..cbfb80d 100644
--- a/src/views/dmx/IntelligentAgent/components/addAgent.vue
+++ b/src/views/dmx/IntelligentAgent/components/addAgent.vue
@@ -23,7 +23,7 @@
<div style="width: 100%;text-align: right">
<a-button @click="visible = false">鍙栨秷</a-button>
<a-button style="margin-left: 10px" type="primary" html-type="submit">纭畾</a-button>
- <editAgent ref="editAgentKuai" typeAngint="add" :formData="form"></editAgent>
+ <editAgent ref="editAgentKuai" typeAngint="add" :formData="form" @cancelModal="handleCancel"></editAgent>
</div>
</a-form-item>
</a-form>
@@ -103,6 +103,8 @@
const handleCancel = () => {
visible.value = false;
+ formRef.value.resetFields();
+ form.name = ''
}
const handleOpened =(el) => {
diff --git a/src/views/dmx/IntelligentAgent/components/editAgent.vue b/src/views/dmx/IntelligentAgent/components/editAgent.vue
index 629c68c..f4c81de 100644
--- a/src/views/dmx/IntelligentAgent/components/editAgent.vue
+++ b/src/views/dmx/IntelligentAgent/components/editAgent.vue
@@ -1,6 +1,6 @@
<template>
- <a-button v-if="typeAngint=='edit'" type="text" size="small" @click="handleClick">
+ <a-button v-if="typeAngint=='edit'" type="text" size="small" @click="editClick">
<template #icon>
<icon-tool />
</template>
@@ -26,8 +26,10 @@
</div>
<div style="background:#eeeeee;width: 50%;">
<a-form ref="formRef" :rules="rules" :model="form" @submit="handleSubmit" layout="vertical" >
-
<a-collapse :default-active-key="['1']">
+ <a-collapse-item header="鍩虹淇℃伅" key="0" v-if="typeAngint == 'edit'">
+ <a-input v-model="form.name" placeholder="璇疯緭鍏ユ櫤鑳戒綋鍚嶇О" style="width:200px;margin-top: 10px" />
+ </a-collapse-item>
<a-collapse-item header="AI妯″瀷閰嶇疆" key="1">
<a-space direction="vertical" size="large">
<a-select :size="'large'" v-model="form.llm_id" :style="{width:'25rem'}" placeholder="璇烽�夋嫨 ...">
@@ -58,7 +60,7 @@
</a-collapse>
<a-form-item>
- <div style="position: absolute;right: 10px;top: 10px">
+ <div style="position: absolute;right: 10px;top: 0px;z-index: 99999">
<!-- <a-button @click="visible = false">鍙栨秷</a-button>-->
<a-button style="margin-left: 10px" type="primary" html-type="submit">淇濆瓨</a-button>
</div>
@@ -101,11 +103,49 @@
import { IconSend } from "@arco-design/web-vue/es/icon";
import { queryKbList, queryModelList } from "@/api/kbList";
import useLoading from "@/hooks/loading";
+import { dialogSet } from "@/api/Agent";
+import { Message } from "@arco-design/web-vue";
const { setLoading } = useLoading(true);
const props = defineProps(['typeAngint','formData'])
const visible = ref(false);
const loading = ref(false);
-const form = reactive({});
+const form = reactive({
+ name: "",
+ icon: "",
+ language: "English",
+ prompt_config: {
+ empty_response: "",
+ prologue: "浣犲ソ锛� 鎴戞槸浣犵殑鍔╃悊锛屾湁浠�涔堝彲浠ュ府鍒颁綘鐨勫悧锛�",
+ quote: true,
+ self_rag: true,
+ system: "绀轰緥锛歕n" +
+ "浣犳槸 XX锛屽叿鏈� XX 缁忛獙锛屾搮闀� XX锛屸�n" +
+ "浣犵殑浠诲姟鏄� XX 锛岄渶瑕佹寜鐓т互涓嬫楠ゆ墽琛岋細\n" +
+ "1. XX\n" +
+ "2. XX\n" +
+ "3. 鈥n",
+ parameters: [
+ {
+ "key": "knowledge",
+ "optional": false
+ }
+ ]
+ },
+ kb_ids: [
+ "985eda244efc11ef9a7a0242ac120006"
+ ],
+ llm_id: "qwen-plus",
+ llm_setting: {
+ temperature: 0.1,
+ top_p: 0.3,
+ presence_penalty: 0.4,
+ frequency_penalty: 0.7,
+ max_tokens: 512
+ },
+ similarity_threshold: 0.2,
+ vector_similarity_weight: 0.30000000000000004,
+ top_n: 8
+});
const system = ref('');
const embdId = ref('');
const modelList = ref({});
@@ -114,7 +154,7 @@
let tabs = ref([])
const height = ref('calc(100vh - 150px)')
const heightrg = ref('calc(100vh - 100px)')
-
+const emit = defineEmits(['cancelModal'])
const rules = {
name: [
{
@@ -125,9 +165,35 @@
}
-const handleSubmit = ({values, errors}) => {
- console.log('values:', values, '\nerrors:', errors)
+const handleSubmit = async({values, errors}) => {
+ // console.log('values:', values, '\nerrors:', errors)
+ let title = '鍒涘缓鎴愬姛';
+ let formNew = {...form}
+ if(props.typeAngint == 'edit'){
+ formNew.dialog_id = form.id;
+ delete formNew.id;
+ delete formNew.off;
+ title = '淇敼鎴愬姛';
+ }
+
+ const data = await dialogSet(formNew);
+ if(data.code == 0){
+ Message.success(title);
+ handleCancel()
+
+ }
+
}
+
+const editClick = (data) => {
+ visible.value = true;
+
+ console.log(props.formData);
+ Object.assign(form,props.formData);
+ console.log(form);
+ system.value = form.prompt_config.system;
+
+};
const handleClick = (data) => {
visible.value = true;
@@ -153,10 +219,13 @@
};
const handleCancel = () => {
visible.value = false;
+ emit('cancelModal')
}
const handleOpened =(el) => {
// formRef.value.resetFields();
+
+
}
const queryModel = async (params) => {
try {
diff --git a/src/views/dmx/IntelligentAgent/index.vue b/src/views/dmx/IntelligentAgent/index.vue
index 4f23e22..fd06fda 100644
--- a/src/views/dmx/IntelligentAgent/index.vue
+++ b/src/views/dmx/IntelligentAgent/index.vue
@@ -8,6 +8,7 @@
<a-input-search
:placeholder="$t('cardList.searchInput.placeholder')"
style="width: 240px;"
+ @change="queryList"
/>
</div>
<a-divider style="margin: 10px 0" />
@@ -37,7 +38,7 @@
<!-- </div>-->
</a-card>
</div>
- <div class="card-wrap" v-for="(item, index) of data" :key="index">
+ <div class="card-wrap" v-for="(item, index) of agentList" :key="item.id">
<a-card :bordered="false" hoverable >
<a-avatar :style="{ backgroundColor: '#3370ff' }">
<img
@@ -46,7 +47,7 @@
src="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a20012a2d4d5b9db43dfc6a01fe508c0.png~tplv-uwbnlip3yd-webp.webp"
/>
</a-avatar>
- <a-switch style="position: absolute;top: 10px;right: 10px" size="medium">
+ <a-switch v-model="item.off" style="position: absolute;top: 10px;right: 10px" size="medium" @change="handleChange(item)">
<template #checked>
涓婄嚎
</template>
@@ -57,22 +58,25 @@
<div class="arco-card-body-content">
<div class="arco-card-body-content-top">
<span style="font-size: 18px;font-weight: 900">
- {{ item.title }}
+ {{ item.name }}
</span>
</div>
<div class="arco-card-body-content-down">
- 閫氳繃鎻忚堪瑙掕壊鍜屼换鍔℃潵鍒涘缓浣犵殑鏅鸿兘浣�
- 鏅鸿兘浣撳彲浠ヨ皟鐢ㄥ涓伐浣滄祦鍜屽伐鍏�
+ {{item.prompt_config.prologue}}
</div>
</div>
<div style="position: absolute; bottom: 1.4rem; left: 1rem;">
- <icon-user /> <span style="font-size: 12px">鐜嬫旦</span>
+ <icon-user /> <span style="font-size: 12px">
+<!-- {{ item.name }}-->
+ </span>
</div>
<div style="position: absolute; bottom: 1rem; right: 1rem;">
<a-space>
-<!-- <editAgent typeAngint="edit"></editAgent>-->
- <a-popconfirm :content="'纭畾鍒犻櫎鍚�'" type="warning" @ok="deleteItem(record)">
+ <span v-show="!item.off">
+ <editAgent ref="editAgentKuai" typeAngint="edit" :formData="form" @cancelModal="handleCancel"></editAgent>
+ </span>
+ <a-popconfirm :content="'纭畾鍒犻櫎鍚�'" type="warning" @ok="deleteItem(item)">
<a-button type="text" size="small">
<template #icon>
<icon-delete />
@@ -93,31 +97,35 @@
</template>
<script lang="ts" setup>
- import { ref, reactive, nextTick } from 'vue';
+import { ref, reactive, nextTick, onBeforeMount } from "vue";
import addAgent from "@/views/dmx/IntelligentAgent/components/addAgent.vue";
import editAgent from "@/views/dmx/IntelligentAgent/components/editAgent.vue";
- import { kbdocumentrm } from "@/api/kbList";
+ import { kbdocumentrm, queryKbList } from "@/api/kbList";
import { Message } from "@arco-design/web-vue";
+import { deletedialog, querydialogList } from "@/api/Agent";
+ import useLoading from "@/hooks/loading";
+ const { loading, setLoading } = useLoading(true);
let count = 5;
const activeKey = ref(1);
const addAgents = ref();
- const data = ref([
- {
- key: 2,
- title: '鍐呭璐ㄦ',
- content: 'Content of Tab Panel 2',
- },
- {
- key: 3,
- title: '寮�閫氭湇鍔�',
- content: 'Content of Tab Panel 3',
- },
- {
- key: 4,
- title: '瑙勫垯棰勭疆',
- content: 'Content of Tab Panel 4',
- },
+ const editAgentKuai = ref();
+ const agentList = ref([
+ // {
+ // key: 2,
+ // title: '鍐呭璐ㄦ',
+ // content: 'Content of Tab Panel 2',
+ // },
+ // {
+ // key: 3,
+ // title: '寮�閫氭湇鍔�',
+ // content: 'Content of Tab Panel 3',
+ // },
+ // {
+ // key: 4,
+ // title: '瑙勫垯棰勭疆',
+ // content: 'Content of Tab Panel 4',
+ // },
]);
const changeTabs = (val) => {
activeKey.value = val;
@@ -132,25 +140,45 @@
const visible = ref(false);
const formRef = ref(null);
const form = reactive({
- size: 'medium',
- name: '',
+ // size: 'medium',
+ // name: '',
});
+
+ const queryList = async (
+ params = { }
+ ) => {
+ setLoading(true);
+ try {
+ const { data } = await querydialogList(params);
+ console.log(data, 'data');
+ agentList.value = data.map((item) => {
+ return {
+ ...item,
+ off: true,
+ }
+ });
+ } catch (err) {
+ // you can report use errorHandler or other
+ } finally {
+ setLoading(false);
+ }
+ };
+
const deleteItem = async (row)=>{
console.log(row);
- let data = await kbdocumentrm({doc_id: row.id})
+ let data = await deletedialog({dialog_ids: [row.id]})
if(data.code == 0){
Message.success('鍒犻櫎鎴愬姛');
- console.log(kbobj, 'kbobj');
- fetchData({
- kb_id: kbobj.id,
- page: 1,
- page_size: 20
- })
+ queryList()
}
}
+ const handleChange = async (item) => {
+ if (item){
+ Object.assign(form,item)
+ }
+ };
const handleCancel = () => {
- formRef.value.resetFields();
- visible.value = false;
+ queryList()
};
const handleSubmit = ({ values, errors }) => {
this.$refs.formRef.validate().then((res, a, b) => {
@@ -158,6 +186,9 @@
console.log('values', values);
});
};
+ onBeforeMount(()=>{
+ queryList();
+ })
</script>
<script lang="ts">
--
Gitblit v1.8.0