Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
brandkbs2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
shenjunjie
brandkbs2
Commits
00c51c06
Commit
00c51c06
authored
Aug 23, 2024
by
陈健智
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
AI搜索调整
parent
d39d34bb
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
19 additions
and
7 deletions
+19
-7
src/main/java/com/zhiwei/brandkbs2/service/impl/MarkDataServiceImpl.java
+19
-7
No files found.
src/main/java/com/zhiwei/brandkbs2/service/impl/MarkDataServiceImpl.java
View file @
00c51c06
...
@@ -132,8 +132,8 @@ public class MarkDataServiceImpl implements MarkDataService {
...
@@ -132,8 +132,8 @@ public class MarkDataServiceImpl implements MarkDataService {
"1 按照指定输出格式输出。\n"
+
"1 按照指定输出格式输出。\n"
+
"2 严格按照规则进行提炼。\n"
+
"2 严格按照规则进行提炼。\n"
+
"###"
;
"###"
;
private
static
final
String
RESULT_PROMPT
=
"假如你是专业的分析报告人员,你将根据用户提供的
内容
(无关内容则无需引用),贴合问题给出自己的一点或多点详细分析和见解,每个观点需同时提炼出一个贴合自己的详细分析和见解的小标题(无需注明“小标题”三个字)。并在每点详细分析和见解后用数字表示注明1-{0"
+
private
static
final
String
RESULT_PROMPT
=
"假如你是专业的分析报告人员,你将根据用户提供的
一篇或多篇文章
(无关内容则无需引用),贴合问题给出自己的一点或多点详细分析和见解,每个观点需同时提炼出一个贴合自己的详细分析和见解的小标题(无需注明“小标题”三个字)。并在每点详细分析和见解后用数字表示注明1-{0"
+
"}的参考文章,分析结果和参考文章之间严格用”|“作为分隔符进行分隔(小标题与分析结果无需分隔),并且多个参考文章之间也严格用”|“作为分隔符进行分隔,若没有对应的参考文章则无需返回,示例:分析结果。|1|2|3"
+
"}的参考文章,分析结果和参考文章之间严格用”|“作为分隔符进行分隔(小标题与分析结果无需分隔),并且多个参考文章之间也严格用”|“作为分隔符进行分隔,若没有对应的参考文章则无需返回,示例:分析结果。|1|2|3
。同时注意:无论什么原因无法回答该问题请只需要返回”无法回答“,示例:无法回答
"
+
"请回答该问题:"
;
"请回答该问题:"
;
private
static
final
String
REFERENCE_QUESTION_PROMPT
=
"假如你是专业的问题提出人员,提出自己{0}个关于的{1}参考问题,每个问题无需给到对应的序号,问题必须包含 针对/相关 字样,每个问题之间严格用”|“作为分隔符进行分隔。"
+
private
static
final
String
REFERENCE_QUESTION_PROMPT
=
"假如你是专业的问题提出人员,提出自己{0}个关于的{1}参考问题,每个问题无需给到对应的序号,问题必须包含 针对/相关 字样,每个问题之间严格用”|“作为分隔符进行分隔。"
+
...
@@ -4073,12 +4073,16 @@ public class MarkDataServiceImpl implements MarkDataService {
...
@@ -4073,12 +4073,16 @@ public class MarkDataServiceImpl implements MarkDataService {
int
count
=
1
;
int
count
=
1
;
for
(
BaseMap
baseMap
:
articles
)
{
for
(
BaseMap
baseMap
:
articles
)
{
String
text
=
baseMap
.
getContent
();
String
text
=
baseMap
.
getContent
();
sb
.
append
(
count
++).
append
(
"、"
).
append
(
text
).
append
(
";
"
);
sb
.
append
(
"文章"
).
append
(
count
++).
append
(
":"
).
append
(
text
).
append
(
"\n\n
"
);
}
}
String
sbContent
=
sb
.
toString
();
String
sbContent
=
sb
.
toString
();
Pair
<
String
,
long
[]>
answerPair
=
streamStandardRequest
(
sbContent
,
modelName
,
MessageFormat
.
format
(
RESULT_PROMPT
,
list
.
size
())
+
question
);
Pair
<
String
,
long
[]>
answerPair
=
streamStandardRequest
(
sbContent
,
modelName
,
MessageFormat
.
format
(
RESULT_PROMPT
,
list
.
size
())
+
question
);
// 临时处理:接口时而返回只有两个字符的回答结果(分析/抱歉/以下/无法)
if
(
answerPair
.
getLeft
().
length
()
<=
2
){
return
null
;
}
// 结果处理
// 结果处理
JSONObject
res
=
aiResultDataProcess
(
answerPair
,
false
);
JSONObject
res
=
aiResultDataProcess
(
answerPair
,
list
.
size
(),
false
);
res
.
put
(
"articles"
,
articles
);
res
.
put
(
"articles"
,
articles
);
res
.
put
(
"searchCriteria"
,
Objects
.
isNull
(
questionPair
)
?
Tools
.
concat
(
keyword
,
startTime
,
endTime
)
:
questionPair
.
getLeft
());
res
.
put
(
"searchCriteria"
,
Objects
.
isNull
(
questionPair
)
?
Tools
.
concat
(
keyword
,
startTime
,
endTime
)
:
questionPair
.
getLeft
());
// 记录返回成功的提问
// 记录返回成功的提问
...
@@ -4095,7 +4099,7 @@ public class MarkDataServiceImpl implements MarkDataService {
...
@@ -4095,7 +4099,7 @@ public class MarkDataServiceImpl implements MarkDataService {
return
null
;
return
null
;
}
}
private
JSONObject
aiResultDataProcess
(
Pair
<
String
,
long
[]>
answerPair
,
boolean
isOnline
){
private
JSONObject
aiResultDataProcess
(
Pair
<
String
,
long
[]>
answerPair
,
int
size
,
boolean
isOnline
){
JSONObject
res
=
new
JSONObject
();
JSONObject
res
=
new
JSONObject
();
// 结果处理
// 结果处理
String
[]
splits
=
answerPair
.
getLeft
().
split
(
"\\r?\\n"
);
String
[]
splits
=
answerPair
.
getLeft
().
split
(
"\\r?\\n"
);
...
@@ -4115,7 +4119,15 @@ public class MarkDataServiceImpl implements MarkDataService {
...
@@ -4115,7 +4119,15 @@ public class MarkDataServiceImpl implements MarkDataService {
}
}
if
(
StringUtils
.
isNotBlank
(
sonSplit
[
0
]))
{
if
(
StringUtils
.
isNotBlank
(
sonSplit
[
0
]))
{
answer
.
put
(
"answer"
,
sonSplit
[
0
]);
answer
.
put
(
"answer"
,
sonSplit
[
0
]);
List
<
String
>
sonSplitList
=
new
ArrayList
<>(
Arrays
.
asList
(
sonSplit
)).
stream
().
filter
(
str
->
1
==
str
.
length
()
&&
StringUtils
.
isNotBlank
(
str
)).
collect
(
Collectors
.
toList
());
List
<
String
>
sonSplitList
=
new
ArrayList
<>(
Arrays
.
asList
(
sonSplit
)).
stream
().
skip
(
1
)
.
filter
(
str
->
{
try
{
return
StringUtils
.
isNotBlank
(
str
)
&&
Integer
.
parseInt
(
str
.
trim
())
<=
size
;
}
catch
(
Exception
e
){
answer
.
put
(
"answer"
,
answer
.
getString
(
"answer"
)
+
str
);
return
false
;
}
}).
collect
(
Collectors
.
toList
());
answer
.
put
(
"referenceArticles"
,
sonSplitList
);
answer
.
put
(
"referenceArticles"
,
sonSplitList
);
answers
.
add
(
answer
);
answers
.
add
(
answer
);
}
}
...
@@ -4131,7 +4143,7 @@ public class MarkDataServiceImpl implements MarkDataService {
...
@@ -4131,7 +4143,7 @@ public class MarkDataServiceImpl implements MarkDataService {
// 需记录耗费
// 需记录耗费
userLogRecordDao
.
insertOne
(
UserLogRecord
.
userLogRecordCost
(
"AI搜索-联网搜索-"
+
question
,
userLogRecordDao
.
insertOne
(
UserLogRecord
.
userLogRecordCost
(
"AI搜索-联网搜索-"
+
question
,
calculateCost
(
answerPair
.
getRight
(),
AccessModel
.
Model
.
DOUBAO_PRO_32K
)),
userLogRecordDao
.
generateCollectionName
());
calculateCost
(
answerPair
.
getRight
(),
AccessModel
.
Model
.
DOUBAO_PRO_32K
)),
userLogRecordDao
.
generateCollectionName
());
return
aiResultDataProcess
(
answerPair
,
true
);
return
aiResultDataProcess
(
answerPair
,
-
1
,
true
);
}
}
private
double
calculateCost
(
long
[]
tokens
,
AccessModel
.
Model
model
){
private
double
calculateCost
(
long
[]
tokens
,
AccessModel
.
Model
model
){
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment