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