From 4419de18f76f30ad00574c0a1d93f65a1468d5f5 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Mon, 24 Feb 2025 19:43:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=BE=93=E5=85=A5=E8=A1=A8?= =?UTF-8?q?=E7=8E=B0=E5=92=8C=E7=BD=91=E9=A1=B5=E6=90=9C=E7=B4=A2=E7=BB=93?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/retriever.py | 2 +- src/routers/chat_router.py | 5 +- web/src/components/ChatComponent.vue | 183 +++++++++++++++------------ web/src/components/RefsComponent.vue | 8 +- 4 files changed, 111 insertions(+), 87 deletions(-) diff --git a/src/core/retriever.py b/src/core/retriever.py index 1bd14f1e..1cfb862a 100644 --- a/src/core/retriever.py +++ b/src/core/retriever.py @@ -128,7 +128,7 @@ class Retriever: def query_web(self, query, history, refs): """查询网络""" - if not (refs["meta"].get("enable_web_search") and self.config.enable_web_search): + if not (refs["meta"].get("use_web") and self.config.enable_web_search): return {"results": [], "message": "Web search is disabled"} try: diff --git a/src/routers/chat_router.py b/src/routers/chat_router.py index ceb86c9e..12a60100 100644 --- a/src/routers/chat_router.py +++ b/src/routers/chat_router.py @@ -35,12 +35,15 @@ def chat_post( **kwargs }, ensure_ascii=False).encode('utf-8') + b"\n" + def need_retrieve(meta): + return meta.get("use_web") or meta.get("use_graph") or meta.get("db_name") + def generate_response(): modified_query = query refs = None # 处理知识库检索 - if meta and meta.get("enable_retrieval"): + if meta and need_retrieve(meta): chunk = make_chunk(status="searching") yield chunk diff --git a/web/src/components/ChatComponent.vue b/web/src/components/ChatComponent.vue index 1ac31040..6f4b1092 100644 --- a/web/src/components/ChatComponent.vue +++ b/web/src/components/ChatComponent.vue @@ -16,26 +16,6 @@
- - - - - - {{ meta.selectedKB === null ? '不使用' : opts.databases[meta.selectedKB]?.name }} - - - @@ -46,44 +26,9 @@
总结对话标题
-
- 启用检索
-
最大历史轮数
- - -
- 图数据库
-
-
- 网页搜索
-
-
@@ -148,18 +93,60 @@
- - - - +
+ +
+
-

请注意辨别内容的可靠性 模型供应商:{{ configStore.config?.model_provider }}: {{ configStore.config?.model_name }}

+

请注意辨别内容的可靠性 By {{ configStore.config?.model_provider }}: {{ configStore.config?.model_name }}

@@ -173,6 +160,8 @@ import { LoadingOutlined, BookOutlined, BookFilled, + CompassOutlined, + ArrowUpOutlined, CompassFilled, GoldenFilled, GoldOutlined, @@ -222,10 +211,8 @@ const opts = reactive({ }) const meta = reactive(JSON.parse(localStorage.getItem('meta')) || { - enable_retrieval: false, use_graph: false, use_web: false, - enable_web_search: false, graph_name: "neo4j", // use_rewrite_query: "off", selectedKB: null, @@ -459,10 +446,7 @@ const fetchChatResponse = (user_input, cur_res_id) => { if (done) { const msg = conv.value.messages.find((msg) => msg.id === cur_res_id) console.log(msg) - if (msg.meta.enable_retrieval) { - console.log("fetching refs") - groupRefs(cur_res_id); - } + groupRefs(cur_res_id); updateMessage({showThinking: "no", id: cur_res_id}); isStreaming.value = false; if (conv.value.messages.length === 2) { renameTitle(); } @@ -819,13 +803,12 @@ watch( .input-box { display: flex; + flex-direction: column; width: 100%; height: auto; max-width: 900px; margin: 0 auto; - align-items: flex-end; padding: 0.25rem 0.5rem; - // box-shadow: rgba(42, 60, 79, 0.1) 0px 6px 10px 0px; border: 2px solid #E5E5E5; border-radius: 1rem; background: #fcfdfd; @@ -833,7 +816,43 @@ watch( &:focus-within { border: 2px solid var(--main-500); background: white; - // box-shadow: rgb(42 60 79 / 5%) 0px 4px 10px 0px; + } + + .input-options { + display: flex; + padding: 4px 8px; + + .options__left, + .options__right { + display: flex; + align-items: center; + gap: 8px; + } + + .options__left { + flex: 1; + + .opt-item { + border-radius: 12px; + border: 1px solid var(--gray-300); + padding: 4px 8px; + cursor: pointer; + font-size: 12px; + color: var(--gray-700); + + &.active { + color: var(--main-600); + border: 1px solid var(--main-500); + background-color: var(--main-10); + } + } + } + } + + .input-area { + display: flex; + align-items: flex-end; + gap: 8px; } textarea.user-input { @@ -843,7 +862,7 @@ watch( background-color: transparent; border: none; font-size: 1.2rem; - margin: 0 0.6rem; + margin: 0 0; color: #111111; font-size: 16px; font-variation-settings: 'wght' 400, 'opsz' 10.5; @@ -861,21 +880,23 @@ watch( } button.ant-btn-icon-only { - font-size: 1.25rem; + height: 32px; + width: 32px; cursor: pointer; - background-color: transparent; + background-color: var(--main-color); + border-radius: 50%; border: none; transition: color 0.3s; box-shadow: none; - color: var(--main-700);; + color: white; padding: 0; &:hover { - color: var(--gray-1000); + background-color: var(--main-800); } &:disabled { - color: #ccc; + background-color: var(--gray-400); cursor: not-allowed; } } diff --git a/web/src/components/RefsComponent.vue b/web/src/components/RefsComponent.vue index d2f2d5f2..2c908f5c 100644 --- a/web/src/components/RefsComponent.vue +++ b/web/src/components/RefsComponent.vue @@ -15,9 +15,9 @@ - 网页搜索 {{ msg.refs.web_search.results.length }} + 网页搜索 {{ msg.refs.web_search?.results.length }} { - if (msg.refs.web_search) { - webResults.value = msg.refs.web_search.results + if (msg.refs?.web_search) { + webResults.value = msg.refs?.web_search.results webResultVisible.value = true } else { console.error('无法获取网页搜索结果')