know-engine

项目中问题回答全流程

以下是ChatController.send 方法的全流程介绍。 阶段一:会话管理 1、接收前端传入的 userId、content(用户问题)、conversationId(可选) 2、若 conversationId 为空,则创…

TL;DR

以下是ChatController.send 方法的全流程介绍。 阶段一:会话管理 1、接收前端传入的 userId、content(用户问题)、conversationId(可选) 2、若 conversationId 为空,则创…

以下是ChatController.send 方法的全流程介绍。

阶段一:会话管理

1、接收前端传入的 userId、content(用户问题)、conversationId(可选) 2、若 conversationId 为空,则创建新会话:用用户问题前20字符作为临时标题,同步写入数据库 3、异步(虚拟线程)调用 LLM 生成摘要标题,完成后回写数据库更新标题 4、若 conversationId 已有,直接使用

阶段二:消息持久化 & 意图识别

1、将用户消息保存到数据库(chatMessageService.saveUserMessage) 2、调用 IntentRecognitionService 进行意图识别(基于 LLM + 结构化输出),判断用户问题是否与汽车领域相关,并提取实体信息(车型、订单号、故障描述等) 3、若 related=false(非汽车相关问题),走 CommonChatService 通用对话分支,直接返回流式结果 4、若 related=true,进入 RAG 增强检索分支

阶段三:RAG 增强检索(ChatApplicationService.chat)

1、查询改写(KnowEngineQueryTransformer):用 LLM 对用户问题进行改写优化(简洁改写、抽象改写、错别字纠正、车型标准化),返回改写查询 + 原始查询两个 Query,异步回写改写结果到数据库 2、查询路由(KnowEngineQueryRouter):用 LLM 判断查询应走哪个数据源: - relational_db → SqlDatabaseContentRetriever(关系型数据库,Text2SQL) - graph_db → Neo4jText2CypherRetriever(图数据库,Text2Cypher) - knowledge_base → ElasticsearchContentRetriever(ES 向量检索 + 全文检索) 3、内容检索:被路由到的 Retriever 执行检索,获取相关 Content 列表 4、内容聚合 + 重排序(ReRankingContentAggregator):用 BGE-RERANKER ONNX 模型对检索结果进行重排序,选取第一个查询作为重排序参考 5、内容注入(DefaultContentInjector):根据意图识别结果选择对应 Prompt 模板,将检索内容注入到 Prompt 中

阶段四:流式生成回复

1、构建 KnowEngineChatAiService(含 ChatMemory,窗口10条),调用 streamChat 进行流式对话 2、返回 Flux 给前端(SSE 流式推送)

版本提示

模型、框架与接口会持续变化。涉及版本号、参数与生产配置时,请在实践前对照对应官方文档。

LLMentor系统化学习大模型应用工程

内容来自个人课程知识库备份,并经过结构化整理。技术版本持续演进,生产使用前请结合官方文档验证。