diff --git a/config/config.yaml b/config/config.yaml index c7669909c..5f8a19e28 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -11,30 +11,18 @@ conversation: vector_threshold: 0.5 rerank_threshold: 0.5 rerank_top_k: 5 - fallback_strategy: "fixed" + fallback_strategy: "model" fallback_response: "抱歉,我无法回答这个问题。" fallback_prompt: | - 你是一个专业、友好的AI助手。现在用户提出的问题超出了你的知识库范围,你需要生成一个礼貌且有帮助的回复。 + 你是一个专业、友好的AI助手。请根据你的知识直接回答用户的问题。 ## 回复要求 - - 诚实承认你无法提供准确答案 - - 简洁友好,不要过度道歉 - - 可以提供相关的建议或替代方案 - - 回复控制在50字以内 + - 直接回答用户的问题 + - 简洁清晰,言之有物 + - 如果涉及实时数据或个人隐私信息,诚实说明无法获取 - 使用礼貌、专业的语气 - ## Few-shot示例 - - 用户问题: 今天杭州西湖的游客数量是多少? - 回复: 抱歉,我无法获取实时的杭州西湖游客数据。您可以通过杭州旅游官网或相关APP查询这一信息。 - - 用户问题: 张教授的新论文发表了吗? - 回复: 我没有张教授的最新论文信息。建议您查询学术数据库或直接联系张教授获取最新动态。 - - 用户问题: 我的银行卡号是多少? - 回复: 作为AI助手,我无法获取您的个人银行信息。请登录您的银行APP或联系银行客服获取相关信息。 - - ## 用户当前的问题是: + ## 用户的问题是: {{.Query}} enable_rewrite: true enable_query_expansion: true @@ -175,28 +163,14 @@ conversation: ## 以下是用户给出的文章相关信息: generate_session_title_prompt: | - 你是一个专业的会话标题生成助手,你的任务是为用户提问创建简洁、精准且具描述性的标题。 + 根据用户的问题,生成一个简短的会话标题。 - ## 格式要求 - - 标题长度必须在10个字以内 - - 标题应准确反映用户问题的核心主题 - - 使用名词短语结构,避免使用问句 - - 保持简洁明了,删除非必要词语 - - 不要使用"关于"、"如何"等冗余词语开头 - - 直接输出标题文本,不要有任何前缀、解释或标点符号 + 要求: + - 5-10个字 + - 提取核心主题 + - 只输出标题,无需解释 - ## Few-shot示例 - - 用户问题: 如何提高英语口语水平? - 标题: 英语口语提升 - - 用户问题: 最近上海有什么好玩的展览活动? - 标题: 上海展览推荐 - - 用户问题: 苹果手机电池不耐用怎么解决? - 标题: 苹果电池优化 - - ## 用户的问题是: + 用户问题: summary: repeat_penalty: 1.0 temperature: 0.3 diff --git a/frontend/src/api/chat/streame.ts b/frontend/src/api/chat/streame.ts index 2d3d2ba73..4516f87a5 100644 --- a/frontend/src/api/chat/streame.ts +++ b/frontend/src/api/chat/streame.ts @@ -28,7 +28,7 @@ export function useStream() { let renderTimer: number | null = null // 启动流式请求 - const startStream = async (params: { session_id: any; query: any; knowledge_base_ids?: string[]; agent_enabled?: boolean; web_search_enabled?: boolean; summary_model_id?: string; mcp_service_ids?: string[]; method: string; url: string }) => { + const startStream = async (params: { session_id: any; query: any; knowledge_base_ids?: string[]; knowledge_ids?: string[]; agent_enabled?: boolean; web_search_enabled?: boolean; summary_model_id?: string; mcp_service_ids?: string[]; method: string; url: string }) => { // 重置状态 output.value = ''; error.value = null; @@ -85,6 +85,10 @@ export function useStream() { if (params.knowledge_base_ids !== undefined && params.knowledge_base_ids.length > 0) { postBody.knowledge_base_ids = params.knowledge_base_ids; } + // Include knowledge_ids if provided + if (params.knowledge_ids !== undefined && params.knowledge_ids.length > 0) { + postBody.knowledge_ids = params.knowledge_ids; + } // Include web_search_enabled if provided if (params.web_search_enabled !== undefined) { postBody.web_search_enabled = params.web_search_enabled; diff --git a/frontend/src/api/knowledge-base/index.ts b/frontend/src/api/knowledge-base/index.ts index 236a6e1e7..7c5f1cb34 100644 --- a/frontend/src/api/knowledge-base/index.ts +++ b/frontend/src/api/knowledge-base/index.ts @@ -230,4 +230,8 @@ export interface FAQImportProgress { export function getFAQImportProgress(taskId: string) { return get(`/api/v1/faq/import/progress/${taskId}`); -} \ No newline at end of file +} + +export function searchKnowledge(keyword: string, offset = 0, limit = 20) { + return get(`/api/v1/knowledge/search?keyword=${encodeURIComponent(keyword)}&offset=${offset}&limit=${limit}`); +} diff --git a/frontend/src/components/Input-field.vue b/frontend/src/components/Input-field.vue index 89b446a0a..44534ee3a 100644 --- a/frontend/src/components/Input-field.vue +++ b/frontend/src/components/Input-field.vue @@ -1,13 +1,15 @@