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
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
96 additions
and
41 deletions
+96
-41
docSite/content/zh-cn/docs/development/upgrading/496.md
+4
-3
packages/service/core/ai/config/provider/OpenAI.json
+62
-16
packages/service/core/chat/utils.ts
+29
-21
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
2.
支持以 MCP SSE 协议创建工具。
3.
批量执行节点支持交互节点,可实现每一轮循环都人工参与。
4.
增加工作台二级菜单,合并工具箱。
5.
增加 grok3、GPT4.1、Gemini2.5 模型系统配置。
5.
增加 grok3、GPT4.1、
o系列、
Gemini2.5 模型系统配置。
## ⚙️ 优化
...
...
@@ -32,4 +32,5 @@ weight: 794
## 🐛 修复
1.
修复子工作流包含交互节点时,未成功恢复子工作流所有数据。
2.
completion v1 接口,未接受 interactive 参数,导致 API 调用失败。
\ No newline at end of file
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 @@
"type"
:
"llm"
},
{
"model"
:
"o
3
-mini"
,
"name"
:
"o
3
-mini"
,
"model"
:
"o
4
-mini"
,
"name"
:
"o
4
-mini"
,
"maxContext"
:
200000
,
"maxResponse"
:
100000
,
"quoteMaxToken"
:
120000
,
"maxTemperature"
:
null
,
"vision"
:
fals
e
,
"vision"
:
tru
e
,
"toolChoice"
:
true
,
"functionCall"
:
false
,
"defaultSystemChatPrompt"
:
""
,
...
...
@@ -140,25 +140,49 @@
"usedInQueryExtension"
:
true
,
"customExtractPrompt"
:
""
,
"usedInToolCall"
:
true
,
"defaultConfig"
:
{
"stream"
:
false
"defaultConfig"
:
{},
"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"
:
{
"max_tokens"
:
"max_completion_tokens"
},
"type"
:
"llm"
,
"showTopP"
:
true
,
"showStopSign"
:
tru
e
"showStopSign"
:
fals
e
},
{
"model"
:
"o
1
-mini"
,
"name"
:
"o
1
-mini"
,
"maxContext"
:
128
000
,
"maxResponse"
:
4
000
,
"model"
:
"o
3
-mini"
,
"name"
:
"o
3
-mini"
,
"maxContext"
:
200
000
,
"maxResponse"
:
100
000
,
"quoteMaxToken"
:
120000
,
"maxTemperature"
:
null
,
"vision"
:
false
,
"toolChoice"
:
fals
e
,
"toolChoice"
:
tru
e
,
"functionCall"
:
false
,
"defaultSystemChatPrompt"
:
""
,
"datasetProcess"
:
true
,
...
...
@@ -168,9 +192,7 @@
"usedInQueryExtension"
:
true
,
"customExtractPrompt"
:
""
,
"usedInToolCall"
:
true
,
"defaultConfig"
:
{
"stream"
:
false
},
"defaultConfig"
:
{},
"fieldMap"
:
{
"max_tokens"
:
"max_completion_tokens"
},
...
...
@@ -196,9 +218,33 @@
"usedInQueryExtension"
:
true
,
"customExtractPrompt"
:
""
,
"usedInToolCall"
:
true
,
"defaultConfig"
:
{
"stream"
:
false
"defaultConfig"
:
{},
"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"
:
{
"max_tokens"
:
"max_completion_tokens"
},
...
...
packages/service/core/chat/utils.ts
View file @
5542eadb
...
...
@@ -36,36 +36,44 @@ export const filterGPTMessageByMaxContext = async ({
const
systemPrompts
:
ChatCompletionMessageParam
[]
=
messages
.
slice
(
0
,
chatStartIndex
);
const
chatPrompts
:
ChatCompletionMessageParam
[]
=
messages
.
slice
(
chatStartIndex
);
if
(
chatPrompts
.
length
===
0
)
{
return
systemPrompts
;
}
// reduce token of systemPrompt
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)
const
question
=
chatPrompts
.
pop
();
if
(
!
question
)
{
return
systemPrompts
;
}
const
chats
:
ChatCompletionMessageParam
[]
=
[
question
];
let
chats
:
ChatCompletionMessageParam
[]
=
[];
let
tmpChats
:
ChatCompletionMessageParam
[]
=
[];
// 从后往前截取对话内容, 每次需要截取2个
while
(
1
)
{
const
assistant
=
chatPrompts
.
pop
();
const
user
=
chatPrompts
.
pop
();
if
(
!
assistant
||
!
user
)
{
// 从后往前截取对话内容, 每次到 user 则认为是一组完整信息
while
(
chatPrompts
.
length
>
0
)
{
const
lastMessage
=
chatPrompts
.
pop
();
if
(
!
lastMessage
)
{
break
;
}
const
tokens
=
await
countGptMessagesTokens
([
assistant
,
user
]);
maxContext
-=
tokens
;
/* 整体 tokens 超出范围,截断 */
if
(
maxContext
<
0
)
{
break
;
}
chats
.
unshift
(
assistant
);
chats
.
unshift
(
user
);
// 遇到 user,说明到了一轮完整信息,可以开始判断是否需要保留
if
(
lastMessage
.
role
===
ChatCompletionRequestMessageRoleEnum
.
User
)
{
const
tokens
=
await
countGptMessagesTokens
([
lastMessage
,
...
tmpChats
]);
maxContext
-=
tokens
;
// 该轮信息整体 tokens 超出范围,这段数据不要了
if
(
maxContext
<
0
)
{
break
;
}
if
(
chatPrompts
.
length
===
0
)
{
break
;
chats
=
[
lastMessage
,
...
tmpChats
].
concat
(
chats
);
tmpChats
=
[];
}
else
{
tmpChats
.
unshift
(
lastMessage
);
}
}
...
...
packages/service/core/workflow/dispatch/agent/runTool/toolChoice.ts
View file @
5542eadb
...
...
@@ -285,7 +285,7 @@ export const runToolWithToolChoice = async (
},
toolModel
);
// console.log(JSON.stringify(
requestMessages, null, 2), '==requestBody
');
// console.log(JSON.stringify(
filterMessages, null, 2), '==requestMessages
');
/* Run llm */
const
{
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