Skip to content

Commit c0d5355

Browse files
authored
Merge pull request #37 from Geniusay/master
AI提示词生成AI
2 parents 2a9615d + 3b97536 commit c0d5355

File tree

5 files changed

+169
-9
lines changed

5 files changed

+169
-9
lines changed

prompto-lab-app/src/main/java/io/github/timemachinelab/core/constant/AllPrompt.java

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,84 @@ public class AllPrompt {
2626
+ RetryPrompt.RETRY_PROMPT;
2727

2828

29+
public static final String GEN_PROMPT_AGENT_PROMPT = """
30+
身份:你是一名Prompt Engineer,精通提示词开发和优化,帮助用户将大语言模型用于各场景和研究领域。同时你能针对市面上各种不同类型不同功能的大模型来进行定制化的提示词开发和优化。
31+
32+
## 输入说明
33+
你将收到两个输入:
34+
1. user:用户画像信息
35+
2. aiModel:使用模型
36+
3. userTarget:用户需求
37+
4. userConversation:沟通详情
38+
39+
## 注意事项:
40+
① 接下来我会为你提供"用户画像信息", "使用模型","用户需求","沟通详情" 这四个关键数据。请基于这四个关键信息,为用户生成提示词内容。
41+
② 用户画像信息:用户画像信息代表着用户的身份信息,同一个需求不同用户所需要求也是不同的,你可以参考该字段来进行一些定制化的提示词生成
42+
③ 使用模型:使用模型即为用户准备使用什么模型来实现该需求,不同的模型所需的提示词也是不同的。作为提示词Prompt Engineer,你需要了解当前模型的提示词格式,构建基于该模型最优的提示词。
43+
④ 用户需求:用户目标需求,最终想要基于使用模型实现的目标。接下来你的提示词生成不能偏离用户需求
44+
⑤ 沟通详情:用户与需求经理基于自身需求进行的沟通和补充,这是十分关键的数据,这个数据包含了更加详尽的信息。沟通详情是一个树型结构,请你基于该数据结构详细分析用户与需求经理整个沟通过程,你需要基于沟通详情来丰富,详细化,优化提示词的生成。
45+
- 沟通详情数据结构:我会为你返回一个数组,数组每个元素是一个沟通节点,沟通节点有多种类型,每个节点包含了"节点id:id","父节点id:parentId","提问:question","回答:answer"等四个成员属性。每棵树必然存在一个根节点,一个节点下会有0~N个子节点。节点之间的父子关系说明问题之间存在关联关系。父节点id为空则代表此节点为根节点,是一个需求沟通的开始。一个节点存在提问但是不一定会有回答请注意。
46+
\s
47+
## 沟通节点类型:
48+
### 单选类型
49+
{
50+
"id":"节点id",
51+
"question": "选择问题描述",
52+
"type": "single",
53+
"parentId": "对话ID",
54+
"options": [
55+
{
56+
"id": "选项标识",
57+
"label": "选项显示文本"
58+
}
59+
],
60+
"desc": "问题的详细说明、引导提示或补充解释" // 可选
61+
}
62+
\s
63+
### 多选类型
64+
{
65+
"id":"节点id",
66+
"question": "选择问题描述",
67+
"type": "multi",
68+
"parentId": "对话ID",
69+
"options": [
70+
{
71+
"id": "选项标识",
72+
"label": "选项显示文本"
73+
}
74+
],
75+
"desc": "问题的详细说明、引导提示或补充解释" // 可选
76+
}
77+
\s
78+
### 表单类型
79+
80+
{
81+
"id":"节点id",
82+
"question": "表单引导语",
83+
"type": "form",
84+
"parentId": "对话ID",
85+
"fields": [
86+
{
87+
"id": "字段标识",
88+
"question": "字段问题描述",
89+
"type": "input|single|multi",
90+
"options": [
91+
{
92+
"id": "选项标识",
93+
"label": "选项显示文本"
94+
}
95+
], // 仅single/multi类型需要
96+
"desc": "字段的详细说明或引导", // 可选
97+
"weight": "权重分数"
98+
}
99+
],
100+
"desc": "表单的详细说明、填写引导或补充解释" // 可选
101+
}
102+
103+
## 返回结果格式:
104+
你只需要返回生成的提示词即可,不要返回其他任何和提示词无关的额外的内容。
105+
""";
106+
29107
public static void main(String[] args) {
30108
System.out.println(GLOBAL_PROMPT);
31109
}

prompto-lab-app/src/main/java/io/github/timemachinelab/core/session/application/ConversationService.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@
22

33
import com.alibaba.fastjson.JSON;
44
import com.alibaba.fastjson.JSONObject;
5+
import com.fasterxml.jackson.core.JsonProcessingException;
6+
import io.github.timemachinelab.core.constant.AllPrompt;
57
import com.suifeng.sfchain.core.AIService;
68
import io.github.timemachinelab.core.session.domain.entity.ConversationSession;
9+
import io.github.timemachinelab.core.session.infrastructure.ai.GenPromptOperation;
710
import io.github.timemachinelab.core.session.infrastructure.ai.QuestionGenerationOperation;
11+
import io.github.timemachinelab.sfchain.core.AIService;
12+
import io.github.timemachinelab.util.QaTreeSerializeUtil;
813
import lombok.RequiredArgsConstructor;
914
import lombok.extern.slf4j.Slf4j;
1015
import org.springframework.stereotype.Service;
@@ -32,7 +37,29 @@ public void processUserMessage(String userId, String userMessage, Consumer<Quest
3237

3338
processAIResponse(userMessage, sseCallback);
3439
}
35-
40+
41+
public void genPrompt(String sessionId, Consumer<GenPromptOperation.GpResponse> sseCallback){
42+
ConversationSession session = sessionManagementService.getSessionById(sessionId);
43+
GenPromptOperation.GpRequest req = new GenPromptOperation.GpRequest();
44+
45+
try {
46+
req.setPrompt(AllPrompt.GEN_PROMPT_AGENT_PROMPT);
47+
req.setUser(session.getUser());
48+
req.setUserTarget(session.getUserTarget());
49+
req.setAiModel(session.getAiModel());
50+
req.setUserConversation(QaTreeSerializeUtil.serialize(session.getQaTree()));
51+
52+
GenPromptOperation.GpResponse aiResponse = aiService.execute("PromptGenMaster", req);
53+
sseCallback.accept(aiResponse);
54+
}catch (Exception e){
55+
log.error("生成提示词失败 :{}",e.getMessage());
56+
GenPromptOperation.GpResponse resp = new GenPromptOperation.GpResponse();
57+
resp.setGenPrompt("生成提示词失败,请重试");
58+
sseCallback.accept(resp);
59+
}
60+
61+
}
62+
3663
private void processAIResponse(String userMessage, Consumer<QuestionGenerationOperation.QuestionGenerationResponse> sseCallback) {
3764
try {
3865

prompto-lab-app/src/main/java/io/github/timemachinelab/core/session/domain/entity/ConversationSession.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ public class ConversationSession {
2424
private QaTree qaTree; // 移除final,允许后续设置
2525
private final LocalDateTime createTime;
2626
private LocalDateTime updateTime;
27+
28+
private String user; //用户画像
29+
private String userTarget; // 用户目标
30+
private String aiModel; // AI模型
31+
32+
private String genPrompt; // 生成提示词
2733

2834
// 节点ID自增计数器,从1开始
2935
private final AtomicInteger nodeIdCounter = new AtomicInteger(0);

prompto-lab-app/src/main/java/io/github/timemachinelab/core/session/infrastructure/ai/ConversationOperation.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
import lombok.extern.slf4j.Slf4j;
77
import org.springframework.stereotype.Component;
88

9-
@AIOp(value = "CONVERSATION_OP",
10-
description = "基于QATree的智能会话操作,支持上下文理解和结构化对话",
11-
defaultModel = "gpt-4-turbo",
12-
requireJsonOutput = true,
13-
supportThinking = true,
14-
defaultMaxTokens = 2048,
15-
defaultTemperature = 0.8)
16-
@Component
9+
//@AIOp(value = "CONVERSATION_OP",
10+
// description = "基于QATree的智能会话操作,支持上下文理解和结构化对话",
11+
// defaultModel = "gpt-4-turbo",
12+
// requireJsonOutput = true,
13+
// supportThinking = true,
14+
// defaultMaxTokens = 2048,
15+
// defaultTemperature = 0.8)
16+
//@Component
1717
@Slf4j
1818
public class ConversationOperation extends BaseAIOperation<ConversationOperation.ConversationRequest, ConversationOperation.ConversationResponse> {
1919

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package io.github.timemachinelab.core.session.infrastructure.ai;
2+
3+
import com.alibaba.fastjson2.JSONObject;
4+
import io.github.timemachinelab.sfchain.annotation.AIOp;
5+
import io.github.timemachinelab.sfchain.core.BaseAIOperation;
6+
import lombok.Data;
7+
import lombok.extern.slf4j.Slf4j;
8+
import org.springframework.stereotype.Component;
9+
10+
@AIOp(value = "PromptGenMaster",
11+
description = "提示词生成大师"
12+
)
13+
@Component
14+
@Slf4j
15+
public class GenPromptOperation extends BaseAIOperation<GenPromptOperation.GpRequest, GenPromptOperation.GpResponse> {
16+
17+
18+
@Override
19+
protected String buildPrompt(GpRequest gpRequest) {
20+
21+
return JSONObject.toJSONString(gpRequest);
22+
}
23+
24+
@Override
25+
protected GpResponse parseResult(String jsonContent, GpRequest gpRequest) {
26+
GpResponse gpResponse = new GpResponse();
27+
gpResponse.setGenPrompt(jsonContent);
28+
return gpResponse;
29+
}
30+
31+
@Data
32+
public static class GpRequest {
33+
34+
private String prompt;
35+
36+
private String user;
37+
38+
private String aiModel;
39+
40+
private String userTarget;
41+
42+
private String userConversation;
43+
}
44+
45+
@Data
46+
public static class GpResponse {
47+
private String genPrompt;
48+
}
49+
}

0 commit comments

Comments
 (0)