diff --git a/modules/cms-ai/README.md b/modules/cms-ai/README.md
index 7cb9bb9e..283562f4 100644
--- a/modules/cms-ai/README.md
+++ b/modules/cms-ai/README.md
@@ -9,7 +9,7 @@
能获得最新且准确的结果。这种检索与生成相结合的方式,不仅提高了信息检索的准确性,还增强了回答的上下文关联性,
特别适合处理复杂的企业知识库。
-此外该模块,支持云上大模型和本地部署的大模型,如:Ollama、DeepSeek、通义千问,理论上支持所有 OpenAPI 标准接口的 AI 提供商。
+此外该模块,支持在线大模型和本地部署的大模型,如:Ollama、DeepSeek、通义千问,理论上支持所有 OpenAPI 标准接口的 AI 提供商。
并能无缝集成多种嵌入式 AI 模型的向量数据库,如 Chroma、PGVector、Elasticsearch、Milvus 等,实现高效的数据存储、检索及分析。
无论是大规模数据集还是高度专业化的领域知识,JeeSite CMS + RAG + AI 都能提供定制化解决方案,满足企业多样化的业务需求和技术要求。
企业可以轻松管理和访问复杂的信息资源,促进内部知识共享和创新,从而在竞争激烈的市场环境中保持领先地位。
diff --git a/modules/cms-ai/pom.xml b/modules/cms-ai/pom.xml
index 516fd9c1..548c0532 100644
--- a/modules/cms-ai/pom.xml
+++ b/modules/cms-ai/pom.xml
@@ -37,7 +37,7 @@
${project.parent.version}
-
+
org.springframework.ai
spring-ai-starter-model-openai
diff --git a/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/config/CmsAiChatConfig.java b/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/config/CmsAiChatConfig.java
index 5d49ecce..ceeff286 100644
--- a/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/config/CmsAiChatConfig.java
+++ b/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/config/CmsAiChatConfig.java
@@ -5,6 +5,7 @@
package com.jeesite.modules.cms.ai.config;
import com.jeesite.common.datasource.DataSourceHolder;
+import com.jeesite.common.lang.StringUtils;
import com.jeesite.modules.cms.ai.properties.CmsAiProperties;
import com.jeesite.modules.cms.ai.tools.CmsAiTools;
import org.springframework.ai.chat.client.ChatClient;
@@ -29,17 +30,9 @@ public class CmsAiChatConfig {
*/
@Bean
public ChatClient chatClient(ChatClient.Builder builder, CmsAiProperties properties) {
- builder.defaultSystem("""
- ## 人物设定
- 你是我的知识库AI助手,你把我当作朋友,耐心真诚地回复我提出的相关问题。
- 你需要遵循以下原则,与关注者进行友善而有价值的沟通。
- ## 表达方式:
- 1. 使用简体中文回答我的问题。
- 2. 使用幽默有趣的方式与我沟通。
- 3. 增加互动,如 “您的看法如何?”
- 4. 可以用表情,避免过多表情。
- 5. KaTeX 公式使用 $ 包裹。
- """);
+ if (StringUtils.isNotBlank(properties.getDefaultSystem())) {
+ builder.defaultSystem(properties.getDefaultSystem());
+ }
if (properties.getToolCalls()) {
builder.defaultTools(new CmsAiTools());
}
diff --git a/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/properties/CmsAiProperties.java b/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/properties/CmsAiProperties.java
index c8ca33e8..d9c26847 100644
--- a/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/properties/CmsAiProperties.java
+++ b/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/properties/CmsAiProperties.java
@@ -7,6 +7,8 @@ public class CmsAiProperties {
private Boolean toolCalls = false;
+ private String defaultSystem = "";
+
public Boolean getToolCalls() {
return toolCalls;
}
@@ -14,4 +16,12 @@ public class CmsAiProperties {
public void setToolCalls(Boolean toolCalls) {
this.toolCalls = toolCalls;
}
+
+ public String getDefaultSystem() {
+ return defaultSystem;
+ }
+
+ public void setDefaultSystem(String defaultSystem) {
+ this.defaultSystem = defaultSystem;
+ }
}
diff --git a/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/service/CmsAiChatService.java b/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/service/CmsAiChatService.java
index 7b2f41ec..3bc3cdc2 100644
--- a/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/service/CmsAiChatService.java
+++ b/modules/cms-ai/src/main/java/com/jeesite/modules/cms/ai/service/CmsAiChatService.java
@@ -40,8 +40,8 @@ import java.util.Map;
public class CmsAiChatService extends BaseService {
private static final String CMS_CHAT_CACHE = "cmsChatCache";
- private static final String[] USER_MESSAGE_SEARCH = new String[]{"{", "}", "$", "%"};
- private static final String[] USER_MESSAGE_REPLACE = new String[]{"\\{", "\\}", "\\$", "\\%"};
+ private static final String[] USER_MESSAGE_SEARCH = new String[]{"{", "}"};
+ private static final String[] USER_MESSAGE_REPLACE = new String[]{"\\{", "\\}"};
@Autowired
private ChatClient chatClient;
diff --git a/modules/cms-ai/src/main/resources/config/jeesite-cms-ai.yml b/modules/cms-ai/src/main/resources/config/jeesite-cms-ai.yml
index 350283e1..ffc6bf43 100644
--- a/modules/cms-ai/src/main/resources/config/jeesite-cms-ai.yml
+++ b/modules/cms-ai/src/main/resources/config/jeesite-cms-ai.yml
@@ -3,7 +3,7 @@
spring:
ai:
- # 云上大模型(使用该模型,请开启 enabled 参数)
+ # 在线大模型【请在 pom.xml 中打开 openai 的注释,并注释上其它模型】
openai:
base-url: https://api.siliconflow.cn
api-key: ${SFLOW_APP_KEY}
@@ -31,10 +31,7 @@ spring:
#model: text-embedding-v3
#dimensions: 1024
- # 是否启用工具调用
- tool-calls: false
-
- # 本地大模型配置(使用该模型,请开启 enabled 参数)
+ # 本地大模型配置【请在 pom.xml 中打开 ollama 的注释,并注释上其它模型】
ollama:
base-url: http://localhost:11434
# 聊天对话模型
@@ -58,16 +55,16 @@ spring:
# 向量数据库配置
vectorstore:
- # Chroma 向量数据库
+ # Chroma 向量数据库【请在 pom.xml 中打开 chroma 的注释,并注释上其它向量库】
chroma:
client:
host: http://testserver
port: 8000
initialize-schema: true
- #collection-name: vector_store
- collection-name: vector_store_1024
+ collection-name: vector_store
+ #collection-name: vector_store_1024
- # Postgresql 向量数据库(PG 连接配置,见下文,需要手动建表)
+ # Postgresql 向量数据库(PG 连接配置,见下文,需要手动建表)【请在 pom.xml 中打开 pgvector 的注释,并注释上其它向量库】
pgvector:
id-type: TEXT
index-type: HNSW
@@ -81,14 +78,14 @@ spring:
dimensions: 1024
max-document-batch-size: 10000
- # ES 向量数据库(ES 连接配置,见下文)
+ # ES 向量数据库(ES 连接配置,见下文)【请在 pom.xml 中打开 elasticsearch 的注释,并注释上其它向量库】
elasticsearch:
index-name: vector-index
initialize-schema: true
dimensions: 1024
similarity: cosine
- # Milvus 向量数据库
+ # Milvus 向量数据库【请在 pom.xml 中打开 milvus 的注释,并注释上其它向量库】
milvus:
client:
host: "localhost"
@@ -102,29 +99,45 @@ spring:
index-type: HNSW
metric-type: COSINE
+ # 是否启用工具调用【例子详见 CmsAiTools.java 】
+ tool-calls: false
+
+ # 默认系统提示词
+ default-system: |
+ ## 人物设定
+ 你是我的知识库AI助手,你把我当作朋友,耐心真诚地回复我提出的相关问题。
+ 你需要遵循以下原则,与关注者进行友善而有价值的沟通。
+ ## 表达方式:
+ 1. 使用简体中文回答我的问题。
+ 2. 使用幽默有趣的方式与我沟通。
+ 3. 可以用少量表情,避免过多表情。
+ 4. 增加互动,如 “您的看法如何?”
+
+
+
# ========= Postgresql 向量数据库数据源 =========
-jdbc:
- ds_pgvector:
- type: postgresql
- driver: org.postgresql.Driver
- url: jdbc:postgresql://127.0.0.1:5433/jeesite-ai
- username: postgres
- password: postgres
- testSql: SELECT 1
- pool:
- init: 0
- minIdle: 0
- breakAfterAcquireFailure: true
+#jdbc:
+# ds_pgvector:
+# type: postgresql
+# driver: org.postgresql.Driver
+# url: jdbc:postgresql://127.0.0.1:5433/jeesite-ai
+# username: postgres
+# password: postgres
+# testSql: SELECT 1
+# pool:
+# init: 0
+# minIdle: 0
+# breakAfterAcquireFailure: true
# ========= ES 向量数据库连接配置 =========
-spring.elasticsearch:
- socket-timeout: 120s
- connection-timeout: 120s
- uris: http://127.0.0.1:9200
- username: elastic
- password: elastic
+#spring.elasticsearch:
+# socket-timeout: 120s
+# connection-timeout: 120s
+# uris: http://127.0.0.1:9200
+# username: elastic
+# password: elastic
# 对话消息存缓存,可自定义存数据库
j2cache: