Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
赵月辉
/
fastgpt-migrated
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Unverified
Commit
5542eadb
authored
Apr 17, 2025
by
Archer
Committed by
GitHub
Apr 17, 2025
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: tool call history (#4576)
parent
703a7cfd
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
91 additions
and
35 deletions
+91
-35
docSite/content/zh-cn/docs/development/upgrading/496.md
+3
-1
packages/service/core/ai/config/provider/OpenAI.json
+62
-16
packages/service/core/chat/utils.ts
+25
-17
packages/service/core/workflow/dispatch/agent/runTool/toolChoice.ts
+1
-1
No files found.
docSite/content/zh-cn/docs/development/upgrading/496.md
View file @
5542eadb
...
@@ -18,7 +18,7 @@ weight: 794
...
@@ -18,7 +18,7 @@ weight: 794
2.
支持以 MCP SSE 协议创建工具。
2.
支持以 MCP SSE 协议创建工具。
3.
批量执行节点支持交互节点,可实现每一轮循环都人工参与。
3.
批量执行节点支持交互节点,可实现每一轮循环都人工参与。
4.
增加工作台二级菜单,合并工具箱。
4.
增加工作台二级菜单,合并工具箱。
5.
增加 grok3、GPT4.1、Gemini2.5 模型系统配置。
5.
增加 grok3、GPT4.1、
o系列、
Gemini2.5 模型系统配置。
## ⚙️ 优化
## ⚙️ 优化
...
@@ -33,3 +33,4 @@ weight: 794
...
@@ -33,3 +33,4 @@ weight: 794
1.
修复子工作流包含交互节点时,未成功恢复子工作流所有数据。
1.
修复子工作流包含交互节点时,未成功恢复子工作流所有数据。
2.
completion v1 接口,未接受 interactive 参数,导致 API 调用失败。
2.
completion v1 接口,未接受 interactive 参数,导致 API 调用失败。
3.
连续工具调用,上下文截断异常
\ No newline at end of file
packages/service/core/ai/config/provider/OpenAI.json
View file @
5542eadb
...
@@ -123,13 +123,13 @@
...
@@ -123,13 +123,13 @@
"type"
:
"llm"
"type"
:
"llm"
},
},
{
{
"model"
:
"o
3
-mini"
,
"model"
:
"o
4
-mini"
,
"name"
:
"o
3
-mini"
,
"name"
:
"o
4
-mini"
,
"maxContext"
:
200000
,
"maxContext"
:
200000
,
"maxResponse"
:
100000
,
"maxResponse"
:
100000
,
"quoteMaxToken"
:
120000
,
"quoteMaxToken"
:
120000
,
"maxTemperature"
:
null
,
"maxTemperature"
:
null
,
"vision"
:
fals
e
,
"vision"
:
tru
e
,
"toolChoice"
:
true
,
"toolChoice"
:
true
,
"functionCall"
:
false
,
"functionCall"
:
false
,
"defaultSystemChatPrompt"
:
""
,
"defaultSystemChatPrompt"
:
""
,
...
@@ -140,25 +140,49 @@
...
@@ -140,25 +140,49 @@
"usedInQueryExtension"
:
true
,
"usedInQueryExtension"
:
true
,
"customExtractPrompt"
:
""
,
"customExtractPrompt"
:
""
,
"usedInToolCall"
:
true
,
"usedInToolCall"
:
true
,
"defaultConfig"
:
{
"defaultConfig"
:
{},
"stream"
:
false
"fieldMap"
:
{
"max_tokens"
:
"max_completion_tokens"
},
},
"type"
:
"llm"
,
"showTopP"
:
true
,
"showStopSign"
:
false
},
{
"model"
:
"o3"
,
"name"
:
"o3"
,
"maxContext"
:
200000
,
"maxResponse"
:
100000
,
"quoteMaxToken"
:
120000
,
"maxTemperature"
:
null
,
"vision"
:
true
,
"toolChoice"
:
true
,
"functionCall"
:
false
,
"defaultSystemChatPrompt"
:
""
,
"datasetProcess"
:
true
,
"usedInClassify"
:
true
,
"customCQPrompt"
:
""
,
"usedInExtractFields"
:
true
,
"usedInQueryExtension"
:
true
,
"customExtractPrompt"
:
""
,
"usedInToolCall"
:
true
,
"defaultConfig"
:
{},
"fieldMap"
:
{
"fieldMap"
:
{
"max_tokens"
:
"max_completion_tokens"
"max_tokens"
:
"max_completion_tokens"
},
},
"type"
:
"llm"
,
"type"
:
"llm"
,
"showTopP"
:
true
,
"showTopP"
:
true
,
"showStopSign"
:
tru
e
"showStopSign"
:
fals
e
},
},
{
{
"model"
:
"o
1
-mini"
,
"model"
:
"o
3
-mini"
,
"name"
:
"o
1
-mini"
,
"name"
:
"o
3
-mini"
,
"maxContext"
:
128
000
,
"maxContext"
:
200
000
,
"maxResponse"
:
4
000
,
"maxResponse"
:
100
000
,
"quoteMaxToken"
:
120000
,
"quoteMaxToken"
:
120000
,
"maxTemperature"
:
null
,
"maxTemperature"
:
null
,
"vision"
:
false
,
"vision"
:
false
,
"toolChoice"
:
fals
e
,
"toolChoice"
:
tru
e
,
"functionCall"
:
false
,
"functionCall"
:
false
,
"defaultSystemChatPrompt"
:
""
,
"defaultSystemChatPrompt"
:
""
,
"datasetProcess"
:
true
,
"datasetProcess"
:
true
,
...
@@ -168,9 +192,7 @@
...
@@ -168,9 +192,7 @@
"usedInQueryExtension"
:
true
,
"usedInQueryExtension"
:
true
,
"customExtractPrompt"
:
""
,
"customExtractPrompt"
:
""
,
"usedInToolCall"
:
true
,
"usedInToolCall"
:
true
,
"defaultConfig"
:
{
"defaultConfig"
:
{},
"stream"
:
false
},
"fieldMap"
:
{
"fieldMap"
:
{
"max_tokens"
:
"max_completion_tokens"
"max_tokens"
:
"max_completion_tokens"
},
},
...
@@ -196,9 +218,33 @@
...
@@ -196,9 +218,33 @@
"usedInQueryExtension"
:
true
,
"usedInQueryExtension"
:
true
,
"customExtractPrompt"
:
""
,
"customExtractPrompt"
:
""
,
"usedInToolCall"
:
true
,
"usedInToolCall"
:
true
,
"defaultConfig"
:
{
"defaultConfig"
:
{},
"stream"
:
false
"fieldMap"
:
{
"max_tokens"
:
"max_completion_tokens"
},
},
"type"
:
"llm"
,
"showTopP"
:
true
,
"showStopSign"
:
true
},
{
"model"
:
"o1-mini"
,
"name"
:
"o1-mini"
,
"maxContext"
:
128000
,
"maxResponse"
:
4000
,
"quoteMaxToken"
:
120000
,
"maxTemperature"
:
null
,
"vision"
:
false
,
"toolChoice"
:
false
,
"functionCall"
:
false
,
"defaultSystemChatPrompt"
:
""
,
"datasetProcess"
:
true
,
"usedInClassify"
:
true
,
"customCQPrompt"
:
""
,
"usedInExtractFields"
:
true
,
"usedInQueryExtension"
:
true
,
"customExtractPrompt"
:
""
,
"usedInToolCall"
:
true
,
"defaultConfig"
:
{},
"fieldMap"
:
{
"fieldMap"
:
{
"max_tokens"
:
"max_completion_tokens"
"max_tokens"
:
"max_completion_tokens"
},
},
...
...
packages/service/core/chat/utils.ts
View file @
5542eadb
...
@@ -36,36 +36,44 @@ export const filterGPTMessageByMaxContext = async ({
...
@@ -36,36 +36,44 @@ export const filterGPTMessageByMaxContext = async ({
const
systemPrompts
:
ChatCompletionMessageParam
[]
=
messages
.
slice
(
0
,
chatStartIndex
);
const
systemPrompts
:
ChatCompletionMessageParam
[]
=
messages
.
slice
(
0
,
chatStartIndex
);
const
chatPrompts
:
ChatCompletionMessageParam
[]
=
messages
.
slice
(
chatStartIndex
);
const
chatPrompts
:
ChatCompletionMessageParam
[]
=
messages
.
slice
(
chatStartIndex
);
if
(
chatPrompts
.
length
===
0
)
{
return
systemPrompts
;
}
// reduce token of systemPrompt
// reduce token of systemPrompt
maxContext
-=
await
countGptMessagesTokens
(
systemPrompts
);
maxContext
-=
await
countGptMessagesTokens
(
systemPrompts
);
/* 截取时候保证一轮内容的完整性
1. user - assistant - user
2. user - assistant - tool
3. user - assistant - tool - tool - tool
3. user - assistant - tool - assistant - tool
4. user - assistant - assistant - tool - tool
*/
// Save the last chat prompt(question)
// Save the last chat prompt(question)
const
question
=
chatPrompts
.
pop
();
let
chats
:
ChatCompletionMessageParam
[]
=
[];
if
(
!
question
)
{
let
tmpChats
:
ChatCompletionMessageParam
[]
=
[];
return
systemPrompts
;
}
const
chats
:
ChatCompletionMessageParam
[]
=
[
question
];
// 从后往前截取对话内容, 每次需要截取2个
// 从后往前截取对话内容, 每次到 user 则认为是一组完整信息
while
(
1
)
{
while
(
chatPrompts
.
length
>
0
)
{
const
assistant
=
chatPrompts
.
pop
();
const
lastMessage
=
chatPrompts
.
pop
();
const
user
=
chatPrompts
.
pop
();
if
(
!
lastMessage
)
{
if
(
!
assistant
||
!
user
)
{
break
;
break
;
}
}
const
tokens
=
await
countGptMessagesTokens
([
assistant
,
user
]);
// 遇到 user,说明到了一轮完整信息,可以开始判断是否需要保留
if
(
lastMessage
.
role
===
ChatCompletionRequestMessageRoleEnum
.
User
)
{
const
tokens
=
await
countGptMessagesTokens
([
lastMessage
,
...
tmpChats
]);
maxContext
-=
tokens
;
maxContext
-=
tokens
;
/* 整体 tokens 超出范围,截断 */
// 该轮信息整体 tokens 超出范围,这段数据不要了
if
(
maxContext
<
0
)
{
if
(
maxContext
<
0
)
{
break
;
break
;
}
}
chats
.
unshift
(
assistant
);
chats
=
[
lastMessage
,
...
tmpChats
].
concat
(
chats
);
chats
.
unshift
(
user
);
tmpChats
=
[];
}
else
{
if
(
chatPrompts
.
length
===
0
)
{
tmpChats
.
unshift
(
lastMessage
);
break
;
}
}
}
}
...
...
packages/service/core/workflow/dispatch/agent/runTool/toolChoice.ts
View file @
5542eadb
...
@@ -285,7 +285,7 @@ export const runToolWithToolChoice = async (
...
@@ -285,7 +285,7 @@ export const runToolWithToolChoice = async (
},
},
toolModel
toolModel
);
);
// console.log(JSON.stringify(
requestMessages, null, 2), '==requestBody
');
// console.log(JSON.stringify(
filterMessages, null, 2), '==requestMessages
');
/* Run llm */
/* Run llm */
const
{
const
{
response
:
aiResponse
,
response
:
aiResponse
,
...
...
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