main: 增强工具功能与消息处理
- 添加 `FileReadTool`,支持文件内容读取与安全验证 - 引入 `hasToolMessages` 逻辑,优化工具历史上下文处理 - 修改工具选项逻辑,支持禁用工具时的动态调整 - 增加消息序列化逻辑,优化 Redis 序列管理与数据同步 - 扩展测试覆盖,验证序列化与工具调用场景 - 增强 Docker Compose 脚本,支持应用重置与日志清理 - 调整工具调用超时设置,提升运行时用户体验
This commit is contained in:
@@ -68,13 +68,22 @@ class ChatCompletionsRequestBuilder
|
||||
}
|
||||
|
||||
$toolsSpec = $this->toolRegistry->openAiToolsSpec();
|
||||
$hasToolMessages = $this->hasToolMessages($context);
|
||||
|
||||
// 支持 disable_tools 选项,用于在达到工具调用上限后禁用工具
|
||||
$disableTools = $options['disable_tools'] ?? false;
|
||||
|
||||
if (! empty($toolsSpec) && ! $disableTools) {
|
||||
$payload['tools'] = $toolsSpec;
|
||||
$payload['tool_choice'] = $options['tool_choice'] ?? $this->toolChoice ?? 'auto';
|
||||
if (! empty($toolsSpec)) {
|
||||
if ($disableTools) {
|
||||
$payload['tool_choice'] = 'none';
|
||||
if ($hasToolMessages) {
|
||||
// 历史包含工具消息时仍需携带 tools 定义以满足接口校验
|
||||
$payload['tools'] = $toolsSpec;
|
||||
}
|
||||
} else {
|
||||
$payload['tools'] = $toolsSpec;
|
||||
$payload['tool_choice'] = $options['tool_choice'] ?? $this->toolChoice ?? 'auto';
|
||||
}
|
||||
}
|
||||
|
||||
return $payload;
|
||||
@@ -219,4 +228,16 @@ class ChatCompletionsRequestBuilder
|
||||
'content' => $resultContent,
|
||||
];
|
||||
}
|
||||
|
||||
private function hasToolMessages(AgentContext $context): bool
|
||||
{
|
||||
foreach ($context->messages as $message) {
|
||||
$type = (string) ($message['type'] ?? '');
|
||||
if ($type === 'tool.call' || $type === 'tool.result') {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user