refactor(ai): 引入 Spring AI 简化 LLM 集成,通过 Function Call 为管理系统提供智能化交互入口。

This commit is contained in:
Ray.Hao
2025-11-14 21:48:38 +08:00
parent 95412501fc
commit 0bcaf93193
36 changed files with 1126 additions and 992 deletions

View File

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youlai.boot.platform.ai.mapper.AiCommandRecordMapper">
<resultMap id="AiCommandRecordVOResult" type="com.youlai.boot.platform.ai.model.vo.AiCommandRecordVO">
<id property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="username" column="username"/>
<result property="originalCommand" column="original_command"/>
<result property="provider" column="provider"/>
<result property="model" column="model"/>
<result property="parseSuccess" column="parse_success"/>
<result property="functionCalls" column="function_calls"/>
<result property="explanation" column="explanation"/>
<result property="confidence" column="confidence"/>
<result property="parseErrorMessage" column="parse_error_message"/>
<result property="inputTokens" column="input_tokens"/>
<result property="outputTokens" column="output_tokens"/>
<result property="totalTokens" column="total_tokens"/>
<result property="parseTime" column="parse_time"/>
<result property="functionName" column="function_name"/>
<result property="functionArguments" column="function_arguments"/>
<result property="executeStatus" column="execute_status"/>
<result property="executeResult" column="execute_result"/>
<result property="executeErrorMessage" column="execute_error_message"/>
<result property="affectedRows" column="affected_rows"/>
<result property="isDangerous" column="is_dangerous"/>
<result property="requiresConfirmation" column="requires_confirmation"/>
<result property="userConfirmed" column="user_confirmed"/>
<result property="executionTime" column="execution_time"/>
<result property="ipAddress" column="ip_address"/>
<result property="userAgent" column="user_agent"/>
<result property="currentRoute" column="current_route"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
</resultMap>
<select id="getRecordPage" resultMap="AiCommandRecordVOResult">
SELECT
acr.id,
acr.user_id,
acr.username,
acr.original_command,
acr.provider,
acr.model,
acr.parse_success,
acr.function_calls,
acr.explanation,
acr.confidence,
acr.parse_error_message,
acr.input_tokens,
acr.output_tokens,
acr.total_tokens,
acr.parse_time,
acr.function_name,
acr.function_arguments,
acr.execute_status,
acr.execute_result,
acr.execute_error_message,
acr.affected_rows,
acr.is_dangerous,
acr.requires_confirmation,
acr.user_confirmed,
acr.execution_time,
acr.ip_address,
acr.user_agent,
acr.current_route,
acr.create_time,
acr.update_time,
acr.remark
FROM ai_command_record acr
<where>
<if test="queryParams.keywords != null and queryParams.keywords != ''">
(
acr.original_command LIKE CONCAT('%', #{queryParams.keywords}, '%')
OR acr.function_name LIKE CONCAT('%', #{queryParams.keywords}, '%')
OR acr.username LIKE CONCAT('%', #{queryParams.keywords}, '%')
)
</if>
<if test="queryParams.executeStatus != null and queryParams.executeStatus != ''">
AND acr.execute_status = #{queryParams.executeStatus}
</if>
<if test="queryParams.userId != null">
AND acr.user_id = #{queryParams.userId}
</if>
<if test="queryParams.isDangerous != null">
AND acr.is_dangerous = #{queryParams.isDangerous}
</if>
<if test="queryParams.functionName != null and queryParams.functionName != ''">
AND acr.function_name = #{queryParams.functionName}
</if>
<if test="
queryParams.createTime != null
and queryParams.createTime.size() == 2
and queryParams.createTime[0] != null
and queryParams.createTime[0] != ''
and queryParams.createTime[1] != null
and queryParams.createTime[1] != ''
">
AND acr.create_time BETWEEN #{queryParams.createTime[0]} AND #{queryParams.createTime[1]}
</if>
</where>
ORDER BY acr.create_time DESC
</select>
</mapper>