From 4b00c16eb77127b8a4ed4f84148915ca49e6ea7b Mon Sep 17 00:00:00 2001 From: williamhliu <137068196+williamhliu@users.noreply.github.com> Date: Fri, 15 Dec 2023 17:41:35 +0800 Subject: [PATCH] (feature)(chat-sdk) modify the method for obtaining similar questions and recommended drill-down dimensions; do not display assistant button when there is only one assistant (#514) --- .../chat-sdk/src/Chat/ChatFooter/index.tsx | 10 +- webapp/packages/chat-sdk/src/Chat/index.tsx | 2 +- webapp/packages/chat-sdk/src/common/type.ts | 7 +- .../ChatItem/SimilarQuestionItem.tsx | 18 ++-- .../src/components/ChatItem/index.tsx | 8 +- .../src/components/ChatItem/style.less | 12 ++- .../chat-sdk/src/components/ChatMsg/index.tsx | 3 +- .../components/DrillDownDimensions/index.tsx | 10 +- webapp/packages/chat-sdk/src/service/index.ts | 94 ++++++++++++++----- 9 files changed, 107 insertions(+), 57 deletions(-) diff --git a/webapp/packages/chat-sdk/src/Chat/ChatFooter/index.tsx b/webapp/packages/chat-sdk/src/Chat/ChatFooter/index.tsx index 26a3b5376..57356203f 100644 --- a/webapp/packages/chat-sdk/src/Chat/ChatFooter/index.tsx +++ b/webapp/packages/chat-sdk/src/Chat/ChatFooter/index.tsx @@ -311,10 +311,12 @@ const ChatFooter: ForwardRefRenderFunction = (
历史对话
)} -
- -
智能助理
-
+ {agentList?.length > 1 && ( +
+ +
智能助理
+
+ )} {!isMobile && (
diff --git a/webapp/packages/chat-sdk/src/Chat/index.tsx b/webapp/packages/chat-sdk/src/Chat/index.tsx index 5f1d7877f..8c2839fb6 100644 --- a/webapp/packages/chat-sdk/src/Chat/index.tsx +++ b/webapp/packages/chat-sdk/src/Chat/index.tsx @@ -177,7 +177,7 @@ const Chat: ForwardRefRenderFunction = ( msg: item.queryText, parseInfos: item.parseInfos, parseTimeCost: item.parseTimeCost, - msgData: item.queryResult, + msgData: { ...(item.queryResult || {}), similarQueries: item.similarQueries }, score: item.score, agentId: currentAgent?.id, })); diff --git a/webapp/packages/chat-sdk/src/common/type.ts b/webapp/packages/chat-sdk/src/common/type.ts index 1794925bd..7593cf3c1 100644 --- a/webapp/packages/chat-sdk/src/common/type.ts +++ b/webapp/packages/chat-sdk/src/common/type.ts @@ -140,6 +140,8 @@ export type MsgDataType = { response: PluginResonseType; parseInfos?: ChatContextType[]; queryTimeCost?: number; + similarQueries: SimilarQuestionType[]; + recommendedDimensions: DrillDownDimensionType[]; }; export enum ParseStateEnum { @@ -220,6 +222,7 @@ export type HistoryMsgItemType = { createTime: string; feedback: string; score: number; + similarQueries: SimilarQuestionType[]; }; export type HistoryType = { @@ -242,8 +245,8 @@ export type SendMsgParamsType = { }; export type SimilarQuestionType = { - // queryId: number; - // parseId: number; + queryId: number; + parseId: number; queryText: string; }; diff --git a/webapp/packages/chat-sdk/src/components/ChatItem/SimilarQuestionItem.tsx b/webapp/packages/chat-sdk/src/components/ChatItem/SimilarQuestionItem.tsx index 5cadab492..6ece17743 100644 --- a/webapp/packages/chat-sdk/src/components/ChatItem/SimilarQuestionItem.tsx +++ b/webapp/packages/chat-sdk/src/components/ChatItem/SimilarQuestionItem.tsx @@ -5,21 +5,21 @@ import { useEffect, useState } from 'react'; import { querySimilarQuestions } from '../../service'; type Props = { - // similarQuestions: SimilarQuestionType[]; - queryText: string; - agentId?: number; + queryId?: number; + similarQueries?: SimilarQuestionType[]; defaultExpanded?: boolean; onSelectQuestion: (question: SimilarQuestionType) => void; }; const SimilarQuestions: React.FC = ({ - // similarQuestions, - queryText, - agentId, + queryId, + similarQueries, defaultExpanded, onSelectQuestion, }) => { - const [similarQuestions, setSimilarQuestions] = useState([]); + const [similarQuestions, setSimilarQuestions] = useState( + similarQueries || [] + ); const [expanded, setExpanded] = useState(defaultExpanded || false); const [loading, setLoading] = useState(false); @@ -28,9 +28,9 @@ const SimilarQuestions: React.FC = ({ const initData = async () => { setLoading(true); - const res = await querySimilarQuestions(queryText, agentId); + const res = await querySimilarQuestions(queryId!); setLoading(false); - setSimilarQuestions(res.data || []); + setSimilarQuestions(res.data?.similarQueries || []); }; useEffect(() => { diff --git a/webapp/packages/chat-sdk/src/components/ChatItem/index.tsx b/webapp/packages/chat-sdk/src/components/ChatItem/index.tsx index c3815cd03..2f8c762bf 100644 --- a/webapp/packages/chat-sdk/src/components/ChatItem/index.tsx +++ b/webapp/packages/chat-sdk/src/components/ChatItem/index.tsx @@ -97,7 +97,9 @@ const ChatItem: React.FC = ({ data = res.data; tip = ''; } - setDataCache({ ...dataCache, [chatContext!.id!]: { tip, data } }); + if (chatContext) { + setDataCache({ ...dataCache, [chatContext!.id!]: { tip, data } }); + } if (data) { setData(data); setExecuteTip(''); @@ -356,9 +358,9 @@ const ChatItem: React.FC = ({ )} {(parseTip !== '' || (executeMode && !executeLoading)) && integrateSystem !== 'c2' && ( )} diff --git a/webapp/packages/chat-sdk/src/components/ChatItem/style.less b/webapp/packages/chat-sdk/src/components/ChatItem/style.less index 08a1ad47f..8ac3e2e1d 100644 --- a/webapp/packages/chat-sdk/src/components/ChatItem/style.less +++ b/webapp/packages/chat-sdk/src/components/ChatItem/style.less @@ -244,7 +244,7 @@ &-tip-content-option-disabled { cursor: auto; - &:hover { + &:hover { color: var(--text-color-secondary); border-color: var(--border-color-base); } @@ -414,12 +414,14 @@ font-weight: normal; } - .ant-select-selector, .ant-input-number-input { + .ant-select-selector, + .ant-input-number-input { background-color: #f5f8fb !important; border-color: #ececec !important; } - .ant-select-selection-item, .ant-input-number-input { + .ant-select-selection-item, + .ant-input-number-input { color: var(--chat-blue); font-weight: 500; } @@ -447,7 +449,7 @@ margin-right: 10px; cursor: pointer; } - + &-code { margin-top: 10px !important; padding: 6px 14px 8px !important; @@ -455,7 +457,7 @@ border-radius: 4px !important; background: #f5f8fb !important; } - + &-copy-btn { position: absolute; top: 24px; diff --git a/webapp/packages/chat-sdk/src/components/ChatMsg/index.tsx b/webapp/packages/chat-sdk/src/components/ChatMsg/index.tsx index 4c9020b52..4c1b1ad4f 100644 --- a/webapp/packages/chat-sdk/src/components/ChatMsg/index.tsx +++ b/webapp/packages/chat-sdk/src/components/ChatMsg/index.tsx @@ -270,8 +270,7 @@ const ChatMsg: React.FC = ({ queryId, data, chartIndex, triggerResize }) )} {existDrillDownDimension && ( = ({ - modelId, - metricId, + drillDownDimensions, drillDownDimension, secondDrillDownDimension, originDimensions, @@ -32,9 +29,8 @@ const DrillDownDimensions: React.FC = ({ const prefixCls = `${CLS_PREFIX}-drill-down-dimensions`; const initData = async () => { - const res = await queryDrillDownDimensions(modelId, metricId); setDimensions( - res.data.dimensions + drillDownDimensions .filter( dimension => !dimensionFilters?.some(filter => filter.name === dimension.name) && diff --git a/webapp/packages/chat-sdk/src/service/index.ts b/webapp/packages/chat-sdk/src/service/index.ts index ab2675285..47dd87101 100644 --- a/webapp/packages/chat-sdk/src/service/index.ts +++ b/webapp/packages/chat-sdk/src/service/index.ts @@ -1,17 +1,31 @@ import axios from './axiosInstance'; -import { ChatContextType, DrillDownDimensionType, EntityInfoType, HistoryType, MsgDataType, ParseDataType, SearchRecommendItem } from '../common/type'; +import { + ChatContextType, + DrillDownDimensionType, + EntityInfoType, + HistoryMsgItemType, + HistoryType, + MsgDataType, + ParseDataType, + SearchRecommendItem, +} from '../common/type'; import { isMobile } from '../utils/utils'; const DEFAULT_CHAT_ID = 0; const prefix = isMobile ? '/openapi' : '/api'; -export function searchRecommend(queryText: string, chatId?: number, modelId?: number, agentId?: number) { +export function searchRecommend( + queryText: string, + chatId?: number, + modelId?: number, + agentId?: number +) { return axios.post(`${prefix}/chat/query/search`, { queryText, chatId: chatId || DEFAULT_CHAT_ID, modelId, - agentId + agentId, }); } @@ -20,30 +34,40 @@ export function chatQuery(queryText: string, chatId?: number, modelId?: number, queryText, chatId: chatId || DEFAULT_CHAT_ID, modelId, - queryFilters: filters ? { - filters - } : undefined, + queryFilters: filters + ? { + filters, + } + : undefined, }); } -export function chatParse(queryText: string, chatId?: number, modelId?: number, agentId?: number, filters?: any[]) { +export function chatParse( + queryText: string, + chatId?: number, + modelId?: number, + agentId?: number, + filters?: any[] +) { return axios.post(`${prefix}/chat/query/parse`, { queryText, chatId: chatId || DEFAULT_CHAT_ID, modelId, agentId, - queryFilters: filters ? { - filters - } : undefined, + queryFilters: filters + ? { + filters, + } + : undefined, }); } -export function chatExecute(queryText: string, chatId: number, parseInfo: ChatContextType ) { +export function chatExecute(queryText: string, chatId: number, parseInfo: ChatContextType) { return axios.post(`${prefix}/chat/query/execute`, { queryText, chatId: chatId || DEFAULT_CHAT_ID, queryId: parseInfo.queryId, - parseId: parseInfo.id + parseId: parseInfo.id, }); } @@ -59,13 +83,21 @@ export function queryData(chatContext: Partial) { return axios.post(`${prefix}/chat/query/queryData`, chatContext); } -export function getHistoryMsg(current: number, chatId: number = DEFAULT_CHAT_ID, pageSize: number = 10) { +export function getHistoryMsg( + current: number, + chatId: number = DEFAULT_CHAT_ID, + pageSize: number = 10 +) { return axios.post(`${prefix}/chat/manage/pageQueryInfo?chatId=${chatId}`, { current, pageSize, }); } +export function querySimilarQuestions(queryId: number) { + return axios.get(`${prefix}/chat/manage/getChatQuery/${queryId}`); +} + export function queryEntities(entityId: string | number, modelId: number) { return axios.post(`${prefix}/chat/query/choice`, { entityId, @@ -74,21 +106,35 @@ export function queryEntities(entityId: string | number, modelId: number) { } export function updateQAFeedback(questionId: number, score: number) { - return axios.post(`${prefix}/chat/manage/updateQAFeedback?id=${questionId}&score=${score}&feedback=`); + return axios.post( + `${prefix}/chat/manage/updateQAFeedback?id=${questionId}&score=${score}&feedback=` + ); } -export function queryDrillDownDimensions(modelId: number, metricId?: number) { - return axios.get<{ dimensions: DrillDownDimensionType[] }>(`${prefix}/chat/recommend/metric/${modelId}${metricId ? `?metricId=${metricId}` : ''}`); +export function queryDimensionValues( + modelId: number, + bizName: string, + agentId: number, + elementID: number, + value: string +) { + return axios.post(`${prefix}/chat/query/queryDimensionValue`, { + modelId, + bizName, + agentId, + elementID, + value, + }); } -export function queryDimensionValues(modelId: number, bizName: string, agentId: number, elementID: number, value: string) { - return axios.post(`${prefix}/chat/query/queryDimensionValue`, { modelId, bizName, agentId, elementID, value}); -} - -export function querySimilarQuestions(queryText: string, agentId?: number) { - return axios.get(`${prefix}/chat/manage/getSolvedQuery?queryText=${queryText}&agentId=${agentId || 0}`); -} +// export function querySimilarQuestions(queryText: string, agentId?: number) { +// return axios.get( +// `${prefix}/chat/manage/getSolvedQuery?queryText=${queryText}&agentId=${agentId || 0}` +// ); +// } export function queryEntityInfo(queryId: number, parseId: number) { - return axios.get(`${prefix}/chat/query/getEntityInfo?queryId=${queryId}&parseId=${parseId}`) + return axios.get( + `${prefix}/chat/query/getEntityInfo?queryId=${queryId}&parseId=${parseId}` + ); }