mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 12:07:42 +00:00
(improvement)(chat) add QueryResponder to recall history similar solved query
This commit is contained in:
@@ -21,4 +21,5 @@ public class QueryResult {
|
|||||||
private SemanticParseInfo chatContext;
|
private SemanticParseInfo chatContext;
|
||||||
private Object response;
|
private Object response;
|
||||||
private List<Map<String, Object>> queryResults;
|
private List<Map<String, Object>> queryResults;
|
||||||
|
private List<SolvedQueryRecallResp> similarSolvedQuery;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,4 +29,7 @@ public class EmbeddingConfig {
|
|||||||
@Value("${embedding.solvedQuery.add.path:/solved_query_add}")
|
@Value("${embedding.solvedQuery.add.path:/solved_query_add}")
|
||||||
private String solvedQueryAddPath;
|
private String solvedQueryAddPath;
|
||||||
|
|
||||||
|
@Value("${embedding.solved.query.nResult:5}")
|
||||||
|
private String solvedQueryResultNum;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public class DefaultQueryResponder implements QueryResponder {
|
|||||||
List<SolvedQueryRecallResp> solvedQueryRecallResps = Lists.newArrayList();
|
List<SolvedQueryRecallResp> solvedQueryRecallResps = Lists.newArrayList();
|
||||||
try {
|
try {
|
||||||
String url = embeddingConfig.getUrl() + embeddingConfig.getSolvedQueryRecallPath() + "?n_results="
|
String url = embeddingConfig.getUrl() + embeddingConfig.getSolvedQueryRecallPath() + "?n_results="
|
||||||
+ embeddingConfig.getNResult();
|
+ embeddingConfig.getSolvedQueryResultNum();
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||||
headers.setLocation(URI.create(url));
|
headers.setLocation(URI.create(url));
|
||||||
|
|||||||
@@ -175,27 +175,34 @@ public class QueryServiceImpl implements QueryService {
|
|||||||
ChatContext chatCtx = chatService.getOrCreateContext(queryReq.getChatId());
|
ChatContext chatCtx = chatService.getOrCreateContext(queryReq.getChatId());
|
||||||
chatCtx.setAgentId(queryReq.getAgentId());
|
chatCtx.setAgentId(queryReq.getAgentId());
|
||||||
Long startTime = System.currentTimeMillis();
|
Long startTime = System.currentTimeMillis();
|
||||||
QueryResult queryResult = semanticQuery.execute(queryReq.getUser());
|
QueryResult queryResult = null;
|
||||||
|
try {
|
||||||
if (queryResult != null) {
|
queryResult = semanticQuery.execute(queryReq.getUser());
|
||||||
timeCostDOList.add(StatisticsDO.builder().cost((int) (System.currentTimeMillis() - startTime))
|
} catch (Exception e) {
|
||||||
.interfaceName(semanticQuery.getClass().getSimpleName()).type(CostType.QUERY.getType()).build());
|
log.error("query execute failed, queryText:{}", queryReq.getQueryText(), e);
|
||||||
saveInfo(timeCostDOList, queryReq.getQueryText(), queryReq.getQueryId(),
|
queryResult = new QueryResult();
|
||||||
queryReq.getUser().getName(), queryReq.getChatId().longValue());
|
queryResult.setQueryState(QueryState.INVALID);
|
||||||
queryResult.setChatContext(parseInfo);
|
|
||||||
// update chat context after a successful semantic query
|
|
||||||
if (queryReq.isSaveAnswer() && QueryState.SUCCESS.equals(queryResult.getQueryState())) {
|
|
||||||
chatCtx.setParseInfo(parseInfo);
|
|
||||||
chatService.updateContext(chatCtx);
|
|
||||||
}
|
|
||||||
chatCtx.setQueryText(queryReq.getQueryText());
|
|
||||||
chatCtx.setUser(queryReq.getUser().getName());
|
|
||||||
chatService.updateQuery(queryReq.getQueryId(), queryResult, chatCtx);
|
|
||||||
queryResponder.saveSolvedQuery(queryReq.getQueryText(), queryReq.getQueryId(), queryReq.getParseId());
|
|
||||||
} else {
|
|
||||||
chatService.deleteChatQuery(queryReq.getQueryId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timeCostDOList.add(StatisticsDO.builder().cost((int) (System.currentTimeMillis() - startTime))
|
||||||
|
.interfaceName(semanticQuery.getClass().getSimpleName()).type(CostType.QUERY.getType()).build());
|
||||||
|
saveInfo(timeCostDOList, queryReq.getQueryText(), queryReq.getQueryId(),
|
||||||
|
queryReq.getUser().getName(), queryReq.getChatId().longValue());
|
||||||
|
queryResult.setChatContext(parseInfo);
|
||||||
|
// update chat context after a successful semantic query
|
||||||
|
if (queryReq.isSaveAnswer() && QueryState.SUCCESS.equals(queryResult.getQueryState())) {
|
||||||
|
chatCtx.setParseInfo(parseInfo);
|
||||||
|
chatService.updateContext(chatCtx);
|
||||||
|
queryResponder.saveSolvedQuery(queryReq.getQueryText(), queryReq.getQueryId(), queryReq.getParseId());
|
||||||
|
}
|
||||||
|
chatCtx.setQueryText(queryReq.getQueryText());
|
||||||
|
chatCtx.setUser(queryReq.getUser().getName());
|
||||||
|
chatService.updateQuery(queryReq.getQueryId(), queryResult, chatCtx);
|
||||||
|
if (!QueryState.SUCCESS.equals(queryResult.getQueryState())) {
|
||||||
|
List<SolvedQueryRecallResp> solvedQueryRecallResps =
|
||||||
|
queryResponder.recallSolvedQuery(queryReq.getQueryText());
|
||||||
|
queryResult.setSimilarSolvedQuery(solvedQueryRecallResps);
|
||||||
|
}
|
||||||
return queryResult;
|
return queryResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
<mapper namespace="com.tencent.supersonic.chat.persistence.mapper.ChatQueryDOMapper">
|
<mapper namespace="com.tencent.supersonic.chat.persistence.mapper.ChatQueryDOMapper">
|
||||||
<resultMap id="BaseResultMap" type="com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO">
|
<resultMap id="BaseResultMap" type="com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO">
|
||||||
<id column="question_id" jdbcType="BIGINT" property="questionId" />
|
<id column="question_id" jdbcType="BIGINT" property="questionId" />
|
||||||
|
<result column="agent_id" jdbcType="BIGINT" property="agentId" />
|
||||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
||||||
<result column="user_name" jdbcType="VARCHAR" property="userName" />
|
<result column="user_name" jdbcType="VARCHAR" property="userName" />
|
||||||
<result column="query_state" jdbcType="INTEGER" property="queryState" />
|
<result column="query_state" jdbcType="INTEGER" property="queryState" />
|
||||||
@@ -44,7 +45,7 @@
|
|||||||
</where>
|
</where>
|
||||||
</sql>
|
</sql>
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
question_id, create_time, user_name, query_state, chat_id, score, feedback
|
question_id, agent_id, create_time, user_name, query_state, chat_id, score, feedback
|
||||||
</sql>
|
</sql>
|
||||||
<sql id="Blob_Column_List">
|
<sql id="Blob_Column_List">
|
||||||
query_text, query_result
|
query_text, query_result
|
||||||
@@ -65,142 +66,23 @@
|
|||||||
order by ${orderByClause}
|
order by ${orderByClause}
|
||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
<select id="selectByExample" parameterType="com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDOExample" resultMap="BaseResultMap">
|
|
||||||
select
|
|
||||||
<if test="distinct">
|
|
||||||
distinct
|
|
||||||
</if>
|
|
||||||
<include refid="Base_Column_List" />
|
|
||||||
from s2_chat_query
|
|
||||||
<if test="_parameter != null">
|
|
||||||
<include refid="Example_Where_Clause" />
|
|
||||||
</if>
|
|
||||||
<if test="orderByClause != null">
|
|
||||||
order by ${orderByClause}
|
|
||||||
</if>
|
|
||||||
<if test="limitStart != null and limitStart>=0">
|
|
||||||
limit #{limitStart} , #{limitEnd}
|
|
||||||
</if>
|
|
||||||
</select>
|
|
||||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="ResultMapWithBLOBs">
|
|
||||||
select
|
|
||||||
<include refid="Base_Column_List" />
|
|
||||||
,
|
|
||||||
<include refid="Blob_Column_List" />
|
|
||||||
from s2_chat_query
|
|
||||||
where question_id = #{questionId,jdbcType=BIGINT}
|
|
||||||
</select>
|
|
||||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||||
delete from s2_chat_query
|
delete from s2_chat_query
|
||||||
where question_id = #{questionId,jdbcType=BIGINT}
|
where question_id = #{questionId,jdbcType=BIGINT}
|
||||||
</delete>
|
</delete>
|
||||||
<insert id="insert" parameterType="com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO">
|
<insert id="insert" parameterType="com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO">
|
||||||
insert into s2_chat_query (question_id, create_time, user_name,
|
insert into s2_chat_query (question_id, agent_id, create_time, user_name,
|
||||||
query_state, chat_id, score,
|
query_state, chat_id, score,
|
||||||
feedback, query_text, query_result
|
feedback, query_text, query_result
|
||||||
)
|
)
|
||||||
values (#{questionId,jdbcType=BIGINT}, #{createTime,jdbcType=TIMESTAMP}, #{userName,jdbcType=VARCHAR},
|
values (#{questionId,jdbcType=BIGINT}, #{agentId,jdbcType=BIGINT}, #{createTime,jdbcType=TIMESTAMP}, #{userName,jdbcType=VARCHAR},
|
||||||
#{queryState,jdbcType=INTEGER}, #{chatId,jdbcType=BIGINT}, #{score,jdbcType=INTEGER},
|
#{queryState,jdbcType=INTEGER}, #{chatId,jdbcType=BIGINT}, #{score,jdbcType=INTEGER},
|
||||||
#{feedback,jdbcType=VARCHAR}, #{queryText,jdbcType=LONGVARCHAR}, #{queryResult,jdbcType=LONGVARCHAR}
|
#{feedback,jdbcType=VARCHAR}, #{queryText,jdbcType=LONGVARCHAR}, #{queryResult,jdbcType=LONGVARCHAR}
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
<insert id="insertSelective" parameterType="com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO">
|
|
||||||
insert into s2_chat_query
|
|
||||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
|
||||||
<if test="questionId != null">
|
|
||||||
question_id,
|
|
||||||
</if>
|
|
||||||
<if test="createTime != null">
|
|
||||||
create_time,
|
|
||||||
</if>
|
|
||||||
<if test="userName != null">
|
|
||||||
user_name,
|
|
||||||
</if>
|
|
||||||
<if test="queryState != null">
|
|
||||||
query_state,
|
|
||||||
</if>
|
|
||||||
<if test="chatId != null">
|
|
||||||
chat_id,
|
|
||||||
</if>
|
|
||||||
<if test="score != null">
|
|
||||||
score,
|
|
||||||
</if>
|
|
||||||
<if test="feedback != null">
|
|
||||||
feedback,
|
|
||||||
</if>
|
|
||||||
<if test="queryText != null">
|
|
||||||
query_text,
|
|
||||||
</if>
|
|
||||||
<if test="queryResult != null">
|
|
||||||
query_result,
|
|
||||||
</if>
|
|
||||||
</trim>
|
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
|
||||||
<if test="questionId != null">
|
|
||||||
#{questionId,jdbcType=BIGINT},
|
|
||||||
</if>
|
|
||||||
<if test="createTime != null">
|
|
||||||
#{createTime,jdbcType=TIMESTAMP},
|
|
||||||
</if>
|
|
||||||
<if test="userName != null">
|
|
||||||
#{userName,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="queryState != null">
|
|
||||||
#{queryState,jdbcType=INTEGER},
|
|
||||||
</if>
|
|
||||||
<if test="chatId != null">
|
|
||||||
#{chatId,jdbcType=BIGINT},
|
|
||||||
</if>
|
|
||||||
<if test="score != null">
|
|
||||||
#{score,jdbcType=INTEGER},
|
|
||||||
</if>
|
|
||||||
<if test="feedback != null">
|
|
||||||
#{feedback,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="queryText != null">
|
|
||||||
#{queryText,jdbcType=LONGVARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="queryResult != null">
|
|
||||||
#{queryResult,jdbcType=LONGVARCHAR},
|
|
||||||
</if>
|
|
||||||
</trim>
|
|
||||||
</insert>
|
|
||||||
<select id="countByExample" parameterType="com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDOExample" resultType="java.lang.Long">
|
|
||||||
select count(*) from s2_chat_query
|
|
||||||
<if test="_parameter != null">
|
|
||||||
<include refid="Example_Where_Clause" />
|
|
||||||
</if>
|
|
||||||
</select>
|
|
||||||
<update id="updateByPrimaryKeySelective" parameterType="com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO">
|
|
||||||
update s2_chat_query
|
|
||||||
<set>
|
|
||||||
<if test="createTime != null">
|
|
||||||
create_time = #{createTime,jdbcType=TIMESTAMP},
|
|
||||||
</if>
|
|
||||||
<if test="userName != null">
|
|
||||||
user_name = #{userName,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="queryState != null">
|
|
||||||
query_state = #{queryState,jdbcType=INTEGER},
|
|
||||||
</if>
|
|
||||||
<if test="chatId != null">
|
|
||||||
chat_id = #{chatId,jdbcType=BIGINT},
|
|
||||||
</if>
|
|
||||||
<if test="score != null">
|
|
||||||
score = #{score,jdbcType=INTEGER},
|
|
||||||
</if>
|
|
||||||
<if test="feedback != null">
|
|
||||||
feedback = #{feedback,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="queryText != null">
|
|
||||||
query_text = #{queryText,jdbcType=LONGVARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="queryResult != null">
|
|
||||||
query_result = #{queryResult,jdbcType=LONGVARCHAR},
|
|
||||||
</if>
|
|
||||||
</set>
|
|
||||||
where question_id = #{questionId,jdbcType=BIGINT}
|
|
||||||
</update>
|
|
||||||
<update id="updateByPrimaryKeyWithBLOBs" parameterType="com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO">
|
<update id="updateByPrimaryKeyWithBLOBs" parameterType="com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO">
|
||||||
update s2_chat_query
|
update s2_chat_query
|
||||||
<set>
|
<set>
|
||||||
@@ -216,6 +98,9 @@
|
|||||||
<if test="chatId != null">
|
<if test="chatId != null">
|
||||||
chat_id = #{chatId,jdbcType=BIGINT},
|
chat_id = #{chatId,jdbcType=BIGINT},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="agentId != null">
|
||||||
|
agent_id = #{agentId,jdbcType=INTEGER},
|
||||||
|
</if>
|
||||||
<if test="score != null">
|
<if test="score != null">
|
||||||
score = #{score,jdbcType=INTEGER},
|
score = #{score,jdbcType=INTEGER},
|
||||||
</if>
|
</if>
|
||||||
@@ -231,14 +116,5 @@
|
|||||||
</set>
|
</set>
|
||||||
where question_id = #{questionId,jdbcType=BIGINT}
|
where question_id = #{questionId,jdbcType=BIGINT}
|
||||||
</update>
|
</update>
|
||||||
<update id="updateByPrimaryKey" parameterType="com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO">
|
|
||||||
update s2_chat_query
|
|
||||||
set create_time = #{createTime,jdbcType=TIMESTAMP},
|
|
||||||
user_name = #{userName,jdbcType=VARCHAR},
|
|
||||||
query_state = #{queryState,jdbcType=INTEGER},
|
|
||||||
chat_id = #{chatId,jdbcType=BIGINT},
|
|
||||||
score = #{score,jdbcType=INTEGER},
|
|
||||||
feedback = #{feedback,jdbcType=VARCHAR}
|
|
||||||
where question_id = #{questionId,jdbcType=BIGINT}
|
|
||||||
</update>
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user